aboutsummaryrefslogtreecommitdiff
path: root/dom/css_class.go
diff options
context:
space:
mode:
authorAnhgelus Morhtuuzh <william@herges.fr>2025-12-13 17:15:47 +0000
committerAnhgelus Morhtuuzh <william@herges.fr>2025-12-13 17:15:47 +0000
commit62fa3f77e8215fdaaf72ddb9df4162e0d65148da (patch)
treedbf20dca933996cf253fe2d110d8381b0c407b2d /dom/css_class.go
parentae297bbd117835304b298e7d8a2f914111940e77 (diff)
parent48311424ba2eaac254864c008b6d18e8510f827d (diff)
Merge pull request '[Refactor] Replace manual DOM manipulation in markdown by cleaner one' (#2) from refactor/mardown-dom into main
Reviewed-on: https://git.anhgelus.world/anhgelus/small-web/pulls/2
Diffstat (limited to 'dom/css_class.go')
-rw-r--r--dom/css_class.go45
1 files changed, 45 insertions, 0 deletions
diff --git a/dom/css_class.go b/dom/css_class.go
new file mode 100644
index 0000000..998dd50
--- /dev/null
+++ b/dom/css_class.go
@@ -0,0 +1,45 @@
+package dom
+
+import "strings"
+
+type ClassList map[string]struct{}
+
+func (cl ClassList) set(e Element) Element {
+ if len(cl) == 0 {
+ return e
+ }
+ classes := ""
+ for k := range cl {
+ classes += k + " "
+ }
+ classes = strings.TrimSpace(classes)
+ return e.SetAttribute("class", classes)
+}
+
+func (cl ClassList) Has(v string) bool {
+ _, ok := cl[v]
+ return ok
+}
+
+func (cl ClassList) Add(v string) ClassList {
+ cl[v] = struct{}{}
+ return cl
+}
+
+func (cl ClassList) Remove(v string) ClassList {
+ delete(cl, v)
+ return cl
+}
+
+func (cl ClassList) Toggle(v string) ClassList {
+ if cl.Has(v) {
+ cl.Remove(v)
+ } else {
+ cl.Add(v)
+ }
+ return cl
+}
+
+func NewClassList() ClassList {
+ return ClassList(make(map[string]struct{}))
+}