Skip to content

Commit 3bcb9e7

Browse files
committed
fix bad rule id/indexing
- turns out the env* atom was abused harder than we thought - to be functional we have to pass the rule-index all around ... i see now why they used an atom.
1 parent 25e3b36 commit 3bcb9e7

File tree

3 files changed

+63
-48
lines changed

3 files changed

+63
-48
lines changed

src/cljss/builder.clj

Lines changed: 24 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -8,29 +8,30 @@
88
(map? value)))
99

1010
(defn build-styles [cls styles]
11-
(let [pseudo (filterv utils/pseudo? styles)
12-
nested (->> styles
13-
(filterv (comp not utils/pseudo?))
14-
(filterv utils/nested?))
15-
[mstatic mvals] (some-> styles :cljss.core/media ((partial build-media cls)))
16-
styles (dissoc styles :cljss.core/media)
17-
styles (filterv #(and (not (utils/pseudo? %)) (not (utils/nested? %))) styles)
18-
[static vals] (c/collect-styles cls styles)
19-
pstyles (->> pseudo
20-
(reduce
21-
(fn [coll [rule styles]]
22-
(conj coll (c/collect-styles (str cls (subs (name rule) 1)) styles)))
23-
[]))
24-
nstyles (->> nested
25-
(reduce
26-
(fn [coll [rule styles]]
27-
(conj coll (c/collect-styles (str cls " " rule) styles)))
28-
[]))
29-
vals (->> pstyles
30-
(mapcat second)
31-
(into vals)
32-
(concat mvals)
33-
(into []))
11+
(let [rule-index 0
12+
pseudo (filterv utils/pseudo? styles)
13+
nested (->> styles
14+
(filterv (comp not utils/pseudo?))
15+
(filterv utils/nested?))
16+
[mstatic mvals rule-index] (some-> styles :cljss.core/media ((partial build-media cls rule-index)))
17+
styles (dissoc styles :cljss.core/media)
18+
styles (filterv #(and (not (utils/pseudo? %)) (not (utils/nested? %))) styles)
19+
20+
[static vals rule-index] (c/collect-styles cls styles rule-index)
21+
[pstyles rule-index] (c/collect-dynamic-styles
22+
rule-index
23+
pseudo
24+
(fn [rule] (str cls (subs (name rule) 1))))
25+
[nstyles rule-index] (c/collect-dynamic-styles
26+
rule-index
27+
nested
28+
(fn [rule] (str cls " " rule)))
29+
30+
vals (->> pstyles
31+
(mapcat second)
32+
(into vals)
33+
(concat mvals)
34+
(into []))
3435
vals (->> nstyles
3536
(mapcat second)
3637
(into vals))

src/cljss/collect.clj

Lines changed: 25 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -8,19 +8,35 @@
88
(defn varid [cls idx [rule]]
99
[rule (str "--var-" cls "-" idx)])
1010

11-
(defn collect-styles [cls styles]
11+
(defn collect-styles [cls styles rule-index]
1212
(let [dynamic (filterv dynamic? styles)
1313
static (filterv (comp not dynamic?) styles)
14-
[vars _]
15-
(reduce
16-
(fn [[vars idx] ds]
17-
(let [ret (conj vars (varid cls idx ds))]
18-
[ret (inc idx)]))
19-
[[] 0]
20-
dynamic)
14+
[vars rule-index] (reduce
15+
(fn [[vars idx] ds]
16+
(let [ret (conj vars (varid cls idx ds))]
17+
[ret (inc idx)]))
18+
[[] rule-index]
19+
dynamic)
20+
_ (println "static" static)
21+
_ (println "vars" vars)
22+
_ (println "dynamic" dynamic)
2123
vals (mapv (fn [[_ var] [_ exp]] [var exp]) vars dynamic)
24+
_ (println "vals" vals)
2225
static (->> vars
2326
(map (fn [[rule var]] [rule (str "var(" var ")")]))
2427
(concat static)
2528
(build-css cls))]
26-
[static vals]))
29+
[static vals rule-index]))
30+
31+
(defn collect-dynamic-styles [rule-index rules class-generator]
32+
(loop
33+
[idx rule-index
34+
acc []
35+
coll rules]
36+
(if (not (seq coll))
37+
[acc idx]
38+
(let [[rule styles] (first coll)
39+
[static vals nxt-idx] (collect-styles (class-generator rule) styles idx)]
40+
(recur nxt-idx
41+
(conj acc [static vals])
42+
(rest coll))))))

src/cljss/media.clj

Lines changed: 14 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -234,39 +234,37 @@
234234
(clojure.string/join " ")
235235
(str "@media "))))
236236

237-
(defn compile-media-dispatch [styles _]
237+
(defn compile-media-dispatch [styles _ _]
238238
(cond
239239
(contains? styles :media) :media
240240
(contains? styles :styles) :styles))
241241

242242
(defmulti compile-media #'compile-media-dispatch)
243243

244-
(defmethod compile-media :media [{media :media} cls]
244+
(defmethod compile-media :media [{media :media} cls rule-index]
245245
(->> (seq media)
246246
(reduce
247-
(fn [[sstyles svalues] [query styles]]
248-
(let [[static values] (compile-media {:styles styles} cls)
247+
(fn [[sstyles svalues nxt-idx] [query styles]]
248+
(let [[static values nxt-idx] (compile-media {:styles styles} cls nxt-idx)
249249
query (-compile-media-query query)]
250-
[(str sstyles query static) (concat svalues values)]))
251-
["" []])))
250+
[(str sstyles query static) (concat svalues values) nxt-idx]))
251+
["" [] rule-index])))
252252

253-
(defmethod compile-media :styles [{styles :styles} cls]
253+
(defmethod compile-media :styles [{styles :styles} cls rule-index]
254254
(let [pseudo (filterv utils/pseudo? styles)
255-
pstyles (->> pseudo
256-
(reduce
257-
(fn [coll [rule styles]]
258-
(conj coll (c/collect-styles (str cls (subs (name rule) 1)) styles)))
259-
[]))
255+
[pstyles rule-index] (c/collect-dynamic-styles rule-index pseudo (fn [rule] (str cls (subs (name rule) 1))))
256+
260257
styles (filterv (comp not utils/pseudo?) styles)
261-
[static values] (c/collect-styles cls styles)
258+
[static values rule-index] (c/collect-styles cls styles rule-index)
262259
values (->> pstyles
263260
(mapcat second)
264261
(into values))]
265262
[(str "{" (apply str static (map first pstyles)) "}")
266-
values]))
263+
values
264+
rule-index]))
267265

268-
(defn build-media [cls styles]
269-
(compile-media {:media styles} cls))
266+
(defn build-media [cls rule-index styles]
267+
(compile-media {:media styles} cls rule-index))
270268

271269
(comment
272270
(build-media

0 commit comments

Comments
 (0)