Skip to content

Instantly share code, notes, and snippets.

@nikopol
Last active September 15, 2019 01:31
Show Gist options
  • Save nikopol/d68700b45319016e7506f694ae50e6e5 to your computer and use it in GitHub Desktop.
Save nikopol/d68700b45319016e7506f694ae50e6e5 to your computer and use it in GitHub Desktop.

Revisions

  1. nikopol revised this gist Oct 25, 2016. 1 changed file with 7 additions and 7 deletions.
    14 changes: 7 additions & 7 deletions dom-core.cljs
    Original file line number Diff line number Diff line change
    @@ -9,7 +9,7 @@
    (defn- nodelist-coll [nodelist]
    (doall (map #(.item nodelist %) (range (.-length nodelist)))))

    (defn- coll [item]
    (defn- coll! [item]
    (cond
    (coll? item) item
    (nil? item) []
    @@ -18,7 +18,7 @@
    (defn +css
    "add classname(s) to given nodes"
    [nodes css]
    (let [cnodes (coll nodes)
    (let [cnodes (coll! nodes)
    +cn (set (str/split css #"\s+"))]
    (doseq [n cnodes]
    (let [c (union (set (str/split (.-className n) #"\s+")) +cn)]
    @@ -28,7 +28,7 @@
    (defn -css
    "remove classname(s) of given nodes"
    [nodes css]
    (let [cnodes (coll nodes)
    (let [cnodes (coll! nodes)
    -cn (set (str/split css #"\s+"))]
    (doseq [n cnodes]
    (let [c (difference (set (str/split (.-className n) #"\s+")) -cn)]
    @@ -38,21 +38,21 @@
    (defn hide
    "hide the given nodes"
    [nodes]
    (doseq [n (coll nodes)]
    (doseq [n (coll! nodes)]
    (set! (.-display (.-style n)) "none"))
    nodes)

    (defn show
    "display the given nodes"
    [nodes]
    (doseq [n (coll nodes)]
    (doseq [n (coll! nodes)]
    (set! (.-display (.-style n)) "block"))
    nodes)

    (defn html
    ([nodes html]
    "setup inner html of given nodes"
    (doseq [n (coll nodes)]
    (doseq [n (coll! nodes)]
    (set! (.-innerHTML n) (or html "")))
    nodes)
    ([html]
    @@ -83,6 +83,6 @@
    [nodes selector]
    (let [dst-node (one selector)]
    (if (not (nil? dst-node))
    (doseq [n (coll nodes)]
    (doseq [n (coll! nodes)]
    (.appendChild dst-node n)))
    nodes))
  2. nikopol revised this gist Oct 25, 2016. 1 changed file with 6 additions and 4 deletions.
    10 changes: 6 additions & 4 deletions dom-core.cljs
    Original file line number Diff line number Diff line change
    @@ -3,15 +3,17 @@
    [clojure.set :refer [difference union]]))

    ; sample usage:
    ; (-> (all ".class") (hide) (+css "titi") 'clear) (html "<span>zob</span>") (show))
    ; (-> (all ".class") (hide) (+css "titi") (clear) (html "<span>zob</span>") (show))


    (defn- nodelist-coll [nodelist]
    (doall (map #(.item nodelist %) (range (.-length nodelist)))))

    (defn- coll [item]
    (if (coll? item)
    item
    (if (nil? item) [] [item])))
    (cond
    (coll? item) item
    (nil? item) []
    [item]))

    (defn +css
    "add classname(s) to given nodes"
  3. nikopol created this gist Oct 25, 2016.
    86 changes: 86 additions & 0 deletions dom-core.cljs
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,86 @@
    (ns dom.core
    (:require [clojure.string :as str]
    [clojure.set :refer [difference union]]))

    ; sample usage:
    ; (-> (all ".class") (hide) (+css "titi") 'clear) (html "<span>zob</span>") (show))

    (defn- nodelist-coll [nodelist]
    (doall (map #(.item nodelist %) (range (.-length nodelist)))))

    (defn- coll [item]
    (if (coll? item)
    item
    (if (nil? item) [] [item])))

    (defn +css
    "add classname(s) to given nodes"
    [nodes css]
    (let [cnodes (coll nodes)
    +cn (set (str/split css #"\s+"))]
    (doseq [n cnodes]
    (let [c (union (set (str/split (.-className n) #"\s+")) +cn)]
    (set! (.-className n) (str/join " " c))))
    nodes))

    (defn -css
    "remove classname(s) of given nodes"
    [nodes css]
    (let [cnodes (coll nodes)
    -cn (set (str/split css #"\s+"))]
    (doseq [n cnodes]
    (let [c (difference (set (str/split (.-className n) #"\s+")) -cn)]
    (set! (.-className n) (str/join " " c))))
    nodes))

    (defn hide
    "hide the given nodes"
    [nodes]
    (doseq [n (coll nodes)]
    (set! (.-display (.-style n)) "none"))
    nodes)

    (defn show
    "display the given nodes"
    [nodes]
    (doseq [n (coll nodes)]
    (set! (.-display (.-style n)) "block"))
    nodes)

    (defn html
    ([nodes html]
    "setup inner html of given nodes"
    (doseq [n (coll nodes)]
    (set! (.-innerHTML n) (or html "")))
    nodes)
    ([html]
    "create html element from an html string,
    returning generated nodes"
    (let [div (.createElement js/document "div")]
    (set! (.-innerHTML div) (or html ""))
    (nodelist-coll (.childNodes div)))))

    (defn clear
    "remove children of given nodes"
    [nodes]
    (html nodes ""))

    (defn all
    "return an HTMLElement collection matching the given selector"
    [selector]
    (let [nodelist (.querySelectorAll js/document selector)]
    (nodelist-coll nodelist)))

    (defn one
    "return the first HTMLElement matching the given selector"
    [selector]
    (first (all selector)))

    (defn append-to
    "append nodes to the first match of given selector"
    [nodes selector]
    (let [dst-node (one selector)]
    (if (not (nil? dst-node))
    (doseq [n (coll nodes)]
    (.appendChild dst-node n)))
    nodes))