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
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
|
// Package el provides shortcuts and helpers to common HTML elements.
// See https://developer.mozilla.org/en-US/docs/Web/HTML/Element for a list of elements.
package el
import (
"strings"
g "github.com/maragudk/gomponents"
)
// Document returns an special kind of Node that prefixes its children with the string "<!doctype html>".
func Document(children ...g.Node) g.NodeFunc {
return func() string {
var b strings.Builder
b.WriteString("<!doctype html>")
for _, c := range children {
b.WriteString(c.Render())
}
return b.String()
}
}
// HTML returns an element with name "html" and the given children.
func HTML(children ...g.Node) g.NodeFunc {
return g.El("html", children...)
}
// Head returns an element with name "head" and the given children.
func Head(children ...g.Node) g.NodeFunc {
return g.El("head", children...)
}
// Body returns an element with name "body" and the given children.
func Body(children ...g.Node) g.NodeFunc {
return g.El("body", children...)
}
// Title returns an element with name "title" and a single Text child.
func Title(title string) g.NodeFunc {
return g.El("title", g.Text(title))
}
func Meta(children ...g.Node) g.NodeFunc {
return g.El("meta", children...)
}
func Link(children ...g.Node) g.NodeFunc {
return g.El("link", children...)
}
func Style(children ...g.Node) g.NodeFunc {
return g.El("style", children...)
}
func Div(children ...g.Node) g.NodeFunc {
return g.El("div", children...)
}
func Span(children ...g.Node) g.NodeFunc {
return g.El("span", children...)
}
func A(href string, children ...g.Node) g.NodeFunc {
return g.El("a", prepend(g.Attr("href", href), children)...)
}
func P(children ...g.Node) g.NodeFunc {
return g.El("p", children...)
}
func H1(text string, children ...g.Node) g.NodeFunc {
return g.El("h1", prepend(g.Text(text), children)...)
}
func H2(text string, children ...g.Node) g.NodeFunc {
return g.El("h2", prepend(g.Text(text), children)...)
}
func H3(text string, children ...g.Node) g.NodeFunc {
return g.El("h3", prepend(g.Text(text), children)...)
}
func H4(text string, children ...g.Node) g.NodeFunc {
return g.El("h4", prepend(g.Text(text), children)...)
}
func H5(text string, children ...g.Node) g.NodeFunc {
return g.El("h5", prepend(g.Text(text), children)...)
}
func H6(text string, children ...g.Node) g.NodeFunc {
return g.El("h6", prepend(g.Text(text), children)...)
}
func Ol(children ...g.Node) g.NodeFunc {
return g.El("ol", children...)
}
func Ul(children ...g.Node) g.NodeFunc {
return g.El("ul", children...)
}
func Li(children ...g.Node) g.NodeFunc {
return g.El("li", children...)
}
func B(text string, children ...g.Node) g.NodeFunc {
return g.El("b", prepend(g.Text(text), children)...)
}
func Strong(text string, children ...g.Node) g.NodeFunc {
return g.El("strong", prepend(g.Text(text), children)...)
}
func I(text string, children ...g.Node) g.NodeFunc {
return g.El("i", prepend(g.Text(text), children)...)
}
func Em(text string, children ...g.Node) g.NodeFunc {
return g.El("em", prepend(g.Text(text), children)...)
}
func Img(src, alt string, children ...g.Node) g.NodeFunc {
newChildren := prepend(g.Attr("alt", alt), children)
newChildren = prepend(g.Attr("src", src), newChildren)
return g.El("img", newChildren...)
}
func prepend(node g.Node, nodes []g.Node) []g.Node {
newNodes := []g.Node{node}
newNodes = append(newNodes, nodes...)
return newNodes
}
|