File tree Expand file tree Collapse file tree
Expand file tree Collapse file tree Original file line number Diff line number Diff line change 1- (ns dompa.nodes )
1+ (ns dompa.nodes
2+ (:require [clojure.zip :as zip]))
23
34(def ^:private default-void-nodes
45 #{:!doctype :!DOCTYPE :area :base :br :col :embed :hr :img :input
5051 updated-nodes))
5152 (reduce [] nodes)))
5253
54+ (defn zip
55+ " Creates a zipper for given a given `node`."
56+ [node]
57+ (zip/zipper
58+ (fn branch? [node]
59+ (boolean (seq (:node/children node))))
60+ (fn children [node]
61+ (:node/children node))
62+ (fn make-node [node children]
63+ (assoc node :node/children children))
64+ node))
65+
5366(defn ->html
5467 " Transform a vector of `nodes` into an HTML string.
5568
Original file line number Diff line number Diff line change 11(ns dompa.nodes-test
2- #? (:clj (:require [clojure.test :refer [deftest is testing]]
3- [dompa.nodes :refer [$ defhtml traverse ->html]]
4- [dompa.html :as html]))
2+ #? (:clj (:require
3+ [clojure.test :refer [deftest is testing]]
4+ [clojure.zip :as zip]
5+ [dompa.html :as html]
6+ [dompa.nodes :as nodes :refer [$ defhtml ]]))
57 #? (:cljs (:require [cljs.test :refer-macros [deftest testing is]]
6- [dompa.nodes :refer [$ traverse ->html] :refer-macros [defhtml ]]
8+ [clojure.zip :as zip]
9+ [dompa.nodes :as nodes :refer [$] :refer-macros [defhtml ]]
710 [dompa.html :as html])))
811
912(defhtml hello [who]
1821 ($ :ul
1922 (->> items
2023 (map (fn [item]
21- ($ :li ($ item))))
24+ ($ :li ($ item))))
2225 (into []))))
2326
2427(deftest list-items-test
5356 node))]
5457 (is (= " <div>world hello</div>"
5558 (-> (html/->nodes " <div>hello world</div>" )
56- (traverse traverser-fn)
57- ->html)))))
59+ (nodes/traverse traverser-fn)
60+ nodes/->html)))))
61+
62+ (deftest zip-test
63+ (let [nodes (html/->nodes " <div><p>hello</p><p>world</p></div>" )
64+ zipper (nodes/zip (first nodes))]
65+ (is (= :div
66+ (:node/name (zip/node zipper))))
67+ (is (= " hello"
68+ (-> zipper
69+ zip/down
70+ zip/down
71+ zip/node
72+ :node/value )))))
You can’t perform that action at this time.
0 commit comments