on develop help sign in
Create HasDocument class
efd8a96Ryan Trinkle
reflex-dom-core/src/Reflex/Dom/Builder/Immediate.hs+22−4
@@ -2,6 +2,7 @@
2{-# LANGUAGE CPP #-}
2{-# LANGUAGE CPP #-}
3{-# LANGUAGE ConstraintKinds #-}
3{-# LANGUAGE ConstraintKinds #-}
4{-# LANGUAGE DataKinds #-}
4{-# LANGUAGE DataKinds #-}
5+{-# LANGUAGE DefaultSignatures #-}
5{-# LANGUAGE EmptyDataDecls #-}
6{-# LANGUAGE EmptyDataDecls #-}
6{-# LANGUAGE FlexibleContexts #-}
7{-# LANGUAGE FlexibleContexts #-}
7{-# LANGUAGE FlexibleInstances #-}
8{-# LANGUAGE FlexibleInstances #-}
@@ -26,7 +27,6 @@ module Reflex.Dom.Builder.Immediate
26 , ImmediateDomBuilderEnv (..)
27 , ImmediateDomBuilderEnv (..)
27 , ImmediateDomBuilderT (..)
28 , ImmediateDomBuilderT (..)
28 , runImmediateDomBuilderT
29 , runImmediateDomBuilderT
29− , askDocument
30 , askParent
30 , askParent
31 , askEvents
31 , askEvents
32 , append
32 , append
@@ -49,6 +49,7 @@ module Reflex.Dom.Builder.Immediate
49 , Pair1 (..)
49 , Pair1 (..)
50 , Maybe1 (..)
50 , Maybe1 (..)
51 , GhcjsEventSpec (..)
51 , GhcjsEventSpec (..)
52+ , HasDocument (..)
52 , ghcjsEventSpec_filters
53 , ghcjsEventSpec_filters
53 , ghcjsEventSpec_handler
54 , ghcjsEventSpec_handler
54 , GhcjsEventHandler (..)
55 , GhcjsEventHandler (..)
@@ -81,10 +82,13 @@ import Foreign.JavaScript.TH
81import Reflex.Class as Reflex
82import Reflex.Class as Reflex
82import Reflex.Dom.Builder.Class
83import Reflex.Dom.Builder.Class
83import Reflex.Dynamic
84import Reflex.Dynamic
85+import Reflex.DynamicWriter (DynamicWriterT)
86+import Reflex.EventWriter (EventWriterT)
84import Reflex.Host.Class
87import Reflex.Host.Class
85import qualified Reflex.Patch.DMap as PatchDMap
88import qualified Reflex.Patch.DMap as PatchDMap
86import qualified Reflex.Patch.DMapWithMove as PatchDMapWithMove
89import qualified Reflex.Patch.DMapWithMove as PatchDMapWithMove
87import Reflex.PerformEvent.Class
90import Reflex.PerformEvent.Class
91+import Reflex.PostBuild.Base
88import Reflex.PostBuild.Class
92import Reflex.PostBuild.Class
89import Reflex.TriggerEvent.Base hiding (askEvents)
93import Reflex.TriggerEvent.Base hiding (askEvents)
90import qualified Reflex.TriggerEvent.Base as TriggerEventT (askEvents)
94import qualified Reflex.TriggerEvent.Base as TriggerEventT (askEvents)
@@ -96,6 +100,8 @@ import Control.Monad.Exception
96import Control.Monad.Primitive
100import Control.Monad.Primitive
97import Control.Monad.Reader
101import Control.Monad.Reader
98import Control.Monad.Ref
102import Control.Monad.Ref
103+import Control.Monad.State.Strict (StateT)
104+import qualified Control.Monad.State as Lazy (StateT)
99#ifndef USE_TEMPLATE_HASKELL
105#ifndef USE_TEMPLATE_HASKELL
100import Data.Functor.Contravariant (phantom)
106import Data.Functor.Contravariant (phantom)
101#endif
107#endif
@@ -215,9 +221,21 @@ runImmediateDomBuilderT (ImmediateDomBuilderT a) env eventChan = flip runTrigger
215 _ <- Window.requestAnimationFrame win cb
221 _ <- Window.requestAnimationFrame win cb
216 return ()
222 return ()
217
223
224+class Monad m => HasDocument m where
225+ askDocument :: m Document
226+ default askDocument :: (m ~ f m', MonadTrans f, Monad m', HasDocument m') => f m' Document
227+ askDocument = lift askDocument
228+
229+instance HasDocument m => HasDocument (ReaderT r m)
230+instance HasDocument m => HasDocument (StateT s m)
231+instance HasDocument m => HasDocument (Lazy.StateT s m)
232+instance HasDocument m => HasDocument (EventWriterT t w m)
233+instance HasDocument m => HasDocument (DynamicWriterT t w m)
234+instance HasDocument m => HasDocument (PostBuildT t m)
235+
236+instance Monad m => HasDocument (ImmediateDomBuilderT t m) where
218−{-# INLINABLE askDocument #-}
237+ {-# INLINABLE askDocument #-}
219−askDocument :: Monad m => ImmediateDomBuilderT t m Document
220−askDocument = ImmediateDomBuilderT $ asks _immediateDomBuilderEnv_document
238+ askDocument = ImmediateDomBuilderT $ asks _immediateDomBuilderEnv_document
221
239
222{-# INLINABLE askParent #-}
240{-# INLINABLE askParent #-}
223askParent :: Monad m => ImmediateDomBuilderT t m Node
241askParent :: Monad m => ImmediateDomBuilderT t m Node
reflex-dom-core/src/Reflex/Dom/Builder/InputDisabled.hs+3
@@ -17,6 +17,7 @@ import qualified Data.Map as Map
17import Foreign.JavaScript.TH
17import Foreign.JavaScript.TH
18import Reflex
18import Reflex
19import Reflex.Dom.Builder.Class
19import Reflex.Dom.Builder.Class
20+import Reflex.Dom.Builder.Immediate (HasDocument (..))
20import Reflex.Host.Class
21import Reflex.Host.Class
21
22
22-- | A DomBuilder transformer that disables all 'inputElement's,
23-- | A DomBuilder transformer that disables all 'inputElement's,
@@ -85,6 +86,8 @@ instance DomBuilder t m => DomBuilder t (InputDisabledT m) where
85 }
86 }
86 lift $ selectElement cfg' $ runInputDisabledT child
87 lift $ selectElement cfg' $ runInputDisabledT child
87
88
89+instance HasDocument m => HasDocument (InputDisabledT m)
90+
88instance HasJSContext m => HasJSContext (InputDisabledT m) where
91instance HasJSContext m => HasJSContext (InputDisabledT m) where
89 type JSContextPhantom (InputDisabledT m) = JSContextPhantom m
92 type JSContextPhantom (InputDisabledT m) = JSContextPhantom m
90 askJSContext = lift askJSContext
93 askJSContext = lift askJSContext
reflex-dom-core/src/Reflex/Dom/Old.hs+1
@@ -122,6 +122,7 @@ type MonadWidgetConstraints t m =
122 , TriggerEvent t m
122 , TriggerEvent t m
123 , HasJSContext m
123 , HasJSContext m
124 , HasJSContext (Performable m)
124 , HasJSContext (Performable m)
125+ , HasDocument m
125 , MonadRef m
126 , MonadRef m
126 , Ref m ~ Ref IO
127 , Ref m ~ Ref IO
127 , MonadRef (Performable m)
128 , MonadRef (Performable m)