summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/dompa/coordinates.cljc8
-rw-r--r--src/dompa/nodes.cljc17
-rw-r--r--src/dompa/utils.cljc48
3 files changed, 40 insertions, 33 deletions
diff --git a/src/dompa/coordinates.cljc b/src/dompa/coordinates.cljc
index abaf233..4f9a436 100644
--- a/src/dompa/coordinates.cljc
+++ b/src/dompa/coordinates.cljc
@@ -259,13 +259,13 @@
[node-html node-children]
(let [node-name (html-str->node-name node-html)]
(merge
- {:name node-name}
+ {:node/name node-name}
(when (= node-name :dompa/text)
- {:value node-html})
+ {:node/value node-html})
(when-let [attrs (html-str->node-attrs node-html)]
- {:attrs attrs})
+ {:node/attrs attrs})
(when node-children
- {:children node-children}))))
+ {:node/children node-children}))))
(defn ->nodes
"Transform given `html` according to given `coordinates` into
diff --git a/src/dompa/nodes.cljc b/src/dompa/nodes.cljc
index cf79e21..9ecc95f 100644
--- a/src/dompa/nodes.cljc
+++ b/src/dompa/nodes.cljc
@@ -13,17 +13,17 @@
(defn- node->html-reducer-fn
[void-nodes nodes->html-fn]
(fn [html node]
- (let [node-name (-> node :name name)
- node-attrs (reduce-kv node-attrs-reducer "" (-> node :attrs))]
+ (let [node-name (-> node :node/name name)
+ node-attrs (reduce-kv node-attrs-reducer "" (-> node :node/attrs))]
(cond
- (= (-> node :name) :dompa/text)
- (str html (-> node :value))
+ (= (-> node :node/name) :dompa/text)
+ (str html (-> node :node/value))
- (contains? void-nodes (-> node :name))
+ (contains? void-nodes (-> node :node/name))
(str html "<" node-name node-attrs">")
:else
- (let [value (nodes->html-fn (-> node :children))]
+ (let [value (nodes->html-fn (-> node :node/children))]
(str html "<" node-name node-attrs ">" value "</" node-name ">"))))))
(defn traverse
@@ -35,8 +35,8 @@
[nodes traverser-fn]
(-> (fn [updated-nodes node]
(if-let [updated-node (traverser-fn node)]
- (let [children (traverse (-> updated-node :children) traverser-fn)]
- (conj updated-nodes (assoc updated-node :children children)))
+ (let [children (traverse (-> updated-node :node/children) traverser-fn)]
+ (conj updated-nodes (assoc updated-node :node/children children)))
updated-nodes))
(reduce [] nodes)))
@@ -61,6 +61,7 @@
- `:wbr`
"
([nodes]
+ (prn "nodes: " nodes)
(->html nodes {:void-nodes default-void-nodes}))
([nodes {:keys [void-nodes]}]
(-> (node->html-reducer-fn void-nodes ->html)
diff --git a/src/dompa/utils.cljc b/src/dompa/utils.cljc
index 285566d..ea25d68 100644
--- a/src/dompa/utils.cljc
+++ b/src/dompa/utils.cljc
@@ -1,34 +1,40 @@
(ns dompa.utils
(:require [dompa.nodes :as nodes]))
-(defmacro $ [name & opts]
+(defmacro defhtml [name & args-and-elements]
+ (let [[args & elements] args-and-elements]
+ `(defn ~name ~args
+ (nodes/->html (vector ~@elements)))))
+
+(defn $ [name & opts]
(if (string? name)
- {:name :dompa/text
- :value name}
- (let [node {:name name}
- attrs? (map? (first opts))
+ {:node/name :dompa/text
+ :node/value (str name (apply str opts))}
+ (let [node {:node/name name}
+ attrs? (not (get (first opts) :node/name))
attrs (if attrs? (first opts) {})
children (if attrs? (rest opts) opts)]
(merge
node
(when attrs?
- {:attrs attrs})
+ {:node/attrs attrs})
(when-not (empty? children)
- {:children (into [] children)})))))
+ {:node/children children})))))
+
+(defhtml page
+ [test]
+ ($ :!doctype {:html true})
+ ($ :html {:lang "en"}
+ ($ :head
+ ($ :meta {:charset "utf-8"})
+ ($ :link {:rel "stylesheet" :href "style.css"}))
+ ($ :body
+ ($ :span {:class "test"})
+ ($ :span {:class "test2"}
+ ($ "hello" test)))))
-(defn- page []
- (list
- ($ :!doctype {:html true})
- ($ :html {:lang "en"}
- ($ :head
- ($ :meta {:charset "utf-8"})
- ($ :link {:rel "stylesheet" :href "style.css"}))
- ($ :body
- ($ :span {:class "test"}
- ($ :span {:class "test2"}
- ($ "hello, world.")))))))
+(prn (page "world"))
(comment
- ($ "asdasd")
- (page)
- (nodes/->html (page))) \ No newline at end of file
+ ($ :div {:class "test"}
+ ($ "asdasd" "asd"))) \ No newline at end of file