on develop help sign in
Get key codes more reliably cross-browser
commit2d354702cf73ade02adf1ab9f41dae74c7d937bd authorRyan Trinkle <ryan.trinkle@gmail.com> dateTue 14 Apr 2015, 05:27 (12 years ago) parent3060c06
2 files changed+15−5
src/Reflex/Dom/Widget/Basic.hs+11−1 src/Reflex/Dom/Widget/Input.hs+4−4
src/Reflex/Dom/Widget/Basic.hs+11−1
@@ -378,10 +378,20 @@ wrapDomEventMaybe element elementOnevent getValue = do
378378 {-# SCC "e" #-} unsubscribe
379379 return $! {-# SCC "f" #-} e
380380
381+getKeyEvent :: EventM UIEvent e Int
382+getKeyEvent = do
383+ e <- event
384+ liftIO $ do
385+ which <- uiEventGetWhich e
386+ if which /= 0 then return which else do
387+ charCode <- uiEventGetCharCode e
388+ if charCode /= 0 then return charCode else
389+ uiEventGetKeyCode e
390+
381391wrapElement :: (Functor (Event t), MonadIO m, MonadSample t m, MonadReflexCreateTrigger t m, Reflex t, HasPostGui t h m) => HTMLElement -> m (El t)
382392wrapElement e = do
383393 clicked <- wrapDomEvent e elementOnclick (return ())
384− keypress <- wrapDomEvent e elementOnkeypress $ liftIO . uiEventGetKeyCode =<< event
394+ keypress <- wrapDomEvent e elementOnkeypress getKeyEvent
385395 scrolled <- wrapDomEvent e elementOnscroll $ liftIO $ elementGetScrollTop e
386396 return $ El e clicked keypress scrolled
387397
src/Reflex/Dom/Widget/Input.hs+4−4
@@ -62,9 +62,9 @@ textInput (TextInputConfig inputType initial eSetValue dAttrs) = do
6262 postGui $ runWithActions [eChangeFocusTrigger :=> True]
6363 return $ liftIO $ unsubscribeOnblur >> unsubscribeOnfocus
6464 dFocus <- holdDyn False eChangeFocus
65− eKeypress <- wrapDomEvent e elementOnkeypress $ liftIO . uiEventGetKeyCode =<< event
66− eKeydown <- wrapDomEvent e elementOnkeydown $ liftIO . uiEventGetKeyCode =<< event
67− eKeyup <- wrapDomEvent e elementOnkeyup $ liftIO . uiEventGetKeyCode =<< event
65+ eKeypress <- wrapDomEvent e elementOnkeypress getKeyEvent
66+ eKeydown <- wrapDomEvent e elementOnkeydown getKeyEvent
67+ eKeyup <- wrapDomEvent e elementOnkeyup getKeyEvent
6868 dValue <- holdDyn initial $ leftmost [eSetValue, eChange]
6969 return $ TextInput dValue eKeypress eKeydown eKeyup dFocus e
7070
@@ -106,7 +106,7 @@ textArea (TextAreaConfig initial eSet attrs) = do
106106 f <- holdDyn False eChangeFocus
107107 ev <- wrapDomEvent e elementOninput $ liftIO $ htmlTextAreaElementGetValue e
108108 v <- holdDyn "" $ leftmost [eSet, ev]
109− eKeypress <- wrapDomEvent e elementOnkeypress $ liftIO . uiEventGetKeyCode =<< event
109+ eKeypress <- wrapDomEvent e elementOnkeypress getKeyEvent
110110 return $ TextArea v e f eKeypress
111111
112112data CheckboxConfig t