on develop help sign in
Add HasDocument (StaticDomBuilder t m)
commit997b0327f01e42cb5f58d52f81efc518f3136a38 authorRyan Trinkle <ryan.trinkle@gmail.com> dateTue 17 Jul 2018, 22:43 (8 years ago) parentc47eb4f
3 files changed+31−14
reflex-dom-core/src/Reflex/Dom/Builder/Class.hs+26 reflex-dom-core/src/Reflex/Dom/Builder/Immediate.hs+1−14 reflex-dom-core/src/Reflex/Dom/Builder/Static.hs+4
reflex-dom-core/src/Reflex/Dom/Builder/Class.hs+26
@@ -46,6 +46,7 @@ import Reflex.Requester.Base
4646import qualified Control.Category
4747import Control.Lens hiding (element)
4848import Control.Monad.Reader
49+import qualified Control.Monad.State as Lazy
4950import Control.Monad.State.Strict
5051import Control.Monad.Trans.Control
5152import Data.Default
@@ -62,6 +63,7 @@ import GHCJS.DOM.Types (JSM)
6263
6364class Default (EventSpec d EventResult) => DomSpace d where
6465 type EventSpec d :: (EventTag -> *) -> *
66+ type RawDocument d :: *
6567 type RawTextNode d :: *
6668 type RawElement d :: *
6769 type RawFile d :: *
@@ -660,6 +662,11 @@ instance DomRenderHook t m => DomRenderHook t (StateT e m) where
660662 requestDomAction = lift . requestDomAction
661663 requestDomAction_ = lift . requestDomAction_
662664
665+instance DomRenderHook t m => DomRenderHook t (Lazy.StateT e m) where
666+ withRenderHook hook (Lazy.StateT a) = Lazy.StateT $ \s -> withRenderHook hook $ a s
667+ requestDomAction = lift . requestDomAction
668+ requestDomAction_ = lift . requestDomAction_
669+
663670deriving instance DomRenderHook t m => DomRenderHook t (EventWriterT t w m)
664671deriving instance DomRenderHook t m => DomRenderHook t (RequesterT t req rsp m)
665672deriving instance DomRenderHook t m => DomRenderHook t (PostBuildT t m)
@@ -668,3 +675,22 @@ deriving instance DomRenderHook t m => DomRenderHook t (QueryT t q m)
668675{-# DEPRECATED liftElementConfig "Use 'id' instead; this function is no longer necessary" #-}
669676liftElementConfig :: ElementConfig er t s -> ElementConfig er t s
670677liftElementConfig = id
678+
679+class Monad m => HasDocument m where
680+ askDocument :: m (RawDocument (DomBuilderSpace m))
681+ default askDocument
682+ :: ( m ~ f m'
683+ , RawDocument (DomBuilderSpace m) ~ RawDocument (DomBuilderSpace m')
684+ , MonadTrans f
685+ , Monad m'
686+ , HasDocument m'
687+ )
688+ => m (RawDocument (DomBuilderSpace m))
689+ askDocument = lift askDocument
690+
691+instance HasDocument m => HasDocument (ReaderT r m)
692+instance HasDocument m => HasDocument (EventWriterT t w m)
693+instance HasDocument m => HasDocument (DynamicWriterT t w m)
694+instance HasDocument m => HasDocument (PostBuildT t m)
695+instance HasDocument m => HasDocument (RequesterT t request response m)
696+instance HasDocument m => HasDocument (QueryT t q m)
reflex-dom-core/src/Reflex/Dom/Builder/Immediate.hs+1−14
@@ -234,20 +234,6 @@ runImmediateDomBuilderT (ImmediateDomBuilderT a) env eventChan =
234234 v <- synchronously x
235235 void . liftIO $ f v
236236
237−class Monad m => HasDocument m where
238− askDocument :: m Document
239− default askDocument :: (m ~ f m', MonadTrans f, Monad m', HasDocument m') => m Document
240− askDocument = lift askDocument
241−
242−instance HasDocument m => HasDocument (ReaderT r m)
243−instance HasDocument m => HasDocument (StateT s m)
244−instance HasDocument m => HasDocument (Lazy.StateT s m)
245−instance HasDocument m => HasDocument (EventWriterT t w m)
246−instance HasDocument m => HasDocument (DynamicWriterT t w m)
247−instance HasDocument m => HasDocument (PostBuildT t m)
248−instance HasDocument m => HasDocument (RequesterT t request response m)
249−instance HasDocument m => HasDocument (QueryT t q m)
250−
251237instance Monad m => HasDocument (ImmediateDomBuilderT t m) where
252238 {-# INLINABLE askDocument #-}
253239 askDocument = ImmediateDomBuilderT $ asks _immediateDomBuilderEnv_document
@@ -403,6 +389,7 @@ data GhcjsDomSpace
403389
404390instance DomSpace GhcjsDomSpace where
405391 type EventSpec GhcjsDomSpace = GhcjsEventSpec
392+ type RawDocument GhcjsDomSpace = DOM.Document
406393 type RawTextNode GhcjsDomSpace = DOM.Text
407394 type RawElement GhcjsDomSpace = DOM.Element
408395 type RawFile GhcjsDomSpace = DOM.File
reflex-dom-core/src/Reflex/Dom/Builder/Static.hs+4
@@ -138,6 +138,7 @@ instance Default (StaticEventSpec er)
138138
139139instance DomSpace StaticDomSpace where
140140 type EventSpec StaticDomSpace = StaticEventSpec
141+ type RawDocument StaticDomSpace = ()
141142 type RawTextNode StaticDomSpace = ()
142143 type RawElement StaticDomSpace = ()
143144 type RawFile StaticDomSpace = ()
@@ -146,6 +147,9 @@ instance DomSpace StaticDomSpace where
146147 type RawSelectElement StaticDomSpace = ()
147148 addEventSpecFlags _ _ _ _ = StaticEventSpec
148149
150+instance Monad m => HasDocument (StaticDomBuilderT t m) where
151+ askDocument = pure ()
152+
149153instance (Reflex t, Adjustable t m, MonadHold t m) => Adjustable t (StaticDomBuilderT t m) where
150154 runWithReplace a0 a' = do
151155 e <- StaticDomBuilderT ask