{-# LANGUAGE CPP #-}
{-# LANGUAGE ConstraintKinds #-}
{-# LANGUAGE FlexibleContexts #-}
{-# LANGUAGE FlexibleInstances #-}
{-# LANGUAGE MultiParamTypeClasses #-}
{-# LANGUAGE Rank2Types #-}
{-# LANGUAGE ScopedTypeVariables #-}
{-# LANGUAGE TypeFamilies #-}
{-# LANGUAGE UndecidableInstances #-}
{-# LANGUAGE LambdaCase #-}
#ifdef USE_TEMPLATE_HASKELL
{-# LANGUAGE TemplateHaskell #-}
#endif
{-# LANGUAGE TypeOperators #-}
module Reflex.Dom.Old
       ( MonadWidget
       , El
       , ElConfig (..)
       , elConfig_namespace
       , elConfig_attributes
       , _el_clicked
       , _el_element
       , _el_events
       , addVoidAction
       , AttributeMap
       , Attributes (..)
       , buildElement
       , buildElementNS
       , buildEmptyElement
       , buildEmptyElementNS
       , elDynHtml'
       , elDynHtmlAttr'
       , elStopPropagationNS
       , elWith
       , elWith'
       , emptyElWith
       , emptyElWith'
       , namedNodeMapGetNames
       , nodeClear
       , onEventName
       , schedulePostBuild
       , text'
       , unsafePlaceElement
       , WidgetHost
       , wrapElement
       ) where

import Control.Arrow (first)
#ifdef USE_TEMPLATE_HASKELL
import Control.Lens (makeLenses, (%~), (&), (.~), (^.))
#else
import Control.Lens (Lens, Lens', (%~), (&), (.~), (^.))
#endif
import Control.Monad
import Control.Monad.Fix
import Control.Monad.IO.Class
import Control.Monad.Reader
import Control.Monad.Ref
import Data.Default
import Data.Dependent.Map as DMap
import Data.Functor.Misc
import Data.Map (Map)
import qualified Data.Map as Map
import Data.Set (Set)
import qualified Data.Set as Set
import Data.Text (Text)
import qualified GHCJS.DOM.Element as Element
import GHCJS.DOM.EventM (EventM)
import GHCJS.DOM.NamedNodeMap as NNM
import GHCJS.DOM.Node (getFirstChild, getNodeName, removeChild)
import GHCJS.DOM.Types
       (liftJSM, JSM, IsHTMLElement, IsNode)
import qualified GHCJS.DOM.Types as DOM
import Reflex.Class
import Reflex.Dom.Builder.Class
import Reflex.Dom.Builder.Immediate
import Reflex.Dom.Widget.Basic
import Reflex.Host.Class
import Reflex.PerformEvent.Class
import Reflex.PostBuild.Class
import Reflex.TriggerEvent.Class

data ElConfig attrs = ElConfig
  { forall attrs. ElConfig attrs -> Maybe Text
_elConfig_namespace :: Maybe Text
  , forall attrs. ElConfig attrs -> attrs
_elConfig_attributes :: attrs
  }

instance attrs ~ Map Text Text => Default (ElConfig attrs) where
  def :: ElConfig attrs
def = ElConfig
    { _elConfig_namespace :: Maybe Text
_elConfig_namespace = Maybe Text
forall a. Maybe a
Nothing
    , _elConfig_attributes :: attrs
_elConfig_attributes = attrs
forall a. Monoid a => a
mempty
    }

#ifdef USE_TEMPLATE_HASKELL
makeLenses ''ElConfig
#else
elConfig_namespace :: Lens' (ElConfig attrs1) (Maybe Text)
elConfig_namespace f (ElConfig a b) = (\a' -> ElConfig a' b) <$> f a
{-# INLINE elConfig_namespace #-}
elConfig_attributes :: Lens (ElConfig attrs1) (ElConfig attrs2) attrs1 attrs2
elConfig_attributes f (ElConfig a b) = (\b' -> ElConfig a b') <$> f b
{-# INLINE elConfig_attributes #-}
#endif

type MonadWidgetConstraints t m =
  ( DomBuilder t m
  , DomBuilderSpace m ~ GhcjsDomSpace
  , MonadFix m
  , MonadHold t m
  , MonadSample t (Performable m)
  , MonadReflexCreateTrigger t m
  , PostBuild t m
  , PerformEvent t m
  , MonadIO m
  , MonadIO (Performable m)
#ifndef ghcjs_HOST_OS
  , DOM.MonadJSM m
  , DOM.MonadJSM (Performable m)
#endif
  , TriggerEvent t m
  , HasDocument m
  , MonadRef m
  , Ref m ~ Ref IO
  , MonadRef (Performable m)
  , Ref (Performable m) ~ Ref IO
  )

class MonadWidgetConstraints t m => MonadWidget t m
instance MonadWidgetConstraints t m => MonadWidget t m

type WidgetHost m = Performable m

type El = Element EventResult GhcjsDomSpace

addVoidAction :: MonadWidget t m => Event t (WidgetHost m ()) -> m ()
addVoidAction :: forall t (m :: * -> *).
MonadWidget t m =>
Event t (WidgetHost m ()) -> m ()
addVoidAction = Event t (Performable m ()) -> m ()
forall t (m :: * -> *).
PerformEvent t m =>
Event t (Performable m ()) -> m ()
performEvent_

type AttributeMap = Map Text Text

buildElement :: (MonadWidget t m, Attributes m attrs t) => Text -> attrs -> m a -> m (RawElement (DomBuilderSpace m), a)
buildElement :: forall t (m :: * -> *) attrs a.
(MonadWidget t m, Attributes m attrs t) =>
Text -> attrs -> m a -> m (RawElement (DomBuilderSpace m), a)
buildElement = Maybe Text
-> Text -> attrs -> m a -> m (RawElement (DomBuilderSpace m), a)
forall t (m :: * -> *) attrs a.
(MonadWidget t m, Attributes m attrs t) =>
Maybe Text
-> Text -> attrs -> m a -> m (RawElement (DomBuilderSpace m), a)
buildElementNS Maybe Text
forall a. Maybe a
Nothing

buildEmptyElement :: (MonadWidget t m, Attributes m attrs t) => Text -> attrs -> m (RawElement (DomBuilderSpace m))
buildEmptyElement :: forall t (m :: * -> *) attrs.
(MonadWidget t m, Attributes m attrs t) =>
Text -> attrs -> m (RawElement (DomBuilderSpace m))
buildEmptyElement Text
elementTag attrs
attrs = (Element, ()) -> Element
forall a b. (a, b) -> a
fst ((Element, ()) -> Element) -> m (Element, ()) -> m Element
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Maybe Text
-> Text -> attrs -> m () -> m (RawElement (DomBuilderSpace m), ())
forall t (m :: * -> *) attrs a.
(MonadWidget t m, Attributes m attrs t) =>
Maybe Text
-> Text -> attrs -> m a -> m (RawElement (DomBuilderSpace m), a)
buildElementNS Maybe Text
forall a. Maybe a
Nothing Text
elementTag attrs
attrs m ()
forall (m :: * -> *). Monad m => m ()
blank

buildEmptyElementNS :: (MonadWidget t m, Attributes m attrs t) => Maybe Text -> Text -> attrs -> m (RawElement (DomBuilderSpace m))
buildEmptyElementNS :: forall t (m :: * -> *) attrs.
(MonadWidget t m, Attributes m attrs t) =>
Maybe Text -> Text -> attrs -> m (RawElement (DomBuilderSpace m))
buildEmptyElementNS Maybe Text
ns Text
elementTag attrs
attrs = (Element, ()) -> Element
forall a b. (a, b) -> a
fst ((Element, ()) -> Element) -> m (Element, ()) -> m Element
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Maybe Text
-> Text -> attrs -> m () -> m (RawElement (DomBuilderSpace m), ())
forall t (m :: * -> *) attrs a.
(MonadWidget t m, Attributes m attrs t) =>
Maybe Text
-> Text -> attrs -> m a -> m (RawElement (DomBuilderSpace m), a)
buildElementNS Maybe Text
ns Text
elementTag attrs
attrs m ()
forall (m :: * -> *). Monad m => m ()
blank

buildElementNS :: (MonadWidget t m, Attributes m attrs t) => Maybe Text -> Text -> attrs -> m a -> m (RawElement (DomBuilderSpace m), a)
buildElementNS :: forall t (m :: * -> *) attrs a.
(MonadWidget t m, Attributes m attrs t) =>
Maybe Text
-> Text -> attrs -> m a -> m (RawElement (DomBuilderSpace m), a)
buildElementNS Maybe Text
ns Text
elementTag attrs
attrs m a
child = (Element EventResult GhcjsDomSpace t -> Element)
-> (Element EventResult GhcjsDomSpace t, a) -> (Element, a)
forall b c d. (b -> c) -> (b, d) -> (c, d)
forall (a :: * -> * -> *) b c d.
Arrow a =>
a b c -> a (b, d) (c, d)
first Element EventResult GhcjsDomSpace t -> Element
Element EventResult GhcjsDomSpace t -> RawElement GhcjsDomSpace
forall {k1} {k2} (er :: EventTag -> *) (d :: k1) (t :: k2).
Element er d t -> RawElement d
_element_raw ((Element EventResult GhcjsDomSpace t, a) -> (Element, a))
-> m (Element EventResult GhcjsDomSpace t, a) -> m (Element, a)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Maybe Text
-> Text
-> attrs
-> m a
-> m (Element EventResult (DomBuilderSpace m) t, a)
forall a.
MonadWidget t m =>
Maybe Text
-> Text
-> attrs
-> m a
-> m (Element EventResult (DomBuilderSpace m) t, a)
forall (m :: * -> *) attrs t a.
(Attributes m attrs t, MonadWidget t m) =>
Maybe Text
-> Text
-> attrs
-> m a
-> m (Element EventResult (DomBuilderSpace m) t, a)
buildElementInternal Maybe Text
ns Text
elementTag attrs
attrs m a
child

class Attributes m attrs t where
  buildElementInternal :: MonadWidget t m => Maybe Text -> Text -> attrs -> m a -> m (Element EventResult (DomBuilderSpace m) t, a)

instance Attributes m (Map Text Text) t where
  buildElementInternal :: forall a.
MonadWidget t m =>
Maybe Text
-> Text
-> Map Text Text
-> m a
-> m (Element EventResult (DomBuilderSpace m) t, a)
buildElementInternal Maybe Text
ns Text
elementTag Map Text Text
attrs m a
child = do
    let cfg :: ElementConfig EventResult t GhcjsDomSpace
cfg = ElementConfig EventResult t GhcjsDomSpace
forall a. Default a => a
def ElementConfig EventResult t GhcjsDomSpace
-> (ElementConfig EventResult t GhcjsDomSpace
    -> ElementConfig EventResult t GhcjsDomSpace)
-> ElementConfig EventResult t GhcjsDomSpace
forall a b. a -> (a -> b) -> b
& (Maybe Text -> Identity (Maybe Text))
-> ElementConfig EventResult t GhcjsDomSpace
-> Identity (ElementConfig EventResult t GhcjsDomSpace)
forall (er :: EventTag -> *) k1 (t :: k1) k2 (s :: k2)
       (f :: * -> *).
Functor f =>
(Maybe Text -> f (Maybe Text))
-> ElementConfig er t s -> f (ElementConfig er t s)
elementConfig_namespace ((Maybe Text -> Identity (Maybe Text))
 -> ElementConfig EventResult t GhcjsDomSpace
 -> Identity (ElementConfig EventResult t GhcjsDomSpace))
-> Maybe Text
-> ElementConfig EventResult t GhcjsDomSpace
-> ElementConfig EventResult t GhcjsDomSpace
forall s t a b. ASetter s t a b -> b -> s -> t
.~ Maybe Text
ns
    Text
-> m a
-> ElementConfig EventResult t (DomBuilderSpace m)
-> m (Element EventResult (DomBuilderSpace m) t, a)
forall t (m :: * -> *) a (er :: EventTag -> *).
MonadWidget t m =>
Text
-> m a
-> ElementConfig er t (DomBuilderSpace m)
-> m (Element er (DomBuilderSpace m) t, a)
buildElementCommon Text
elementTag m a
child (ElementConfig EventResult t GhcjsDomSpace
 -> m (Element EventResult GhcjsDomSpace t, a))
-> m (ElementConfig EventResult t GhcjsDomSpace)
-> m (Element EventResult GhcjsDomSpace t, a)
forall (m :: * -> *) a b. Monad m => (a -> m b) -> m a -> m b
=<< Map Text Text
-> ElementConfig EventResult t (DomBuilderSpace m)
-> m (ElementConfig EventResult t (DomBuilderSpace m))
forall (m :: * -> *) (er :: EventTag -> *) t.
Applicative m =>
Map Text Text
-> ElementConfig er t (DomBuilderSpace m)
-> m (ElementConfig er t (DomBuilderSpace m))
addStaticAttributes Map Text Text
attrs ElementConfig EventResult t (DomBuilderSpace m)
ElementConfig EventResult t GhcjsDomSpace
cfg

addStaticAttributes :: Applicative m => Map Text Text -> ElementConfig er t (DomBuilderSpace m) -> m (ElementConfig er t (DomBuilderSpace m))
addStaticAttributes :: forall (m :: * -> *) (er :: EventTag -> *) t.
Applicative m =>
Map Text Text
-> ElementConfig er t (DomBuilderSpace m)
-> m (ElementConfig er t (DomBuilderSpace m))
addStaticAttributes Map Text Text
attrs ElementConfig er t (DomBuilderSpace m)
cfg = do
  let initialAttrs :: Map AttributeName Text
initialAttrs = [(AttributeName, Text)] -> Map AttributeName Text
forall k a. Ord k => [(k, a)] -> Map k a
Map.fromList ([(AttributeName, Text)] -> Map AttributeName Text)
-> [(AttributeName, Text)] -> Map AttributeName Text
forall a b. (a -> b) -> a -> b
$ (Text -> AttributeName) -> (Text, Text) -> (AttributeName, Text)
forall b c d. (b -> c) -> (b, d) -> (c, d)
forall (a :: * -> * -> *) b c d.
Arrow a =>
a b c -> a (b, d) (c, d)
first (Maybe Text -> Text -> AttributeName
AttributeName Maybe Text
forall a. Maybe a
Nothing) ((Text, Text) -> (AttributeName, Text))
-> [(Text, Text)] -> [(AttributeName, Text)]
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Map Text Text -> [(Text, Text)]
forall k a. Map k a -> [(k, a)]
Map.toList Map Text Text
attrs
  ElementConfig er t (DomBuilderSpace m)
-> m (ElementConfig er t (DomBuilderSpace m))
forall a. a -> m a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (ElementConfig er t (DomBuilderSpace m)
 -> m (ElementConfig er t (DomBuilderSpace m)))
-> ElementConfig er t (DomBuilderSpace m)
-> m (ElementConfig er t (DomBuilderSpace m))
forall a b. (a -> b) -> a -> b
$ ElementConfig er t (DomBuilderSpace m)
cfg ElementConfig er t (DomBuilderSpace m)
-> (ElementConfig er t (DomBuilderSpace m)
    -> ElementConfig er t (DomBuilderSpace m))
-> ElementConfig er t (DomBuilderSpace m)
forall a b. a -> (a -> b) -> b
& (Map AttributeName Text -> Identity (Map AttributeName Text))
-> ElementConfig er t (DomBuilderSpace m)
-> Identity (ElementConfig er t (DomBuilderSpace m))
forall (er :: EventTag -> *) k1 (t :: k1) k2 (s :: k2)
       (f :: * -> *).
Functor f =>
(Map AttributeName Text -> f (Map AttributeName Text))
-> ElementConfig er t s -> f (ElementConfig er t s)
elementConfig_initialAttributes ((Map AttributeName Text -> Identity (Map AttributeName Text))
 -> ElementConfig er t (DomBuilderSpace m)
 -> Identity (ElementConfig er t (DomBuilderSpace m)))
-> Map AttributeName Text
-> ElementConfig er t (DomBuilderSpace m)
-> ElementConfig er t (DomBuilderSpace m)
forall s t a b. ASetter s t a b -> b -> s -> t
.~ Map AttributeName Text
initialAttrs

instance PostBuild t m => Attributes m (Dynamic t (Map Text Text)) t where
  buildElementInternal :: forall a.
MonadWidget t m =>
Maybe Text
-> Text
-> Dynamic t (Map Text Text)
-> m a
-> m (Element EventResult (DomBuilderSpace m) t, a)
buildElementInternal Maybe Text
ns Text
elementTag Dynamic t (Map Text Text)
attrs m a
child = do
    let cfg :: ElementConfig EventResult t GhcjsDomSpace
cfg = ElementConfig EventResult t GhcjsDomSpace
forall a. Default a => a
def ElementConfig EventResult t GhcjsDomSpace
-> (ElementConfig EventResult t GhcjsDomSpace
    -> ElementConfig EventResult t GhcjsDomSpace)
-> ElementConfig EventResult t GhcjsDomSpace
forall a b. a -> (a -> b) -> b
& (Maybe Text -> Identity (Maybe Text))
-> ElementConfig EventResult t GhcjsDomSpace
-> Identity (ElementConfig EventResult t GhcjsDomSpace)
forall (er :: EventTag -> *) k1 (t :: k1) k2 (s :: k2)
       (f :: * -> *).
Functor f =>
(Maybe Text -> f (Maybe Text))
-> ElementConfig er t s -> f (ElementConfig er t s)
elementConfig_namespace ((Maybe Text -> Identity (Maybe Text))
 -> ElementConfig EventResult t GhcjsDomSpace
 -> Identity (ElementConfig EventResult t GhcjsDomSpace))
-> Maybe Text
-> ElementConfig EventResult t GhcjsDomSpace
-> ElementConfig EventResult t GhcjsDomSpace
forall s t a b. ASetter s t a b -> b -> s -> t
.~ Maybe Text
ns
    Text
-> m a
-> ElementConfig EventResult t (DomBuilderSpace m)
-> m (Element EventResult (DomBuilderSpace m) t, a)
forall t (m :: * -> *) a (er :: EventTag -> *).
MonadWidget t m =>
Text
-> m a
-> ElementConfig er t (DomBuilderSpace m)
-> m (Element er (DomBuilderSpace m) t, a)
buildElementCommon Text
elementTag m a
child (ElementConfig EventResult t GhcjsDomSpace
 -> m (Element EventResult GhcjsDomSpace t, a))
-> m (ElementConfig EventResult t GhcjsDomSpace)
-> m (Element EventResult GhcjsDomSpace t, a)
forall (m :: * -> *) a b. Monad m => (a -> m b) -> m a -> m b
=<< Dynamic t (Map Text Text)
-> ElementConfig EventResult t (DomBuilderSpace m)
-> m (ElementConfig EventResult t (DomBuilderSpace m))
forall t (m :: * -> *) (er :: EventTag -> *).
PostBuild t m =>
Dynamic t (Map Text Text)
-> ElementConfig er t (DomBuilderSpace m)
-> m (ElementConfig er t (DomBuilderSpace m))
addDynamicAttributes Dynamic t (Map Text Text)
attrs ElementConfig EventResult t (DomBuilderSpace m)
ElementConfig EventResult t GhcjsDomSpace
cfg

addDynamicAttributes :: PostBuild t m => Dynamic t (Map Text Text) -> ElementConfig er t (DomBuilderSpace m) -> m (ElementConfig er t (DomBuilderSpace m))
addDynamicAttributes :: forall t (m :: * -> *) (er :: EventTag -> *).
PostBuild t m =>
Dynamic t (Map Text Text)
-> ElementConfig er t (DomBuilderSpace m)
-> m (ElementConfig er t (DomBuilderSpace m))
addDynamicAttributes Dynamic t (Map Text Text)
attrs ElementConfig er t (DomBuilderSpace m)
cfg = do
  Event t (Map Text (Maybe Text))
modifyAttrs <- Dynamic t (Map Text Text) -> m (Event t (Map Text (Maybe Text)))
forall k t (m :: * -> *).
(Ord k, PostBuild t m) =>
Dynamic t (Map k Text) -> m (Event t (Map k (Maybe Text)))
dynamicAttributesToModifyAttributes Dynamic t (Map Text Text)
attrs
  ElementConfig er t (DomBuilderSpace m)
-> m (ElementConfig er t (DomBuilderSpace m))
forall a. a -> m a
forall (m :: * -> *) a. Monad m => a -> m a
return (ElementConfig er t (DomBuilderSpace m)
 -> m (ElementConfig er t (DomBuilderSpace m)))
-> ElementConfig er t (DomBuilderSpace m)
-> m (ElementConfig er t (DomBuilderSpace m))
forall a b. (a -> b) -> a -> b
$ ElementConfig er t (DomBuilderSpace m)
cfg ElementConfig er t (DomBuilderSpace m)
-> (ElementConfig er t (DomBuilderSpace m)
    -> ElementConfig er t (DomBuilderSpace m))
-> ElementConfig er t (DomBuilderSpace m)
forall a b. a -> (a -> b) -> b
& (Event t (Map AttributeName (Maybe Text))
 -> Identity (Event t (Map AttributeName (Maybe Text))))
-> ElementConfig er t (DomBuilderSpace m)
-> Identity (ElementConfig er t (DomBuilderSpace m))
forall {k1} {k2} (t :: k1) (er :: EventTag -> *) (m :: k2).
Reflex t =>
Lens'
  (ElementConfig er t m) (Event t (Map AttributeName (Maybe Text)))
Lens'
  (ElementConfig er t (DomBuilderSpace m))
  (Event t (Map AttributeName (Maybe Text)))
elementConfig_modifyAttributes ((Event t (Map AttributeName (Maybe Text))
  -> Identity (Event t (Map AttributeName (Maybe Text))))
 -> ElementConfig er t (DomBuilderSpace m)
 -> Identity (ElementConfig er t (DomBuilderSpace m)))
-> Event t (Map AttributeName (Maybe Text))
-> ElementConfig er t (DomBuilderSpace m)
-> ElementConfig er t (DomBuilderSpace m)
forall s t a b. ASetter s t a b -> b -> s -> t
.~ (Map Text (Maybe Text) -> Map AttributeName (Maybe Text))
-> Event t (Map Text (Maybe Text))
-> Event t (Map AttributeName (Maybe Text))
forall a b. (a -> b) -> Event t a -> Event t b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap Map Text (Maybe Text) -> Map AttributeName (Maybe Text)
forall v. Map Text v -> Map AttributeName v
mapKeysToAttributeName Event t (Map Text (Maybe Text))
modifyAttrs

buildElementCommon :: MonadWidget t m => Text -> m a -> ElementConfig er t (DomBuilderSpace m) -> m (Element er (DomBuilderSpace m) t, a)
buildElementCommon :: forall t (m :: * -> *) a (er :: EventTag -> *).
MonadWidget t m =>
Text
-> m a
-> ElementConfig er t (DomBuilderSpace m)
-> m (Element er (DomBuilderSpace m) t, a)
buildElementCommon Text
elementTag m a
child ElementConfig er t (DomBuilderSpace m)
cfg = Text
-> ElementConfig er t (DomBuilderSpace m)
-> m a
-> m (Element er (DomBuilderSpace m) t, a)
forall t (m :: * -> *) (er :: EventTag -> *) a.
DomBuilder t m =>
Text
-> ElementConfig er t (DomBuilderSpace m)
-> m a
-> m (Element er (DomBuilderSpace m) t, a)
forall (er :: EventTag -> *) a.
Text
-> ElementConfig er t (DomBuilderSpace m)
-> m a
-> m (Element er (DomBuilderSpace m) t, a)
element Text
elementTag ElementConfig er t (DomBuilderSpace m)
cfg m a
child


onEventName :: IsHTMLElement e => EventName en -> e -> EventM e (EventType en) () -> JSM (JSM ())
onEventName :: forall e (en :: EventTag).
IsHTMLElement e =>
EventName en -> e -> EventM e (EventType en) () -> JSM (JSM ())
onEventName = EventName en -> e -> EventM e (EventType en) () -> JSM (JSM ())
forall e (en :: EventTag).
IsElement e =>
EventName en -> e -> EventM e (EventType en) () -> JSM (JSM ())
elementOnEventName

schedulePostBuild :: (PostBuild t m, PerformEvent t m) => WidgetHost m () -> m ()
schedulePostBuild :: forall t (m :: * -> *).
(PostBuild t m, PerformEvent t m) =>
WidgetHost m () -> m ()
schedulePostBuild WidgetHost m ()
w = do
  Event t ()
postBuild <- m (Event t ())
forall t (m :: * -> *). PostBuild t m => m (Event t ())
getPostBuild
  Event t (WidgetHost m ()) -> m ()
forall t (m :: * -> *).
PerformEvent t m =>
Event t (Performable m ()) -> m ()
performEvent_ (Event t (WidgetHost m ()) -> m ())
-> Event t (WidgetHost m ()) -> m ()
forall a b. (a -> b) -> a -> b
$ WidgetHost m ()
w WidgetHost m () -> Event t () -> Event t (WidgetHost m ())
forall a b. a -> Event t b -> Event t a
forall (f :: * -> *) a b. Functor f => a -> f b -> f a
<$ Event t ()
postBuild

text' :: MonadWidget t m => Text -> m DOM.Text
text' :: forall t (m :: * -> *). MonadWidget t m => Text -> m Text
text' Text
s = TextNode GhcjsDomSpace t -> Text
TextNode GhcjsDomSpace t -> RawTextNode GhcjsDomSpace
forall {k1} {k2} (d :: k1) (t :: k2). TextNode d t -> RawTextNode d
_textNode_raw (TextNode GhcjsDomSpace t -> Text)
-> m (TextNode GhcjsDomSpace t) -> m Text
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> TextNodeConfig t -> m (TextNode (DomBuilderSpace m) t)
forall t (m :: * -> *).
DomBuilder t m =>
TextNodeConfig t -> m (TextNode (DomBuilderSpace m) t)
textNode (TextNodeConfig t
forall a. Default a => a
def TextNodeConfig t
-> (TextNodeConfig t -> TextNodeConfig t) -> TextNodeConfig t
forall a b. a -> (a -> b) -> b
& (Text -> Identity Text)
-> TextNodeConfig t -> Identity (TextNodeConfig t)
forall k (t :: k) (f :: * -> *).
Functor f =>
(Text -> f Text) -> TextNodeConfig t -> f (TextNodeConfig t)
textNodeConfig_initialContents ((Text -> Identity Text)
 -> TextNodeConfig t -> Identity (TextNodeConfig t))
-> Text -> TextNodeConfig t -> TextNodeConfig t
forall s t a b. ASetter s t a b -> b -> s -> t
.~ Text
s)

instance HasAttributes (ElConfig attrs) where
  type Attrs (ElConfig attrs) = attrs
  attributes :: Lens' (ElConfig attrs) (Attrs (ElConfig attrs))
attributes = (attrs -> f attrs) -> ElConfig attrs -> f (ElConfig attrs)
(Attrs (ElConfig attrs) -> f (Attrs (ElConfig attrs)))
-> ElConfig attrs -> f (ElConfig attrs)
forall attrs attrs (f :: * -> *).
Functor f =>
(attrs -> f attrs) -> ElConfig attrs -> f (ElConfig attrs)
elConfig_attributes

instance HasNamespace (ElConfig attrs) where
  namespace :: Lens' (ElConfig attrs) (Maybe Text)
namespace = (Maybe Text -> f (Maybe Text))
-> ElConfig attrs -> f (ElConfig attrs)
forall attrs (f :: * -> *).
Functor f =>
(Maybe Text -> f (Maybe Text))
-> ElConfig attrs -> f (ElConfig attrs)
elConfig_namespace

elWith :: (MonadWidget t m, Attributes m attrs t) => Text -> ElConfig attrs -> m a -> m a
elWith :: forall t (m :: * -> *) attrs a.
(MonadWidget t m, Attributes m attrs t) =>
Text -> ElConfig attrs -> m a -> m a
elWith Text
elementTag ElConfig attrs
cfg m a
child = (Element EventResult GhcjsDomSpace t, a) -> a
forall a b. (a, b) -> b
snd ((Element EventResult GhcjsDomSpace t, a) -> a)
-> m (Element EventResult GhcjsDomSpace t, a) -> m a
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Text
-> ElConfig attrs
-> m a
-> m (Element EventResult (DomBuilderSpace m) t, a)
forall t (m :: * -> *) attrs a.
(MonadWidget t m, Attributes m attrs t) =>
Text
-> ElConfig attrs
-> m a
-> m (Element EventResult (DomBuilderSpace m) t, a)
elWith' Text
elementTag ElConfig attrs
cfg m a
child

elWith' :: (MonadWidget t m, Attributes m attrs t) => Text -> ElConfig attrs -> m a -> m (Element EventResult (DomBuilderSpace m) t, a)
elWith' :: forall t (m :: * -> *) attrs a.
(MonadWidget t m, Attributes m attrs t) =>
Text
-> ElConfig attrs
-> m a
-> m (Element EventResult (DomBuilderSpace m) t, a)
elWith' Text
elementTag ElConfig attrs
cfg = Maybe Text
-> Text
-> attrs
-> m a
-> m (Element EventResult (DomBuilderSpace m) t, a)
forall a.
MonadWidget t m =>
Maybe Text
-> Text
-> attrs
-> m a
-> m (Element EventResult (DomBuilderSpace m) t, a)
forall (m :: * -> *) attrs t a.
(Attributes m attrs t, MonadWidget t m) =>
Maybe Text
-> Text
-> attrs
-> m a
-> m (Element EventResult (DomBuilderSpace m) t, a)
buildElementInternal (ElConfig attrs
cfg ElConfig attrs
-> Getting (Maybe Text) (ElConfig attrs) (Maybe Text) -> Maybe Text
forall s a. s -> Getting a s a -> a
^. Getting (Maybe Text) (ElConfig attrs) (Maybe Text)
forall a. HasNamespace a => Lens' a (Maybe Text)
Lens' (ElConfig attrs) (Maybe Text)
namespace) Text
elementTag (attrs -> m a -> m (Element EventResult (DomBuilderSpace m) t, a))
-> attrs -> m a -> m (Element EventResult (DomBuilderSpace m) t, a)
forall a b. (a -> b) -> a -> b
$ ElConfig attrs
cfg ElConfig attrs -> Getting attrs (ElConfig attrs) attrs -> attrs
forall s a. s -> Getting a s a -> a
^. Getting attrs (ElConfig attrs) attrs
(Attrs (ElConfig attrs) -> Const attrs (Attrs (ElConfig attrs)))
-> ElConfig attrs -> Const attrs (ElConfig attrs)
forall a. HasAttributes a => Lens' a (Attrs a)
Lens' (ElConfig attrs) (Attrs (ElConfig attrs))
attributes

emptyElWith :: (MonadWidget t m, Attributes m attrs t) => Text -> ElConfig attrs -> m ()
emptyElWith :: forall t (m :: * -> *) attrs.
(MonadWidget t m, Attributes m attrs t) =>
Text -> ElConfig attrs -> m ()
emptyElWith Text
elementTag ElConfig attrs
cfg = m (Element EventResult GhcjsDomSpace t) -> m ()
forall (f :: * -> *) a. Functor f => f a -> f ()
void (m (Element EventResult GhcjsDomSpace t) -> m ())
-> m (Element EventResult GhcjsDomSpace t) -> m ()
forall a b. (a -> b) -> a -> b
$ Text
-> ElConfig attrs -> m (Element EventResult (DomBuilderSpace m) t)
forall t (m :: * -> *) attrs.
(MonadWidget t m, Attributes m attrs t) =>
Text
-> ElConfig attrs -> m (Element EventResult (DomBuilderSpace m) t)
emptyElWith' Text
elementTag ElConfig attrs
cfg

emptyElWith' :: (MonadWidget t m, Attributes m attrs t) => Text -> ElConfig attrs -> m (Element EventResult (DomBuilderSpace m) t)
emptyElWith' :: forall t (m :: * -> *) attrs.
(MonadWidget t m, Attributes m attrs t) =>
Text
-> ElConfig attrs -> m (Element EventResult (DomBuilderSpace m) t)
emptyElWith' Text
elementTag ElConfig attrs
cfg = ((Element EventResult GhcjsDomSpace t, ())
 -> Element EventResult (DomBuilderSpace m) t)
-> m (Element EventResult GhcjsDomSpace t, ())
-> m (Element EventResult (DomBuilderSpace m) t)
forall a b. (a -> b) -> m a -> m b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap (Element EventResult GhcjsDomSpace t, ())
-> Element EventResult (DomBuilderSpace m) t
(Element EventResult GhcjsDomSpace t, ())
-> Element EventResult GhcjsDomSpace t
forall a b. (a, b) -> a
fst (m (Element EventResult GhcjsDomSpace t, ())
 -> m (Element EventResult (DomBuilderSpace m) t))
-> m (Element EventResult GhcjsDomSpace t, ())
-> m (Element EventResult (DomBuilderSpace m) t)
forall a b. (a -> b) -> a -> b
$ Text
-> ElConfig attrs
-> m ()
-> m (Element EventResult (DomBuilderSpace m) t, ())
forall t (m :: * -> *) attrs a.
(MonadWidget t m, Attributes m attrs t) =>
Text
-> ElConfig attrs
-> m a
-> m (Element EventResult (DomBuilderSpace m) t, a)
elWith' Text
elementTag ElConfig attrs
cfg (m () -> m (Element EventResult (DomBuilderSpace m) t, ()))
-> m () -> m (Element EventResult (DomBuilderSpace m) t, ())
forall a b. (a -> b) -> a -> b
$ () -> m ()
forall a. a -> m a
forall (m :: * -> *) a. Monad m => a -> m a
return ()

{-# DEPRECATED _el_clicked "Use 'domEvent Click' instead" #-}
_el_clicked :: Reflex t => Element EventResult d t -> Event t ()
_el_clicked :: forall t d. Reflex t => Element EventResult d t -> Event t ()
_el_clicked = EventName 'ClickTag
-> Element EventResult d t
-> Event t (DomEventType (Element EventResult d t) 'ClickTag)
forall {k} (t :: k) target (eventName :: EventTag).
HasDomEvent t target eventName =>
EventName eventName
-> target -> Event t (DomEventType target eventName)
domEvent EventName 'ClickTag
Click

{-# DEPRECATED _el_element "Use '_element_raw' instead" #-}
_el_element :: El t -> RawElement GhcjsDomSpace
_el_element :: forall t. El t -> RawElement GhcjsDomSpace
_el_element = Element EventResult GhcjsDomSpace t -> RawElement GhcjsDomSpace
forall {k1} {k2} (er :: EventTag -> *) (d :: k1) (t :: k2).
Element er d t -> RawElement d
_element_raw

{-# DEPRECATED _el_events "Use '_element_events' instead; or, if possible, use 'domEvent' instead to retrieve a particular event" #-}
_el_events :: Element er d t -> EventSelector t (WrapArg er EventName)
_el_events :: forall (er :: EventTag -> *) d t.
Element er d t -> EventSelector t (WrapArg er EventName)
_el_events = Element er d t -> EventSelector t (WrapArg er EventName)
forall {k1} {k2} (er :: EventTag -> *) (d :: k1) (t :: k2).
Element er d t -> EventSelector t (WrapArg er EventName)
_element_events

{-# DEPRECATED _el_keypress "Use 'domEvent Keypress' instead" #-}
_el_keypress :: Reflex t => El t -> Event t Word
_el_keypress :: forall t. Reflex t => El t -> Event t Word
_el_keypress = EventName 'KeypressTag
-> El t -> Event t (DomEventType (El t) 'KeypressTag)
forall {k} (t :: k) target (eventName :: EventTag).
HasDomEvent t target eventName =>
EventName eventName
-> target -> Event t (DomEventType target eventName)
domEvent EventName 'KeypressTag
Keypress

{-# DEPRECATED _el_scrolled "Use 'domEvent Scroll' instead" #-}
_el_scrolled :: Reflex t => El t -> Event t Double
_el_scrolled :: forall t. Reflex t => El t -> Event t Double
_el_scrolled = EventName 'ScrollTag
-> El t -> Event t (DomEventType (El t) 'ScrollTag)
forall {k} (t :: k) target (eventName :: EventTag).
HasDomEvent t target eventName =>
EventName eventName
-> target -> Event t (DomEventType target eventName)
domEvent EventName 'ScrollTag
Scroll

wrapElement :: forall t m. MonadWidget t m => (forall en. DOM.HTMLElement -> EventName en -> EventM DOM.Element (EventType en) (Maybe (EventResult en))) -> DOM.HTMLElement -> m (El t)
wrapElement :: forall t (m :: * -> *).
MonadWidget t m =>
(forall (en :: EventTag).
 HTMLElement
 -> EventName en
 -> EventM Element (EventType en) (Maybe (EventResult en)))
-> HTMLElement -> m (El t)
wrapElement forall (en :: EventTag).
HTMLElement
-> EventName en
-> EventM Element (EventType en) (Maybe (EventResult en))
eh HTMLElement
e = do
  let h :: (EventName en, GhcjsDomEvent en) -> JSM (Maybe (EventResult en))
      h :: forall (en :: EventTag).
(EventName en, GhcjsDomEvent en) -> JSM (Maybe (EventResult en))
h (EventName en
en, GhcjsDomEvent EventType en
evt) = ReaderT (EventType en) JSM (Maybe (EventResult en))
-> EventType en -> JSM (Maybe (EventResult en))
forall r (m :: * -> *) a. ReaderT r m a -> r -> m a
runReaderT (HTMLElement
-> EventName en
-> ReaderT (EventType en) JSM (Maybe (EventResult en))
forall (en :: EventTag).
HTMLElement
-> EventName en
-> EventM Element (EventType en) (Maybe (EventResult en))
eh HTMLElement
e EventName en
en) EventType en
evt
  RawElement (DomBuilderSpace m)
-> RawElementConfig EventResult t (DomBuilderSpace m)
-> m (Element EventResult (DomBuilderSpace m) t)
forall t (m :: * -> *) (er :: EventTag -> *).
DomBuilder t m =>
RawElement (DomBuilderSpace m)
-> RawElementConfig er t (DomBuilderSpace m)
-> m (Element er (DomBuilderSpace m) t)
forall (er :: EventTag -> *).
RawElement (DomBuilderSpace m)
-> RawElementConfig er t (DomBuilderSpace m)
-> m (Element er (DomBuilderSpace m) t)
wrapRawElement (HTMLElement -> Element
forall o. IsElement o => o -> Element
DOM.toElement HTMLElement
e) (RawElementConfig EventResult t (DomBuilderSpace m)
 -> m (Element EventResult (DomBuilderSpace m) t))
-> RawElementConfig EventResult t (DomBuilderSpace m)
-> m (Element EventResult (DomBuilderSpace m) t)
forall a b. (a -> b) -> a -> b
$ (RawElementConfig EventResult t (DomBuilderSpace m)
RawElementConfig EventResult t GhcjsDomSpace
forall a. Default a => a
def :: RawElementConfig EventResult t (DomBuilderSpace m))
    { _rawElementConfig_eventSpec = def
        { _ghcjsEventSpec_handler = GhcjsEventHandler h
        }
    }

unsafePlaceElement :: MonadWidget t m => DOM.HTMLElement -> m (Element EventResult (DomBuilderSpace m) t)
unsafePlaceElement :: forall t (m :: * -> *).
MonadWidget t m =>
HTMLElement -> m (Element EventResult (DomBuilderSpace m) t)
unsafePlaceElement HTMLElement
e = do
  RawElement (DomBuilderSpace m) -> m ()
forall t (m :: * -> *).
DomBuilder t m =>
RawElement (DomBuilderSpace m) -> m ()
placeRawElement (RawElement (DomBuilderSpace m) -> m ())
-> RawElement (DomBuilderSpace m) -> m ()
forall a b. (a -> b) -> a -> b
$ HTMLElement -> Element
forall o. IsElement o => o -> Element
DOM.toElement HTMLElement
e
  RawElement (DomBuilderSpace m)
-> RawElementConfig EventResult t (DomBuilderSpace m)
-> m (Element EventResult (DomBuilderSpace m) t)
forall t (m :: * -> *) (er :: EventTag -> *).
DomBuilder t m =>
RawElement (DomBuilderSpace m)
-> RawElementConfig er t (DomBuilderSpace m)
-> m (Element er (DomBuilderSpace m) t)
forall (er :: EventTag -> *).
RawElement (DomBuilderSpace m)
-> RawElementConfig er t (DomBuilderSpace m)
-> m (Element er (DomBuilderSpace m) t)
wrapRawElement (HTMLElement -> Element
forall o. IsElement o => o -> Element
DOM.toElement HTMLElement
e) RawElementConfig EventResult t (DomBuilderSpace m)
RawElementConfig EventResult t GhcjsDomSpace
forall a. Default a => a
def

namedNodeMapGetNames :: DOM.NamedNodeMap -> JSM (Set Text)
namedNodeMapGetNames :: NamedNodeMap -> JSM (Set Text)
namedNodeMapGetNames NamedNodeMap
self = do
  Word
l <- NamedNodeMap -> JSM Word
forall (m :: * -> *). MonadDOM m => NamedNodeMap -> m Word
NNM.getLength NamedNodeMap
self
  [Text] -> Set Text
forall a. Ord a => [a] -> Set a
Set.fromList ([Text] -> Set Text) -> JSM [Text] -> JSM (Set Text)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> [Word] -> (Word -> JSM Text) -> JSM [Text]
forall (t :: * -> *) (m :: * -> *) a b.
(Traversable t, Monad m) =>
t a -> (a -> m b) -> m (t b)
forM (Int -> [Word] -> [Word]
forall a. Int -> [a] -> [a]
take (Word -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral Word
l) [Word
0..]) (
    NamedNodeMap -> Word -> JSM Attr
forall (m :: * -> *). MonadDOM m => NamedNodeMap -> Word -> m Attr
NNM.itemUnchecked NamedNodeMap
self (Word -> JSM Attr) -> (Attr -> JSM Text) -> Word -> JSM Text
forall (m :: * -> *) a b c.
Monad m =>
(a -> m b) -> (b -> m c) -> a -> m c
>=> Attr -> JSM Text
forall (m :: * -> *) self result.
(MonadDOM m, IsNode self, FromJSString result) =>
self -> m result
getNodeName)

nodeClear :: IsNode self => self -> JSM ()
nodeClear :: forall self. IsNode self => self -> JSM ()
nodeClear self
n = do
  Maybe Node
mfc <- self -> JSM (Maybe Node)
forall (m :: * -> *) self.
(MonadDOM m, IsNode self) =>
self -> m (Maybe Node)
getFirstChild self
n
  case Maybe Node
mfc of
    Maybe Node
Nothing -> () -> JSM ()
forall a. a -> JSM a
forall (m :: * -> *) a. Monad m => a -> m a
return ()
    Just Node
fc -> do
      Node
_ <- self -> Node -> JSM Node
forall (m :: * -> *) self child.
(MonadDOM m, IsNode self, IsNode child) =>
self -> child -> m Node
removeChild self
n Node
fc
      self -> JSM ()
forall self. IsNode self => self -> JSM ()
nodeClear self
n

elStopPropagationNS :: forall t m en a. (MonadWidget t m) => Maybe Text -> Text -> EventName en -> m a -> m a
elStopPropagationNS :: forall t (m :: * -> *) (en :: EventTag) a.
MonadWidget t m =>
Maybe Text -> Text -> EventName en -> m a -> m a
elStopPropagationNS Maybe Text
ns Text
elementTag EventName en
en m a
child = do
  let f :: GhcjsEventFilter er en
f = (GhcjsDomEvent en -> JSM (EventFlags, JSM (Maybe (er en))))
-> GhcjsEventFilter er en
forall (er :: EventTag -> *) (en :: EventTag).
(GhcjsDomEvent en -> JSM (EventFlags, JSM (Maybe (er en))))
-> GhcjsEventFilter er en
GhcjsEventFilter ((GhcjsDomEvent en -> JSM (EventFlags, JSM (Maybe (er en))))
 -> GhcjsEventFilter er en)
-> (GhcjsDomEvent en -> JSM (EventFlags, JSM (Maybe (er en))))
-> GhcjsEventFilter er en
forall a b. (a -> b) -> a -> b
$ \GhcjsDomEvent en
_ -> do
        (EventFlags, JSM (Maybe (er en)))
-> JSM (EventFlags, JSM (Maybe (er en)))
forall a. a -> JSM a
forall (m :: * -> *) a. Monad m => a -> m a
return (EventFlags
stopPropagation, Maybe (er en) -> JSM (Maybe (er en))
forall a. a -> JSM a
forall (m :: * -> *) a. Monad m => a -> m a
return Maybe (er en)
forall a. Maybe a
Nothing)
      cfg :: ElementConfig EventResult t GhcjsDomSpace
cfg = (ElementConfig EventResult t (DomBuilderSpace m)
ElementConfig EventResult t GhcjsDomSpace
forall a. Default a => a
def :: ElementConfig EventResult t (DomBuilderSpace m))
        ElementConfig EventResult t GhcjsDomSpace
-> (ElementConfig EventResult t GhcjsDomSpace
    -> ElementConfig EventResult t GhcjsDomSpace)
-> ElementConfig EventResult t GhcjsDomSpace
forall a b. a -> (a -> b) -> b
& (Maybe Text -> Identity (Maybe Text))
-> ElementConfig EventResult t GhcjsDomSpace
-> Identity (ElementConfig EventResult t GhcjsDomSpace)
forall a. HasNamespace a => Lens' a (Maybe Text)
Lens' (ElementConfig EventResult t GhcjsDomSpace) (Maybe Text)
namespace ((Maybe Text -> Identity (Maybe Text))
 -> ElementConfig EventResult t GhcjsDomSpace
 -> Identity (ElementConfig EventResult t GhcjsDomSpace))
-> Maybe Text
-> ElementConfig EventResult t GhcjsDomSpace
-> ElementConfig EventResult t GhcjsDomSpace
forall s t a b. ASetter s t a b -> b -> s -> t
.~ Maybe Text
ns
        ElementConfig EventResult t GhcjsDomSpace
-> (ElementConfig EventResult t GhcjsDomSpace
    -> ElementConfig EventResult t GhcjsDomSpace)
-> ElementConfig EventResult t GhcjsDomSpace
forall a b. a -> (a -> b) -> b
& (EventSpec GhcjsDomSpace EventResult
 -> Identity (EventSpec GhcjsDomSpace EventResult))
-> ElementConfig EventResult t GhcjsDomSpace
-> Identity (ElementConfig EventResult t GhcjsDomSpace)
(GhcjsEventSpec EventResult
 -> Identity (GhcjsEventSpec EventResult))
-> ElementConfig EventResult t GhcjsDomSpace
-> Identity (ElementConfig EventResult t GhcjsDomSpace)
forall (er1 :: EventTag -> *) k1 (t :: k1) k2 (s1 :: k2)
       (er2 :: EventTag -> *) k3 (s2 :: k3) (f :: * -> *).
Functor f =>
(EventSpec s1 er1 -> f (EventSpec s2 er2))
-> ElementConfig er1 t s1 -> f (ElementConfig er2 t s2)
elementConfig_eventSpec ((GhcjsEventSpec EventResult
  -> Identity (GhcjsEventSpec EventResult))
 -> ElementConfig EventResult t GhcjsDomSpace
 -> Identity (ElementConfig EventResult t GhcjsDomSpace))
-> ((DMap EventName (GhcjsEventFilter EventResult)
     -> Identity (DMap EventName (GhcjsEventFilter EventResult)))
    -> GhcjsEventSpec EventResult
    -> Identity (GhcjsEventSpec EventResult))
-> (DMap EventName (GhcjsEventFilter EventResult)
    -> Identity (DMap EventName (GhcjsEventFilter EventResult)))
-> ElementConfig EventResult t GhcjsDomSpace
-> Identity (ElementConfig EventResult t GhcjsDomSpace)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (DMap EventName (GhcjsEventFilter EventResult)
 -> Identity (DMap EventName (GhcjsEventFilter EventResult)))
-> GhcjsEventSpec EventResult
-> Identity (GhcjsEventSpec EventResult)
forall (er :: EventTag -> *) (f :: * -> *).
Functor f =>
(DMap EventName (GhcjsEventFilter er)
 -> f (DMap EventName (GhcjsEventFilter er)))
-> GhcjsEventSpec er -> f (GhcjsEventSpec er)
ghcjsEventSpec_filters ((DMap EventName (GhcjsEventFilter EventResult)
  -> Identity (DMap EventName (GhcjsEventFilter EventResult)))
 -> ElementConfig EventResult t GhcjsDomSpace
 -> Identity (ElementConfig EventResult t GhcjsDomSpace))
-> (DMap EventName (GhcjsEventFilter EventResult)
    -> DMap EventName (GhcjsEventFilter EventResult))
-> ElementConfig EventResult t GhcjsDomSpace
-> ElementConfig EventResult t GhcjsDomSpace
forall s t a b. ASetter s t a b -> (a -> b) -> s -> t
%~ EventName en
-> GhcjsEventFilter EventResult en
-> DMap EventName (GhcjsEventFilter EventResult)
-> DMap EventName (GhcjsEventFilter EventResult)
forall {k1} (k2 :: k1 -> *) (f :: k1 -> *) (v :: k1).
GCompare k2 =>
k2 v -> f v -> DMap k2 f -> DMap k2 f
DMap.insert EventName en
en GhcjsEventFilter EventResult en
forall {er :: EventTag -> *} {en :: EventTag}.
GhcjsEventFilter er en
f
  (Element EventResult GhcjsDomSpace t, a) -> a
forall a b. (a, b) -> b
snd ((Element EventResult GhcjsDomSpace t, a) -> a)
-> m (Element EventResult GhcjsDomSpace t, a) -> m a
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Text
-> ElementConfig EventResult t (DomBuilderSpace m)
-> m a
-> m (Element EventResult (DomBuilderSpace m) t, a)
forall t (m :: * -> *) (er :: EventTag -> *) a.
DomBuilder t m =>
Text
-> ElementConfig er t (DomBuilderSpace m)
-> m a
-> m (Element er (DomBuilderSpace m) t, a)
forall (er :: EventTag -> *) a.
Text
-> ElementConfig er t (DomBuilderSpace m)
-> m a
-> m (Element er (DomBuilderSpace m) t, a)
element Text
elementTag ElementConfig EventResult t (DomBuilderSpace m)
ElementConfig EventResult t GhcjsDomSpace
cfg m a
child

elDynHtmlAttr' :: MonadWidget t m => Text -> Map Text Text -> Dynamic t Text -> m (Element EventResult GhcjsDomSpace t)
elDynHtmlAttr' :: forall t (m :: * -> *).
MonadWidget t m =>
Text
-> Map Text Text
-> Dynamic t Text
-> m (Element EventResult GhcjsDomSpace t)
elDynHtmlAttr' Text
elementTag Map Text Text
attrs Dynamic t Text
html = do
  let cfg :: ElementConfig EventResult t GhcjsDomSpace
cfg = ElementConfig EventResult t GhcjsDomSpace
forall a. Default a => a
def ElementConfig EventResult t GhcjsDomSpace
-> (ElementConfig EventResult t GhcjsDomSpace
    -> ElementConfig EventResult t GhcjsDomSpace)
-> ElementConfig EventResult t GhcjsDomSpace
forall a b. a -> (a -> b) -> b
& (Map AttributeName Text -> Identity (Map AttributeName Text))
-> ElementConfig EventResult t GhcjsDomSpace
-> Identity (ElementConfig EventResult t GhcjsDomSpace)
forall a. InitialAttributes a => Lens' a (Map AttributeName Text)
Lens'
  (ElementConfig EventResult t GhcjsDomSpace)
  (Map AttributeName Text)
initialAttributes ((Map AttributeName Text -> Identity (Map AttributeName Text))
 -> ElementConfig EventResult t GhcjsDomSpace
 -> Identity (ElementConfig EventResult t GhcjsDomSpace))
-> Map AttributeName Text
-> ElementConfig EventResult t GhcjsDomSpace
-> ElementConfig EventResult t GhcjsDomSpace
forall s t a b. ASetter s t a b -> b -> s -> t
.~ (Text -> AttributeName) -> Map Text Text -> Map AttributeName Text
forall k2 k1 a. Ord k2 => (k1 -> k2) -> Map k1 a -> Map k2 a
Map.mapKeys (Maybe Text -> Text -> AttributeName
AttributeName Maybe Text
forall a. Maybe a
Nothing) Map Text Text
attrs
  (Element EventResult GhcjsDomSpace t
e, ()
_) <- Text
-> ElementConfig EventResult t (DomBuilderSpace m)
-> m ()
-> m (Element EventResult (DomBuilderSpace m) t, ())
forall t (m :: * -> *) (er :: EventTag -> *) a.
DomBuilder t m =>
Text
-> ElementConfig er t (DomBuilderSpace m)
-> m a
-> m (Element er (DomBuilderSpace m) t, a)
forall (er :: EventTag -> *) a.
Text
-> ElementConfig er t (DomBuilderSpace m)
-> m a
-> m (Element er (DomBuilderSpace m) t, a)
element Text
elementTag ElementConfig EventResult t (DomBuilderSpace m)
ElementConfig EventResult t GhcjsDomSpace
cfg (m () -> m (Element EventResult (DomBuilderSpace m) t, ()))
-> m () -> m (Element EventResult (DomBuilderSpace m) t, ())
forall a b. (a -> b) -> a -> b
$ () -> m ()
forall a. a -> m a
forall (m :: * -> *) a. Monad m => a -> m a
return ()
  Event t ()
postBuild <- m (Event t ())
forall t (m :: * -> *). PostBuild t m => m (Event t ())
getPostBuild
  Event t (Performable m ()) -> m ()
forall t (m :: * -> *).
PerformEvent t m =>
Event t (Performable m ()) -> m ()
performEvent_ (Event t (Performable m ()) -> m ())
-> Event t (Performable m ()) -> m ()
forall a b. (a -> b) -> a -> b
$ JSM () -> Performable m ()
forall (m :: * -> *) a. MonadJSM m => JSM a -> m a
liftJSM (JSM () -> Performable m ())
-> (Text -> JSM ()) -> Text -> Performable m ()
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Element -> Text -> JSM ()
forall (m :: * -> *) self val.
(MonadDOM m, IsElement self, ToJSString val) =>
self -> val -> m ()
Element.setInnerHTML (Element EventResult GhcjsDomSpace t -> RawElement GhcjsDomSpace
forall {k1} {k2} (er :: EventTag -> *) (d :: k1) (t :: k2).
Element er d t -> RawElement d
_element_raw Element EventResult GhcjsDomSpace t
e) (Text -> Performable m ())
-> Event t Text -> Event t (Performable m ())
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> [Event t Text] -> Event t Text
forall {k} (t :: k) a. Reflex t => [Event t a] -> Event t a
leftmost [Dynamic t Text -> Event t Text
forall a. Dynamic t a -> Event t a
forall {k} (t :: k) a. Reflex t => Dynamic t a -> Event t a
updated Dynamic t Text
html, Behavior t Text -> Event t () -> Event t Text
forall {k} (t :: k) b a.
Reflex t =>
Behavior t b -> Event t a -> Event t b
tag (Dynamic t Text -> Behavior t Text
forall a. Dynamic t a -> Behavior t a
forall {k} (t :: k) a. Reflex t => Dynamic t a -> Behavior t a
current Dynamic t Text
html) Event t ()
postBuild]
  Element EventResult GhcjsDomSpace t
-> m (Element EventResult GhcjsDomSpace t)
forall a. a -> m a
forall (m :: * -> *) a. Monad m => a -> m a
return Element EventResult GhcjsDomSpace t
e

elDynHtml' :: MonadWidget t m => Text -> Dynamic t Text -> m (Element EventResult GhcjsDomSpace t)
elDynHtml' :: forall t (m :: * -> *).
MonadWidget t m =>
Text -> Dynamic t Text -> m (Element EventResult GhcjsDomSpace t)
elDynHtml' Text
elementTag = Text
-> Map Text Text
-> Dynamic t Text
-> m (Element EventResult GhcjsDomSpace t)
forall t (m :: * -> *).
MonadWidget t m =>
Text
-> Map Text Text
-> Dynamic t Text
-> m (Element EventResult GhcjsDomSpace t)
elDynHtmlAttr' Text
elementTag Map Text Text
forall a. Monoid a => a
mempty