@@ -118,10 +118,11 @@ import Data.Text (Text)
118import qualified Data.Text as T
118import qualified Data.Text as T
119import qualified GHCJS.DOM as DOM
119import qualified GHCJS.DOM as DOM
120import GHCJS.DOM.RequestAnimationFrameCallback
120import GHCJS.DOM.RequestAnimationFrameCallback
121−import GHCJS.DOM.Document (Document, createDocumentFragmentUnchecked, createElementUnchecked, createElementNSUnchecked, createTextNodeUnchecked)
121+import GHCJS.DOM.Document (Document, createDocumentFragment, createElement, createElementNS, createTextNode)
122import GHCJS.DOM.Element (getScrollTop, removeAttribute, removeAttributeNS, setAttribute, setAttributeNS)
122import GHCJS.DOM.Element (getScrollTop, removeAttribute, removeAttributeNS, setAttribute, setAttributeNS)
123import qualified GHCJS.DOM.Element as Element
123import qualified GHCJS.DOM.Element as Element
124import qualified GHCJS.DOM.Event as Event
124import qualified GHCJS.DOM.Event as Event
125+import qualified GHCJS.DOM.GlobalEventHandlers as Events
125import GHCJS.DOM.EventM (EventM, event, on)
126import GHCJS.DOM.EventM (EventM, event, on)
126import qualified GHCJS.DOM.EventM as DOM
127import qualified GHCJS.DOM.EventM as DOM
127import qualified GHCJS.DOM.FileList as FileList
128import qualified GHCJS.DOM.FileList as FileList
@@ -136,10 +137,11 @@ import GHCJS.DOM.Node (appendChild_, getOwnerDocumentUnchecked, getParentNodeUnc
136import qualified GHCJS.DOM.Node as DOM (insertBefore_)
137import qualified GHCJS.DOM.Node as DOM (insertBefore_)
137import GHCJS.DOM.Types
138import GHCJS.DOM.Types
138 (liftJSM, askJSM, runJSM, JSM, MonadJSM(..),
139 (liftJSM, askJSM, runJSM, JSM, MonadJSM(..),
139− FocusEvent, IsElement, IsEvent, IsNode, KeyboardEvent, Node,
140+ FocusEvent, IsHTMLElement, IsEvent, IsNode, KeyboardEvent, Node,
140− ToDOMString, TouchEvent, WheelEvent, uncheckedCastTo)
141+ ToDOMString, TouchEvent, WheelEvent, uncheckedCastTo, ClipboardEvent)
141import qualified GHCJS.DOM.Types as DOM
142import qualified GHCJS.DOM.Types as DOM
142import GHCJS.DOM.UIEvent
143import GHCJS.DOM.UIEvent
144+import GHCJS.DOM.KeyboardEvent as KeyboardEvent
143import qualified GHCJS.DOM.Window as Window
145import qualified GHCJS.DOM.Window as Window
144import Language.Javascript.JSaddle (call, eval)
146import Language.Javascript.JSaddle (call, eval)
@@ -205,7 +207,7 @@ runImmediateDomBuilderT (ImmediateDomBuilderT a) env eventChan = flip runTrigger
205 v <- synchronously x
207 v <- synchronously x
206 _ <- liftIO $ f v
208 _ <- liftIO $ f v
207 freeRequestAnimationFrameCallback cb
209 freeRequestAnimationFrameCallback cb
208− _ <- Window.requestAnimationFrame win $ Just cb
210+ _ <- Window.requestAnimationFrame win cb
209 return ()
211 return ()
211{-# INLINABLE askDocument #-}
213{-# INLINABLE askDocument #-}
@@ -227,14 +229,14 @@ localEnv f = ImmediateDomBuilderT . local f . unImmediateDomBuilderT
227append :: (IsNode n, MonadJSM m) => n -> ImmediateDomBuilderT t m ()
229append :: (IsNode n, MonadJSM m) => n -> ImmediateDomBuilderT t m ()
228append n = do
230append n = do
229 p <- askParent
231 p <- askParent
230− liftJSM $ appendChild_ p $ Just n
232+ liftJSM $ appendChild_ p n
231 return ()
233 return ()
233{-# INLINABLE textNodeInternal #-}
235{-# INLINABLE textNodeInternal #-}
234textNodeInternal :: (MonadJSM m, ToDOMString contents) => contents -> ImmediateDomBuilderT t m DOM.Text
236textNodeInternal :: (MonadJSM m, ToDOMString contents) => contents -> ImmediateDomBuilderT t m DOM.Text
235textNodeInternal t = do
237textNodeInternal t = do
236 doc <- askDocument
238 doc <- askDocument
237− n <- liftJSM $ createTextNodeUnchecked doc t
239+ n <- liftJSM $ createTextNode doc t
@@ -242,7 +244,7 @@ textNodeInternal t = do
242-- all nodes between s and e will be removed, but s and e will not be removed
244-- all nodes between s and e will be removed, but s and e will not be removed
243deleteBetweenExclusive :: (MonadJSM m, IsNode start, IsNode end) => start -> end -> m ()
245deleteBetweenExclusive :: (MonadJSM m, IsNode start, IsNode end) => start -> end -> m ()
244deleteBetweenExclusive s e = liftJSM $ do
246deleteBetweenExclusive s e = liftJSM $ do
245− df <- createDocumentFragmentUnchecked =<< getOwnerDocumentUnchecked s
247+ df <- createDocumentFragment =<< getOwnerDocumentUnchecked s
246 extractBetweenExclusive df s e -- In many places in ImmediateDomBuilderT, we assume that things always have a parent; by adding them to this DocumentFragment, we maintain that invariant
248 extractBetweenExclusive df s e -- In many places in ImmediateDomBuilderT, we assume that things always have a parent; by adding them to this DocumentFragment, we maintain that invariant
248-- | s and e must both be children of the same node and s must precede e; all
250-- | s and e must both be children of the same node and s must precede e; all
@@ -267,7 +269,7 @@ extractBetweenExclusive df s e = liftJSM $ do
267{-# INLINABLE deleteUpTo #-}
269{-# INLINABLE deleteUpTo #-}
268deleteUpTo :: (MonadJSM m, IsNode start, IsNode end) => start -> end -> m ()
270deleteUpTo :: (MonadJSM m, IsNode start, IsNode end) => start -> end -> m ()
269deleteUpTo s e = do
271deleteUpTo s e = do
270− df <- createDocumentFragmentUnchecked =<< getOwnerDocumentUnchecked s
272+ df <- createDocumentFragment =<< getOwnerDocumentUnchecked s
271 extractUpTo df s e -- In many places in ImmediateDomBuilderT, we assume that things always have a parent; by adding them to this DocumentFragment, we maintain that invariant
273 extractUpTo df s e -- In many places in ImmediateDomBuilderT, we assume that things always have a parent; by adding them to this DocumentFragment, we maintain that invariant
273extractUpTo :: (MonadJSM m, IsNode start, IsNode end) => DOM.DocumentFragment -> start -> end -> m ()
275extractUpTo :: (MonadJSM m, IsNode start, IsNode end) => DOM.DocumentFragment -> start -> end -> m ()
@@ -298,7 +300,7 @@ collectUpTo s e = do
298collectUpToGivenParent :: (MonadJSM m, IsNode parent, IsNode start, IsNode end) => parent -> start -> end -> m DOM.DocumentFragment
300collectUpToGivenParent :: (MonadJSM m, IsNode parent, IsNode start, IsNode end) => parent -> start -> end -> m DOM.DocumentFragment
299collectUpToGivenParent currentParent s e = do
301collectUpToGivenParent currentParent s e = do
300 doc <- getOwnerDocumentUnchecked currentParent
302 doc <- getOwnerDocumentUnchecked currentParent
301− df <- createDocumentFragmentUnchecked doc
303+ df <- createDocumentFragment doc
302 extractUpTo df s e
304 extractUpTo df s e
303 return df
305 return df
@@ -348,12 +350,12 @@ wrap e cfg = do
350{-# INLINABLE makeElement #-}
352{-# INLINABLE makeElement #-}
351−makeElement :: forall er t m a. SupportsImmediateDomBuilder t m => Text -> ElementConfig er t (ImmediateDomBuilderT t m) -> ImmediateDomBuilderT t m a -> ImmediateDomBuilderT t m ((Element er GhcjsDomSpace t, a), DOM.Element)
353+makeElement :: forall er t m a. SupportsImmediateDomBuilder t m => Text -> ElementConfig er t (ImmediateDomBuilderT t m) -> ImmediateDomBuilderT t m a -> ImmediateDomBuilderT t m ((Element er GhcjsDomSpace t, a), DOM.HTMLElement)
352makeElement elementTag cfg child = do
354makeElement elementTag cfg child = do
353 doc <- askDocument
355 doc <- askDocument
354− e <- liftJSM $ case cfg ^. namespace of
356+ e <- liftJSM $ uncheckedCastTo DOM.HTMLElement <$> case cfg ^. namespace of
355− Nothing -> createElementUnchecked doc (Just elementTag)
357+ Nothing -> createElement doc elementTag
356− Just ens -> createElementNSUnchecked doc (Just ens) (Just elementTag)
358+ Just ens -> createElementNS doc (Just ens) elementTag
357 ImmediateDomBuilderT $ iforM_ (cfg ^. initialAttributes) $ \(AttributeName mAttrNamespace n) v -> case mAttrNamespace of
359 ImmediateDomBuilderT $ iforM_ (cfg ^. initialAttributes) $ \(AttributeName mAttrNamespace n) v -> case mAttrNamespace of
358 Nothing -> lift $ setAttribute e n v
360 Nothing -> lift $ setAttribute e n v
359 Just ans -> lift $ setAttributeNS e (Just ans) n v
361 Just ans -> lift $ setAttributeNS e (Just ans) n v
@@ -375,7 +377,7 @@ data GhcjsDomSpace
375instance DomSpace GhcjsDomSpace where
377instance DomSpace GhcjsDomSpace where
376 type EventSpec GhcjsDomSpace = GhcjsEventSpec
378 type EventSpec GhcjsDomSpace = GhcjsEventSpec
377 type RawTextNode GhcjsDomSpace = DOM.Text
379 type RawTextNode GhcjsDomSpace = DOM.Text
378− type RawElement GhcjsDomSpace = DOM.Element
380+ type RawElement GhcjsDomSpace = DOM.HTMLElement
379 type RawFile GhcjsDomSpace = DOM.File
381 type RawFile GhcjsDomSpace = DOM.File
380 type RawInputElement GhcjsDomSpace = DOM.HTMLInputElement
382 type RawInputElement GhcjsDomSpace = DOM.HTMLInputElement
381 type RawTextAreaElement GhcjsDomSpace = DOM.HTMLTextAreaElement
383 type RawTextAreaElement GhcjsDomSpace = DOM.HTMLTextAreaElement
@@ -424,8 +426,8 @@ instance er ~ EventResult => Default (GhcjsEventSpec er) where
424 def = GhcjsEventSpec
426 def = GhcjsEventSpec
425 { _ghcjsEventSpec_filters = mempty
427 { _ghcjsEventSpec_filters = mempty
426 , _ghcjsEventSpec_handler = GhcjsEventHandler $ \(en, GhcjsDomEvent evt) -> do
428 , _ghcjsEventSpec_handler = GhcjsEventHandler $ \(en, GhcjsDomEvent evt) -> do
427− t :: DOM.EventTarget <- withIsEvent en $ Event.getTargetUnchecked evt --TODO: Rework this; defaultDomEventHandler shouldn't need to take this as an argument
429+ t :: DOM.EventTarget <- withIsEvent en $ Event.getTarget evt --TODO: Rework this; defaultDomEventHandler shouldn't need to take this as an argument
428− let e = uncheckedCastTo DOM.Element t
430+ let e = uncheckedCastTo DOM.HTMLElement t
429 runReaderT (defaultDomEventHandler e en) evt
431 runReaderT (defaultDomEventHandler e en) evt
@@ -456,7 +458,7 @@ instance SupportsImmediateDomBuilder t m => DomBuilder t (ImmediateDomBuilderT t
456 , valueChangedByUI
458 , valueChangedByUI
458 Input.setChecked domInputElement $ _inputElementConfig_initialChecked cfg
460 Input.setChecked domInputElement $ _inputElementConfig_initialChecked cfg
459− checkedChangedByUI <- wrapDomEvent domInputElement (`on` Element.click) $ do
461+ checkedChangedByUI <- wrapDomEvent domInputElement (`on` Events.click) $ do
460 Input.getChecked domInputElement
462 Input.getChecked domInputElement
461 checkedChangedBySetChecked <- case _inputElementConfig_setChecked cfg of
463 checkedChangedBySetChecked <- case _inputElementConfig_setChecked cfg of
462 Nothing -> return never
464 Nothing -> return never
@@ -475,7 +477,7 @@ instance SupportsImmediateDomBuilder t m => DomBuilder t (ImmediateDomBuilderT t
475 [ False <$ Reflex.select (_element_events e) (WrapArg Blur)
477 [ False <$ Reflex.select (_element_events e) (WrapArg Blur)
476 , True <$ Reflex.select (_element_events e) (WrapArg Focus)
478 , True <$ Reflex.select (_element_events e) (WrapArg Focus)
478− files <- holdDyn mempty <=< wrapDomEvent domInputElement (`on` Element.change) $ do
480+ files <- holdDyn mempty <=< wrapDomEvent domInputElement (`on` Events.change) $ do
479 mfiles <- Input.getFiles domInputElement
481 mfiles <- Input.getFiles domInputElement
480 let getMyFiles xs = fmap catMaybes . mapM (FileList.item xs) . flip take [0..] . fromIntegral =<< FileList.getLength xs
482 let getMyFiles xs = fmap catMaybes . mapM (FileList.item xs) . flip take [0..] . fromIntegral =<< FileList.getLength xs
481 maybe (return []) getMyFiles mfiles
483 maybe (return []) getMyFiles mfiles
@@ -518,14 +520,14 @@ instance SupportsImmediateDomBuilder t m => DomBuilder t (ImmediateDomBuilderT t
518 selectElement cfg child = do
520 selectElement cfg child = do
519 ((e, result), domElement) <- makeElement "select" (cfg ^. selectElementConfig_elementConfig) child
521 ((e, result), domElement) <- makeElement "select" (cfg ^. selectElementConfig_elementConfig) child
520 let domSelectElement = uncheckedCastTo DOM.HTMLSelectElement domElement
522 let domSelectElement = uncheckedCastTo DOM.HTMLSelectElement domElement
521− Select.setValue domSelectElement $ Just (cfg ^. selectElementConfig_initialValue)
523+ Select.setValue domSelectElement $ cfg ^. selectElementConfig_initialValue
522− Just v0 <- Select.getValue domSelectElement
524+ v0 <- Select.getValue domSelectElement
523− let getMyValue = fromMaybe "" <$> Select.getValue domSelectElement
525+ let getMyValue = Select.getValue domSelectElement
524 valueChangedByUI <- requestDomAction $ liftJSM getMyValue <$ Reflex.select (_element_events e) (WrapArg Change)
526 valueChangedByUI <- requestDomAction $ liftJSM getMyValue <$ Reflex.select (_element_events e) (WrapArg Change)
525 valueChangedBySetValue <- case _selectElementConfig_setValue cfg of
527 valueChangedBySetValue <- case _selectElementConfig_setValue cfg of
526 Nothing -> return never
528 Nothing -> return never
527 Just eSetValue -> requestDomAction $ ffor eSetValue $ \v' -> do
529 Just eSetValue -> requestDomAction $ ffor eSetValue $ \v' -> do
528− Select.setValue domSelectElement $ Just v'
530+ Select.setValue domSelectElement v'
529 getMyValue -- We get the value after setting it in case the browser has mucked with it somehow
531 getMyValue -- We get the value after setting it in case the browser has mucked with it somehow
530 v <- holdDyn v0 $ leftmost
532 v <- holdDyn v0 $ leftmost
531 [ valueChangedBySetValue
533 [ valueChangedBySetValue
@@ -579,7 +581,7 @@ extractFragment fragment = do
579instance SupportsImmediateDomBuilder t m => MountableDomBuilder t (ImmediateDomBuilderT t m) where
581instance SupportsImmediateDomBuilder t m => MountableDomBuilder t (ImmediateDomBuilderT t m) where
580 type DomFragment (ImmediateDomBuilderT t m) = ImmediateDomFragment
582 type DomFragment (ImmediateDomBuilderT t m) = ImmediateDomFragment
581 buildDomFragment w = do
583 buildDomFragment w = do
582− df <- createDocumentFragmentUnchecked =<< askDocument
584+ df <- createDocumentFragment =<< askDocument
583 result <- flip localEnv w $ \env -> env
585 result <- flip localEnv w $ \env -> env
584 { _immediateDomBuilderEnv_parent = toNode df
586 { _immediateDomBuilderEnv_parent = toNode df
@@ -589,7 +591,7 @@ instance SupportsImmediateDomBuilder t m => MountableDomBuilder t (ImmediateDomB
589 parent <- askParent
591 parent <- askParent
590 extractFragment fragment
592 extractFragment fragment
591 before <- textNodeInternal ("" :: Text)
593 before <- textNodeInternal ("" :: Text)
592− appendChild_ parent $ Just $ _immediateDomFragment_document fragment
594+ appendChild_ parent $ _immediateDomFragment_document fragment
593 after <- textNodeInternal ("" :: Text)
595 after <- textNodeInternal ("" :: Text)
594 xs <- foldDyn (\new (previous, _) -> (new, Just previous)) (fragment, Nothing) setFragment
596 xs <- foldDyn (\new (previous, _) -> (new, Just previous)) (fragment, Nothing) setFragment
595 requestDomAction_ $ ffor (updated xs) $ \(childFragment, Just previousFragment) -> do
597 requestDomAction_ $ ffor (updated xs) $ \(childFragment, Just previousFragment) -> do
@@ -617,7 +619,7 @@ instance (Reflex t, MonadAdjust t m, MonadJSM m, MonadHold t m, MonadFix m, Prim
617 when (new == 0) $ _immediateDomBuilderEnv_commitAction initialEnv
619 when (new == 0) $ _immediateDomBuilderEnv_commitAction initialEnv
618 -- We draw 'after' in this roundabout way to avoid using MonadFix
620 -- We draw 'after' in this roundabout way to avoid using MonadFix
619 doc <- askDocument
621 doc <- askDocument
620− after <- createTextNodeUnchecked doc ("" :: Text)
622+ after <- createTextNode doc ("" :: Text)
621 let drawInitialChild = do
623 let drawInitialChild = do
622 unreadyChildren <- liftIO $ newIORef 0
624 unreadyChildren <- liftIO $ newIORef 0
623 let f = do
625 let f = do
@@ -634,7 +636,7 @@ instance (Reflex t, MonadAdjust t m, MonadJSM m, MonadHold t m, MonadFix m, Prim
634 return result
636 return result
635 a'' <- numberOccurrences a'
637 a'' <- numberOccurrences a'
636 (result0, child') <- ImmediateDomBuilderT $ lift $ runWithReplace drawInitialChild $ ffor a'' $ \(cohortId, child) -> do
638 (result0, child') <- ImmediateDomBuilderT $ lift $ runWithReplace drawInitialChild $ ffor a'' $ \(cohortId, child) -> do
637− df <- createDocumentFragmentUnchecked doc
639+ df <- createDocumentFragment doc
638 unreadyChildren <- liftIO $ newIORef 0
640 unreadyChildren <- liftIO $ newIORef 0
639 let commitAction = do
641 let commitAction = do
640 c <- liftIO $ readIORef currentCohort
642 c <- liftIO $ readIORef currentCohort
@@ -832,7 +834,7 @@ drawChildUpdate :: (MonadIO m, MonadJSM m)
832drawChildUpdate initialEnv markReady child = do
834drawChildUpdate initialEnv markReady child = do
833 childReadyState <- liftIO $ newIORef $ ChildReadyState_Unready Nothing
835 childReadyState <- liftIO $ newIORef $ ChildReadyState_Unready Nothing
834 unreadyChildren <- liftIO $ newIORef 0
836 unreadyChildren <- liftIO $ newIORef 0
835− df <- createDocumentFragmentUnchecked $ _immediateDomBuilderEnv_document initialEnv
837+ df <- createDocumentFragment $ _immediateDomBuilderEnv_document initialEnv
836 (placeholder, result) <- runReaderT (unImmediateDomBuilderT $ (,) <$> textNodeInternal ("" :: Text) <*> child) $ initialEnv
838 (placeholder, result) <- runReaderT (unImmediateDomBuilderT $ (,) <$> textNodeInternal ("" :: Text) <*> child) $ initialEnv
837 { _immediateDomBuilderEnv_parent = toNode df
839 { _immediateDomBuilderEnv_parent = toNode df
838 , _immediateDomBuilderEnv_unreadyChildren = unreadyChildren
840 , _immediateDomBuilderEnv_unreadyChildren = unreadyChildren
@@ -853,7 +855,7 @@ mkHasFocus e = do
853insertBefore :: (MonadJSM m, IsNode new, IsNode existing) => new -> existing -> m ()
855insertBefore :: (MonadJSM m, IsNode new, IsNode existing) => new -> existing -> m ()
854insertBefore new existing = do
856insertBefore new existing = do
855 p <- getParentNodeUnchecked existing
857 p <- getParentNodeUnchecked existing
856− DOM.insertBefore_ p (Just new) (Just existing) -- If there's no parent, that means we've been removed from the DOM; this should not happen if the we're removing ourselves from the performEvent properly
858+ DOM.insertBefore_ p new (Just existing) -- If there's no parent, that means we've been removed from the DOM; this should not happen if the we're removing ourselves from the performEvent properly
858instance PerformEvent t m => PerformEvent t (ImmediateDomBuilderT t m) where
860instance PerformEvent t m => PerformEvent t (ImmediateDomBuilderT t m) where
859 type Performable (ImmediateDomBuilderT t m) = Performable m
861 type Performable (ImmediateDomBuilderT t m) = Performable m
@@ -935,12 +937,12 @@ type family EventType en where
935 EventType 'SelectTag = UIEvent
937 EventType 'SelectTag = UIEvent
936 EventType 'SubmitTag = DOM.Event
938 EventType 'SubmitTag = DOM.Event
937 EventType 'WheelTag = WheelEvent
939 EventType 'WheelTag = WheelEvent
938− EventType 'BeforecutTag = DOM.Event
940+ EventType 'BeforecutTag = ClipboardEvent
939− EventType 'CutTag = DOM.Event
941+ EventType 'CutTag = ClipboardEvent
940− EventType 'BeforecopyTag = DOM.Event
942+ EventType 'BeforecopyTag = ClipboardEvent
941− EventType 'CopyTag = DOM.Event
943+ EventType 'CopyTag = ClipboardEvent
942− EventType 'BeforepasteTag = DOM.Event
944+ EventType 'BeforepasteTag = ClipboardEvent
943− EventType 'PasteTag = DOM.Event
945+ EventType 'PasteTag = ClipboardEvent
944 EventType 'ResetTag = DOM.Event
946 EventType 'ResetTag = DOM.Event
945 EventType 'SearchTag = DOM.Event
947 EventType 'SearchTag = DOM.Event
946 EventType 'SelectstartTag = DOM.Event
948 EventType 'SelectstartTag = DOM.Event
@@ -950,12 +952,12 @@ type family EventType en where
950 EventType 'TouchcancelTag = TouchEvent
952 EventType 'TouchcancelTag = TouchEvent
952{-# INLINABLE defaultDomEventHandler #-}
954{-# INLINABLE defaultDomEventHandler #-}
953−defaultDomEventHandler :: IsElement e => e -> EventName en -> EventM e (EventType en) (Maybe (EventResult en))
955+defaultDomEventHandler :: IsHTMLElement e => e -> EventName en -> EventM e (EventType en) (Maybe (EventResult en))
954defaultDomEventHandler e evt = fmap (Just . EventResult) $ case evt of
956defaultDomEventHandler e evt = fmap (Just . EventResult) $ case evt of
955 Click -> return ()
957 Click -> return ()
956 Dblclick -> getMouseEventCoords
958 Dblclick -> getMouseEventCoords
957 Keypress -> getKeyEvent
959 Keypress -> getKeyEvent
958− Scroll -> getScrollTop e
960+ Scroll -> fromIntegral <$> getScrollTop e
959 Keydown -> getKeyEvent
961 Keydown -> getKeyEvent
960 Keyup -> getKeyEvent
962 Keyup -> getKeyEvent
961 Mousemove -> getMouseEventCoords
963 Mousemove -> getMouseEventCoords
@@ -1149,104 +1151,104 @@ showEventName en = case en of
1149 Touchcancel -> "Touchcancel"
1151 Touchcancel -> "Touchcancel"
1151{-# INLINABLE elementOnEventName #-}
1153{-# INLINABLE elementOnEventName #-}
1152−elementOnEventName :: IsElement e => EventName en -> e -> EventM e (EventType en) () -> JSM (JSM ())
1154+elementOnEventName :: IsHTMLElement e => EventName en -> e -> EventM e (EventType en) () -> JSM (JSM ())
1153elementOnEventName en e = case en of
1155elementOnEventName en e = case en of
1154− Abort -> on e Element.abort
1156+ Abort -> on e Events.abort
1155− Blur -> on e Element.blurEvent
1157+ Blur -> on e Events.blur
1156− Change -> on e Element.change
1158+ Change -> on e Events.change
1157− Click -> on e Element.click
1159+ Click -> on e Events.click
1158− Contextmenu -> on e Element.contextMenu
1160+ Contextmenu -> on e Events.contextMenu
1159− Dblclick -> on e Element.dblClick
1161+ Dblclick -> on e Events.dblClick
1160− Drag -> on e Element.drag
1162+ Drag -> on e Events.drag
1161− Dragend -> on e Element.dragEnd
1163+ Dragend -> on e Events.dragEnd
1162− Dragenter -> on e Element.dragEnter
1164+ Dragenter -> on e Events.dragEnter
1163− Dragleave -> on e Element.dragLeave
1165+ Dragleave -> on e Events.dragLeave
1164− Dragover -> on e Element.dragOver
1166+ Dragover -> on e Events.dragOver
1165− Dragstart -> on e Element.dragStart
1167+ Dragstart -> on e Events.dragStart
1166− Drop -> on e Element.drop
1168+ Drop -> on e Events.drop
1167− Error -> on e Element.error
1169+ Error -> on e Events.error
1168− Focus -> on e Element.focusEvent
1170+ Focus -> on e Events.focus
1169− Input -> on e Element.input
1171+ Input -> on e Events.input
1170− Invalid -> on e Element.invalid
1172+ Invalid -> on e Events.invalid
1171− Keydown -> on e Element.keyDown
1173+ Keydown -> on e Events.keyDown
1172− Keypress -> on e Element.keyPress
1174+ Keypress -> on e Events.keyPress
1173− Keyup -> on e Element.keyUp
1175+ Keyup -> on e Events.keyUp
1174− Load -> on e Element.load
1176+ Load -> on e Events.load
1175− Mousedown -> on e Element.mouseDown
1177+ Mousedown -> on e Events.mouseDown
1176− Mouseenter -> on e Element.mouseEnter
1178+ Mouseenter -> on e Events.mouseEnter
1177− Mouseleave -> on e Element.mouseLeave
1179+ Mouseleave -> on e Events.mouseLeave
1178− Mousemove -> on e Element.mouseMove
1180+ Mousemove -> on e Events.mouseMove
1179− Mouseout -> on e Element.mouseOut
1181+ Mouseout -> on e Events.mouseOut
1180− Mouseover -> on e Element.mouseOver
1182+ Mouseover -> on e Events.mouseOver
1181− Mouseup -> on e Element.mouseUp
1183+ Mouseup -> on e Events.mouseUp
1182− Mousewheel -> on e Element.mouseWheel
1184+ Mousewheel -> on e Events.mouseWheel
1183− Scroll -> on e Element.scroll
1185+ Scroll -> on e Events.scroll
1184− Select -> on e Element.select
1186+ Select -> on e Events.select
1185− Submit -> on e Element.submit
1187+ Submit -> on e Events.submit
1186− Wheel -> on e Element.wheel
1188+ Wheel -> on e Events.wheel
1187 Beforecut -> on e Element.beforeCut
1189 Beforecut -> on e Element.beforeCut
1188 Cut -> on e Element.cut
1190 Cut -> on e Element.cut
1189 Beforecopy -> on e Element.beforeCopy
1191 Beforecopy -> on e Element.beforeCopy
1190 Copy -> on e Element.copy
1192 Copy -> on e Element.copy
1191 Beforepaste -> on e Element.beforePaste
1193 Beforepaste -> on e Element.beforePaste
1192 Paste -> on e Element.paste
1194 Paste -> on e Element.paste
1193− Reset -> on e Element.reset
1195+ Reset -> on e Events.reset
1194− Search -> on e Element.search
1196+ Search -> on e Events.search
1195 Selectstart -> on e Element.selectStart
1197 Selectstart -> on e Element.selectStart
1196− Touchstart -> on e Element.touchStart
1198+ Touchstart -> on e Events.touchStart
1197− Touchmove -> on e Element.touchMove
1199+ Touchmove -> on e Events.touchMove
1198− Touchend -> on e Element.touchEnd
1200+ Touchend -> on e Events.touchEnd
1199− Touchcancel -> on e Element.touchCancel
1201+ Touchcancel -> on e Events.touchCancel
1201{-# INLINABLE windowOnEventName #-}
1203{-# INLINABLE windowOnEventName #-}
1202windowOnEventName :: EventName en -> DOM.Window -> EventM DOM.Window (EventType en) () -> JSM (JSM ())
1204windowOnEventName :: EventName en -> DOM.Window -> EventM DOM.Window (EventType en) () -> JSM (JSM ())
1203windowOnEventName en e = case en of
1205windowOnEventName en e = case en of
1204− Abort -> on e Window.abort
1206+ Abort -> on e Events.abort
1205− Blur -> on e Window.blurEvent
1207+ Blur -> on e Events.blur
1206− Change -> on e Window.change
1208+ Change -> on e Events.change
1207− Click -> on e Window.click
1209+ Click -> on e Events.click
1208− Contextmenu -> on e Window.contextMenu
1210+ Contextmenu -> on e Events.contextMenu
1209− Dblclick -> on e Window.dblClick
1211+ Dblclick -> on e Events.dblClick
1210− Drag -> on e Window.drag
1212+ Drag -> on e Events.drag
1211− Dragend -> on e Window.dragEnd
1213+ Dragend -> on e Events.dragEnd
1212− Dragenter -> on e Window.dragEnter
1214+ Dragenter -> on e Events.dragEnter
1213− Dragleave -> on e Window.dragLeave
1215+ Dragleave -> on e Events.dragLeave
1214− Dragover -> on e Window.dragOver
1216+ Dragover -> on e Events.dragOver
1215− Dragstart -> on e Window.dragStart
1217+ Dragstart -> on e Events.dragStart
1216− Drop -> on e Window.drop
1218+ Drop -> on e Events.drop
1217− Error -> on e Window.error
1219+ Error -> on e Events.error
1218− Focus -> on e Window.focusEvent
1220+ Focus -> on e Events.focus
1219− Input -> on e Window.input
1221+ Input -> on e Events.input
1220− Invalid -> on e Window.invalid
1222+ Invalid -> on e Events.invalid
1221− Keydown -> on e Window.keyDown
1223+ Keydown -> on e Events.keyDown
1222− Keypress -> on e Window.keyPress
1224+ Keypress -> on e Events.keyPress
1223− Keyup -> on e Window.keyUp
1225+ Keyup -> on e Events.keyUp
1224− Load -> on e Window.load
1226+ Load -> on e Events.load
1225− Mousedown -> on e Window.mouseDown
1227+ Mousedown -> on e Events.mouseDown
1226− Mouseenter -> on e Window.mouseEnter
1228+ Mouseenter -> on e Events.mouseEnter
1227− Mouseleave -> on e Window.mouseLeave
1229+ Mouseleave -> on e Events.mouseLeave
1228− Mousemove -> on e Window.mouseMove
1230+ Mousemove -> on e Events.mouseMove
1229− Mouseout -> on e Window.mouseOut
1231+ Mouseout -> on e Events.mouseOut
1230− Mouseover -> on e Window.mouseOver
1232+ Mouseover -> on e Events.mouseOver
1231− Mouseup -> on e Window.mouseUp
1233+ Mouseup -> on e Events.mouseUp
1232− Mousewheel -> on e Window.mouseWheel
1234+ Mousewheel -> on e Events.mouseWheel
1233− Scroll -> on e Window.scrollEvent
1235+ Scroll -> on e Events.scroll
1234− Select -> on e Window.select
1236+ Select -> on e Events.select
1235− Submit -> on e Window.submit
1237+ Submit -> on e Events.submit
1236− Wheel -> on e Window.wheel
1238+ Wheel -> on e Events.wheel
1237 Beforecut -> const $ return $ return () --TODO
1239 Beforecut -> const $ return $ return () --TODO
1238 Cut -> const $ return $ return () --TODO
1240 Cut -> const $ return $ return () --TODO
1239 Beforecopy -> const $ return $ return () --TODO
1241 Beforecopy -> const $ return $ return () --TODO
1240 Copy -> const $ return $ return () --TODO
1242 Copy -> const $ return $ return () --TODO
1241 Beforepaste -> const $ return $ return () --TODO
1243 Beforepaste -> const $ return $ return () --TODO
1242 Paste -> const $ return $ return () --TODO
1244 Paste -> const $ return $ return () --TODO
1243− Reset -> on e Window.reset
1245+ Reset -> on e Events.reset
1244− Search -> on e Window.search
1246+ Search -> on e Events.search
1245 Selectstart -> const $ return $ return () --TODO
1247 Selectstart -> const $ return $ return () --TODO
1246− Touchstart -> on e Window.touchStart
1248+ Touchstart -> on e Events.touchStart
1247− Touchmove -> on e Window.touchMove
1249+ Touchmove -> on e Events.touchMove
1248− Touchend -> on e Window.touchEnd
1250+ Touchend -> on e Events.touchEnd
1249− Touchcancel -> on e Window.touchCancel
1251+ Touchcancel -> on e Events.touchCancel
1251{-# INLINABLE wrapDomEvent #-}
1253{-# INLINABLE wrapDomEvent #-}
1252wrapDomEvent :: (TriggerEvent t m, MonadJSM m) => e -> (e -> EventM e event () -> JSM (JSM ())) -> EventM e event a -> m (Event t a)
1254wrapDomEvent :: (TriggerEvent t m, MonadJSM m) => e -> (e -> EventM e event () -> JSM (JSM ())) -> EventM e event a -> m (Event t a)
@@ -1291,10 +1293,10 @@ wrapDomEventsMaybe target handlers onEventName = do
1291 return $! e
1293 return $! e
1293{-# INLINABLE getKeyEvent #-}
1295{-# INLINABLE getKeyEvent #-}
1294−getKeyEvent :: EventM e KeyboardEvent Int
1296+getKeyEvent :: EventM e KeyboardEvent Word
1295getKeyEvent = do
1297getKeyEvent = do
1296 e <- event
1298 e <- event
1297− which <- getWhich e
1299+ which <- KeyboardEvent.getWhich e
1298 if which /= 0 then return which else do
1300 if which /= 0 then return which else do
1299 charCode <- getCharCode e
1301 charCode <- getCharCode e
1300 if charCode /= 0 then return charCode else
1302 if charCode /= 0 then return charCode else
@@ -1309,29 +1311,26 @@ getMouseEventCoords = do
1309{-# INLINABLE getTouchEvent #-}
1311{-# INLINABLE getTouchEvent #-}
1310getTouchEvent :: EventM e TouchEvent TouchEventResult
1312getTouchEvent :: EventM e TouchEvent TouchEventResult
1311getTouchEvent = do
1313getTouchEvent = do
1312− let touchResults = \case
1314+ let touchResults ts = do
1313− Nothing -> return []
1315 n <- TouchList.getLength ts
1315 n <- TouchList.getLength ts
1316− fmap catMaybes . forM (takeWhile (< n) [0..]) $ \ix -> do
1316+ forM (takeWhile (< n) [0..]) $ \ix -> do
1317− mt <- TouchList.item ts ix
1317+ t <- TouchList.item ts ix
1319− identifier <- Touch.getIdentifier t
1318+ identifier <- Touch.getIdentifier t
1320− screenX <- Touch.getScreenX t
1319+ screenX <- Touch.getScreenX t
1321− screenY <- Touch.getScreenY t
1320+ screenY <- Touch.getScreenY t
1322− clientX <- Touch.getClientX t
1321+ clientX <- Touch.getClientX t
1323− clientY <- Touch.getClientY t
1322+ clientY <- Touch.getClientY t
1324− pageX <- Touch.getPageX t
1323+ pageX <- Touch.getPageX t
1325− pageY <- Touch.getPageY t
1324+ pageY <- Touch.getPageY t
1326− return $ TouchResult
1325+ return TouchResult
1327− { _touchResult_identifier = identifier
1326+ { _touchResult_identifier = identifier
1328− , _touchResult_screenX = screenX
1327+ , _touchResult_screenX = screenX
1329− , _touchResult_screenY = screenY
1328+ , _touchResult_screenY = screenY
1330− , _touchResult_clientX = clientX
1329+ , _touchResult_clientX = clientX
1331− , _touchResult_clientY = clientY
1330+ , _touchResult_clientY = clientY
1332− , _touchResult_pageX = pageX
1331+ , _touchResult_pageX = pageX
1333− , _touchResult_pageY = pageY
1332+ , _touchResult_pageY = pageY
1335 e <- event
1334 e <- event
1336 altKey <- TouchEvent.getAltKey e
1335 altKey <- TouchEvent.getAltKey e
1337 ctrlKey <- TouchEvent.getCtrlKey e
1336 ctrlKey <- TouchEvent.getCtrlKey e