packages feed

reflex-dom 0.1.1 → 0.2

raw patch · 10 files changed

+348/−51 lines, 10 filesdep +bifunctorsdep +dependent-sum-templatedep +directorydep ~lensdep ~reflexdep ~thesePVP ok

version bump matches the API change (PVP)

Dependencies added: bifunctors, dependent-sum-template, directory, exception-transformers

Dependency ranges changed: lens, reflex, these

API changes (from Hackage documentation)

- Reflex.Dom.Internal: instance (Control.Monad.Ref.MonadRef m, Control.Monad.Ref.Ref m ~ Control.Monad.Ref.Ref GHC.Types.IO, Control.Monad.Ref.MonadRef h, Control.Monad.Ref.Ref h ~ Control.Monad.Ref.Ref GHC.Types.IO, Control.Monad.IO.Class.MonadIO m, Control.Monad.IO.Class.MonadIO h, GHC.Base.Functor m, Reflex.Host.Class.ReflexHost t, Reflex.Host.Class.MonadReflexCreateTrigger t m, Reflex.Class.MonadSample t m, Reflex.Class.MonadHold t m, Control.Monad.Fix.MonadFix m, Reflex.Dom.Class.HasWebView h, Reflex.Dom.Class.HasPostGui t h h) => Reflex.Dom.Class.MonadWidget t (Reflex.Dom.Internal.Widget t (Reflex.Dom.Internal.Gui t h m))
- Reflex.Dom.Widget.Basic: [_el_clicked] :: El t -> Event t ()
- Reflex.Dom.Widget.Basic: [_el_keypress] :: El t -> Event t Int
- Reflex.Dom.Widget.Basic: [_el_scrolled] :: El t -> Event t Int
+ Reflex.Dom.Internal: instance (Control.Monad.Ref.MonadRef m, Control.Monad.Ref.Ref m ~ Control.Monad.Ref.Ref GHC.Types.IO, Control.Monad.Ref.MonadRef h, Control.Monad.Ref.Ref h ~ Control.Monad.Ref.Ref GHC.Types.IO, Control.Monad.IO.Class.MonadIO m, Control.Monad.Exception.MonadAsyncException m, Control.Monad.IO.Class.MonadIO h, Control.Monad.Exception.MonadAsyncException h, GHC.Base.Functor m, Reflex.Host.Class.ReflexHost t, Reflex.Host.Class.MonadReflexCreateTrigger t m, Reflex.Class.MonadSample t m, Reflex.Class.MonadHold t m, Control.Monad.Fix.MonadFix m, Reflex.Dom.Class.HasWebView h, Reflex.Dom.Class.HasPostGui t h h) => Reflex.Dom.Class.MonadWidget t (Reflex.Dom.Internal.Widget t (Reflex.Dom.Internal.Gui t h m))
+ Reflex.Dom.Internal: instance Control.Monad.Exception.MonadAsyncException m => Control.Monad.Exception.MonadAsyncException (Reflex.Dom.Internal.Gui t h m)
+ Reflex.Dom.Internal: instance Control.Monad.Exception.MonadAsyncException m => Control.Monad.Exception.MonadAsyncException (Reflex.Dom.Internal.Widget t m)
+ Reflex.Dom.Internal: instance Control.Monad.Exception.MonadAsyncException m => Control.Monad.Exception.MonadAsyncException (Reflex.Dom.Internal.WithWebView m)
+ Reflex.Dom.Internal: instance Control.Monad.Exception.MonadException m => Control.Monad.Exception.MonadException (Reflex.Dom.Internal.Gui t h m)
+ Reflex.Dom.Internal: instance Control.Monad.Exception.MonadException m => Control.Monad.Exception.MonadException (Reflex.Dom.Internal.Widget t m)
+ Reflex.Dom.Internal: instance Control.Monad.Exception.MonadException m => Control.Monad.Exception.MonadException (Reflex.Dom.Internal.WithWebView m)
+ Reflex.Dom.Internal: instance Reflex.Host.Class.MonadSubscribeEvent t m => Reflex.Host.Class.MonadSubscribeEvent t (Reflex.Dom.Internal.WithWebView m)
+ Reflex.Dom.Time: instance GHC.Classes.Ord Reflex.Dom.Time.TickInfo
+ Reflex.Dom.Widget.Basic: Abort :: EventName AbortTag
+ Reflex.Dom.Widget.Basic: AbortTag :: EventTag
+ Reflex.Dom.Widget.Basic: Beforecopy :: EventName BeforecopyTag
+ Reflex.Dom.Widget.Basic: BeforecopyTag :: EventTag
+ Reflex.Dom.Widget.Basic: Beforecut :: EventName BeforecutTag
+ Reflex.Dom.Widget.Basic: BeforecutTag :: EventTag
+ Reflex.Dom.Widget.Basic: Beforepaste :: EventName BeforepasteTag
+ Reflex.Dom.Widget.Basic: BeforepasteTag :: EventTag
+ Reflex.Dom.Widget.Basic: Blur :: EventName BlurTag
+ Reflex.Dom.Widget.Basic: BlurTag :: EventTag
+ Reflex.Dom.Widget.Basic: Change :: EventName ChangeTag
+ Reflex.Dom.Widget.Basic: ChangeTag :: EventTag
+ Reflex.Dom.Widget.Basic: Click :: EventName ClickTag
+ Reflex.Dom.Widget.Basic: ClickTag :: EventTag
+ Reflex.Dom.Widget.Basic: Contextmenu :: EventName ContextmenuTag
+ Reflex.Dom.Widget.Basic: ContextmenuTag :: EventTag
+ Reflex.Dom.Widget.Basic: Copy :: EventName CopyTag
+ Reflex.Dom.Widget.Basic: CopyTag :: EventTag
+ Reflex.Dom.Widget.Basic: Cut :: EventName CutTag
+ Reflex.Dom.Widget.Basic: CutTag :: EventTag
+ Reflex.Dom.Widget.Basic: Dblclick :: EventName DblclickTag
+ Reflex.Dom.Widget.Basic: DblclickTag :: EventTag
+ Reflex.Dom.Widget.Basic: Drag :: EventName DragTag
+ Reflex.Dom.Widget.Basic: DragTag :: EventTag
+ Reflex.Dom.Widget.Basic: Dragend :: EventName DragendTag
+ Reflex.Dom.Widget.Basic: DragendTag :: EventTag
+ Reflex.Dom.Widget.Basic: Dragenter :: EventName DragenterTag
+ Reflex.Dom.Widget.Basic: DragenterTag :: EventTag
+ Reflex.Dom.Widget.Basic: Dragleave :: EventName DragleaveTag
+ Reflex.Dom.Widget.Basic: DragleaveTag :: EventTag
+ Reflex.Dom.Widget.Basic: Dragover :: EventName DragoverTag
+ Reflex.Dom.Widget.Basic: DragoverTag :: EventTag
+ Reflex.Dom.Widget.Basic: Dragstart :: EventName DragstartTag
+ Reflex.Dom.Widget.Basic: DragstartTag :: EventTag
+ Reflex.Dom.Widget.Basic: Drop :: EventName DropTag
+ Reflex.Dom.Widget.Basic: DropTag :: EventTag
+ Reflex.Dom.Widget.Basic: Error :: EventName ErrorTag
+ Reflex.Dom.Widget.Basic: ErrorTag :: EventTag
+ Reflex.Dom.Widget.Basic: EventResult :: EventResultType en -> EventResult en
+ Reflex.Dom.Widget.Basic: Focus :: EventName FocusTag
+ Reflex.Dom.Widget.Basic: FocusTag :: EventTag
+ Reflex.Dom.Widget.Basic: Input :: EventName InputTag
+ Reflex.Dom.Widget.Basic: InputTag :: EventTag
+ Reflex.Dom.Widget.Basic: Invalid :: EventName InvalidTag
+ Reflex.Dom.Widget.Basic: InvalidTag :: EventTag
+ Reflex.Dom.Widget.Basic: Keydown :: EventName KeydownTag
+ Reflex.Dom.Widget.Basic: KeydownTag :: EventTag
+ Reflex.Dom.Widget.Basic: Keypress :: EventName KeypressTag
+ Reflex.Dom.Widget.Basic: KeypressTag :: EventTag
+ Reflex.Dom.Widget.Basic: Keyup :: EventName KeyupTag
+ Reflex.Dom.Widget.Basic: KeyupTag :: EventTag
+ Reflex.Dom.Widget.Basic: Load :: EventName LoadTag
+ Reflex.Dom.Widget.Basic: LoadTag :: EventTag
+ Reflex.Dom.Widget.Basic: Mousedown :: EventName MousedownTag
+ Reflex.Dom.Widget.Basic: MousedownTag :: EventTag
+ Reflex.Dom.Widget.Basic: Mouseenter :: EventName MouseenterTag
+ Reflex.Dom.Widget.Basic: MouseenterTag :: EventTag
+ Reflex.Dom.Widget.Basic: Mouseleave :: EventName MouseleaveTag
+ Reflex.Dom.Widget.Basic: MouseleaveTag :: EventTag
+ Reflex.Dom.Widget.Basic: Mousemove :: EventName MousemoveTag
+ Reflex.Dom.Widget.Basic: MousemoveTag :: EventTag
+ Reflex.Dom.Widget.Basic: Mouseout :: EventName MouseoutTag
+ Reflex.Dom.Widget.Basic: MouseoutTag :: EventTag
+ Reflex.Dom.Widget.Basic: Mouseover :: EventName MouseoverTag
+ Reflex.Dom.Widget.Basic: MouseoverTag :: EventTag
+ Reflex.Dom.Widget.Basic: Mouseup :: EventName MouseupTag
+ Reflex.Dom.Widget.Basic: MouseupTag :: EventTag
+ Reflex.Dom.Widget.Basic: Paste :: EventName PasteTag
+ Reflex.Dom.Widget.Basic: PasteTag :: EventTag
+ Reflex.Dom.Widget.Basic: Reset :: EventName ResetTag
+ Reflex.Dom.Widget.Basic: ResetTag :: EventTag
+ Reflex.Dom.Widget.Basic: Scroll :: EventName ScrollTag
+ Reflex.Dom.Widget.Basic: ScrollTag :: EventTag
+ Reflex.Dom.Widget.Basic: Search :: EventName SearchTag
+ Reflex.Dom.Widget.Basic: SearchTag :: EventTag
+ Reflex.Dom.Widget.Basic: Select :: EventName SelectTag
+ Reflex.Dom.Widget.Basic: SelectTag :: EventTag
+ Reflex.Dom.Widget.Basic: Selectstart :: EventName SelectstartTag
+ Reflex.Dom.Widget.Basic: SelectstartTag :: EventTag
+ Reflex.Dom.Widget.Basic: Submit :: EventName SubmitTag
+ Reflex.Dom.Widget.Basic: SubmitTag :: EventTag
+ Reflex.Dom.Widget.Basic: Touchcancel :: EventName TouchcancelTag
+ Reflex.Dom.Widget.Basic: TouchcancelTag :: EventTag
+ Reflex.Dom.Widget.Basic: Touchend :: EventName TouchendTag
+ Reflex.Dom.Widget.Basic: TouchendTag :: EventTag
+ Reflex.Dom.Widget.Basic: Touchmove :: EventName TouchmoveTag
+ Reflex.Dom.Widget.Basic: TouchmoveTag :: EventTag
+ Reflex.Dom.Widget.Basic: Touchstart :: EventName TouchstartTag
+ Reflex.Dom.Widget.Basic: TouchstartTag :: EventTag
+ Reflex.Dom.Widget.Basic: [_el_events] :: El t -> EventSelector t (WrapArg EventResult EventName)
+ Reflex.Dom.Widget.Basic: [unEventResult] :: EventResult en -> EventResultType en
+ Reflex.Dom.Widget.Basic: _el_clicked :: Reflex t => El t -> Event t ()
+ Reflex.Dom.Widget.Basic: _el_keypress :: Reflex t => El t -> Event t Int
+ Reflex.Dom.Widget.Basic: _el_scrolled :: Reflex t => El t -> Event t Int
+ Reflex.Dom.Widget.Basic: class HasDomEvent t a
+ Reflex.Dom.Widget.Basic: data EventName :: EventTag -> *
+ Reflex.Dom.Widget.Basic: data EventTag
+ Reflex.Dom.Widget.Basic: defaultDomEventHandler :: IsElement e => e -> EventName en -> EventM (EventType en) e (Maybe (EventResult en))
+ Reflex.Dom.Widget.Basic: domEvent :: HasDomEvent t a => EventName en -> a -> Event t (EventResultType en)
+ Reflex.Dom.Widget.Basic: getMouseEventCoords :: EventM MouseEvent e (Int, Int)
+ Reflex.Dom.Widget.Basic: instance Data.GADT.Compare.GCompare Reflex.Dom.Widget.Basic.EventName
+ Reflex.Dom.Widget.Basic: instance Data.GADT.Compare.GEq Reflex.Dom.Widget.Basic.EventName
+ Reflex.Dom.Widget.Basic: instance Reflex.Class.Reflex t => Reflex.Dom.Widget.Basic.HasDomEvent t (Reflex.Dom.Widget.Basic.El t)
+ Reflex.Dom.Widget.Basic: newtype EventResult en
+ Reflex.Dom.Widget.Basic: onEventName :: IsElement e => EventName en -> e -> EventM (EventType en) e () -> IO (IO ())
+ Reflex.Dom.Widget.Basic: wrapDomEventsMaybe :: (Functor (Event t), IsElement e, MonadIO m, MonadSample t m, MonadReflexCreateTrigger t m, Reflex t, HasPostGui t h m) => e -> (forall en. EventName en -> EventM (EventType en) e (Maybe (f en))) -> m (EventSelector t (WrapArg f EventName))
+ Reflex.Dom.Widget.Input: [_checkbox_change] :: Checkbox t -> Event t Bool
+ Reflex.Dom.Widget.Input: [_dropdown_change] :: Dropdown t k -> Event t k
+ Reflex.Dom.Widget.Input: [_textArea_input] :: TextArea t -> Event t String
+ Reflex.Dom.Widget.Input: [_textInput_input] :: TextInput t -> Event t String
+ Reflex.Dom.Widget.Input: checkbox_change :: Lens' (Checkbox t_a1xQt) (Event t_a1xQt Bool)
+ Reflex.Dom.Widget.Input: dropdown_change :: Lens' (Dropdown t_a1xQr k_a1xQs) (Event t_a1xQr k_a1xQs)
+ Reflex.Dom.Widget.Input: textArea_input :: Lens' (TextArea t_a1xQv) (Event t_a1xQv String)
+ Reflex.Dom.Widget.Input: textInput_input :: Lens' (TextInput t_a1xQy) (Event t_a1xQy String)
+ Reflex.Dom.Xhr: instance GHC.Classes.Eq Reflex.Dom.Xhr.XhrRequest
+ Reflex.Dom.Xhr: instance GHC.Classes.Eq Reflex.Dom.Xhr.XhrRequestConfig
+ Reflex.Dom.Xhr: instance GHC.Classes.Eq Reflex.Dom.Xhr.XhrResponse
+ Reflex.Dom.Xhr: instance GHC.Classes.Ord Reflex.Dom.Xhr.XhrRequest
+ Reflex.Dom.Xhr: instance GHC.Classes.Ord Reflex.Dom.Xhr.XhrRequestConfig
+ Reflex.Dom.Xhr: instance GHC.Classes.Ord Reflex.Dom.Xhr.XhrResponse
+ Reflex.Dom.Xhr: instance GHC.Read.Read Reflex.Dom.Xhr.XhrRequest
+ Reflex.Dom.Xhr: instance GHC.Read.Read Reflex.Dom.Xhr.XhrRequestConfig
+ Reflex.Dom.Xhr: instance GHC.Read.Read Reflex.Dom.Xhr.XhrResponse
+ Reflex.Dom.Xhr: instance GHC.Show.Show Reflex.Dom.Xhr.XhrRequest
+ Reflex.Dom.Xhr: instance GHC.Show.Show Reflex.Dom.Xhr.XhrRequestConfig
+ Reflex.Dom.Xhr: instance GHC.Show.Show Reflex.Dom.Xhr.XhrResponse
- Reflex.Dom.Class: class (Reflex t, MonadHold t m, MonadIO m, Functor m, MonadReflexCreateTrigger t m, HasDocument m, HasWebView m, HasWebView (WidgetHost m), HasWebView (GuiAction m), MonadIO (WidgetHost m), MonadIO (GuiAction m), Functor (WidgetHost m), MonadSample t (WidgetHost m), HasPostGui t (GuiAction m) (WidgetHost m), HasPostGui t (GuiAction m) m, HasPostGui t (GuiAction m) (GuiAction m), MonadRef m, MonadRef (WidgetHost m), Ref m ~ Ref IO, Ref (WidgetHost m) ~ Ref IO, MonadFix m) => MonadWidget t m | m -> t where type family WidgetHost m :: * -> * type family GuiAction m :: * -> *
+ Reflex.Dom.Class: class (Reflex t, MonadHold t m, MonadIO m, MonadAsyncException m, Functor m, MonadReflexCreateTrigger t m, HasDocument m, HasWebView m, HasWebView (WidgetHost m), HasWebView (GuiAction m), MonadIO (WidgetHost m), MonadAsyncException (WidgetHost m), MonadIO (GuiAction m), MonadAsyncException (GuiAction m), Functor (WidgetHost m), MonadSample t (WidgetHost m), HasPostGui t (GuiAction m) (WidgetHost m), HasPostGui t (GuiAction m) m, HasPostGui t (GuiAction m) (GuiAction m), MonadRef m, MonadRef (WidgetHost m), Ref m ~ Ref IO, Ref (WidgetHost m) ~ Ref IO, MonadFix m) => MonadWidget t m | m -> t where type family WidgetHost m :: * -> * type family GuiAction m :: * -> *
- Reflex.Dom.Internal: guiEnvDocument :: Lens' (GuiEnv t_azcx h_azcy) HTMLDocument
+ Reflex.Dom.Internal: guiEnvDocument :: Lens' (GuiEnv t_aAaN h_aAaO) HTMLDocument
- Reflex.Dom.Internal: guiEnvPostGui :: Lens' (GuiEnv t_azcx h_azcy) (h_azcy () -> IO ())
+ Reflex.Dom.Internal: guiEnvPostGui :: Lens' (GuiEnv t_aAaN h_aAaO) (h_aAaO () -> IO ())
- Reflex.Dom.Internal: guiEnvRunWithActions :: Lens (GuiEnv t_azcx h_azcy) (GuiEnv t_aA9F h_azcy) ([DSum (EventTrigger t_azcx)] -> h_azcy ()) ([DSum (EventTrigger t_aA9F)] -> h_azcy ())
+ Reflex.Dom.Internal: guiEnvRunWithActions :: Lens (GuiEnv t_aAaN h_aAaO) (GuiEnv t_aBh3 h_aAaO) ([DSum (EventTrigger t_aAaN)] -> h_aAaO ()) ([DSum (EventTrigger t_aBh3)] -> h_aAaO ())
- Reflex.Dom.Internal: guiEnvWebView :: Lens' (GuiEnv t_azcx h_azcy) WebView
+ Reflex.Dom.Internal: guiEnvWebView :: Lens' (GuiEnv t_aAaN h_aAaO) WebView
- Reflex.Dom.Internal: widgetStatePostBuild :: Lens' (WidgetState t_azcr m_azcs) (m_azcs ())
+ Reflex.Dom.Internal: widgetStatePostBuild :: Lens' (WidgetState t_aAaH m_aAaI) (m_aAaI ())
- Reflex.Dom.Internal: widgetStateVoidActions :: Lens (WidgetState t_azcr m_azcs) (WidgetState t_aA9w m_azcs) [Event t_azcr (m_azcs ())] [Event t_aA9w (m_azcs ())]
+ Reflex.Dom.Internal: widgetStateVoidActions :: Lens (WidgetState t_aAaH m_aAaI) (WidgetState t_aBgU m_aAaI) [Event t_aAaH (m_aAaI ())] [Event t_aBgU (m_aAaI ())]
- Reflex.Dom.Widget.Basic: El :: HTMLElement -> Event t () -> Event t Int -> Event t Int -> El t
+ Reflex.Dom.Widget.Basic: El :: HTMLElement -> EventSelector t (WrapArg EventResult EventName) -> El t
- Reflex.Dom.Widget.Input: Checkbox :: Dynamic t Bool -> Checkbox t
+ Reflex.Dom.Widget.Input: Checkbox :: Dynamic t Bool -> Event t Bool -> Checkbox t
- Reflex.Dom.Widget.Input: Dropdown :: Dynamic t k -> Dropdown t k
+ Reflex.Dom.Widget.Input: Dropdown :: Dynamic t k -> Event t k -> Dropdown t k
- Reflex.Dom.Widget.Input: TextArea :: Dynamic t String -> HTMLTextAreaElement -> Dynamic t Bool -> Event t Int -> TextArea t
+ Reflex.Dom.Widget.Input: TextArea :: Dynamic t String -> Event t String -> HTMLTextAreaElement -> Dynamic t Bool -> Event t Int -> TextArea t
- Reflex.Dom.Widget.Input: TextInput :: Dynamic t String -> Event t Int -> Event t Int -> Event t Int -> Dynamic t Bool -> HTMLInputElement -> TextInput t
+ Reflex.Dom.Widget.Input: TextInput :: Dynamic t String -> Event t String -> Event t Int -> Event t Int -> Event t Int -> Dynamic t Bool -> HTMLInputElement -> TextInput t
- Reflex.Dom.Widget.Input: checkboxConfig_attributes :: Lens' (CheckboxConfig t_a1bOn) (Dynamic t_a1bOn (Map String String))
+ Reflex.Dom.Widget.Input: checkboxConfig_attributes :: Lens' (CheckboxConfig t_a1xQu) (Dynamic t_a1xQu (Map String String))
- Reflex.Dom.Widget.Input: checkboxConfig_setValue :: Lens' (CheckboxConfig t_a1bOn) (Event t_a1bOn Bool)
+ Reflex.Dom.Widget.Input: checkboxConfig_setValue :: Lens' (CheckboxConfig t_a1xQu) (Event t_a1xQu Bool)
- Reflex.Dom.Widget.Input: checkbox_value :: Iso (Checkbox t_a1bOm) (Checkbox t_a1cL0) (Dynamic t_a1bOm Bool) (Dynamic t_a1cL0 Bool)
+ Reflex.Dom.Widget.Input: checkbox_value :: Lens' (Checkbox t_a1xQt) (Dynamic t_a1xQt Bool)
- Reflex.Dom.Widget.Input: dropdownConfig_attributes :: Lens' (DropdownConfig t_a1bOi k_a1bOj) (Dynamic t_a1bOi (Map String String))
+ Reflex.Dom.Widget.Input: dropdownConfig_attributes :: Lens' (DropdownConfig t_a1xQp k_a1xQq) (Dynamic t_a1xQp (Map String String))
- Reflex.Dom.Widget.Input: dropdownConfig_setValue :: Lens (DropdownConfig t_a1bOi k_a1bOj) (DropdownConfig t_a1bOi k_a1cKG) (Event t_a1bOi k_a1bOj) (Event t_a1bOi k_a1cKG)
+ Reflex.Dom.Widget.Input: dropdownConfig_setValue :: Lens (DropdownConfig t_a1xQp k_a1xQq) (DropdownConfig t_a1xQp k_a1yFm) (Event t_a1xQp k_a1xQq) (Event t_a1xQp k_a1yFm)
- Reflex.Dom.Widget.Input: dropdown_value :: Iso (Dropdown t_a1bOk k_a1bOl) (Dropdown t_a1cKP k_a1cKQ) (Dynamic t_a1bOk k_a1bOl) (Dynamic t_a1cKP k_a1cKQ)
+ Reflex.Dom.Widget.Input: dropdown_value :: Lens' (Dropdown t_a1xQr k_a1xQs) (Dynamic t_a1xQr k_a1xQs)
- Reflex.Dom.Widget.Input: textAreaConfig_attributes :: Lens' (TextAreaConfig t_a1bOp) (Dynamic t_a1bOp (Map String String))
+ Reflex.Dom.Widget.Input: textAreaConfig_attributes :: Lens' (TextAreaConfig t_a1xQw) (Dynamic t_a1xQw (Map String String))
- Reflex.Dom.Widget.Input: textAreaConfig_initialValue :: Lens' (TextAreaConfig t_a1bOp) String
+ Reflex.Dom.Widget.Input: textAreaConfig_initialValue :: Lens' (TextAreaConfig t_a1xQw) String
- Reflex.Dom.Widget.Input: textAreaConfig_setValue :: Lens' (TextAreaConfig t_a1bOp) (Event t_a1bOp String)
+ Reflex.Dom.Widget.Input: textAreaConfig_setValue :: Lens' (TextAreaConfig t_a1xQw) (Event t_a1xQw String)
- Reflex.Dom.Widget.Input: textArea_element :: Lens' (TextArea t_a1bOo) HTMLTextAreaElement
+ Reflex.Dom.Widget.Input: textArea_element :: Lens' (TextArea t_a1xQv) HTMLTextAreaElement
- Reflex.Dom.Widget.Input: textArea_hasFocus :: Lens' (TextArea t_a1bOo) (Dynamic t_a1bOo Bool)
+ Reflex.Dom.Widget.Input: textArea_hasFocus :: Lens' (TextArea t_a1xQv) (Dynamic t_a1xQv Bool)
- Reflex.Dom.Widget.Input: textArea_keypress :: Lens' (TextArea t_a1bOo) (Event t_a1bOo Int)
+ Reflex.Dom.Widget.Input: textArea_keypress :: Lens' (TextArea t_a1xQv) (Event t_a1xQv Int)
- Reflex.Dom.Widget.Input: textArea_value :: Lens' (TextArea t_a1bOo) (Dynamic t_a1bOo String)
+ Reflex.Dom.Widget.Input: textArea_value :: Lens' (TextArea t_a1xQv) (Dynamic t_a1xQv String)
- Reflex.Dom.Widget.Input: textInputConfig_attributes :: Lens' (TextInputConfig t_a1bOq) (Dynamic t_a1bOq (Map String String))
+ Reflex.Dom.Widget.Input: textInputConfig_attributes :: Lens' (TextInputConfig t_a1xQx) (Dynamic t_a1xQx (Map String String))
- Reflex.Dom.Widget.Input: textInputConfig_initialValue :: Lens' (TextInputConfig t_a1bOq) String
+ Reflex.Dom.Widget.Input: textInputConfig_initialValue :: Lens' (TextInputConfig t_a1xQx) String
- Reflex.Dom.Widget.Input: textInputConfig_inputType :: Lens' (TextInputConfig t_a1bOq) String
+ Reflex.Dom.Widget.Input: textInputConfig_inputType :: Lens' (TextInputConfig t_a1xQx) String
- Reflex.Dom.Widget.Input: textInputConfig_setValue :: Lens' (TextInputConfig t_a1bOq) (Event t_a1bOq String)
+ Reflex.Dom.Widget.Input: textInputConfig_setValue :: Lens' (TextInputConfig t_a1xQx) (Event t_a1xQx String)
- Reflex.Dom.Widget.Input: textInput_element :: Lens' (TextInput t_a1bOr) HTMLInputElement
+ Reflex.Dom.Widget.Input: textInput_element :: Lens' (TextInput t_a1xQy) HTMLInputElement
- Reflex.Dom.Widget.Input: textInput_hasFocus :: Lens' (TextInput t_a1bOr) (Dynamic t_a1bOr Bool)
+ Reflex.Dom.Widget.Input: textInput_hasFocus :: Lens' (TextInput t_a1xQy) (Dynamic t_a1xQy Bool)
- Reflex.Dom.Widget.Input: textInput_keydown :: Lens' (TextInput t_a1bOr) (Event t_a1bOr Int)
+ Reflex.Dom.Widget.Input: textInput_keydown :: Lens' (TextInput t_a1xQy) (Event t_a1xQy Int)
- Reflex.Dom.Widget.Input: textInput_keypress :: Lens' (TextInput t_a1bOr) (Event t_a1bOr Int)
+ Reflex.Dom.Widget.Input: textInput_keypress :: Lens' (TextInput t_a1xQy) (Event t_a1xQy Int)
- Reflex.Dom.Widget.Input: textInput_keyup :: Lens' (TextInput t_a1bOr) (Event t_a1bOr Int)
+ Reflex.Dom.Widget.Input: textInput_keyup :: Lens' (TextInput t_a1xQy) (Event t_a1xQy Int)
- Reflex.Dom.Widget.Input: textInput_value :: Lens' (TextInput t_a1bOr) (Dynamic t_a1bOr String)
+ Reflex.Dom.Widget.Input: textInput_value :: Lens' (TextInput t_a1xQy) (Dynamic t_a1xQy String)

