From e44861c372c58f31c7f71766e15c89ca591918ff Mon Sep 17 00:00:00 2001 From: Ales Guzik Date: Tue, 25 Oct 2016 03:41:27 +0300 Subject: [PATCH 1/2] compile-time transforms --- src/kioo/core.clj | 11 ++++++++++- test/kioo/core_test.cljs | 4 ++++ 2 files changed, 14 insertions(+), 1 deletion(-) diff --git a/src/kioo/core.clj b/src/kioo/core.clj index 70dddfd..309f0b4 100644 --- a/src/kioo/core.clj +++ b/src/kioo/core.clj @@ -7,6 +7,7 @@ [clojure.string :as string] [kioo.html-parser :as parser] [hickory.core :as hickory] + [kioo.common] ; for compile-time transforms [clojure.java.io :as io])) (declare compile component*) @@ -91,9 +92,17 @@ (map? sel) {} :else []) sel)) +(defn apply-and-attach-transforms [node sel trans] + (if-not (map? trans) + (recur node sel {`identity trans}) + (let [[compile-time runtime] (first trans)] + (-> node + (at (eval-selector sel) (eval compile-time)) + (at (eval-selector sel) (attach-transform runtime)))))) + (defn map-trans [node trans-lst] (reduce (fn [node [sel trans]] - (at node (eval-selector sel) (attach-transform trans))) + (apply-and-attach-transforms node sel trans)) node trans-lst)) diff --git a/test/kioo/core_test.cljs b/test/kioo/core_test.cljs index 46d2914..9050deb 100644 --- a/test/kioo/core_test.cljs +++ b/test/kioo/core_test.cljs @@ -21,6 +21,10 @@ (let [comp (component "simple-div.html" {[:div] (content "success")})] (is (= "
success
" (render-dom comp))))) + (testing "compile-time content replace" + (let [comp (component "simple-div.html" + {[:div] {(kioo.common/content "success") (wrap :section)}})] + (is (= "
success
" (render-dom comp))))) (testing "first-of-type naked symbol" (let [comp (component "list.html" [:ul [:li first-of-type]] {})] (is (= "
  • 1
  • " (render-dom comp))))) From 77508f4487217459c6988965feffb0152d2872c8 Mon Sep 17 00:00:00 2001 From: Ales Guzik Date: Wed, 26 Oct 2016 00:51:35 +0300 Subject: [PATCH 2/2] add [] syntax sugar for compile-time (kioo/content) --- src/kioo/core.clj | 15 ++++++++------- test/kioo/core_test.cljs | 6 +++++- 2 files changed, 13 insertions(+), 8 deletions(-) diff --git a/src/kioo/core.clj b/src/kioo/core.clj index 309f0b4..c7c317e 100644 --- a/src/kioo/core.clj +++ b/src/kioo/core.clj @@ -7,7 +7,7 @@ [clojure.string :as string] [kioo.html-parser :as parser] [hickory.core :as hickory] - [kioo.common] ; for compile-time transforms + [kioo.common :as common] [clojure.java.io :as io])) (declare compile component*) @@ -93,12 +93,13 @@ :else []) sel)) (defn apply-and-attach-transforms [node sel trans] - (if-not (map? trans) - (recur node sel {`identity trans}) - (let [[compile-time runtime] (first trans)] - (-> node - (at (eval-selector sel) (eval compile-time)) - (at (eval-selector sel) (attach-transform runtime)))))) + (cond + (vector? trans) (recur node sel {`(common/content) (list* trans)}) + (not (map? trans)) (recur node sel {`identity trans}) + :else (let [[compile-time runtime] (first trans)] + (-> node + (at (eval-selector sel) (eval compile-time)) + (at (eval-selector sel) (attach-transform runtime)))))) (defn map-trans [node trans-lst] (reduce (fn [node [sel trans]] diff --git a/test/kioo/core_test.cljs b/test/kioo/core_test.cljs index 9050deb..3abc117 100644 --- a/test/kioo/core_test.cljs +++ b/test/kioo/core_test.cljs @@ -23,8 +23,12 @@ (is (= "
    success
    " (render-dom comp))))) (testing "compile-time content replace" (let [comp (component "simple-div.html" - {[:div] {(kioo.common/content "success") (wrap :section)}})] + {[:div] {(kioo.common/content "success") (wrap :section {})}})] (is (= "
    success
    " (render-dom comp))))) + (testing "compile-time empty content sugar" + (let [comp (component "simple-div.html" + {[:div] [wrap :section {}]})] + (is (= "
    " (render-dom comp))))) (testing "first-of-type naked symbol" (let [comp (component "list.html" [:ul [:li first-of-type]] {})] (is (= "
  • 1
  • " (render-dom comp)))))