Lots of less customization when creating and editing forms

This commit is contained in:
2023-10-20 11:38:29 -07:00
parent e3443a3dd8
commit c0db7eb763
7 changed files with 318 additions and 91 deletions

View 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"]))}]))