Files

reflex-dom.cabal view
@@ -1,15 +1,16 @@ Name: reflex-dom-Version: 0.1.1-Synopsis: Glitch-free Functional Reactive Web Apps+Version: 0.2+Synopsis: Functional Reactive Web Apps with Reflex Description: Reflex-DOM is a Functional Reactive web framework based on the Reflex FRP engine License: BSD3 License-file: LICENSE Author: Ryan Trinkle Maintainer: ryan.trinkle@gmail.com Stability: Experimental-Category: FRP+Category: FRP, Web, GUI, HTML, Javascript, Reactive, Reactivity, User Interfaces, User-interface Build-type: Simple Cabal-version: >=1.9.2+-- Deal with https://github.com/haskell/cabal/issues/2544 / https://github.com/haskell/cabal/issues/367 extra-source-files: src-ghc/Reflex/Dom/Internal/Foreign.hs                     src-ghc/Reflex/Dom/Xhr/Foreign.hs                     src-ghcjs/Reflex/Dom/Internal/Foreign.hs@@ -19,7 +20,7 @@   hs-source-dirs: src   build-depends:     base >= 4.7 && < 4.9,-    reflex == 0.2.*,+    reflex == 0.3.*,     dependent-sum == 0.2.*,     dependent-map == 0.1.*,     semigroups == 0.16.*,@@ -35,7 +36,11 @@     bytestring == 0.10.*,     data-default == 0.5.*,     aeson == 0.8.*,-    time == 1.5.*+    time == 1.5.*,+    exception-transformers == 0.4.*,+    directory == 1.2.*,+    dependent-sum-template >= 0.0.0.4 && < 0.1,+    bifunctors == 4.2.*    if impl(ghcjs)     hs-source-dirs: src-ghcjs@@ -49,7 +54,6 @@       gtk3 == 0.13.*,       webkitgtk3 == 0.13.*,       webkitgtk3-javascriptcore == 0.13.*-  -- Deal with https://github.com/haskell/cabal/issues/2544 / https://github.com/haskell/cabal/issues/367    exposed-modules:     Reflex.Dom@@ -66,5 +70,8 @@     Reflex.Dom.Xhr.Foreign    other-extensions: TemplateHaskell-  ghc-prof-options: -fprof-auto   ghc-options: -Wall -fwarn-tabs -funbox-strict-fields -O2++source-repository head+  type: git+  location: https://github.com/ryantrinkle/reflex
src-ghc/Reflex/Dom/Internal/Foreign.hs view
@@ -1,3 +1,4 @@+{-# LANGUAGE ForeignFunctionInterface #-} module Reflex.Dom.Internal.Foreign where  import GHCJS.DOM hiding (runWebGUI)@@ -10,7 +11,10 @@ import Graphics.UI.Gtk.WebKit.Types hiding (Event, Widget, unWidget) import Graphics.UI.Gtk.WebKit.WebSettings import Graphics.UI.Gtk.WebKit.WebFrame+import Graphics.UI.Gtk.WebKit.WebInspector import Data.List+import Data.String+import System.Directory  makeDefaultWebView :: String -> (WebView -> IO ()) -> IO () makeDefaultWebView userAgentKey main = do@@ -25,6 +29,7 @@   userAgent <- settings `get` webSettingsUserAgent   settings `set` [ webSettingsUserAgent := userAgent ++ " " ++ userAgentKey                  , webSettingsEnableUniversalAccessFromFileUris := True+                 , webSettingsEnableDeveloperExtras := True                  ]   webViewSetWebSettings webView settings   window `containerAdd` scrollWin@@ -32,10 +37,20 @@   _ <- on window objectDestroy . liftIO $ mainQuit   widgetShowAll window   _ <- webView `on` loadFinished $ \_ -> do-    main webView+    main webView --TODO: Should probably only do this once+  inspector <- webViewGetInspector webView+  _ <- inspector `on` inspectWebView $ \wv -> do+    inspectorWindow <- windowNew+    windowSetDefaultSize inspectorWindow 900 600+    inspectorScrollWin <- scrolledWindowNew Nothing Nothing+    inspectorWebView <- webViewNew+    inspectorWindow `containerAdd` inspectorScrollWin+    inspectorScrollWin `containerAdd` inspectorWebView+    widgetShowAll inspectorWindow+    return inspectorWebView   wf <- webViewGetMainFrame webView-  webFrameLoadString wf "" Nothing "file:///"-  main webView+  pwd <- getCurrentDirectory+  webFrameLoadString wf "" Nothing $ "file://" ++ pwd ++ "/"   mainGUI  runWebGUI :: (WebView -> IO ()) -> IO ()@@ -53,4 +68,3 @@       unless ((" " ++ userAgentKey) `isSuffixOf` agent) $ main (castToWebView window)     Nothing -> do       makeDefaultWebView userAgentKey main-
src-ghc/Reflex/Dom/Xhr/Foreign.hs view
@@ -12,13 +12,11 @@ import Graphics.UI.Gtk.WebKit.JavaScriptCore.JSValueRef import Graphics.UI.Gtk.WebKit.JavaScriptCore.WebFrame -data XMLHttpRequest = XMLHttpRequest JSValueRef JSContextRef deriving (Eq, Ord)--xhrContext :: XMLHttpRequest -> JSContextRef-xhrContext (XMLHttpRequest _ c) = c--xhrValue :: XMLHttpRequest -> JSValueRef-xhrValue (XMLHttpRequest v _) = v+data XMLHttpRequest+   = XMLHttpRequest { xhrValue :: JSValueRef+                    , xhrContext :: JSContextRef+                    }+   deriving (Eq, Ord)  toJSObject :: JSContextRef -> [Ptr OpaqueJSValue] -> IO JSObjectRef toJSObject ctx args = do@@ -28,18 +26,17 @@     jsobjectsetproperty ctx o prop a 1 nullPtr   return o -toResponseType :: a -> a-toResponseType = id- responseTextToText :: Maybe String -> Maybe Text responseTextToText = fmap T.pack  stringToJSValue :: JSContextRef -> String -> IO JSValueRef stringToJSValue ctx s = jsvaluemakestring ctx =<< jsstringcreatewithutf8cstring s +toResponseType :: a -> a+toResponseType = id+ xmlHttpRequestNew :: WebView -> IO XMLHttpRequest xmlHttpRequestNew wv = do-  --wv <- readIORef globalWebViewRef   wf <- webViewGetMainFrame wv   jsContext <- webFrameGetGlobalContext wf   xhrScript <- jsstringcreatewithutf8cstring "new XMLHttpRequest()"
src/Reflex/Dom/Class.hs view
@@ -16,6 +16,7 @@ import Data.Dependent.Sum (DSum (..)) import GHCJS.DOM.Types hiding (Event) import GHCJS.DOM (WebView)+import Control.Monad.Exception  -- | Alias for Data.Map.singleton (=:) :: k -> a -> Map k a@@ -27,9 +28,9 @@ keycodeEscape :: Int keycodeEscape = 27 -class ( Reflex t, MonadHold t m, MonadIO m, Functor m, MonadReflexCreateTrigger t m+class ( Reflex t, MonadHold t m, MonadIO m, MonadAsyncException m, Functor m, MonadReflexCreateTrigger t m       , HasDocument m, HasWebView m, HasWebView (WidgetHost m), HasWebView (GuiAction m)-      , MonadIO (WidgetHost m), MonadIO (GuiAction m), Functor (WidgetHost m), MonadSample t (WidgetHost m)+      , MonadIO (WidgetHost m), MonadAsyncException (WidgetHost m), MonadIO (GuiAction m), MonadAsyncException (GuiAction m), Functor (WidgetHost m), MonadSample t (WidgetHost m)       , HasPostGui t (GuiAction m) (WidgetHost m), HasPostGui t (GuiAction m) m, HasPostGui t (GuiAction m) (GuiAction m)       , MonadRef m, MonadRef (WidgetHost m)       , Ref m ~ Ref IO, Ref (WidgetHost m) ~ Ref IO --TODO: Eliminate this reliance on IO
src/Reflex/Dom/Internal.hs view
@@ -19,6 +19,7 @@ import Control.Monad.Reader hiding (mapM, mapM_, forM, forM_, sequence, sequence_) import Control.Monad.Ref import Control.Monad.State.Strict hiding (mapM, mapM_, forM, forM_, sequence, sequence_, get)+import Control.Monad.Exception import Control.Concurrent import Control.Applicative import Data.ByteString (ByteString)@@ -37,7 +38,7 @@             }  --TODO: Poorly named-newtype Gui t h m a = Gui { unGui :: ReaderT (GuiEnv t h) m a } deriving (Functor, Applicative, Monad, MonadIO, MonadFix)+newtype Gui t h m a = Gui { unGui :: ReaderT (GuiEnv t h) m a } deriving (Functor, Applicative, Monad, MonadIO, MonadFix, MonadException, MonadAsyncException)  runGui :: Gui t h m a -> GuiEnv t h -> m a runGui (Gui g) env = runReaderT g env@@ -61,7 +62,8 @@   hold a0 e = lift $ hold a0 e  instance (Reflex t, MonadReflexCreateTrigger t m) => MonadReflexCreateTrigger t (Gui t h m) where-  newEventWithTrigger initializer = lift $ newEventWithTrigger initializer+  newEventWithTrigger = lift . newEventWithTrigger+  newFanEventWithTrigger f = lift $ newFanEventWithTrigger f  data WidgetEnv    = WidgetEnv { _widgetEnvParent :: !Node@@ -108,7 +110,7 @@ instance MonadTrans (Widget t) where   lift = Widget . lift . lift -newtype Widget t m a = Widget { unWidget :: WidgetInternal t m a } deriving (Functor, Applicative, Monad, MonadFix, MonadIO)+newtype Widget t m a = Widget { unWidget :: WidgetInternal t m a } deriving (Functor, Applicative, Monad, MonadFix, MonadIO, MonadException, MonadAsyncException)  instance MonadSample t m => MonadSample t (Widget t m) where   sample b = lift $ sample b@@ -131,9 +133,10 @@  instance MonadReflexCreateTrigger t m => MonadReflexCreateTrigger t (Widget t m) where   newEventWithTrigger = lift . newEventWithTrigger+  newFanEventWithTrigger f = lift $ newFanEventWithTrigger f  instance ( MonadRef m, Ref m ~ Ref IO, MonadRef h, Ref h ~ Ref IO --TODO: Shouldn't need to be IO-         , MonadIO m, MonadIO h, Functor m+         , MonadIO m, MonadAsyncException m, MonadIO h, MonadAsyncException h, Functor m          , ReflexHost t, MonadReflexCreateTrigger t m, MonadSample t m, MonadHold t m          , MonadFix m, HasWebView h, HasPostGui t h h          ) => MonadWidget t (Widget t (Gui t h m)) where@@ -195,7 +198,7 @@   Just body <- documentGetBody doc   attachWidget body webView w -newtype WithWebView m a = WithWebView { unWithWebView :: ReaderT WebView m a } deriving (Functor, Applicative, Monad, MonadIO, MonadFix)+newtype WithWebView m a = WithWebView { unWithWebView :: ReaderT WebView m a } deriving (Functor, Applicative, Monad, MonadIO, MonadFix, MonadException, MonadAsyncException)  instance (Monad m) => HasWebView (WithWebView m) where   askWebView = WithWebView ask@@ -225,11 +228,16 @@ instance MonadAtomicRef m => MonadAtomicRef (WithWebView m) where   atomicModifyRef r = lift . atomicModifyRef r -deriving instance MonadReflexCreateTrigger t m => MonadReflexCreateTrigger t (WithWebView m)+instance MonadReflexCreateTrigger t m => MonadReflexCreateTrigger t (WithWebView m) where+  newEventWithTrigger = lift . newEventWithTrigger+  newFanEventWithTrigger f = lift $ newFanEventWithTrigger f++instance MonadSubscribeEvent t m => MonadSubscribeEvent t (WithWebView m) where+  subscribeEvent = lift . subscribeEvent+ instance MonadReflexHost t m => MonadReflexHost t (WithWebView m) where+  type ReadPhase (WithWebView m) = ReadPhase m   fireEventsAndRead dm a = lift $ fireEventsAndRead dm a-  subscribeEvent = lift . subscribeEvent-  runFrame = lift . runFrame   runHostFrame = lift . runHostFrame  runWithWebView :: WithWebView m a -> WebView -> m a
src/Reflex/Dom/Time.hs view
@@ -8,6 +8,7 @@ import Control.Monad.IO.Class import Data.Fixed import Data.Time.Clock+import Data.Typeable  data TickInfo   = TickInfo { _tickInfo_lastUTC :: UTCTime@@ -17,7 +18,7 @@              , _tickInfo_alreadyElapsed :: NominalDiffTime              -- ^ Amount of time already elapsed in the current tick period.              }-  deriving (Eq)+  deriving (Eq, Ord, Typeable)  -- | Special case of tickLossyFrom that uses the post-build event to start the --   tick thread.
src/Reflex/Dom/Widget/Basic.hs view
@@ -1,4 +1,4 @@-{-# LANGUAGE ScopedTypeVariables, LambdaCase, ConstraintKinds, TypeFamilies, FlexibleContexts, MultiParamTypeClasses, FlexibleInstances, RecursiveDo #-}+{-# LANGUAGE ScopedTypeVariables, LambdaCase, ConstraintKinds, TypeFamilies, FlexibleContexts, MultiParamTypeClasses, FlexibleInstances, RecursiveDo, GADTs, DataKinds, RankNTypes, TemplateHaskell #-}  module Reflex.Dom.Widget.Basic where @@ -30,16 +30,16 @@ import Control.Lens hiding (element, children) import Data.These import Data.Align- import Data.Maybe+import Data.GADT.Compare.TH+import Data.Bitraversable+import GHCJS.DOM.MouseEvent  type AttributeMap = Map String String  data El t   = El { _el_element :: HTMLElement-       , _el_clicked :: Event t ()-       , _el_keypress :: Event t Int-       , _el_scrolled :: Event t Int+       , _el_events :: EventSelector t (WrapArg EventResult EventName)        }  class Attributes m a where@@ -382,6 +382,226 @@           {-# SCC "e" #-} unsubscribe   return $! {-# SCC "f" #-} e +data EventTag+   = AbortTag+   | BlurTag+   | ChangeTag+   | ClickTag+   | ContextmenuTag+   | DblclickTag+   | DragTag+   | DragendTag+   | DragenterTag+   | DragleaveTag+   | DragoverTag+   | DragstartTag+   | DropTag+   | ErrorTag+   | FocusTag+   | InputTag+   | InvalidTag+   | KeydownTag+   | KeypressTag+   | KeyupTag+   | LoadTag+   | MousedownTag+   | MouseenterTag+   | MouseleaveTag+   | MousemoveTag+   | MouseoutTag+   | MouseoverTag+   | MouseupTag+--   | MousewheelTag -- webkitgtk only provides elementOnmousewheel (not elementOnwheel), but firefox does not support the mousewheel event; we should provide wheel (the equivalent, standard event), but we will need to make sure webkitgtk supports it first+   | ScrollTag+   | SelectTag+   | SubmitTag+--   | WheelTag -- See MousewheelTag+   | BeforecutTag+   | CutTag+   | BeforecopyTag+   | CopyTag+   | BeforepasteTag+   | PasteTag+   | ResetTag+   | SearchTag+   | SelectstartTag+   | TouchstartTag+   | TouchmoveTag+   | TouchendTag+   | TouchcancelTag++data EventName :: EventTag -> * where+  Abort :: EventName 'AbortTag+  Blur :: EventName 'BlurTag+  Change :: EventName 'ChangeTag+  Click :: EventName 'ClickTag+  Contextmenu :: EventName 'ContextmenuTag+  Dblclick :: EventName 'DblclickTag+  Drag :: EventName 'DragTag+  Dragend :: EventName 'DragendTag+  Dragenter :: EventName 'DragenterTag+  Dragleave :: EventName 'DragleaveTag+  Dragover :: EventName 'DragoverTag+  Dragstart :: EventName 'DragstartTag+  Drop :: EventName 'DropTag+  Error :: EventName 'ErrorTag+  Focus :: EventName 'FocusTag+  Input :: EventName 'InputTag+  Invalid :: EventName 'InvalidTag+  Keydown :: EventName 'KeydownTag+  Keypress :: EventName 'KeypressTag+  Keyup :: EventName 'KeyupTag+  Load :: EventName 'LoadTag+  Mousedown :: EventName 'MousedownTag+  Mouseenter :: EventName 'MouseenterTag+  Mouseleave :: EventName 'MouseleaveTag+  Mousemove :: EventName 'MousemoveTag+  Mouseout :: EventName 'MouseoutTag+  Mouseover :: EventName 'MouseoverTag+  Mouseup :: EventName 'MouseupTag+  --Mousewheel :: EventName 'MousewheelTag+  Scroll :: EventName 'ScrollTag+  Select :: EventName 'SelectTag+  Submit :: EventName 'SubmitTag+  --Wheel :: EventName 'WheelTag+  Beforecut :: EventName 'BeforecutTag+  Cut :: EventName 'CutTag+  Beforecopy :: EventName 'BeforecopyTag+  Copy :: EventName 'CopyTag+  Beforepaste :: EventName 'BeforepasteTag+  Paste :: EventName 'PasteTag+  Reset :: EventName 'ResetTag+  Search :: EventName 'SearchTag+  Selectstart :: EventName 'SelectstartTag+  Touchstart :: EventName 'TouchstartTag+  Touchmove :: EventName 'TouchmoveTag+  Touchend :: EventName 'TouchendTag+  Touchcancel :: EventName 'TouchcancelTag++type family EventType en where+  EventType 'AbortTag = UIEvent+  EventType 'BlurTag = UIEvent+  EventType 'ChangeTag = UIEvent+  EventType 'ClickTag = MouseEvent+  EventType 'ContextmenuTag = MouseEvent+  EventType 'DblclickTag = MouseEvent+  EventType 'DragTag = MouseEvent+  EventType 'DragendTag = MouseEvent+  EventType 'DragenterTag = MouseEvent+  EventType 'DragleaveTag = MouseEvent+  EventType 'DragoverTag = MouseEvent+  EventType 'DragstartTag = MouseEvent+  EventType 'DropTag = MouseEvent+  EventType 'ErrorTag = UIEvent+  EventType 'FocusTag = UIEvent+  EventType 'InputTag = UIEvent+  EventType 'InvalidTag = UIEvent+  EventType 'KeydownTag = UIEvent+  EventType 'KeypressTag = UIEvent+  EventType 'KeyupTag = UIEvent+  EventType 'LoadTag = UIEvent+  EventType 'MousedownTag = MouseEvent+  EventType 'MouseenterTag = UIEvent+  EventType 'MouseleaveTag = UIEvent+  EventType 'MousemoveTag = MouseEvent+  EventType 'MouseoutTag = MouseEvent+  EventType 'MouseoverTag = MouseEvent+  EventType 'MouseupTag = MouseEvent+  --EventType 'MousewheelTag = MouseEvent+  EventType 'ScrollTag = UIEvent+  EventType 'SelectTag = UIEvent+  EventType 'SubmitTag = UIEvent+  --EventType 'WheelTag = UIEvent+  EventType 'BeforecutTag = UIEvent+  EventType 'CutTag = UIEvent+  EventType 'BeforecopyTag = UIEvent+  EventType 'CopyTag = UIEvent+  EventType 'BeforepasteTag = UIEvent+  EventType 'PasteTag = UIEvent+  EventType 'ResetTag = UIEvent+  EventType 'SearchTag = UIEvent+  EventType 'SelectstartTag = UIEvent+  EventType 'TouchstartTag = UIEvent+  EventType 'TouchmoveTag = UIEvent+  EventType 'TouchendTag = UIEvent+  EventType 'TouchcancelTag = UIEvent++onEventName :: IsElement e => EventName en -> e -> EventM (EventType en) e () -> IO (IO ())+onEventName en = case en of+  Abort -> elementOnabort+  Blur -> elementOnblur+  Change -> elementOnchange+  Click -> elementOnclick+  Contextmenu -> elementOncontextmenu+  Dblclick -> elementOndblclick+  Drag -> elementOndrag+  Dragend -> elementOndragend+  Dragenter -> elementOndragenter+  Dragleave -> elementOndragleave+  Dragover -> elementOndragover+  Dragstart -> elementOndragstart+  Drop -> elementOndrop+  Error -> elementOnerror+  Focus -> elementOnfocus+  Input -> elementOninput+  Invalid -> elementOninvalid+  Keydown -> elementOnkeydown+  Keypress -> elementOnkeypress+  Keyup -> elementOnkeyup+  Load -> elementOnload+  Mousedown -> elementOnmousedown+  Mouseenter -> elementOnmouseenter+  Mouseleave -> elementOnmouseleave+  Mousemove -> elementOnmousemove+  Mouseout -> elementOnmouseout+  Mouseover -> elementOnmouseover+  Mouseup -> elementOnmouseup+  --Mousewheel -> elementOnmousewheel+  Scroll -> elementOnscroll+  Select -> elementOnselect+  Submit -> elementOnsubmit+  --Wheel -> elementOnwheel+  Beforecut -> elementOnbeforecut+  Cut -> elementOncut+  Beforecopy -> elementOnbeforecopy+  Copy -> elementOncopy+  Beforepaste -> elementOnbeforepaste+  Paste -> elementOnpaste+  Reset -> elementOnreset+  Search -> elementOnsearch+  Selectstart -> elementOnselectstart+  Touchstart -> elementOntouchstart+  Touchmove -> elementOntouchmove+  Touchend -> elementOntouchend+  Touchcancel -> elementOntouchcancel++newtype EventResult en = EventResult { unEventResult :: EventResultType en }++type family EventResultType (en :: EventTag) :: * where+  EventResultType 'ClickTag = ()+  EventResultType 'DblclickTag = ()+  EventResultType 'KeypressTag = Int+  EventResultType 'ScrollTag = Int+  EventResultType 'MousemoveTag = (Int, Int)+  EventResultType 'MousedownTag = (Int, Int)+  EventResultType 'MouseupTag = (Int, Int)+  EventResultType 'MouseenterTag = ()+  EventResultType 'MouseleaveTag = ()+  EventResultType 'FocusTag = ()+  EventResultType 'BlurTag = ()++wrapDomEventsMaybe :: (Functor (Event t), IsElement e, MonadIO m, MonadSample t m, MonadReflexCreateTrigger t m, Reflex t, HasPostGui t h m) => e -> (forall en. EventName en -> EventM (EventType en) e (Maybe (f en))) -> m (EventSelector t (WrapArg f EventName))+wrapDomEventsMaybe element handlers = do+  postGui <- askPostGui+  runWithActions <- askRunWithActions+  e <- newFanEventWithTrigger $ \(WrapArg en) et -> do+        unsubscribe <- liftIO $ (onEventName en) element $ do+          mv <- handlers en+          forM_ mv $ \v -> liftIO $ postGui $ runWithActions [et :=> v]+        return $ liftIO $ do+          unsubscribe+  return $! e+ getKeyEvent :: EventM UIEvent e Int getKeyEvent = do   e <- event@@ -392,12 +612,29 @@       if charCode /= 0 then return charCode else         uiEventGetKeyCode e -wrapElement :: (Functor (Event t), MonadIO m, MonadSample t m, MonadReflexCreateTrigger t m, Reflex t, HasPostGui t h m) => HTMLElement -> m (El t)+getMouseEventCoords :: EventM MouseEvent e (Int, Int)+getMouseEventCoords = do+  e <- event+  liftIO $ bisequence (mouseEventGetX e, mouseEventGetY e)++defaultDomEventHandler :: IsElement e => e -> EventName en -> EventM (EventType en) e (Maybe (EventResult en))+defaultDomEventHandler e evt = liftM (Just . EventResult) $ case evt of+  Click -> return ()+  Dblclick -> return ()+  Keypress -> getKeyEvent+  Scroll -> liftIO $ elementGetScrollTop e+  Mousemove -> getMouseEventCoords+  Mouseup -> getMouseEventCoords+  Mousedown -> getMouseEventCoords+  Mouseenter -> return ()+  Mouseleave -> return ()+  Focus -> return ()+  Blur -> return ()++wrapElement :: forall t h m. (Functor (Event t), MonadIO m, MonadSample t m, MonadReflexCreateTrigger t m, Reflex t, HasPostGui t h m) => HTMLElement -> m (El t) wrapElement e = do-  clicked <- wrapDomEvent e elementOnclick (return ())-  keypress <- wrapDomEvent e elementOnkeypress getKeyEvent-  scrolled <- wrapDomEvent e elementOnscroll $ liftIO $ elementGetScrollTop e-  return $ El e clicked keypress scrolled+  es <- wrapDomEventsMaybe e $ defaultDomEventHandler e+  return $ El e es  elDynAttr' :: forall t m a. MonadWidget t m => String -> Dynamic t (Map String String) -> m a -> m (El t, a) elDynAttr' elementTag attrs child = do@@ -479,10 +716,16 @@   = Link { _link_clicked :: Event t ()          } +class HasDomEvent t a where+  domEvent :: EventName en -> a -> Event t (EventResultType en)++instance Reflex t => HasDomEvent t (El t) where+  domEvent en el = fmap unEventResult $ select (_el_events el) (WrapArg en)+ linkClass :: MonadWidget t m => String -> String -> m (Link t) linkClass s c = do   (l,_) <- elAttr' "a" ("class" =: c) $ text s-  return $ Link $ _el_clicked l+  return $ Link $ domEvent Click l  link :: MonadWidget t m => String -> m (Link t) link s = linkClass s ""@@ -490,7 +733,7 @@ button :: MonadWidget t m => String -> m (Event t ()) button s = do   (e, _) <- el' "button" $ text s-  return $ _el_clicked e+  return $ domEvent Click e  newtype Workflow t m a = Workflow { unWorkflow :: m (a, Event t (Workflow t m a)) } @@ -556,3 +799,21 @@   p <- askParent   _ <- liftIO $ nodeAppendChild p $ Just e   wrapElement e++deriveGEq ''EventName+deriveGCompare ''EventName++--------------------------------------------------------------------------------+-- Deprecated functions++{-# DEPRECATED _el_clicked "Use `domEvent Click` instead" #-}+_el_clicked :: Reflex t => El t -> Event t ()+_el_clicked = domEvent Click++{-# DEPRECATED _el_keypress "Use `domEvent Keypress` instead" #-}+_el_keypress :: Reflex t => El t -> Event t Int+_el_keypress = domEvent Keypress++{-# DEPRECATED _el_scrolled "Use `domEvent Scroll` instead" #-}+_el_scrolled :: Reflex t => El t -> Event t Int+_el_scrolled = domEvent Scroll
src/Reflex/Dom/Widget/Input.hs view
@@ -26,6 +26,7 @@  data TextInput t    = TextInput { _textInput_value :: Dynamic t String+               , _textInput_input :: Event t String                , _textInput_keypress :: Event t Int                , _textInput_keydown :: Event t Int                , _textInput_keyup :: Event t Int@@ -66,7 +67,7 @@   eKeydown <- wrapDomEvent e elementOnkeydown getKeyEvent   eKeyup <- wrapDomEvent e elementOnkeyup getKeyEvent   dValue <- holdDyn initial $ leftmost [eSetValue, eChange]-  return $ TextInput dValue eKeypress eKeydown eKeyup dFocus e+  return $ TextInput dValue eChange eKeypress eKeydown eKeyup dFocus e  textInputGetEnter :: Reflex t => TextInput t -> Event t () textInputGetEnter i = fmapMaybe (\n -> if n == keycodeEnter then Just () else Nothing) $ _textInput_keypress i@@ -85,6 +86,7 @@  data TextArea t    = TextArea { _textArea_value :: Dynamic t String+              , _textArea_input :: Event t String               , _textArea_element :: HTMLTextAreaElement               , _textArea_hasFocus :: Dynamic t Bool               , _textArea_keypress :: Event t Int@@ -107,7 +109,7 @@   ev <- wrapDomEvent e elementOninput $ liftIO $ htmlTextAreaElementGetValue e   v <- holdDyn initial $ leftmost [eSet, ev]   eKeypress <- wrapDomEvent e elementOnkeypress getKeyEvent-  return $ TextArea v e f eKeypress+  return $ TextArea v ev e f eKeypress  data CheckboxConfig t     = CheckboxConfig { _checkboxConfig_setValue :: Event t Bool@@ -121,6 +123,7 @@  data Checkbox t    = Checkbox { _checkbox_value :: Dynamic t Bool+              , _checkbox_change :: Event t Bool               }  --TODO: Make attributes possibly dynamic@@ -133,7 +136,7 @@   eClick <- wrapDomEvent e elementOnclick $ liftIO $ htmlInputElementGetChecked e   performEvent_ $ fmap (\v -> liftIO $ htmlInputElementSetChecked e $! v) $ _checkboxConfig_setValue config   dValue <- holdDyn checked $ leftmost [_checkboxConfig_setValue config, eClick]-  return $ Checkbox dValue+  return $ Checkbox dValue eClick  checkboxView :: MonadWidget t m => Dynamic t (Map String String) -> Dynamic t Bool -> m (Event t Bool) checkboxView dAttrs dValue = do@@ -149,6 +152,7 @@  data Dropdown t k     = Dropdown { _dropdown_value :: Dynamic t k+               , _dropdown_change :: Event t k                }  data DropdownConfig t k@@ -181,7 +185,7 @@         guard $ Map.member k opts         return k   dValue <- combineDyn readKey options =<< holdDyn (Just k0) (leftmost [eChange, fmap Just setK])-  return $ Dropdown dValue+  return $ Dropdown dValue (attachDynWith readKey options eChange)  liftM concat $ mapM makeLenses   [ ''TextAreaConfig
src/Reflex/Dom/Widget/Lazy.hs view
@@ -33,9 +33,9 @@         currentTop <- mapDyn (listWrapperStyle . fst) window         (_, lis) <- elDynAttr "div" totalHeightStyle $ tagWrapper listTag listAttrs currentTop $ listWithKey itemsInWindow $ \k v -> do             (li,_) <- tagWrapper rowTag rowAttrs (constDyn $ toHeightStyle rowPx) $ itemBuilder k v-            return $ fmap (const k) (_el_clicked li)+            return $ fmap (const k) (domEvent Click li)         return lis-      scrollPosition <- holdDyn 0 $ _el_scrolled container+      scrollPosition <- holdDyn 0 $ domEvent Scroll container       window <- mapDyn (findWindow heightPx rowPx) scrollPosition       itemsInWindow <- combineDyn (\(_,(idx,num)) is -> Map.fromList $ take num $ drop idx $ Map.toList is) window items   postBuild <- getPostBuild
src/Reflex/Dom/Xhr.hs view
@@ -31,12 +31,14 @@ import Reflex import Reflex.Dom.Class import Reflex.Dom.Xhr.Foreign+import Data.Typeable  data XhrRequest    = XhrRequest { _xhrRequest_method :: String                 , _xhrRequest_url :: String                 , _xhrRequest_config :: XhrRequestConfig                 }+   deriving (Show, Read, Eq, Ord, Typeable)  data XhrRequestConfig    = XhrRequestConfig { _xhrRequestConfig_headers :: Map String String@@ -45,10 +47,12 @@                       , _xhrRequestConfig_responseType :: Maybe String                       , _xhrRequestConfig_sendData :: Maybe String                       }+   deriving (Show, Read, Eq, Ord, Typeable)  data XhrResponse    = XhrResponse { _xhrResponse_body :: Maybe Text                  }+   deriving (Show, Read, Eq, Ord, Typeable)  instance Default XhrRequestConfig where   def = XhrRequestConfig { _xhrRequestConfig_headers = Map.empty