on develop help sign in
Create HasDocument class
commitefd8a965c07646574f32414c9cd88cc5bec51ca8 authorRyan Trinkle <ryan.trinkle@gmail.com> dateSun 7 May 2017, 20:23 (9 years ago) parente636a3a
3 files changed+26−4
reflex-dom-core/src/Reflex/Dom/Builder/Immediate.hs+22−4 reflex-dom-core/src/Reflex/Dom/Builder/InputDisabled.hs+3 reflex-dom-core/src/Reflex/Dom/Old.hs+1
reflex-dom-core/src/Reflex/Dom/Builder/Immediate.hs+22−4
@@ -2,6 +2,7 @@
22{-# LANGUAGE CPP #-}
33{-# LANGUAGE ConstraintKinds #-}
44{-# LANGUAGE DataKinds #-}
5+{-# LANGUAGE DefaultSignatures #-}
56{-# LANGUAGE EmptyDataDecls #-}
67{-# LANGUAGE FlexibleContexts #-}
78{-# LANGUAGE FlexibleInstances #-}
@@ -26,7 +27,6 @@ module Reflex.Dom.Builder.Immediate
2627 , ImmediateDomBuilderEnv (..)
2728 , ImmediateDomBuilderT (..)
2829 , runImmediateDomBuilderT
29− , askDocument
3030 , askParent
3131 , askEvents
3232 , append
@@ -49,6 +49,7 @@ module Reflex.Dom.Builder.Immediate
4949 , Pair1 (..)
5050 , Maybe1 (..)
5151 , GhcjsEventSpec (..)
52+ , HasDocument (..)
5253 , ghcjsEventSpec_filters
5354 , ghcjsEventSpec_handler
5455 , GhcjsEventHandler (..)
@@ -81,10 +82,13 @@ import Foreign.JavaScript.TH
8182import Reflex.Class as Reflex
8283import Reflex.Dom.Builder.Class
8384import Reflex.Dynamic
85+import Reflex.DynamicWriter (DynamicWriterT)
86+import Reflex.EventWriter (EventWriterT)
8487import Reflex.Host.Class
8588import qualified Reflex.Patch.DMap as PatchDMap
8689import qualified Reflex.Patch.DMapWithMove as PatchDMapWithMove
8790import Reflex.PerformEvent.Class
91+import Reflex.PostBuild.Base
8892import Reflex.PostBuild.Class
8993import Reflex.TriggerEvent.Base hiding (askEvents)
9094import qualified Reflex.TriggerEvent.Base as TriggerEventT (askEvents)
@@ -96,6 +100,8 @@ import Control.Monad.Exception
96100import Control.Monad.Primitive
97101import Control.Monad.Reader
98102import Control.Monad.Ref
103+import Control.Monad.State.Strict (StateT)
104+import qualified Control.Monad.State as Lazy (StateT)
99105#ifndef USE_TEMPLATE_HASKELL
100106import Data.Functor.Contravariant (phantom)
101107#endif
@@ -215,9 +221,21 @@ runImmediateDomBuilderT (ImmediateDomBuilderT a) env eventChan = flip runTrigger
215221 _ <- Window.requestAnimationFrame win cb
216222 return ()
217223
218−{-# INLINABLE askDocument #-}
219−askDocument :: Monad m => ImmediateDomBuilderT t m Document
220−askDocument = ImmediateDomBuilderT $ asks _immediateDomBuilderEnv_document
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
237+ {-# INLINABLE askDocument #-}
238+ askDocument = ImmediateDomBuilderT $ asks _immediateDomBuilderEnv_document
221239
222240{-# INLINABLE askParent #-}
223241askParent :: 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
1717import Foreign.JavaScript.TH
1818import Reflex
1919import Reflex.Dom.Builder.Class
20+import Reflex.Dom.Builder.Immediate (HasDocument (..))
2021import Reflex.Host.Class
2122
2223-- | A DomBuilder transformer that disables all 'inputElement's,
@@ -85,6 +86,8 @@ instance DomBuilder t m => DomBuilder t (InputDisabledT m) where
8586 }
8687 lift $ selectElement cfg' $ runInputDisabledT child
8788
89+instance HasDocument m => HasDocument (InputDisabledT m)
90+
8891instance HasJSContext m => HasJSContext (InputDisabledT m) where
8992 type JSContextPhantom (InputDisabledT m) = JSContextPhantom m
9093 askJSContext = lift askJSContext
reflex-dom-core/src/Reflex/Dom/Old.hs+1
@@ -122,6 +122,7 @@ type MonadWidgetConstraints t m =
122122 , TriggerEvent t m
123123 , HasJSContext m
124124 , HasJSContext (Performable m)
125+ , HasDocument m
125126 , MonadRef m
126127 , Ref m ~ Ref IO
127128 , MonadRef (Performable m)