diff options
| author | Asko Nõmm <asko@nmm.ee> | 2025-10-08 20:48:49 +0300 |
|---|---|---|
| committer | Asko Nõmm <asko@nmm.ee> | 2025-10-08 20:48:49 +0300 |
| commit | 29c5b153843a29d5e0a7acf4fc78cd00a2c4f02f (patch) | |
| tree | ce1035969acc5ba4e5973f1a850a348bf48fa32a /src/dompa/nodes.clj | |
| parent | 64792f47f54708f9ec46ea7da691ce21981b9605 (diff) | |
Fix CLJS nodes test
Diffstat (limited to 'src/dompa/nodes.clj')
| -rw-r--r-- | src/dompa/nodes.clj | 26 |
1 files changed, 26 insertions, 0 deletions
diff --git a/src/dompa/nodes.clj b/src/dompa/nodes.clj new file mode 100644 index 0000000..53020ba --- /dev/null +++ b/src/dompa/nodes.clj @@ -0,0 +1,26 @@ +(ns dompa.nodes) + +(defmacro $ + "Creates a new node. Particularly useful + where you need compile-time composition over run-time, like when + combined with the `defhtml` macro to create HTML string outputs. + + Usage: + + ```clojure + ($ :div + ($ \"hello world\" )) + ```" + [name & opts] + `(if (string? ~name) + {:node/name :dompa/text + :node/value (str ~name ~@opts)} + (let [opts# (list ~@opts) + first-opt# (first opts#) + attrs?# (and (map? first-opt#) + (not (contains? first-opt# :node/name))) + attrs# (if attrs?# first-opt# {}) + children# (if attrs?# (rest opts#) opts#)] + (cond-> {:node/name ~name} + attrs?# (assoc :node/attrs attrs#) + (seq children#) (assoc :node/children children#))))) |
