on develop help sign in
Add instances for reflex Query
commit74473362444d85f3a21f7024fe6a704edac550d8 authorHamish Mackenzie <Hamish.K.Mackenzie@googlemail.com> dateSun 28 May 2017, 00:13 (9 years ago) parentf001bb2
4 files changed+43−15
reflex-dom-core/src/Foreign/JavaScript/Orphans.hs+7−15 reflex-dom-core/src/Foreign/JavaScript/TH.hs+9 reflex-dom-core/src/Reflex/Dom/Builder/Class.hs+24 reflex-dom-core/src/Reflex/Dom/Builder/Immediate.hs+3
reflex-dom-core/src/Foreign/JavaScript/Orphans.hs+7−15
@@ -14,23 +14,15 @@ import Reflex.PerformEvent.Base (PerformEventT (..))
1414import Reflex.PostBuild.Base (PostBuildT)
1515import Reflex.Requester.Base (RequesterT)
1616import Reflex.TriggerEvent.Base
17+import Reflex.Query.Base (QueryT)
1718
18−instance (MonadJSM m, ReflexHost t) => MonadJSM (PostBuildT t m) where
19− liftJSM' = lift . liftJSM'
20−
19+instance (MonadJSM m, ReflexHost t) => MonadJSM (PostBuildT t m)
2120instance (MonadJSM (HostFrame t), ReflexHost t) => MonadJSM (PerformEventT t m) where
2221 liftJSM' = PerformEventT . lift . liftJSM'
23−
24−instance MonadJSM m => MonadJSM (DynamicWriterT t w m) where
25− liftJSM' = lift . liftJSM'
26−
27−instance MonadJSM m => MonadJSM (EventWriterT t w m) where
28− liftJSM' = lift . liftJSM'
29−
30−instance MonadJSM m => MonadJSM (RequesterT t request response m) where
31− liftJSM' = lift . liftJSM'
32−
33−instance MonadJSM m => MonadJSM (TriggerEventT t m) where
34− liftJSM' = lift . liftJSM'
22+instance MonadJSM m => MonadJSM (DynamicWriterT t w m)
23+instance MonadJSM m => MonadJSM (EventWriterT t w m)
24+instance MonadJSM m => MonadJSM (RequesterT t request response m)
25+instance MonadJSM m => MonadJSM (TriggerEventT t m)
26+instance MonadJSM m => MonadJSM (QueryT t q m)
3527
3628#endif
reflex-dom-core/src/Foreign/JavaScript/TH.hs+9
@@ -35,6 +35,7 @@ import Reflex.PerformEvent.Base
3535import Reflex.PerformEvent.Class
3636import Reflex.PostBuild.Base
3737import Reflex.Requester.Base
38+import Reflex.Query.Base (QueryT(..))
3839
3940#ifdef USE_TEMPLATE_HASKELL
4041import Language.Haskell.TH
@@ -125,6 +126,10 @@ instance HasJSContext m => HasJSContext (RequesterT t request response m) where
125126 type JSContextPhantom (RequesterT t request response m) = JSContextPhantom m
126127 askJSContext = lift askJSContext
127128
129+instance HasJSContext m => HasJSContext (QueryT t q m) where
130+ type JSContextPhantom (QueryT t q m) = JSContextPhantom m
131+ askJSContext = QueryT askJSContext
132+
128133newtype WithJSContextSingleton x m a = WithJSContextSingleton { unWithJSContextSingleton :: ReaderT (JSContextSingleton x) m a } deriving (Functor, Applicative, Monad, MonadIO, MonadFix, MonadTrans, MonadException, MonadAsyncException)
129134
130135instance PrimMonad m => PrimMonad (WithJSContextSingleton x m) where
@@ -248,6 +253,10 @@ instance HasJS x m => HasJS x (RequesterT t request response m) where
248253 type JSX (RequesterT t request response m) = JSX m
249254 liftJS = lift . liftJS
250255
256+instance HasJS x m => HasJS x (QueryT t q m) where
257+ type JSX (QueryT t q m) = JSX m
258+ liftJS = lift . liftJS
259+
251260-- | A Monad that is capable of executing JavaScript
252261class Monad m => MonadJS x m | m -> x where
253262 runJS :: JSFFI -> [JSRef x] -> m (JSRef x)
reflex-dom-core/src/Reflex/Dom/Builder/Class.hs+24
@@ -35,6 +35,8 @@ import Reflex.EventWriter
3535import Reflex.PerformEvent.Class
3636import Reflex.PostBuild.Base
3737import Reflex.Requester.Base
38+import Reflex.Query.Base
39+import Reflex.Query.Class
3840
3941import qualified Control.Category
4042import Control.Lens hiding (element)
@@ -598,6 +600,27 @@ instance Reflex t => HasDomEvent t (TextAreaElement EventResult d t) en where
598600instance DomBuilder t m => DomBuilder t (ReaderT r m) where
599601 type DomBuilderSpace (ReaderT r m) = DomBuilderSpace m
600602
603+instance (DomBuilder t m, MonadFix m, MonadHold t m, Group q, Query q, Additive q) => DomBuilder t (QueryT t q m) where
604+ type DomBuilderSpace (QueryT t q m) = DomBuilderSpace m
605+ textNode = liftTextNode
606+ element elementTag cfg (QueryT child) = QueryT $ do
607+ s <- get
608+ let cfg' = cfg
609+ { _elementConfig_eventSpec = _elementConfig_eventSpec cfg }
610+ (e, (a, newS)) <- lift $ element elementTag cfg' $ runStateT child s
611+ put newS
612+ return (e, a)
613+
614+ inputElement = lift . inputElement
615+ textAreaElement = lift . textAreaElement
616+ selectElement cfg (QueryT child) = QueryT $ do
617+ s <- get
618+ (e, (a, newS)) <- lift $ selectElement cfg $ runStateT child s
619+ put newS
620+ return (e, a)
621+ placeRawElement = lift . placeRawElement
622+ wrapRawElement e = lift . wrapRawElement e
623+
601624type LiftDomBuilder t f m =
602625 ( Reflex t
603626 , MonadTransControlStateless f
@@ -650,6 +673,7 @@ deriving instance DomRenderHook t m => DomRenderHook t (EventWriterT t w m)
650673deriving instance DomRenderHook t m => DomRenderHook t (RequesterT t req rsp m)
651674#endif
652675deriving instance DomRenderHook t m => DomRenderHook t (PostBuildT t m)
676+deriving instance DomRenderHook t m => DomRenderHook t (QueryT t q m)
653677
654678{-# DEPRECATED liftElementConfig "Use 'id' instead; this function is no longer necessary" #-}
655679liftElementConfig :: ElementConfig er t s -> ElementConfig er t s
reflex-dom-core/src/Reflex/Dom/Builder/Immediate.hs+3
@@ -93,6 +93,7 @@ import Reflex.PostBuild.Class
9393import Reflex.TriggerEvent.Base hiding (askEvents)
9494import qualified Reflex.TriggerEvent.Base as TriggerEventT (askEvents)
9595import Reflex.TriggerEvent.Class
96+import Reflex.Query.Base (QueryT)
9697
9798import Control.Concurrent
9899import Control.Lens hiding (element, ix)
@@ -233,6 +234,8 @@ instance HasDocument m => HasDocument (Lazy.StateT s m)
233234instance HasDocument m => HasDocument (EventWriterT t w m)
234235instance HasDocument m => HasDocument (DynamicWriterT t w m)
235236instance HasDocument m => HasDocument (PostBuildT t m)
237+instance HasDocument m => HasDocument (RequesterT t request response m)
238+instance HasDocument m => HasDocument (QueryT t q m)
236239
237240instance Monad m => HasDocument (ImmediateDomBuilderT t m) where
238241 {-# INLINABLE askDocument #-}