@@ -38,6 +38,7 @@ import Data.Dependent.Sum
3838import Data.Functor.Misc
3939import Data.IORef
4040import Data.Maybe
41+import Data.Monoid
4142import Data.Text (Text)
4243import GHCJS.DOM.Document (Document, createDocumentFragment, createElement, createElementNS, createTextNode)
4344import GHCJS.DOM.Element (getScrollTop, removeAttribute, removeAttributeNS, setAttribute, setAttributeNS)
@@ -200,6 +201,19 @@ instance DomSpace GhcjsDomSpace where
200201 type RawElement GhcjsDomSpace = DOM.HTMLElement
201202 type RawInputElement GhcjsDomSpace = DOM.HTMLInputElement
202203 type RawTextAreaElement GhcjsDomSpace = DOM.HTMLTextAreaElement
204+ addEventSpecFlags _ en f es = es
205+ { _ghcjsEventSpec_filters =
206+ let f' = Just . GhcjsEventFilter . \case
207+ Nothing -> \evt -> do
208+ mEventResult <- _ghcjsEventSpec_handler es (en, evt)
209+ return (f mEventResult, return mEventResult)
210+ Just (GhcjsEventFilter oldFilter) -> \evt -> do
211+ (oldFlags, oldContinuation) <- oldFilter evt
212+ mEventResult <- oldContinuation
213+ let newFlags = oldFlags <> f mEventResult
214+ return (newFlags, return mEventResult)
215+ in DMap.alter f' en $ _ghcjsEventSpec_filters es
216+ }
203217
204218newtype GhcjsEventFilter er en = GhcjsEventFilter (GhcjsDomEvent en -> IO (EventFlags, IO (Maybe (er en))))
205219