@@ -118,10 +118,11 @@ import Data.Text (Text)
118118import qualified Data.Text as T
119119import qualified GHCJS.DOM as DOM
120120import GHCJS.DOM.RequestAnimationFrameCallback
121−import GHCJS.DOM.Document (Document, createDocumentFragmentUnchecked, createElementUnchecked, createElementNSUnchecked, createTextNodeUnchecked)
121+import GHCJS.DOM.Document (Document, createDocumentFragment, createElement, createElementNS, createTextNode)
122122import GHCJS.DOM.Element (getScrollTop, removeAttribute, removeAttributeNS, setAttribute, setAttributeNS)
123123import qualified GHCJS.DOM.Element as Element
124124import qualified GHCJS.DOM.Event as Event
125+import qualified GHCJS.DOM.GlobalEventHandlers as Events
125126import GHCJS.DOM.EventM (EventM, event, on)
126127import qualified GHCJS.DOM.EventM as DOM
127128import qualified GHCJS.DOM.FileList as FileList
@@ -136,10 +137,11 @@ import GHCJS.DOM.Node (appendChild_, getOwnerDocumentUnchecked, getParentNodeUnc
136137import qualified GHCJS.DOM.Node as DOM (insertBefore_)
137138import GHCJS.DOM.Types
138139 (liftJSM, askJSM, runJSM, JSM, MonadJSM(..),
139− FocusEvent, IsElement, IsEvent, IsNode, KeyboardEvent, Node,
140− ToDOMString, TouchEvent, WheelEvent, uncheckedCastTo)
140+ FocusEvent, IsHTMLElement, IsEvent, IsNode, KeyboardEvent, Node,
141+ ToDOMString, TouchEvent, WheelEvent, uncheckedCastTo, ClipboardEvent)
141142import qualified GHCJS.DOM.Types as DOM
142143import GHCJS.DOM.UIEvent
144+import GHCJS.DOM.KeyboardEvent as KeyboardEvent
143145import qualified GHCJS.DOM.Window as Window
144146import Language.Javascript.JSaddle (call, eval)
145147
@@ -205,7 +207,7 @@ runImmediateDomBuilderT (ImmediateDomBuilderT a) env eventChan = flip runTrigger
205207 v <- synchronously x
206208 _ <- liftIO $ f v
207209 freeRequestAnimationFrameCallback cb
208− _ <- Window.requestAnimationFrame win $ Just cb
210+ _ <- Window.requestAnimationFrame win cb
209211 return ()
210212
211213{-# INLINABLE askDocument #-}
@@ -227,14 +229,14 @@ localEnv f = ImmediateDomBuilderT . local f . unImmediateDomBuilderT
227229append :: (IsNode n, MonadJSM m) => n -> ImmediateDomBuilderT t m ()
228230append n = do
229231 p <- askParent
230− liftJSM $ appendChild_ p $ Just n
232+ liftJSM $ appendChild_ p n
231233 return ()
232234
233235{-# INLINABLE textNodeInternal #-}
234236textNodeInternal :: (MonadJSM m, ToDOMString contents) => contents -> ImmediateDomBuilderT t m DOM.Text
235237textNodeInternal t = do
236238 doc <- askDocument
237− n <- liftJSM $ createTextNodeUnchecked doc t
239+ n <- liftJSM $ createTextNode doc t
238240 append n
239241 return n
240242
@@ -242,7 +244,7 @@ textNodeInternal t = do
242244-- all nodes between s and e will be removed, but s and e will not be removed
243245deleteBetweenExclusive :: (MonadJSM m, IsNode start, IsNode end) => start -> end -> m ()
244246deleteBetweenExclusive s e = liftJSM $ do
245− df <- createDocumentFragmentUnchecked =<< getOwnerDocumentUnchecked s
247+ df <- createDocumentFragment =<< getOwnerDocumentUnchecked s
246248 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
247249
248250-- | 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
267269{-# INLINABLE deleteUpTo #-}
268270deleteUpTo :: (MonadJSM m, IsNode start, IsNode end) => start -> end -> m ()
269271deleteUpTo s e = do
270− df <- createDocumentFragmentUnchecked =<< getOwnerDocumentUnchecked s
272+ df <- createDocumentFragment =<< getOwnerDocumentUnchecked s
271273 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
272274
273275extractUpTo :: (MonadJSM m, IsNode start, IsNode end) => DOM.DocumentFragment -> start -> end -> m ()
@@ -298,7 +300,7 @@ collectUpTo s e = do
298300collectUpToGivenParent :: (MonadJSM m, IsNode parent, IsNode start, IsNode end) => parent -> start -> end -> m DOM.DocumentFragment
299301collectUpToGivenParent currentParent s e = do
300302 doc <- getOwnerDocumentUnchecked currentParent
301− df <- createDocumentFragmentUnchecked doc
303+ df <- createDocumentFragment doc
302304 extractUpTo df s e
303305 return df
304306
@@ -348,12 +350,12 @@ wrap e cfg = do
348350 }
349351
350352{-# 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)
352354makeElement elementTag cfg child = do
353355 doc <- askDocument
354− e <- liftJSM $ case cfg ^. namespace of
355− Nothing -> createElementUnchecked doc (Just elementTag)
356− Just ens -> createElementNSUnchecked doc (Just ens) (Just elementTag)
356+ e <- liftJSM $ uncheckedCastTo DOM.HTMLElement <$> case cfg ^. namespace of
357+ Nothing -> createElement doc elementTag
358+ Just ens -> createElementNS doc (Just ens) elementTag
357359 ImmediateDomBuilderT $ iforM_ (cfg ^. initialAttributes) $ \(AttributeName mAttrNamespace n) v -> case mAttrNamespace of
358360 Nothing -> lift $ setAttribute e n v
359361 Just ans -> lift $ setAttributeNS e (Just ans) n v
@@ -375,7 +377,7 @@ data GhcjsDomSpace
375377instance DomSpace GhcjsDomSpace where
376378 type EventSpec GhcjsDomSpace = GhcjsEventSpec
377379 type RawTextNode GhcjsDomSpace = DOM.Text
378− type RawElement GhcjsDomSpace = DOM.Element
380+ type RawElement GhcjsDomSpace = DOM.HTMLElement
379381 type RawFile GhcjsDomSpace = DOM.File
380382 type RawInputElement GhcjsDomSpace = DOM.HTMLInputElement
381383 type RawTextAreaElement GhcjsDomSpace = DOM.HTMLTextAreaElement
@@ -424,8 +426,8 @@ instance er ~ EventResult => Default (GhcjsEventSpec er) where
424426 def = GhcjsEventSpec
425427 { _ghcjsEventSpec_filters = mempty
426428 , _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
428− let e = uncheckedCastTo DOM.Element t
429+ t :: DOM.EventTarget <- withIsEvent en $ Event.getTarget evt --TODO: Rework this; defaultDomEventHandler shouldn't need to take this as an argument
430+ let e = uncheckedCastTo DOM.HTMLElement t
429431 runReaderT (defaultDomEventHandler e en) evt
430432 }
431433
@@ -456,7 +458,7 @@ instance SupportsImmediateDomBuilder t m => DomBuilder t (ImmediateDomBuilderT t
456458 , valueChangedByUI
457459 ]
458460 Input.setChecked domInputElement $ _inputElementConfig_initialChecked cfg
459− checkedChangedByUI <- wrapDomEvent domInputElement (`on` Element.click) $ do
461+ checkedChangedByUI <- wrapDomEvent domInputElement (`on` Events.click) $ do
460462 Input.getChecked domInputElement
461463 checkedChangedBySetChecked <- case _inputElementConfig_setChecked cfg of
462464 Nothing -> return never
@@ -475,7 +477,7 @@ instance SupportsImmediateDomBuilder t m => DomBuilder t (ImmediateDomBuilderT t
475477 [ False <$ Reflex.select (_element_events e) (WrapArg Blur)
476478 , True <$ Reflex.select (_element_events e) (WrapArg Focus)
477479 ]
478− files <- holdDyn mempty <=< wrapDomEvent domInputElement (`on` Element.change) $ do
480+ files <- holdDyn mempty <=< wrapDomEvent domInputElement (`on` Events.change) $ do
479481 mfiles <- Input.getFiles domInputElement
480482 let getMyFiles xs = fmap catMaybes . mapM (FileList.item xs) . flip take [0..] . fromIntegral =<< FileList.getLength xs
481483 maybe (return []) getMyFiles mfiles
@@ -518,14 +520,14 @@ instance SupportsImmediateDomBuilder t m => DomBuilder t (ImmediateDomBuilderT t
518520 selectElement cfg child = do
519521 ((e, result), domElement) <- makeElement "select" (cfg ^. selectElementConfig_elementConfig) child
520522 let domSelectElement = uncheckedCastTo DOM.HTMLSelectElement domElement
521− Select.setValue domSelectElement $ Just (cfg ^. selectElementConfig_initialValue)
522− Just v0 <- Select.getValue domSelectElement
523− let getMyValue = fromMaybe "" <$> Select.getValue domSelectElement
523+ Select.setValue domSelectElement $ cfg ^. selectElementConfig_initialValue
524+ v0 <- Select.getValue domSelectElement
525+ let getMyValue = Select.getValue domSelectElement
524526 valueChangedByUI <- requestDomAction $ liftJSM getMyValue <$ Reflex.select (_element_events e) (WrapArg Change)
525527 valueChangedBySetValue <- case _selectElementConfig_setValue cfg of
526528 Nothing -> return never
527529 Just eSetValue -> requestDomAction $ ffor eSetValue $ \v' -> do
528− Select.setValue domSelectElement $ Just v'
530+ Select.setValue domSelectElement v'
529531 getMyValue -- We get the value after setting it in case the browser has mucked with it somehow
530532 v <- holdDyn v0 $ leftmost
531533 [ valueChangedBySetValue
@@ -579,7 +581,7 @@ extractFragment fragment = do
579581instance SupportsImmediateDomBuilder t m => MountableDomBuilder t (ImmediateDomBuilderT t m) where
580582 type DomFragment (ImmediateDomBuilderT t m) = ImmediateDomFragment
581583 buildDomFragment w = do
582− df <- createDocumentFragmentUnchecked =<< askDocument
584+ df <- createDocumentFragment =<< askDocument
583585 result <- flip localEnv w $ \env -> env
584586 { _immediateDomBuilderEnv_parent = toNode df
585587 }
@@ -589,7 +591,7 @@ instance SupportsImmediateDomBuilder t m => MountableDomBuilder t (ImmediateDomB
589591 parent <- askParent
590592 extractFragment fragment
591593 before <- textNodeInternal ("" :: Text)
592− appendChild_ parent $ Just $ _immediateDomFragment_document fragment
594+ appendChild_ parent $ _immediateDomFragment_document fragment
593595 after <- textNodeInternal ("" :: Text)
594596 xs <- foldDyn (\new (previous, _) -> (new, Just previous)) (fragment, Nothing) setFragment
595597 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
617619 when (new == 0) $ _immediateDomBuilderEnv_commitAction initialEnv
618620 -- We draw 'after' in this roundabout way to avoid using MonadFix
619621 doc <- askDocument
620− after <- createTextNodeUnchecked doc ("" :: Text)
622+ after <- createTextNode doc ("" :: Text)
621623 let drawInitialChild = do
622624 unreadyChildren <- liftIO $ newIORef 0
623625 let f = do
@@ -634,7 +636,7 @@ instance (Reflex t, MonadAdjust t m, MonadJSM m, MonadHold t m, MonadFix m, Prim
634636 return result
635637 a'' <- numberOccurrences a'
636638 (result0, child') <- ImmediateDomBuilderT $ lift $ runWithReplace drawInitialChild $ ffor a'' $ \(cohortId, child) -> do
637− df <- createDocumentFragmentUnchecked doc
639+ df <- createDocumentFragment doc
638640 unreadyChildren <- liftIO $ newIORef 0
639641 let commitAction = do
640642 c <- liftIO $ readIORef currentCohort
@@ -832,7 +834,7 @@ drawChildUpdate :: (MonadIO m, MonadJSM m)
832834drawChildUpdate initialEnv markReady child = do
833835 childReadyState <- liftIO $ newIORef $ ChildReadyState_Unready Nothing
834836 unreadyChildren <- liftIO $ newIORef 0
835− df <- createDocumentFragmentUnchecked $ _immediateDomBuilderEnv_document initialEnv
837+ df <- createDocumentFragment $ _immediateDomBuilderEnv_document initialEnv
836838 (placeholder, result) <- runReaderT (unImmediateDomBuilderT $ (,) <$> textNodeInternal ("" :: Text) <*> child) $ initialEnv
837839 { _immediateDomBuilderEnv_parent = toNode df
838840 , _immediateDomBuilderEnv_unreadyChildren = unreadyChildren
@@ -853,7 +855,7 @@ mkHasFocus e = do
853855insertBefore :: (MonadJSM m, IsNode new, IsNode existing) => new -> existing -> m ()
854856insertBefore new existing = do
855857 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
857859
858860instance PerformEvent t m => PerformEvent t (ImmediateDomBuilderT t m) where
859861 type Performable (ImmediateDomBuilderT t m) = Performable m
@@ -935,12 +937,12 @@ type family EventType en where
935937 EventType 'SelectTag = UIEvent
936938 EventType 'SubmitTag = DOM.Event
937939 EventType 'WheelTag = WheelEvent
938− EventType 'BeforecutTag = DOM.Event
939− EventType 'CutTag = DOM.Event
940− EventType 'BeforecopyTag = DOM.Event
941− EventType 'CopyTag = DOM.Event
942− EventType 'BeforepasteTag = DOM.Event
943− EventType 'PasteTag = DOM.Event
940+ EventType 'BeforecutTag = ClipboardEvent
941+ EventType 'CutTag = ClipboardEvent
942+ EventType 'BeforecopyTag = ClipboardEvent
943+ EventType 'CopyTag = ClipboardEvent
944+ EventType 'BeforepasteTag = ClipboardEvent
945+ EventType 'PasteTag = ClipboardEvent
944946 EventType 'ResetTag = DOM.Event
945947 EventType 'SearchTag = DOM.Event
946948 EventType 'SelectstartTag = DOM.Event
@@ -950,12 +952,12 @@ type family EventType en where
950952 EventType 'TouchcancelTag = TouchEvent
951953
952954{-# 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))
954956defaultDomEventHandler e evt = fmap (Just . EventResult) $ case evt of
955957 Click -> return ()
956958 Dblclick -> getMouseEventCoords
957959 Keypress -> getKeyEvent
958− Scroll -> getScrollTop e
960+ Scroll -> fromIntegral <$> getScrollTop e
959961 Keydown -> getKeyEvent
960962 Keyup -> getKeyEvent
961963 Mousemove -> getMouseEventCoords
@@ -1149,104 +1151,104 @@ showEventName en = case en of
11491151 Touchcancel -> "Touchcancel"
11501152
11511153{-# 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 ())
11531155elementOnEventName en e = case en of
1154− Abort -> on e Element.abort
1155− Blur -> on e Element.blurEvent
1156− Change -> on e Element.change
1157− Click -> on e Element.click
1158− Contextmenu -> on e Element.contextMenu
1159− Dblclick -> on e Element.dblClick
1160− Drag -> on e Element.drag
1161− Dragend -> on e Element.dragEnd
1162− Dragenter -> on e Element.dragEnter
1163− Dragleave -> on e Element.dragLeave
1164− Dragover -> on e Element.dragOver
1165− Dragstart -> on e Element.dragStart
1166− Drop -> on e Element.drop
1167− Error -> on e Element.error
1168− Focus -> on e Element.focusEvent
1169− Input -> on e Element.input
1170− Invalid -> on e Element.invalid
1171− Keydown -> on e Element.keyDown
1172− Keypress -> on e Element.keyPress
1173− Keyup -> on e Element.keyUp
1174− Load -> on e Element.load
1175− Mousedown -> on e Element.mouseDown
1176− Mouseenter -> on e Element.mouseEnter
1177− Mouseleave -> on e Element.mouseLeave
1178− Mousemove -> on e Element.mouseMove
1179− Mouseout -> on e Element.mouseOut
1180− Mouseover -> on e Element.mouseOver
1181− Mouseup -> on e Element.mouseUp
1182− Mousewheel -> on e Element.mouseWheel
1183− Scroll -> on e Element.scroll
1184− Select -> on e Element.select
1185− Submit -> on e Element.submit
1186− Wheel -> on e Element.wheel
1156+ Abort -> on e Events.abort
1157+ Blur -> on e Events.blur
1158+ Change -> on e Events.change
1159+ Click -> on e Events.click
1160+ Contextmenu -> on e Events.contextMenu
1161+ Dblclick -> on e Events.dblClick
1162+ Drag -> on e Events.drag
1163+ Dragend -> on e Events.dragEnd
1164+ Dragenter -> on e Events.dragEnter
1165+ Dragleave -> on e Events.dragLeave
1166+ Dragover -> on e Events.dragOver
1167+ Dragstart -> on e Events.dragStart
1168+ Drop -> on e Events.drop
1169+ Error -> on e Events.error
1170+ Focus -> on e Events.focus
1171+ Input -> on e Events.input
1172+ Invalid -> on e Events.invalid
1173+ Keydown -> on e Events.keyDown
1174+ Keypress -> on e Events.keyPress
1175+ Keyup -> on e Events.keyUp
1176+ Load -> on e Events.load
1177+ Mousedown -> on e Events.mouseDown
1178+ Mouseenter -> on e Events.mouseEnter
1179+ Mouseleave -> on e Events.mouseLeave
1180+ Mousemove -> on e Events.mouseMove
1181+ Mouseout -> on e Events.mouseOut
1182+ Mouseover -> on e Events.mouseOver
1183+ Mouseup -> on e Events.mouseUp
1184+ Mousewheel -> on e Events.mouseWheel
1185+ Scroll -> on e Events.scroll
1186+ Select -> on e Events.select
1187+ Submit -> on e Events.submit
1188+ Wheel -> on e Events.wheel
11871189 Beforecut -> on e Element.beforeCut
11881190 Cut -> on e Element.cut
11891191 Beforecopy -> on e Element.beforeCopy
11901192 Copy -> on e Element.copy
11911193 Beforepaste -> on e Element.beforePaste
11921194 Paste -> on e Element.paste
1193− Reset -> on e Element.reset
1194− Search -> on e Element.search
1195+ Reset -> on e Events.reset
1196+ Search -> on e Events.search
11951197 Selectstart -> on e Element.selectStart
1196− Touchstart -> on e Element.touchStart
1197− Touchmove -> on e Element.touchMove
1198− Touchend -> on e Element.touchEnd
1199− Touchcancel -> on e Element.touchCancel
1198+ Touchstart -> on e Events.touchStart
1199+ Touchmove -> on e Events.touchMove
1200+ Touchend -> on e Events.touchEnd
1201+ Touchcancel -> on e Events.touchCancel
12001202
12011203{-# INLINABLE windowOnEventName #-}
12021204windowOnEventName :: EventName en -> DOM.Window -> EventM DOM.Window (EventType en) () -> JSM (JSM ())
12031205windowOnEventName en e = case en of
1204− Abort -> on e Window.abort
1205− Blur -> on e Window.blurEvent
1206− Change -> on e Window.change
1207− Click -> on e Window.click
1208− Contextmenu -> on e Window.contextMenu
1209− Dblclick -> on e Window.dblClick
1210− Drag -> on e Window.drag
1211− Dragend -> on e Window.dragEnd
1212− Dragenter -> on e Window.dragEnter
1213− Dragleave -> on e Window.dragLeave
1214− Dragover -> on e Window.dragOver
1215− Dragstart -> on e Window.dragStart
1216− Drop -> on e Window.drop
1217− Error -> on e Window.error
1218− Focus -> on e Window.focusEvent
1219− Input -> on e Window.input
1220− Invalid -> on e Window.invalid
1221− Keydown -> on e Window.keyDown
1222− Keypress -> on e Window.keyPress
1223− Keyup -> on e Window.keyUp
1224− Load -> on e Window.load
1225− Mousedown -> on e Window.mouseDown
1226− Mouseenter -> on e Window.mouseEnter
1227− Mouseleave -> on e Window.mouseLeave
1228− Mousemove -> on e Window.mouseMove
1229− Mouseout -> on e Window.mouseOut
1230− Mouseover -> on e Window.mouseOver
1231− Mouseup -> on e Window.mouseUp
1232− Mousewheel -> on e Window.mouseWheel
1233− Scroll -> on e Window.scrollEvent
1234− Select -> on e Window.select
1235− Submit -> on e Window.submit
1236− Wheel -> on e Window.wheel
1206+ Abort -> on e Events.abort
1207+ Blur -> on e Events.blur
1208+ Change -> on e Events.change
1209+ Click -> on e Events.click
1210+ Contextmenu -> on e Events.contextMenu
1211+ Dblclick -> on e Events.dblClick
1212+ Drag -> on e Events.drag
1213+ Dragend -> on e Events.dragEnd
1214+ Dragenter -> on e Events.dragEnter
1215+ Dragleave -> on e Events.dragLeave
1216+ Dragover -> on e Events.dragOver
1217+ Dragstart -> on e Events.dragStart
1218+ Drop -> on e Events.drop
1219+ Error -> on e Events.error
1220+ Focus -> on e Events.focus
1221+ Input -> on e Events.input
1222+ Invalid -> on e Events.invalid
1223+ Keydown -> on e Events.keyDown
1224+ Keypress -> on e Events.keyPress
1225+ Keyup -> on e Events.keyUp
1226+ Load -> on e Events.load
1227+ Mousedown -> on e Events.mouseDown
1228+ Mouseenter -> on e Events.mouseEnter
1229+ Mouseleave -> on e Events.mouseLeave
1230+ Mousemove -> on e Events.mouseMove
1231+ Mouseout -> on e Events.mouseOut
1232+ Mouseover -> on e Events.mouseOver
1233+ Mouseup -> on e Events.mouseUp
1234+ Mousewheel -> on e Events.mouseWheel
1235+ Scroll -> on e Events.scroll
1236+ Select -> on e Events.select
1237+ Submit -> on e Events.submit
1238+ Wheel -> on e Events.wheel
12371239 Beforecut -> const $ return $ return () --TODO
12381240 Cut -> const $ return $ return () --TODO
12391241 Beforecopy -> const $ return $ return () --TODO
12401242 Copy -> const $ return $ return () --TODO
12411243 Beforepaste -> const $ return $ return () --TODO
12421244 Paste -> const $ return $ return () --TODO
1243− Reset -> on e Window.reset
1244− Search -> on e Window.search
1245+ Reset -> on e Events.reset
1246+ Search -> on e Events.search
12451247 Selectstart -> const $ return $ return () --TODO
1246− Touchstart -> on e Window.touchStart
1247− Touchmove -> on e Window.touchMove
1248− Touchend -> on e Window.touchEnd
1249− Touchcancel -> on e Window.touchCancel
1248+ Touchstart -> on e Events.touchStart
1249+ Touchmove -> on e Events.touchMove
1250+ Touchend -> on e Events.touchEnd
1251+ Touchcancel -> on e Events.touchCancel
12501252
12511253{-# INLINABLE wrapDomEvent #-}
12521254wrapDomEvent :: (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
12911293 return $! e
12921294
12931295{-# INLINABLE getKeyEvent #-}
1294−getKeyEvent :: EventM e KeyboardEvent Int
1296+getKeyEvent :: EventM e KeyboardEvent Word
12951297getKeyEvent = do
12961298 e <- event
1297− which <- getWhich e
1299+ which <- KeyboardEvent.getWhich e
12981300 if which /= 0 then return which else do
12991301 charCode <- getCharCode e
13001302 if charCode /= 0 then return charCode else
@@ -1309,29 +1311,26 @@ getMouseEventCoords = do
13091311{-# INLINABLE getTouchEvent #-}
13101312getTouchEvent :: EventM e TouchEvent TouchEventResult
13111313getTouchEvent = do
1312− let touchResults = \case
1313− Nothing -> return []
1314− Just ts -> do
1314+ let touchResults ts = do
13151315 n <- TouchList.getLength ts
1316− fmap catMaybes . forM (takeWhile (< n) [0..]) $ \ix -> do
1317− mt <- TouchList.item ts ix
1318− forM mt $ \t -> do
1319− identifier <- Touch.getIdentifier t
1320− screenX <- Touch.getScreenX t
1321− screenY <- Touch.getScreenY t
1322− clientX <- Touch.getClientX t
1323− clientY <- Touch.getClientY t
1324− pageX <- Touch.getPageX t
1325− pageY <- Touch.getPageY t
1326− return $ TouchResult
1327− { _touchResult_identifier = identifier
1328− , _touchResult_screenX = screenX
1329− , _touchResult_screenY = screenY
1330− , _touchResult_clientX = clientX
1331− , _touchResult_clientY = clientY
1332− , _touchResult_pageX = pageX
1333− , _touchResult_pageY = pageY
1334− }
1316+ forM (takeWhile (< n) [0..]) $ \ix -> do
1317+ t <- TouchList.item ts ix
1318+ identifier <- Touch.getIdentifier t
1319+ screenX <- Touch.getScreenX t
1320+ screenY <- Touch.getScreenY t
1321+ clientX <- Touch.getClientX t
1322+ clientY <- Touch.getClientY t
1323+ pageX <- Touch.getPageX t
1324+ pageY <- Touch.getPageY t
1325+ return TouchResult
1326+ { _touchResult_identifier = identifier
1327+ , _touchResult_screenX = screenX
1328+ , _touchResult_screenY = screenY
1329+ , _touchResult_clientX = clientX
1330+ , _touchResult_clientY = clientY
1331+ , _touchResult_pageX = pageX
1332+ , _touchResult_pageY = pageY
1333+ }
13351334 e <- event
13361335 altKey <- TouchEvent.getAltKey e
13371336 ctrlKey <- TouchEvent.getCtrlKey e