-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathclassList.go
More file actions
78 lines (67 loc) · 1.74 KB
/
classList.go
File metadata and controls
78 lines (67 loc) · 1.74 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
package GoHtml
import (
"strings"
)
type ClassList struct {
classes map[string]struct{}
}
// NewClassList returns a new empty ClassList.
func NewClassList() ClassList {
classList := ClassList{
classes: make(map[string]struct{}),
}
return classList
}
// AppendClass append className to classList. className that contains multiple classes is also a valid className.
func (classList ClassList) AppendClass(className string) {
classes := strings.SplitSeq(className, " ")
for v := range classes {
classList.classes[strings.TrimSpace(v)] = struct{}{}
}
}
// DecodeFrom append classes in the node to classList.
// If node is nil SetClass does nothing.
func (classList ClassList) DecodeFrom(node *Node) {
if node == nil {
return
}
classes, _ := node.GetAttribute("class")
classList.AppendClass(classes)
}
// Contains returns whether the className exists or not.
func (classList ClassList) Contains(className string) bool {
classes := strings.SplitSeq(className, " ")
for v := range classes {
_, ok := classList.classes[strings.TrimSpace(v)]
if !ok {
return false
}
}
return true
}
// DeleteClass deletes the specified classes in className.
func (classList ClassList) DeleteClass(className string) {
classes := strings.SplitSeq(className, " ")
for v := range classes {
delete(classList.classes, strings.TrimSpace(v))
}
}
// Encode returns the full className.
func (classList ClassList) Encode() string {
classes := ""
for v := range classList.classes {
if classes != ""{
classes+=" "
}
classes+=v
}
return classes
}
// EncodeTo encodes classNames for the node.
// If node is nil EncodeTo does nothing.
func (classList ClassList) EncodeTo(node *Node){
if node == nil {
return
}
node.SetAttribute("class", classList.Encode())
}