summaryrefslogtreecommitdiff
path: root/src/dompa/core.clj
diff options
context:
space:
mode:
authorAsko Nõmm <asko@nmm.ee>2025-08-30 16:18:44 +0300
committerAsko Nõmm <asko@nmm.ee>2025-08-30 16:18:44 +0300
commit8080d2b0044b348210622185b80c5f4514bb52e2 (patch)
tree655c9bd9884eb735c54cf9bb6f0404ecf32a4ee1 /src/dompa/core.clj
parent41c1d9eadd3a5cb0a804390edca592c197f49d33 (diff)
Getting there ...
Diffstat (limited to 'src/dompa/core.clj')
-rw-r--r--src/dompa/core.clj37
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