forked from googlecodelabs/tools
-
Notifications
You must be signed in to change notification settings - Fork 0
/
itemslist.go
54 lines (48 loc) · 1.33 KB
/
itemslist.go
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
package nodes
// NewItemsListNode creates a new ItemsListNode of type NodeItemsList,
// which defaults to an unordered list.
// Provide a positive start to make this a numbered list.
// NodeItemsCheck and NodeItemsFAQ are always unnumbered.
func NewItemsListNode(typ string, start int) *ItemsListNode {
iln := ItemsListNode{
node: node{typ: NodeItemsList},
// TODO document this
ListType: typ,
Start: start,
}
iln.MutateBlock(true)
return &iln
}
// ItemsListNode containts sets of ListNode.
// Non-zero ListType indicates an ordered list.
type ItemsListNode struct {
node
ListType string
Start int
Items []*ListNode
}
// Empty returns true if every item has empty content.
func (il *ItemsListNode) Empty() bool {
for _, i := range il.Items {
if !i.Empty() {
return false
}
}
return true
}
// NewItem creates a new ListNode and adds it to il.Items.
func (il *ItemsListNode) NewItem(nodes ...Node) *ListNode {
n := NewListNode(nodes...)
il.Items = append(il.Items, n)
return n
}
// IsItemsList returns true if t is one of ItemsListNode types.
func IsItemsList(t NodeType) bool {
return t&(NodeItemsList|NodeItemsCheck|NodeItemsFAQ) != 0
}
// MutateType sets the items list's node type if the given type is an items list type.
func (il *ItemsListNode) MutateType(t NodeType) {
if IsItemsList(t) {
il.typ = t
}
}