@@ -10,36 +10,35 @@ module Halogen.VDom.DOM
1010 ) where
1111
1212import Prelude
13- import Control.Monad.Eff (Eff , foreachE )
1413
1514import Data.Array as Array
1615import Data.Function.Uncurried as Fn
1716import Data.Maybe (Maybe (..))
1817import Data.Nullable (toNullable )
1918import Data.Tuple (Tuple (..), fst )
20-
21- import DOM (DOM )
22- import DOM.Node.Types (Element , Node , Document , elementToNode ) as DOM
23-
19+ import Effect (Effect , foreachE )
20+ import Effect.Uncurried as EFn
2421import Halogen.VDom.Machine (Step (..), Machine )
2522import Halogen.VDom.Machine as Machine
2623import Halogen.VDom.Types (VDom (..), ElemSpec (..), Namespace (..), runGraft )
2724import Halogen.VDom.Util as Util
25+ import Web.DOM.Document (Document ) as DOM
26+ import Web.DOM.Element (Element ) as DOM
27+ import Web.DOM.Element as DOMElement
28+ import Web.DOM.Node (Node ) as DOM
2829
29- type VDomMachine eff a b = Machine ( Eff eff ) a b
30+ type VDomMachine a b = Machine Effect a b
3031
31- type VDomStep eff a b = Eff eff (Step ( Eff eff ) a b )
32+ type VDomStep a b = Effect (Step Effect a b )
3233
3334-- | Widget machines recursively reference the configured spec to potentially
3435-- | enable recursive trees of Widgets.
35- newtype VDomSpec eff a w = VDomSpec
36- { buildWidget ∷ VDomSpec eff a w → VDomMachine eff w DOM.Node
37- , buildAttributes ∷ DOM.Element → VDomMachine eff a Unit
36+ newtype VDomSpec a w = VDomSpec
37+ { buildWidget ∷ VDomSpec a w → VDomMachine w DOM.Node
38+ , buildAttributes ∷ DOM.Element → VDomMachine a Unit
3839 , document ∷ DOM.Document
3940 }
4041
41- type VDomEffects eff = (dom ∷ DOM | eff )
42-
4342-- | Starts an initial `VDom` machine by providing a `VDomSpec`.
4443-- |
4544-- | ```purescript
@@ -49,10 +48,7 @@ type VDomEffects eff = (dom ∷ DOM | eff)
4948-- | machine3 ← Machine.step machine2 vdomTree3
5049-- | ...
5150-- | ````
52- buildVDom
53- ∷ ∀ eff a w
54- . VDomSpec (VDomEffects eff ) a w
55- → VDomMachine (VDomEffects eff ) (VDom a w ) DOM.Node
51+ buildVDom ∷ ∀ a w . VDomSpec a w → VDomMachine (VDom a w ) DOM.Node
5652buildVDom spec = render
5753 where
5854 render = case _ of
@@ -62,15 +58,11 @@ buildVDom spec = render
6258 Widget w → buildWidget spec w
6359 Grafted g → buildVDom spec (runGraft g)
6460
65- buildText
66- ∷ ∀ eff a w
67- . VDomSpec (VDomEffects eff ) a w
68- → String
69- → VDomStep (VDomEffects eff ) (VDom a w ) DOM.Node
61+ buildText ∷ ∀ a w . VDomSpec a w → String → VDomStep (VDom a w ) DOM.Node
7062buildText (VDomSpec spec) = render
7163 where
7264 render s = do
73- node ← Fn .runFn2 Util .createTextNode s spec.document
65+ node ← EFn .runEffectFn2 Util .createTextNode s spec.document
7466 pure (Step node (Fn .runFn2 patch node s) (done node))
7567
7668 patch = Fn .mkFn2 \node s1 → case _ of
@@ -81,33 +73,33 @@ buildText (VDomSpec spec) = render
8173 case s1 == s2 of
8274 true → pure res
8375 _ → do
84- Fn .runFn2 Util .setTextContent s2 node
76+ EFn .runEffectFn2 Util .setTextContent s2 node
8577 pure res
8678 vdom → do
8779 done node
8880 buildVDom (VDomSpec spec) vdom
8981
9082 done node = do
9183 parent ← pure (Util .unsafeParent node)
92- Fn .runFn2 Util .removeChild node parent
84+ EFn .runEffectFn2 Util .removeChild node parent
9385
9486buildElem
95- ∷ ∀ eff a w
96- . VDomSpec ( VDomEffects eff ) a w
87+ ∷ ∀ a w
88+ . VDomSpec a w
9789 → ElemSpec a
9890 → Array (VDom a w )
99- → VDomStep (VDomEffects eff ) ( VDom a w ) DOM.Node
91+ → VDomStep (VDom a w ) DOM.Node
10092buildElem (VDomSpec spec) = render
10193 where
10294 render es1@(ElemSpec ns1 name1 as1) ch1 = do
103- el ← Fn .runFn3 Util .createElement (toNullable ns1) name1 spec.document
95+ el ← EFn .runEffectFn3 Util .createElement (toNullable ns1) name1 spec.document
10496 let
105- node = DOM .elementToNode el
106- onChild = Fn .mkFn2 \ix child → do
97+ node = DOMElement .toNode el
98+ onChild = EFn .mkEffectFn2 \ix child → do
10799 res@Step n m h ← buildVDom (VDomSpec spec) child
108- Fn .runFn3 Util .insertChildIx ix n node
100+ EFn .runEffectFn3 Util .insertChildIx ix n node
109101 pure res
110- steps ← Fn .runFn2 Util .forE ch1 onChild
102+ steps ← EFn .runEffectFn2 Util .forE ch1 onChild
111103 attrs ← spec.buildAttributes el as1
112104 pure
113105 (Step node
@@ -127,16 +119,16 @@ buildElem (VDomSpec spec) = render
127119 (Fn .runFn3 done node attrs' ch1))
128120 _, _ → do
129121 let
130- onThese = Fn .mkFn3 \ix (prev@Step n step halt) vdom → do
122+ onThese = EFn .mkEffectFn3 \ix (prev@Step n step halt) vdom → do
131123 res@Step n' m' h' ← step vdom
132- Fn .runFn3 Util .insertChildIx ix n' node
124+ EFn .runEffectFn3 Util .insertChildIx ix n' node
133125 pure res
134- onThis = Fn .mkFn2 \ix (Step n _ halt) → halt
135- onThat = Fn .mkFn2 \ix vdom → do
126+ onThis = EFn .mkEffectFn2 \ix (Step n _ halt) → halt
127+ onThat = EFn .mkEffectFn2 \ix vdom → do
136128 res@Step n m h ← buildVDom (VDomSpec spec) vdom
137- Fn .runFn3 Util .insertChildIx ix n node
129+ EFn .runEffectFn3 Util .insertChildIx ix n node
138130 pure res
139- steps ← Fn .runFn5 Util .diffWithIxE ch1 ch2 onThese onThis onThat
131+ steps ← EFn .runEffectFn5 Util .diffWithIxE ch1 ch2 onThese onThis onThat
140132 attrs' ← Machine .step attrs as2
141133 pure
142134 (Step node
@@ -148,27 +140,27 @@ buildElem (VDomSpec spec) = render
148140
149141 done = Fn .mkFn3 \node attrs steps → do
150142 parent ← pure (Util .unsafeParent node)
151- Fn .runFn2 Util .removeChild node parent
143+ EFn .runEffectFn2 Util .removeChild node parent
152144 foreachE steps Machine .halt
153145 Machine .halt attrs
154146
155147buildKeyed
156- ∷ ∀ eff a w
157- . VDomSpec ( VDomEffects eff ) a w
148+ ∷ ∀ a w
149+ . VDomSpec a w
158150 → ElemSpec a
159151 → Array (Tuple String (VDom a w ))
160- → VDomStep (VDomEffects eff ) ( VDom a w ) DOM.Node
152+ → VDomStep (VDom a w ) DOM.Node
161153buildKeyed (VDomSpec spec) = render
162154 where
163155 render es1@(ElemSpec ns1 name1 as1) ch1 = do
164- el ← Fn .runFn3 Util .createElement (toNullable ns1) name1 spec.document
156+ el ← EFn .runEffectFn3 Util .createElement (toNullable ns1) name1 spec.document
165157 let
166- node = DOM .elementToNode el
167- onChild = Fn .mkFn3 \k ix (Tuple _ vdom) → do
158+ node = DOMElement .toNode el
159+ onChild = EFn .mkEffectFn3 \k ix (Tuple _ vdom) → do
168160 res@Step n m h ← buildVDom (VDomSpec spec) vdom
169- Fn .runFn3 Util .insertChildIx ix n node
161+ EFn .runEffectFn3 Util .insertChildIx ix n node
170162 pure res
171- steps ← Fn .runFn3 Util .strMapWithIxE ch1 fst onChild
163+ steps ← EFn .runEffectFn3 Util .strMapWithIxE ch1 fst onChild
172164 attrs ← spec.buildAttributes el as1
173165 pure
174166 (Step node
@@ -188,16 +180,16 @@ buildKeyed (VDomSpec spec) = render
188180 (Fn .runFn3 done node attrs' ch1))
189181 _, len2 → do
190182 let
191- onThese = Fn .mkFn4 \k ix' (Step n step _) (Tuple _ vdom) → do
183+ onThese = EFn .mkEffectFn4 \k ix' (Step n step _) (Tuple _ vdom) → do
192184 res@Step n' m' h' ← step vdom
193- Fn .runFn3 Util .insertChildIx ix' n' node
185+ EFn .runEffectFn3 Util .insertChildIx ix' n' node
194186 pure res
195- onThis = Fn .mkFn2 \k (Step n _ halt) → halt
196- onThat = Fn .mkFn3 \k ix (Tuple _ vdom) → do
187+ onThis = EFn .mkEffectFn2 \k (Step n _ halt) → halt
188+ onThat = EFn .mkEffectFn3 \k ix (Tuple _ vdom) → do
197189 res@Step n' m' h' ← buildVDom (VDomSpec spec) vdom
198- Fn .runFn3 Util .insertChildIx ix n' node
190+ EFn .runEffectFn3 Util .insertChildIx ix n' node
199191 pure res
200- steps ← Fn .runFn6 Util .diffWithKeyAndIxE ch1 ch2 fst onThese onThis onThat
192+ steps ← EFn .runEffectFn6 Util .diffWithKeyAndIxE ch1 ch2 fst onThese onThis onThat
201193 attrs' ← Machine .step attrs as2
202194 pure
203195 (Step node
@@ -209,15 +201,11 @@ buildKeyed (VDomSpec spec) = render
209201
210202 done = Fn .mkFn3 \node attrs steps → do
211203 parent ← pure (Util .unsafeParent node)
212- Fn .runFn2 Util .removeChild node parent
213- Fn .runFn2 Util .forInE steps (Fn .mkFn2 \_ (Step _ _ halt) → halt)
204+ EFn .runEffectFn2 Util .removeChild node parent
205+ EFn .runEffectFn2 Util .forInE steps (EFn .mkEffectFn2 \_ (Step _ _ halt) → halt)
214206 Machine .halt attrs
215207
216- buildWidget
217- ∷ ∀ eff a w
218- . VDomSpec (VDomEffects eff ) a w
219- → w
220- → VDomStep (VDomEffects eff ) (VDom a w ) DOM.Node
208+ buildWidget ∷ ∀ a w . VDomSpec a w → w → VDomStep (VDom a w ) DOM.Node
221209buildWidget (VDomSpec spec) = render
222210 where
223211 render w = do
@@ -234,9 +222,7 @@ buildWidget (VDomSpec spec) = render
234222 halt
235223 buildVDom (VDomSpec spec) vdom
236224
237- eqElemSpec
238- ∷ ∀ a
239- . Fn.Fn2 (ElemSpec a ) (ElemSpec a ) Boolean
225+ eqElemSpec ∷ ∀ a . Fn.Fn2 (ElemSpec a ) (ElemSpec a ) Boolean
240226eqElemSpec = Fn .mkFn2 \a b →
241227 case a, b of
242228 ElemSpec ns1 name1 _, ElemSpec ns2 name2 _ | name1 == name2 →
0 commit comments