@@ -24,6 +24,8 @@ import Reflex.Dynamic
2424import Reflex.Host.Class
2525import Reflex.PerformEvent.Class
2626import Reflex.PostBuild.Class
27+import Reflex.TriggerEvent.Class
28+import Reflex.TriggerEvent.Base hiding (askEvents)
2729
2830import Control.Concurrent.Chan
2931import Control.Lens hiding (element)
@@ -58,8 +60,9 @@ import qualified GHCJS.DOM.HTMLInputElement as Input
5860import qualified GHCJS.DOM.HTMLSelectElement as Select
5961import qualified GHCJS.DOM.HTMLTextAreaElement as TextArea
6062import GHCJS.DOM.MouseEvent
61−import GHCJS.DOM.Node (appendChild, getOwnerDocument, getParentNode, getPreviousSibling, insertBefore,
63+import GHCJS.DOM.Node (appendChild, getOwnerDocument, getParentNode, getPreviousSibling,
6264 removeChild, setNodeValue, toNode)
65+import qualified GHCJS.DOM.Node as DOM (insertBefore)
6366import GHCJS.DOM.Types
6467 (liftJSM, askJSM, runJSM, JSM, MonadJSM(..),
6568 FocusEvent, IsElement, IsEvent, IsNode, KeyboardEvent, Node,
@@ -72,8 +75,6 @@ import Debug.Trace hiding (traceEvent)
7275
7376data TriggerRef t a = TriggerRef { unTriggerRef :: IORef (Maybe (EventTrigger t a)) }
7477
75−data TriggerInvocation a = TriggerInvocation a (JSM ())
76−
7778data ImmediateDomBuilderEnv t
7879 = ImmediateDomBuilderEnv { _immediateDomBuilderEnv_document :: Document
7980 , _immediateDomBuilderEnv_parent :: Node
@@ -143,7 +144,7 @@ deleteBetweenInclusive s e = do
143144 return ()
144145
145146-- | s and e must both be children of the same node and s must precede e
146−deleteBetweenExclusive :: (MonadIO m, IsNode start, IsNode end) => start -> end -> m ()
147+deleteBetweenExclusive :: (MonadJSM m, IsNode start, IsNode end) => start -> end -> m ()
147148deleteBetweenExclusive s e = do
148149 mCurrentParent <- getParentNode e -- May be different than it was at initial construction, e.g., because the parent may have dumped us in from a DocumentFragment
149150 case mCurrentParent of
@@ -161,7 +162,7 @@ deleteBetweenExclusive s e = do
161162
162163-- | s and e must both be children of the same node and s must precede e; s and all nodes between s and e will be removed, but e will not be removed
163164{-# INLINABLE deleteUpTo #-}
164−deleteUpTo :: (MonadIO m, IsNode start, IsNode end) => start -> end -> m ()
165+deleteUpTo :: (MonadJSM m, IsNode start, IsNode end) => start -> end -> m ()
165166deleteUpTo s e = do
166167 mCurrentParent <- getParentNode e -- May be different than it was at initial construction, e.g., because the parent may have dumped us in from a DocumentFragment
167168 case mCurrentParent of
@@ -169,14 +170,16 @@ deleteUpTo s e = do
169170 Just currentParent -> deleteUpToGivenParent currentParent s e
170171
171172{-# INLINABLE deleteUpToGivenParent #-}
172−deleteUpToGivenParent :: (MonadIO m, IsNode parent, IsNode start, IsNode end) => parent -> start -> end -> m ()
173+deleteUpToGivenParent :: (MonadJSM m, IsNode parent, IsNode start, IsNode end) => parent -> start -> end -> m ()
173174deleteUpToGivenParent currentParent s e = do
174175 fix $ \loop -> do
175176 Just x <- getPreviousSibling e -- This can't be Nothing because we should hit 's' first
176177 _ <- removeChild currentParent $ Just x
177− when (toNode s /= toNode x) loop
178+ liftJSM (strictEqual s x) >>= \case
179+ True -> return ()
180+ False -> loop
178181
179−type SupportsImmediateDomBuilder t m = (Reflex t, MonadJSM m, MonadHold t m, MonadFix m, PerformEvent t m, Performable m ~ m, MonadReflexCreateTrigger t m, Deletable t m, MonadRef m, Ref m ~ Ref JSM)
182+type SupportsImmediateDomBuilder t m = (Reflex t, MonadJSM m, MonadJSM (Performable m), MonadHold t m, MonadFix m, PerformEvent t m, MonadReflexCreateTrigger t m, MonadRef m, Ref m ~ Ref JSM, MonadAdjust t m)
180183
181184newtype EventFilterTriggerRef t er (en :: EventTag) = EventFilterTriggerRef (IORef (Maybe (EventTrigger t (er en))))
182185
@@ -417,7 +420,7 @@ instance SupportsImmediateDomBuilder t m => DomBuilder t (ImmediateDomBuilderT t
417420 placeRawElement = append
418421 wrapRawElement = wrap
419422
420−instance (Reflex t, MonadAdjust t m, MonadIO m, MonadHold t m, PerformEvent t m, MonadIO (Performable m)) => MonadAdjust t (ImmediateDomBuilderT t m) where
423+instance (Reflex t, MonadAdjust t m, MonadJSM m, MonadHold t m, PerformEvent t m, MonadJSM (Performable m)) => MonadAdjust t (ImmediateDomBuilderT t m) where
421424 runWithReplace a0 a' = do
422425 initialEnv <- ImmediateDomBuilderT ask
423426 before <- textNodeInternal ("" :: Text)