on develop help sign in
Add text' and RawTextNode
commite2071267eab81d437f849f2cc7ad7064c3097817 authorRyan Trinkle <ryan.trinkle@gmail.com> dateSat 6 Aug 2016, 23:16 (10 years ago) parent117ea1e
4 files changed+15−6
src/Reflex/Dom/Builder/Class.hs+6−3 src/Reflex/Dom/Builder/Immediate.hs+2−1 src/Reflex/Dom/Builder/Static.hs+2−1 src/Reflex/Dom/Old.hs+5−1
src/Reflex/Dom/Builder/Class.hs+6−3
@@ -47,13 +47,14 @@ class DomSpace d where
4747 type DomHandler d :: * -> * -> *
4848 type DomHandler1 d :: (EventTag -> *) -> (EventTag -> *) -> * --TODO: Why can't this be k -> * ?
4949 type RawEvent d :: EventTag -> *
50+ type RawTextNode d :: *
5051 type RawElement d :: *
5152 defaultEventHandler :: proxy d -> DomHandler1 d (Pair1 EventName (RawEvent d)) (Maybe1 EventResult)
5253
5354-- | @'DomBuilder' t m@ indicates that @m@ is a 'Monad' capable of building dynamic DOM in the 'Reflex' timeline @t@
5455class (Monad m, Reflex t, Deletable t m, DomSpace (DomBuilderSpace m)) => DomBuilder t m | m -> t where
5556 type DomBuilderSpace m :: *
56− textNode :: TextNodeConfig t -> m (TextNode t)
57+ textNode :: TextNodeConfig t -> m (TextNode (DomBuilderSpace m) t)
5758 element :: Text -> ElementConfig er t m -> m a -> m (Element er (DomBuilderSpace m) t, a)
5859 -- | Create a placeholder in the DOM, with the ability to insert new DOM before it
5960 -- The provided DOM will be executed after the current frame, so it will not be affected by any occurrences that are concurrent with the occurrence that created it
@@ -75,7 +76,9 @@ instance (Reflex t) => Default (TextNodeConfig t) where
7576 , _textNodeConfig_setContents = never
7677 }
7778
78−data TextNode t = TextNode
79+data TextNode d t = TextNode
80+ { _textNode_raw :: RawTextNode d
81+ }
7982
8083type AttributeName = (Maybe Namespace, Text)
8184
@@ -329,7 +332,7 @@ type RunStateless t = forall n b. Monad n => t n b -> n b
329332liftWithStateless :: forall m t a. (Monad m, MonadTransControlStateless t) => (RunStateless t -> m a) -> t m a
330333liftWithStateless a = liftWith $ \run -> a $ \x -> fromStT (Proxy :: Proxy t) <$> run x
331334
332−liftTextNode :: (MonadTrans f, DomBuilder t m) => TextNodeConfig t -> f m (TextNode t)
335+liftTextNode :: (MonadTrans f, DomBuilder t m) => TextNodeConfig t -> f m (TextNode (DomBuilderSpace m) t)
333336liftTextNode = lift . textNode
334337
335338liftElement :: LiftDomBuilder t f m => Text -> ElementConfig er t (f m) -> f m a -> f m (Element er (DomBuilderSpace m) t, a)
src/Reflex/Dom/Builder/Immediate.hs+2−1
@@ -190,6 +190,7 @@ instance DomSpace GhcjsDomSpace where
190190 type DomHandler GhcjsDomSpace = GhcjsDomHandler
191191 type DomHandler1 GhcjsDomSpace = GhcjsDomHandler1
192192 type RawEvent GhcjsDomSpace = GhcjsDomEvent
193+ type RawTextNode GhcjsDomSpace = DOM.Text
193194 type RawElement GhcjsDomSpace = DOM.Element
194195 {-# INLINABLE defaultEventHandler #-}
195196 defaultEventHandler _ = GhcjsDomHandler1 $ \(Pair1 en (GhcjsDomEvent evt)) -> do
@@ -205,7 +206,7 @@ instance SupportsImmediateDomBuilder t m => DomBuilder t (ImmediateDomBuilderT t
205206 textNode (TextNodeConfig initialContents eSetContents) = do
206207 n <- textNodeInternal initialContents
207208 lift $ performEvent_ $ ffor eSetContents $ \t -> setNodeValue n (Just t)
208− return TextNode
209+ return $ TextNode n
209210 {-# INLINABLE element #-}
210211 element elementTag cfg child = fst <$> makeElement elementTag cfg child
211212 {-# INLINABLE placeholder #-}
src/Reflex/Dom/Builder/Static.hs+2−1
@@ -110,6 +110,7 @@ data StaticDomEvent (a :: k)
110110data StaticDomHandler (a :: k) (b :: k) = StaticDomHandler
111111
112112instance DomSpace StaticDomSpace where
113+ type RawTextNode StaticDomSpace = ()
113114 type RawElement StaticDomSpace = ByteString
114115 type RawEvent StaticDomSpace = StaticDomEvent
115116 type DomHandler StaticDomSpace = StaticDomHandler
@@ -122,7 +123,7 @@ instance SupportsStaticDomBuilder t m => DomBuilder t (StaticDomBuilderT t m) wh
122123 textNode (TextNodeConfig initialContents setContents) = StaticDomBuilderT $ do
123124 let escape = BL.toStrict . toLazyByteString . fromHtmlEscapedText
124125 modify . (:) <=< hold (escape initialContents) $ fmap escape setContents
125− return TextNode
126+ return $ TextNode ()
126127
127128 {-# INLINABLE element #-}
128129 element elementTag cfg child = do
src/Reflex/Dom/Old.hs+5−1
@@ -18,6 +18,7 @@ module Reflex.Dom.Old
1818 , deleteBetweenExclusive
1919 , onEventName
2020 , schedulePostBuild
21+ , text'
2122 ) where
2223
2324import Control.Arrow ((***))
@@ -32,10 +33,10 @@ import Data.Map (Map)
3233import qualified Data.Map as Map
3334import qualified Data.Text as T
3435import Foreign.JavaScript.TH
35−import qualified GHCJS.DOM.Element as DOM
3636import GHCJS.DOM.EventM (EventM)
3737import GHCJS.DOM.Node (getParentNode, getPreviousSibling, removeChild, toNode)
3838import GHCJS.DOM.Types (IsElement, IsNode)
39+import qualified GHCJS.DOM.Types as DOM
3940import Reflex
4041import Reflex.Dom.Builder.Class
4142import Reflex.Dom.Builder.Immediate
@@ -137,3 +138,6 @@ schedulePostBuild :: (PostBuild t m, PerformEvent t m) => WidgetHost m () -> m (
137138schedulePostBuild w = do
138139 postBuild <- getPostBuild
139140 performEvent_ $ w <$ postBuild
141+
142+text' :: MonadWidget t m => String -> m DOM.Text
143+text' s = _textNode_raw <$> textNode (def & textNodeConfig_initialContents .~ T.pack s)