kano_web/
html.rs

1use crate::element::Element;
2
3macro_rules! define_element {
4    (($ns:expr, $ty_name:ident, $name:ident, $dom_interface:ident)) => {
5        /// The
6        #[doc = concat!("`", stringify!($name), "`")]
7        /// element.
8        pub const fn $name<A, C>(attrs: A, children: C) -> Element<A, C> {
9            Element::new(stringify!($name), attrs, children)
10        }
11    };
12}
13
14macro_rules! define_elements {
15    ($($element_def:tt,)*) => {
16        $(define_element!($element_def);)*
17    };
18}
19
20define_elements!(
21    // the order is copied from
22    // https://developer.mozilla.org/en-US/docs/Web/HTML/Element
23    // DOM interfaces copied from https://html.spec.whatwg.org/multipage/grouping-content.html and friends
24
25    // content sectioning
26    (HTML_NS, Address, address, HtmlElement),
27    (HTML_NS, Article, article, HtmlElement),
28    (HTML_NS, Aside, aside, HtmlElement),
29    (HTML_NS, Footer, footer, HtmlElement),
30    (HTML_NS, Header, header, HtmlElement),
31    (HTML_NS, H1, h1, HtmlHeadingElement),
32    (HTML_NS, H2, h2, HtmlHeadingElement),
33    (HTML_NS, H3, h3, HtmlHeadingElement),
34    (HTML_NS, H4, h4, HtmlHeadingElement),
35    (HTML_NS, H5, h5, HtmlHeadingElement),
36    (HTML_NS, H6, h6, HtmlHeadingElement),
37    (HTML_NS, Hgroup, hgroup, HtmlElement),
38    (HTML_NS, Main, main, HtmlElement),
39    (HTML_NS, Nav, nav, HtmlElement),
40    (HTML_NS, Section, section, HtmlElement),
41    // text content
42    (HTML_NS, Blockquote, blockquote, HtmlQuoteElement),
43    (HTML_NS, Dd, dd, HtmlElement),
44    (HTML_NS, Div, div, HtmlDivElement),
45    (HTML_NS, Dl, dl, HtmlDListElement),
46    (HTML_NS, Dt, dt, HtmlElement),
47    (HTML_NS, Figcaption, figcaption, HtmlElement),
48    (HTML_NS, Figure, figure, HtmlElement),
49    (HTML_NS, Hr, hr, HtmlHrElement),
50    (HTML_NS, Li, li, HtmlLiElement),
51    (HTML_NS, Link, link, HtmlLinkElement),
52    (HTML_NS, Menu, menu, HtmlMenuElement),
53    (HTML_NS, Ol, ol, HtmlOListElement),
54    (HTML_NS, P, p, HtmlParagraphElement),
55    (HTML_NS, Pre, pre, HtmlPreElement),
56    (HTML_NS, Ul, ul, HtmlUListElement),
57    // inline text
58    (HTML_NS, A, a, HtmlAnchorElement),
59    (HTML_NS, Abbr, abbr, HtmlElement),
60    (HTML_NS, B, b, HtmlElement),
61    (HTML_NS, Bdi, bdi, HtmlElement),
62    (HTML_NS, Bdo, bdo, HtmlElement),
63    (HTML_NS, Br, br, HtmlBrElement),
64    (HTML_NS, Cite, cite, HtmlElement),
65    (HTML_NS, Code, code, HtmlElement),
66    (HTML_NS, Data, data, HtmlDataElement),
67    (HTML_NS, Dfn, dfn, HtmlElement),
68    (HTML_NS, Em, em, HtmlElement),
69    (HTML_NS, I, i, HtmlElement),
70    (HTML_NS, Kbd, kbd, HtmlElement),
71    (HTML_NS, Mark, mark, HtmlElement),
72    (HTML_NS, Q, q, HtmlQuoteElement),
73    (HTML_NS, Rp, rp, HtmlElement),
74    (HTML_NS, Rt, rt, HtmlElement),
75    (HTML_NS, Ruby, ruby, HtmlElement),
76    (HTML_NS, S, s, HtmlElement),
77    (HTML_NS, Samp, samp, HtmlElement),
78    (HTML_NS, Small, small, HtmlElement),
79    (HTML_NS, Span, span, HtmlSpanElement),
80    (HTML_NS, Strong, strong, HtmlElement),
81    (HTML_NS, Sub, sub, HtmlElement),
82    (HTML_NS, Sup, sup, HtmlElement),
83    (HTML_NS, Time, time, HtmlTimeElement),
84    (HTML_NS, U, u, HtmlElement),
85    (HTML_NS, Var, var, HtmlElement),
86    (HTML_NS, Wbr, wbr, HtmlElement),
87    // image and multimedia
88    (HTML_NS, Area, area, HtmlAreaElement),
89    (HTML_NS, Audio, audio, HtmlAudioElement),
90    (HTML_NS, Canvas, canvas, HtmlCanvasElement),
91    (HTML_NS, Img, img, HtmlImageElement),
92    (HTML_NS, Map, map, HtmlMapElement),
93    (HTML_NS, Track, track, HtmlTrackElement),
94    (HTML_NS, Video, video, HtmlVideoElement),
95    // embedded content
96    (HTML_NS, Embed, embed, HtmlEmbedElement),
97    (HTML_NS, Iframe, iframe, HtmlIFrameElement),
98    (HTML_NS, Object, object, HtmlObjectElement),
99    (HTML_NS, Picture, picture, HtmlPictureElement),
100    (HTML_NS, Portal, portal, HtmlElement),
101    (HTML_NS, Source, source, HtmlSourceElement),
102    // scripting
103    (HTML_NS, Noscript, noscript, HtmlElement),
104    (HTML_NS, Script, script, HtmlScriptElement),
105    // demarcating edits
106    (HTML_NS, Del, del, HtmlModElement),
107    (HTML_NS, Ins, ins, HtmlModElement),
108    // tables
109    (HTML_NS, Caption, caption, HtmlTableCaptionElement),
110    (HTML_NS, Col, col, HtmlTableColElement),
111    (HTML_NS, Colgroup, colgroup, HtmlTableColElement),
112    (HTML_NS, Table, table, HtmlTableElement),
113    (HTML_NS, Tbody, tbody, HtmlTableSectionElement),
114    (HTML_NS, Td, td, HtmlTableCellElement),
115    (HTML_NS, Tfoot, tfoot, HtmlTableSectionElement),
116    (HTML_NS, Th, th, HtmlTableCellElement),
117    (HTML_NS, Thead, thead, HtmlTableSectionElement),
118    (HTML_NS, Tr, tr, HtmlTableRowElement),
119    // forms
120    (HTML_NS, Button, button, HtmlButtonElement),
121    (HTML_NS, Datalist, datalist, HtmlDataListElement),
122    (HTML_NS, Fieldset, fieldset, HtmlFieldSetElement),
123    (HTML_NS, Form, form, HtmlFormElement),
124    (HTML_NS, Input, input, HtmlInputElement),
125    (HTML_NS, Label, label, HtmlLabelElement),
126    (HTML_NS, Legend, legend, HtmlLegendElement),
127    (HTML_NS, Meter, meter, HtmlMeterElement),
128    (HTML_NS, Optgroup, optgroup, HtmlOptGroupElement),
129    (HTML_NS, OptionElement, option, HtmlOptionElement), // Avoid cluttering the namespace with `Option`
130    (HTML_NS, Output, output, HtmlOutputElement),
131    (HTML_NS, Progress, progress, HtmlProgressElement),
132    (HTML_NS, Select, select, HtmlSelectElement),
133    (HTML_NS, Textarea, textarea, HtmlTextAreaElement),
134    // interactive elements,
135    (HTML_NS, Details, details, HtmlDetailsElement),
136    (HTML_NS, Dialog, dialog, HtmlDialogElement),
137    (HTML_NS, Summary, summary, HtmlElement),
138    // web components,
139    (HTML_NS, Slot, slot, HtmlSlotElement),
140    (HTML_NS, Template, template, HtmlTemplateElement),
141    // SVG and MathML (TODO, svg and mathml elements)
142    (SVG_NS, Svg, svg, SvgElement),
143    (MATHML_NS, Math, math, Element),
144);