From 2362996d9788638e139c3102117dcd2f43e9466b Mon Sep 17 00:00:00 2001 From: Asko Nõmm Date: Mon, 22 Sep 2025 01:32:40 +0300 Subject: Refactor into a macro --- src/dompa/utils.cljc | 47 ++++++++++++++++------------------------------- 1 file changed, 16 insertions(+), 31 deletions(-) (limited to 'src') diff --git a/src/dompa/utils.cljc b/src/dompa/utils.cljc index 5e57e2c..1a6bff7 100644 --- a/src/dompa/utils.cljc +++ b/src/dompa/utils.cljc @@ -1,36 +1,21 @@ (ns dompa.utils) -(defn- make-node - [name & opts] - (let [node {:name name}] - (if (get (first opts) :name) - (merge - node - (when-not (empty? opts) - {:children opts})) - (let [attrs (first opts) - [_ & children] opts] - (merge - node - {:attrs attrs} - (when-not (empty? children) - {:children children})))))) - -(defn doctype [] - (make-node :!DOCTYPE {:html true})) - -(defn head [& opts] - (make-node :head opts)) - -(defn body [& opts] - (make-node :body opts)) - -(defn span [& opts] - (make-node :span opts)) +(defmacro $ [name & opts] + (let [node# {:name (keyword name)} + attrs? (map? (first opts)) + attrs (if attrs? (first opts) {}) + children (if attrs? (rest opts) opts)] + (merge + node# + (when attrs? + {:attrs attrs}) + (when-not (empty? children) + {:children (into [] children)})))) (comment (list - (doctype) - (head) - (body - (span {:class "test"} (span {:class "test2"}))))) \ No newline at end of file + ($ doctype {:html true}) + ($ head) + ($ body + ($ span {:class "test"} + ($ span {:class "test2"}))))) \ No newline at end of file -- cgit v1.2.3