From d695b39edf898e056a8de3724a020f15754fcea9 Mon Sep 17 00:00:00 2001 From: Anhgelus Morhtuuzh Date: Sat, 13 Dec 2025 17:17:14 +0100 Subject: feat(dom): type to represents css class --- dom/css_class.go | 43 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 43 insertions(+) create mode 100644 dom/css_class.go (limited to 'dom/css_class.go') diff --git a/dom/css_class.go b/dom/css_class.go new file mode 100644 index 0000000..633869e --- /dev/null +++ b/dom/css_class.go @@ -0,0 +1,43 @@ +package dom + +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 = classes[:len(cl)-1] + 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{})) +} -- cgit v1.2.3