-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathelements.go
501 lines (370 loc) · 6.36 KB
/
elements.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
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
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
package hagl
import "strings"
// Elements copied from Elm's HTML package:
// https://package.elm-lang.org/packages/elm/html/latest/Html
// Document
func Html() Node {
return newTagNode("html")
}
func Head() Node {
return newTagNode("head")
}
func Title() Node {
return newTagNode("title")
}
func Body() Node {
return newTagNode("body")
}
func Base() Node {
return newSelfClosingTagNode("base")
}
func Link() Node {
return newSelfClosingTagNode("link")
}
func Meta() Node {
return newSelfClosingTagNode("meta")
}
func Script() Node {
return newPreserveWhitespaceTagNode("script")
}
func Style() Node {
return newTagNode("style")
}
// Headers
func H1() Node {
return newTagNode("h1")
}
func H2() Node {
return newTagNode("h2")
}
func H3() Node {
return newTagNode("h3")
}
func H4() Node {
return newTagNode("h4")
}
func H5() Node {
return newTagNode("h5")
}
func H6() Node {
return newTagNode("h6")
}
// Grouping HTML
func Div() Node {
return newTagNode("div")
}
func P() Node {
return newTagNode("p")
}
func Hr() Node {
return newSelfClosingTagNode("hr")
}
func Pre() Node {
return newPreserveWhitespaceTagNode("pre")
}
func Blockquote() Node {
return newTagNode("blockquote")
}
// Text
func Span() Node {
return newTagNode("span")
}
func A() Node {
return newTagNode("a")
}
func Code() Node {
return newTagNode("code")
}
func Em() Node {
return newTagNode("em")
}
func Strong() Node {
return newTagNode("strong")
}
func I() Node {
return newTagNode("i")
}
func B() Node {
return newTagNode("b")
}
func U() Node {
return newTagNode("u")
}
func Sub() Node {
return newTagNode("sub")
}
func Sup() Node {
return newTagNode("sup")
}
func Br() Node {
return newSelfClosingTagNode("br")
}
// Lists
func Ol() Node {
return newTagNode("ol")
}
func Ul() Node {
return newTagNode("ul")
}
func Li() Node {
return newTagNode("li")
}
func Dl() Node {
return newTagNode("dl")
}
func Dt() Node {
return newTagNode("dt")
}
func Dd() Node {
return newTagNode("dd")
}
// Embedded HTML
func Img() Node {
return newSelfClosingTagNode("img")
}
func Svg() Node {
return newTagNode("svg")
}
func Path() Node {
return newTagNode("path")
}
func IFrame() Node {
return newTagNode("iframe")
}
func Canvas() Node {
return newTagNode("canvas")
}
func Math() Node {
return newTagNode("math")
}
// Inputs
func Form() Node {
return newTagNode("form")
}
func Input() Node {
return newSelfClosingTagNode("input")
}
func Textarea() Node {
return newSelfClosingTagNode("textarea")
}
func Button() Node {
return newTagNode("button")
}
func Select() Node {
return newTagNode("select")
}
func Option() Node {
return newTagNode("option")
}
func Fieldset() Node {
return newTagNode("fieldset")
}
func Legend() Node {
return newTagNode("legend")
}
func Label() Node {
return newTagNode("label")
}
func Datalist() Node {
return newTagNode("datalist")
}
func Optgroup() Node {
return newTagNode("optgroup")
}
func Output() Node {
return newTagNode("output")
}
func Progress() Node {
return newTagNode("progress")
}
func Meter() Node {
return newTagNode("meter")
}
// Sections
func Section() Node {
return newTagNode("section")
}
func Nav() Node {
return newTagNode("nav")
}
func Article() Node {
return newTagNode("article")
}
func Aside() Node {
return newTagNode("aside")
}
func Header() Node {
return newTagNode("header")
}
func Footer() Node {
return newTagNode("footer")
}
func Address() Node {
return newTagNode("address")
}
func Main() Node {
return newTagNode("main")
}
// Figures
func Figure() Node {
return newTagNode("figure")
}
func Figcaption() Node {
return newTagNode("figcaption")
}
// Tables
func Table() Node {
return newTagNode("table")
}
func Caption() Node {
return newTagNode("caption")
}
func Colgroup() Node {
return newTagNode("colgroup")
}
func Col() Node {
return newTagNode("col")
}
func Tbody() Node {
return newTagNode("tbody")
}
func Thead() Node {
return newTagNode("thead")
}
func Tfoot() Node {
return newTagNode("tfoot")
}
func Tr() Node {
return newTagNode("tr")
}
func Td() Node {
return newTagNode("td")
}
func Th() Node {
return newTagNode("th")
}
// Audio/Video
func Audio() Node {
return newTagNode("audio")
}
func Video() Node {
return newTagNode("video")
}
func Source() Node {
return newTagNode("source")
}
func Track() Node {
return newSelfClosingTagNode("track")
}
// Embedded Objects
func Embed() Node {
return newSelfClosingTagNode("embed")
}
func Object() Node {
return newTagNode("object")
}
func Param() Node {
return newSelfClosingTagNode("param")
}
// Text Edits
func Ins() Node {
return newTagNode("ins")
}
func Del() Node {
return newTagNode("del")
}
// Semantic Text
func Small() Node {
return newTagNode("small")
}
func Cite() Node {
return newTagNode("cite")
}
func Dfn() Node {
return newTagNode("dfn")
}
func Abbr() Node {
return newTagNode("abbr")
}
func Time() Node {
return newTagNode("time")
}
func Var() Node {
return newTagNode("var")
}
func Samp() Node {
return newTagNode("samp")
}
func Kbd() Node {
return newTagNode("kbd")
}
func S() Node {
return newTagNode("s")
}
func Q() Node {
return newTagNode("q")
}
// Less-common Text
func Mark() Node {
return newTagNode("mark")
}
func Ruby() Node {
return newTagNode("ruby")
}
func Rt() Node {
return newTagNode("rt")
}
func Rp() Node {
return newTagNode("rp")
}
func Bdi() Node {
return newTagNode("bdi")
}
func Bdo() Node {
return newTagNode("bdo")
}
func Wbr() Node {
return newSelfClosingTagNode("wbr")
}
// Interactive Elements
func Details() Node {
return newTagNode("details")
}
func Summary() Node {
return newTagNode("summary")
}
func Menuitem() Node {
return newSelfClosingTagNode("menuitem")
}
func Menu() Node {
return newTagNode("menu")
}
func Custom(tag string) Node {
return newTagNode(tag)
}
// Special
// Text is special element that renders text
func Text(text ...string) Node {
el := newEl()
el.text = strings.Join(text, " ")
el.nodeType = textNode
return el
}
// Fragment is a special element that renders children without needing
// a wrapper element.
func Fragment() Node {
el := newEl()
el.nodeType = fragmentNode
el.indentIncrement = 0
return el
}
func Comment(text string) Node {
el := newEl()
el.Children(Text(text))
el.nodeType = commentNode
return el
}
// NewElement allows defining a custom element
func NewElement(tag string) Node {
return newTagNode(tag)
}