Lots of less customization when creating and editing forms
This commit is contained in:
98
src/clj/auto_ap/ssr/hiccup_helper.clj
Normal file
98
src/clj/auto_ap/ssr/hiccup_helper.clj
Normal file
@@ -0,0 +1,98 @@
|
||||
(ns auto-ap.ssr.hiccup-helper
|
||||
(:require [clojure.string :as str]
|
||||
[hiccup2.core :as hiccup]
|
||||
[hiccup.util :as hu]
|
||||
[clojure.set :as set]))
|
||||
|
||||
|
||||
(defprotocol ClassHelper
|
||||
(add-class [this add])
|
||||
(remove-class [this remove])
|
||||
(replace-class [this remove add])
|
||||
(remove-wildcard [this wildcard])
|
||||
(replace-wildcard [this wildcard add])
|
||||
(replace-tw [this add]))
|
||||
|
||||
(defn string->class-list [n]
|
||||
(let [class-set (atom (set (str/split (or n "") #" ")))]
|
||||
(reify
|
||||
ClassHelper
|
||||
(add-class [this add]
|
||||
(if (sequential? add)
|
||||
(swap! class-set into add)
|
||||
(swap! class-set into (str/split (str (or add "")) #" ")))
|
||||
this)
|
||||
(remove-class [this remove]
|
||||
(if (sequential? remove)
|
||||
(swap! class-set set/difference (set remove))
|
||||
(swap! class-set disj remove))
|
||||
this)
|
||||
(replace-class [this remove add]
|
||||
(remove-class this remove)
|
||||
(add-class this add)
|
||||
this)
|
||||
(remove-wildcard [this wildcard]
|
||||
(if (sequential? wildcard)
|
||||
(reduce
|
||||
remove-wildcard
|
||||
this
|
||||
wildcard)
|
||||
(reduce
|
||||
remove-class
|
||||
this
|
||||
(filter (fn [c]
|
||||
(str/starts-with? c wildcard)
|
||||
) @class-set)))
|
||||
this)
|
||||
(replace-wildcard [this wildcard add]
|
||||
(remove-wildcard this wildcard)
|
||||
(add-class this add)
|
||||
this)
|
||||
(replace-tw [this add]
|
||||
;; TODO
|
||||
)
|
||||
Object
|
||||
(toString [this]
|
||||
(str/join " " @class-set)))))
|
||||
|
||||
(extend-protocol ClassHelper
|
||||
String
|
||||
(add-class [this add]
|
||||
(add-class (string->class-list this) add))
|
||||
(remove-class [this remove]
|
||||
(remove-class (string->class-list this) remove)
|
||||
)
|
||||
(replace-class [this remove add]
|
||||
(replace-class (string->class-list this) remove add))
|
||||
(remove-wildcard [this wildcard]
|
||||
(remove-wildcard (string->class-list this) wildcard))
|
||||
(replace-wildcard [this wildcard add]
|
||||
(replace-wildcard (string->class-list this) wildcard add))
|
||||
(add-tw [this tw]
|
||||
(replace-tw (string->class-list this)
|
||||
tw)
|
||||
))
|
||||
|
||||
|
||||
(str (hiccup/html [:div {:class (-> "hello bryce hello-1 hello-2"
|
||||
(replace-wildcard ["hello-" "b"] ["hi" "there"]))}]))
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user