diff options
Diffstat (limited to 'src/dompa/core.clj')
| -rw-r--r-- | src/dompa/core.clj | 37 |
1 files changed, 34 insertions, 3 deletions
diff --git a/src/dompa/core.clj b/src/dompa/core.clj index b97d5f2..d8fff41 100644 --- a/src/dompa/core.clj +++ b/src/dompa/core.clj @@ -4,10 +4,41 @@ [dompa.nodes :refer [coordinates->nodes]])) (defn html->nodes [html] - (let [coordinates (html->coordinates html) - nodes (coordinates->nodes html coordinates)] + (->> html + html->coordinates + (coordinates->nodes html))) + +(defn nodes->html [nodes] + (reduce + (fn [html node] + (cond + (= (-> node :name) :dompa/text) + (str html (-> node :value)) + + :else + (let [node-name (-> node :name name) + node-child-html (nodes->html (-> node :children))] + (str html "<" node-name ">" node-child-html "</" node-name ">")))) + "" nodes)) +(defn traverse-nodes [nodes pred] + (reduce + (fn [updated-nodes node] + (if-let [updated-node (pred node)] + (let [children (traverse-nodes (-> updated-node :children) pred)] + (conj updated-nodes (assoc updated-node :children children))) + updated-nodes)) + [] + nodes)) + +(defn traverse-html [html pred] + (-> (html->nodes html) + (traverse-nodes pred) + nodes->html)) + (comment + (traverse-html "<div>asdasd<span>hello</span></div>" #(when-not (= (-> % :name) :span) + %)) (html->coordinates "<div>hello<span>asd</span><strong>asdasdadad<img></strong></div>hello some text<div>another root element</div>") - (html->nodes "<div>hello<span>asd</span><strong>asdasdadad</strong></div>"))
\ No newline at end of file + (html->nodes "<div>hello<span><img src=\"test.jpg\" ckcche/>asd</span><strong>asdasdadad</strong>"))
\ No newline at end of file |
