Skip to content

Commit 25a3695

Browse files
committed
Updates for 0.12
1 parent 7daceca commit 25a3695

File tree

6 files changed

+240
-302
lines changed

6 files changed

+240
-302
lines changed

bower.json

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -22,19 +22,19 @@
2222
"output"
2323
],
2424
"dependencies": {
25-
"purescript-prelude": "^3.0.0",
26-
"purescript-eff": "^3.0.0",
27-
"purescript-tuples": "^4.0.0",
28-
"purescript-dom": "^4.0.0",
29-
"purescript-maps": "^3.0.0",
30-
"purescript-maybe": "^3.0.0",
31-
"purescript-unsafe-coerce": "^3.0.0",
32-
"purescript-bifunctors": "^3.0.0",
33-
"purescript-refs": "^3.0.0",
34-
"purescript-foreign": "^4.0.0"
25+
"purescript-prelude": "#compiler/0.12",
26+
"purescript-effect": "#compiler/0.12",
27+
"purescript-tuples": "#compiler/0.12",
28+
"purescript-web-html": "#compiler/0.12",
29+
"purescript-foreign-object": "#compiler/0.12",
30+
"purescript-maybe": "#compiler/0.12",
31+
"purescript-unsafe-coerce": "#compiler/0.12",
32+
"purescript-bifunctors": "#compiler/0.12",
33+
"purescript-refs": "#compiler/0.12",
34+
"purescript-foreign": "#compiler/0.12"
3535
},
3636
"devDependencies": {
37-
"purescript-js-timers": "^3.0.0",
38-
"purescript-exists": "^3.0.0"
37+
"purescript-js-timers": "#compiler/0.12",
38+
"purescript-exists": "#compiler/0.12"
3939
}
4040
}

src/Halogen/VDom/DOM.purs

Lines changed: 49 additions & 63 deletions
Original file line numberDiff line numberDiff line change
@@ -10,36 +10,35 @@ module Halogen.VDom.DOM
1010
) where
1111

1212
import Prelude
13-
import Control.Monad.Eff (Eff, foreachE)
1413

1514
import Data.Array as Array
1615
import Data.Function.Uncurried as Fn
1716
import Data.Maybe (Maybe(..))
1817
import Data.Nullable (toNullable)
1918
import 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
2421
import Halogen.VDom.Machine (Step(..), Machine)
2522
import Halogen.VDom.Machine as Machine
2623
import Halogen.VDom.Types (VDom(..), ElemSpec(..), Namespace(..), runGraft)
2724
import 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
5652
buildVDom 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
7062
buildText (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

9486
buildElem
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
10092
buildElem (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

155147
buildKeyed
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
161153
buildKeyed (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
221209
buildWidget (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
240226
eqElemSpec = Fn.mkFn2 \a b →
241227
case a, b of
242228
ElemSpec ns1 name1 _, ElemSpec ns2 name2 _ | name1 == name2 →

0 commit comments

Comments
 (0)