silkenweb_html/
elements.rs

1//! All the HTML elements
2//!
3//! This code is derived from [Moxie DOM] under MIT/Apache-2.0 license on 2021-04-23
4//!
5//! [Moxie DOM]: https://github.com/anp/moxie
6
7use web_sys as dom;
8
9html_element!(
10    /// The [HTML `<a>` element (or *anchor* element)][mdn], along with its href attribute, creates
11    /// a hyperlink to other web pages, files, locations within the same page, email addresses, or
12    /// any other URL.
13    /// 
14    /// [mdn]: https://developer.mozilla.org/en-US/docs/Web/HTML/Element/a
15    a {
16        /// Prompts the user to save the linked URL instead of navigating to it. Can be used with or
17        /// without a value:
18        /// 
19        /// * Without a value, the browser will suggest a filename/extension, generated from various
20        /// sources:
21        /// * The Content-Disposition HTTP header
22        /// * The final segment in the URL path
23        /// * The media type (from the (Content-Type header, the start of a data: URL, or
24        /// Blob.type for a blob: URL)
25        /// * Defining a value suggests it as the filename. `/` and `\` characters are converted to
26        /// underscores (_). Filesystems may forbid other characters in filenames, so browsers
27        /// will adjust the suggested name if necessary.
28        /// 
29        /// > Notes:
30        /// > * download only works for same-origin URLs, or the blob: and data: schemes.
31        /// > * If Content-Disposition has a different filename than download, the header takes
32        /// >   priority. (If `Content-Disposition: inline`, Firefox prefers the header while Chrome
33        /// >   prefers download.)
34        download: String,
35
36        /// The URL that the hyperlink points to. Links are not restricted to HTTP-based URLs —
37        /// they can use any URL scheme supported by browsers:
38        /// 
39        /// * Sections of a page with fragment URLs
40        /// * Pieces of media files with media fragments
41        /// * Telephone numbers with tel: URLs
42        /// * Email addresses with mailto: URLs
43        /// * While web browsers may not support other URL schemes, web sites can with
44        /// registerProtocolHandler()
45        href: String,
46
47        /// Hints at the human language of the linked URL. No built-in functionality. Allowed values
48        /// are the same as the global lang attribute.
49        hreflang: String,
50
51        /// A space-separated list of URLs. When the link is followed, the browser will send POST
52        /// requests with the body PING to the URLs. Typically for tracking.
53        ping: String,
54
55        /// The relationship of the linked URL as space-separated link types.
56        rel: String,
57
58        /// Where to display the linked URL, as the name for a browsing context (a tab, window, or
59        /// `<iframe>`). The following keywords have special meanings for where to load the URL:
60        /// 
61        /// * `_self`: the current browsing context. (Default)
62        /// * `_blank`: usually a new tab, but users can configure browsers to open a new window
63        /// instead.
64        /// * `_parent`: the parent browsing context of the current one. If no parent, behaves as
65        /// _self.
66        /// * `_top`: the topmost browsing context (the "highest" context that’s an ancestor of the
67        /// current one). If no ancestors, behaves as _self.
68        /// 
69        /// > Note: When using target, add rel="noreferrer noopener" to avoid exploitation of the
70        /// window.opener API;
71        /// 
72        /// > Note: Linking to another page with target="_blank" will run the new page in the same
73        /// process as your page. If the new page executes JavaScript, your page's performance may
74        /// suffer. This can also be avoided by using rel="noreferrer noopener".
75        target: String,
76
77        /// Hints at the linked URL’s format with a MIME type. No built-in functionality.
78        type_: String,
79
80    }
81);
82
83dom_type!(a <dom::HtmlAnchorElement>);
84children_allowed!(a);
85
86html_element!(
87    /// The [HTML Abbreviation element (`<abbr>`)][mdn] represents an abbreviation or acronym; the
88    /// optional [`title`][title] attribute can provide an expansion or description for the
89    /// abbreviation.
90    /// 
91    /// The title attribute has a specific semantic meaning when used with the `<abbr>` element; it
92    /// must contain a full human-readable description or expansion of the abbreviation. This text
93    /// is often presented by browsers as a tooltip when the mouse cursor is hovered over the
94    /// element.
95    /// 
96    /// [mdn]: https://developer.mozilla.org/en-US/docs/Web/HTML/Element/abbr
97    /// [title]: https://developer.mozilla.org/en-US/docs/Web/HTML/Global_attributes#attr-title
98    abbr {
99    }
100);
101
102dom_type!(abbr <dom::HtmlElement>);
103children_allowed!(abbr);
104
105html_element!(
106    /// The [HTML Bring Attention To element (`<b>`)][mdn] is used to draw the reader's attention to
107    /// the element's contents, which are not otherwise granted special importance.
108    /// 
109    /// [mdn]: https://developer.mozilla.org/en-US/docs/Web/HTML/Element/b
110    b {
111    }
112);
113
114dom_type!(b <dom::HtmlElement>);
115children_allowed!(b);
116
117html_element!(
118    /// The [HTML Bidirectional Isolate element (`<bdi>`)][mdn] tells the browser's bidirectional
119    /// algorithm to treat the text it contains in isolation from its surrounding text.
120    /// 
121    /// [mdn]: https://developer.mozilla.org/en-US/docs/Web/HTML/Element/bdi
122    bdi {
123    }
124);
125
126dom_type!(bdi <dom::HtmlElement>);
127children_allowed!(bdi);
128
129html_element!(
130    /// The [HTML Bidirectional Text Override element (`<bdo>`)][mdn] overrides the current
131    /// directionality of text, so that the text within is rendered in a different direction.
132    /// 
133    /// [mdn]: https://developer.mozilla.org/en-US/docs/Web/HTML/Element/bdo
134    bdo {
135        /// The direction in which text should be rendered in this element's contents. Possible
136        /// values are:
137        /// 
138        /// * `ltr`: Indicates that the text should go in a left-to-right direction.
139        /// * `rtl`: Indicates that the text should go in a right-to-left direction.
140        dir: String,
141
142    }
143);
144
145dom_type!(bdo <dom::HtmlElement>);
146children_allowed!(bdo);
147
148html_element!(
149    /// The [HTML `<br>` element][mdn] produces a line break in text (carriage-return). It is useful
150    /// for writing a poem or an address, where the division of lines is significant.
151    /// 
152    /// [mdn]: https://developer.mozilla.org/en-US/docs/Web/HTML/Element/br
153    br {
154    }
155);
156
157dom_type!(br <dom::HtmlBrElement>);
158
159html_element!(
160    /// The [HTML Citation element (`<cite>`)][mdn] is used to describe a reference to a cited
161    /// creative work, and must include the title of that work.
162    /// 
163    /// [mdn]: https://developer.mozilla.org/en-US/docs/Web/HTML/Element/cite
164    cite {
165    }
166);
167
168dom_type!(cite <dom::HtmlElement>);
169children_allowed!(cite);
170
171html_element!(
172    /// The [HTML `<code>` element][mdn] displays its contents styled in a fashion intended to
173    /// indicate that the text is a short fragment of computer code.
174    /// 
175    /// [mdn]: https://developer.mozilla.org/en-US/docs/Web/HTML/Element/code
176    code {
177    }
178);
179
180dom_type!(code <dom::HtmlElement>);
181children_allowed!(code);
182
183html_element!(
184    /// The [HTML `<data>` element][mdn] links a given content with a machine-readable translation.
185    /// If the content is time- or date-related, the [`<time>`][time] element must be used.
186    /// 
187    /// [mdn]: https://developer.mozilla.org/en-US/docs/Web/HTML/Element/data
188    /// [time]: https://developer.mozilla.org/en-US/docs/Web/HTML/Element/time
189    data {
190        /// This attribute specifies the machine-readable translation of the content of the element.
191        value: String,
192
193    }
194);
195
196dom_type!(data <dom::HtmlDataElement>);
197children_allowed!(data);
198
199html_element!(
200    /// The [HTML Definition element (`<dfn>`)][mdn] is used to indicate the term being defined
201    /// within the context of a definition phrase or sentence.
202    /// 
203    /// [mdn]: https://developer.mozilla.org/en-US/docs/Web/HTML/Element/dfn
204    dfn {
205    }
206);
207
208dom_type!(dfn <dom::HtmlElement>);
209children_allowed!(dfn);
210
211html_element!(
212    /// The [HTML `<em>` element][mdn] marks text that has stress emphasis. The `<em>` element can
213    /// be nested, with each level of nesting indicating a greater degree of emphasis.
214    /// 
215    /// [mdn]: https://developer.mozilla.org/en-US/docs/Web/HTML/Element/em
216    em {
217    }
218);
219
220dom_type!(em <dom::HtmlElement>);
221children_allowed!(em);
222
223html_element!(
224    /// The [HTML `<i>` element][mdn] represents a range of text that is set off from the normal
225    /// text for some reason. Some examples include technical terms, foreign language phrases, or
226    /// fictional character thoughts. It is typically displayed in italic type.
227    /// 
228    /// [mdn]: https://developer.mozilla.org/en-US/docs/Web/HTML/Element/i
229    i {
230    }
231);
232
233dom_type!(i <dom::HtmlElement>);
234children_allowed!(i);
235
236html_element!(
237    /// The [HTML Keyboard Input element (`<kbd>`)][mdn] represents a span of inline text denoting
238    /// textual user input from a keyboard, voice input, or any other text entry device.
239    /// 
240    /// [mdn]: https://developer.mozilla.org/en-US/docs/Web/HTML/Element/kbd
241    kbd {
242    }
243);
244
245dom_type!(kbd <dom::HtmlElement>);
246children_allowed!(kbd);
247
248html_element!(
249    /// The [HTML Mark Text element (`<mark>`)][mdn] represents text which is marked or highlighted
250    /// for reference or notation purposes, due to the marked passage's relevance or importance in
251    /// the enclosing context.
252    /// 
253    /// [mdn]: https://developer.mozilla.org/en-US/docs/Web/HTML/Element/mark
254    mark {
255    }
256);
257
258dom_type!(mark <dom::HtmlElement>);
259children_allowed!(mark);
260
261html_element!(
262    /// The [HTML `<q>` element][mdn]  indicates that the enclosed text is a short inline quotation.
263    /// Most modern browsers implement this by surrounding the text in quotation marks.
264    /// 
265    /// [mdn]: https://developer.mozilla.org/en-US/docs/Web/HTML/Element/q
266    q {
267        /// The value of this attribute is a URL that designates a source document or message for
268        /// the information quoted. This attribute is intended to point to information explaining
269        /// the context or the reference for the quote.
270        cite: String,
271
272    }
273);
274
275dom_type!(q <dom::HtmlQuoteElement>);
276children_allowed!(q);
277
278html_element!(
279    /// The [HTML Ruby Base (`<rb>`) element][mdn] is used to delimit the base text component of
280    /// a [`<ruby>`][ruby] annotation, i.e. the text that is being annotated.
281    /// 
282    /// [mdn]: https://developer.mozilla.org/en-US/docs/Web/HTML/Element/rb
283    /// [ruby]: https://developer.mozilla.org/en-US/docs/Web/HTML/Element/ruby
284    rb {
285    }
286);
287
288dom_type!(rb <dom::HtmlElement>);
289children_allowed!(rb);
290
291html_element!(
292    /// The [HTML Ruby Fallback Parenthesis (`<rp>`) element][mdn] is used to provide fall-back
293    /// parentheses for browsers that do not support display of ruby annotations using the
294    /// [`<ruby>`][ruby] element.
295    /// 
296    /// [mdn]: https://developer.mozilla.org/en-US/docs/Web/HTML/Element/rp
297    /// [ruby]: https://developer.mozilla.org/en-US/docs/Web/HTML/Element/ruby
298    rp {
299    }
300);
301
302dom_type!(rp <dom::HtmlElement>);
303children_allowed!(rp);
304
305html_element!(
306    /// The [HTML Ruby Text (`<rt>`) element][mdn] specifies the ruby text component of a ruby
307    /// annotation, which is used to provide pronunciation, translation, or transliteration
308    /// information for East Asian typography. The `<rt>` element must always be contained within a
309    /// [`<ruby>`][ruby] element.
310    /// 
311    /// [mdn]: https://developer.mozilla.org/en-US/docs/Web/HTML/Element/rt
312    /// [ruby]: https://developer.mozilla.org/en-US/docs/Web/HTML/Element/ruby
313    rt {
314    }
315);
316
317dom_type!(rt <dom::HtmlElement>);
318children_allowed!(rt);
319
320html_element!(
321    /// The [HTML Ruby Text Container (`<rtc>`) element][mdn] embraces semantic annotations of
322    /// characters presented in a ruby of [`<rb>`][rb] elements used inside of [`<ruby>`][ruby]
323    /// element. [`<rb>`][rb] elements can have both pronunciation ([`<rt>`][rt]) and semantic
324    /// ([`<rtc>`][rtc]) annotations.
325    /// 
326    /// [mdn]: https://developer.mozilla.org/en-US/docs/Web/HTML/Element/rtc
327    /// [rb]: https://developer.mozilla.org/en-US/docs/Web/HTML/Element/rb
328    /// [ruby]: https://developer.mozilla.org/en-US/docs/Web/HTML/Element/ruby
329    /// [rt]: https://developer.mozilla.org/en-US/docs/Web/HTML/Element/rt
330    /// [rtc]: https://developer.mozilla.org/en-US/docs/Web/HTML/Element/rtc
331    rtc {
332    }
333);
334
335dom_type!(rtc <dom::HtmlElement>);
336children_allowed!(rtc);
337
338html_element!(
339    /// The [HTML `<ruby>` element][mdn] represents a ruby annotation. Ruby annotations are for
340    /// showing pronunciation of East Asian characters.
341    /// 
342    /// [mdn]: https://developer.mozilla.org/en-US/docs/Web/HTML/Element/ruby
343    ruby {
344    }
345);
346
347dom_type!(ruby <dom::HtmlElement>);
348children_allowed!(ruby);
349
350html_element!(
351    /// The [HTML `<s>` element][mdn] renders text with a strikethrough, or a line through it. Use
352    /// the `<s>` element to represent things that are no longer relevant or no longer accurate.
353    /// However, `<s>` is not appropriate when indicating document edits; for that, use the
354    /// [`<del>`][del] and [`<ins>`][ins] elements, as appropriate.
355    /// 
356    /// [mdn]: https://developer.mozilla.org/en-US/docs/Web/HTML/Element/s
357    /// [del]: https://developer.mozilla.org/en-US/docs/Web/HTML/Element/del
358    /// [ins]: https://developer.mozilla.org/en-US/docs/Web/HTML/Element/ins
359    s {
360    }
361);
362
363dom_type!(s <dom::HtmlElement>);
364children_allowed!(s);
365
366html_element!(
367    /// The [HTML Sample Element (`<samp>`)][mdn] is used to enclose inline text which represents
368    /// sample (or quoted) output from a computer program.
369    /// 
370    /// [mdn]: https://developer.mozilla.org/en-US/docs/Web/HTML/Element/samp
371    samp {
372    }
373);
374
375dom_type!(samp <dom::HtmlElement>);
376children_allowed!(samp);
377
378html_element!(
379    /// The [HTML `<small>` element][mdn] represents side-comments and small print, like copyright
380    /// and legal text, independent of its styled presentation. By default, it renders text within
381    /// it one font-size small, such as from `small` to `x-small`.
382    /// 
383    /// [mdn]: https://developer.mozilla.org/en-US/docs/Web/HTML/Element/small
384    small {
385    }
386);
387
388dom_type!(small <dom::HtmlElement>);
389children_allowed!(small);
390
391html_element!(
392    /// The [HTML `<span>` element][mdn] is a generic inline container for phrasing content, which
393    /// does not inherently represent anything. It can be used to group elements for styling
394    /// purposes (using the [`class`][class] or [`id`][id] attributes), or because they share
395    /// attribute values, such as [`lang`][lang].
396    /// 
397    /// [mdn]: https://developer.mozilla.org/en-US/docs/Web/HTML/Element/span
398    /// [class]: https://developer.mozilla.org/en-US/docs/Web/HTML/Global_attributes#attr-class
399    /// [id]: https://developer.mozilla.org/en-US/docs/Web/HTML/Global_attributes#attr-id
400    /// [lang]: https://developer.mozilla.org/en-US/docs/Web/HTML/Global_attributes#attr-lang
401    span {
402    }
403);
404
405dom_type!(span <dom::HtmlSpanElement>);
406children_allowed!(span);
407
408html_element!(
409    /// The [HTML Strong Importance Element (`<strong>`)][mdn] indicates that its contents have
410    /// strong importance, seriousness, or urgency. Browsers typically render the contents in bold
411    /// type.
412    /// 
413    /// [mdn]: https://developer.mozilla.org/en-US/docs/Web/HTML/Element/strong
414    strong {
415    }
416);
417
418dom_type!(strong <dom::HtmlElement>);
419children_allowed!(strong);
420
421html_element!(
422    /// The [HTML Subscript element (`<sub>`)][mdn] specifies inline text which should be displayed
423    /// as subscript for solely typographical reasons.
424    /// 
425    /// [mdn]: https://developer.mozilla.org/en-US/docs/Web/HTML/Element/sub
426    sub {
427    }
428);
429
430dom_type!(sub <dom::HtmlElement>);
431children_allowed!(sub);
432
433html_element!(
434    /// The [HTML Superscript element (`<sup>`)][mdn] specifies inline text which is to be displayed
435    /// as superscript for solely typographical reasons.
436    /// 
437    /// [mdn]: https://developer.mozilla.org/en-US/docs/Web/HTML/Element/sup
438    sup {
439    }
440);
441
442dom_type!(sup <dom::HtmlElement>);
443children_allowed!(sup);
444
445html_element!(
446    /// The [HTML `<time>` element][mdn] represents a specific period in time.
447    /// 
448    /// [mdn]: https://developer.mozilla.org/en-US/docs/Web/HTML/Element/time
449    time {
450        /// This attribute indicates the time and/or date of the element and must be in one of the
451        /// formats described below.
452        datetime: String,
453
454    }
455);
456
457dom_type!(time <dom::HtmlTimeElement>);
458children_allowed!(time);
459
460html_element!(
461    /// The [HTML Unarticulated Annotation Element (`<u>`)][mdn] represents a span of inline text
462    /// which should be rendered in a way that indicates that it has a non-textual annotation.
463    /// 
464    /// [mdn]: https://developer.mozilla.org/en-US/docs/Web/HTML/Element/u
465    u {
466    }
467);
468
469dom_type!(u <dom::HtmlElement>);
470children_allowed!(u);
471
472html_element!(
473    /// The [HTML Variable element (`<var>`)][mdn] represents the name of a variable in a
474    /// mathematical expression or a programming context.
475    /// 
476    /// [mdn]: https://developer.mozilla.org/en-US/docs/Web/HTML/Element/var
477    var {
478    }
479);
480
481dom_type!(var <dom::HtmlElement>);
482children_allowed!(var);
483
484html_element!(
485    /// The [HTML `<wbr>` element][mdn] represents a word break opportunity—a position within text
486    /// where the browser may optionally break a line, though its line-breaking rules would not
487    /// otherwise create a break at that location.
488    /// 
489    /// [mdn]: https://developer.mozilla.org/en-US/docs/Web/HTML/Element/wbr
490    wbr {
491    }
492);
493
494dom_type!(wbr <dom::HtmlElement>);
495
496html_element!(
497    /// The [HTML `<del>` element][mdn] represents a range of text that has been deleted from a
498    /// document.
499    /// 
500    /// [mdn]: https://developer.mozilla.org/en-US/docs/Web/HTML/Element/del
501    del {
502        /// A URI for a resource that explains the change (for example, meeting minutes).
503        cite: String,
504
505        /// This attribute indicates the time and date of the change and must be a valid date string
506        /// with an optional time. If the value cannot be parsed as a date with an optional time
507        /// string, the element does not have an associated time stamp. For the format of the string
508        /// without a time, see Date strings. The format of the string if it includes both date and
509        /// time is covered in Local date and time strings.
510        datetime: String,
511
512    }
513);
514
515dom_type!(del <dom::HtmlModElement>);
516children_allowed!(del);
517
518html_element!(
519    /// The [HTML `<ins>` element][mdn] represents a range of text that has been added to a
520    /// document.
521    /// 
522    /// [mdn]: https://developer.mozilla.org/en-US/docs/Web/HTML/Element/ins
523    ins {
524        /// A URI for a resource that explains the change (for example, meeting minutes).
525        cite: String,
526
527        /// This attribute indicates the time and date of the change and must be a valid date string
528        /// with an optional time. If the value cannot be parsed as a date with an optional time
529        /// string, the element does not have an associated time stamp. For the format of the string
530        /// without a time, see Date strings. The format of the string if it includes both date and
531        /// time is covered in Local date and time strings.
532        datetime: String,
533
534    }
535);
536
537dom_type!(ins <dom::HtmlModElement>);
538children_allowed!(ins);
539
540html_element!(
541    /// The [HTML `<address>` element][mdn] indicates that the enclosed HTML provides contact
542    /// information for a person or people, or for an organization.
543    /// 
544    /// [mdn]: https://developer.mozilla.org/en-US/docs/Web/HTML/Element/address
545    address {
546    }
547);
548
549dom_type!(address <dom::HtmlElement>);
550children_allowed!(address);
551
552html_element!(
553    /// The [HTML `<article>` element][mdn] represents a self-contained composition in a document,
554    /// page, application, or site, which is intended to be independently distributable or reusable
555    /// (e.g., in syndication).
556    /// 
557    /// [mdn]: https://developer.mozilla.org/en-US/docs/Web/HTML/Element/article
558    article {
559    }
560);
561
562dom_type!(article <dom::HtmlElement>);
563children_allowed!(article);
564
565html_element!(
566    /// The [HTML `<aside>` element][mdn] represents a portion of a document whose content is only
567    /// indirectly related to the document's main content.
568    /// 
569    /// [mdn]: https://developer.mozilla.org/en-US/docs/Web/HTML/Element/aside
570    aside {
571    }
572);
573
574dom_type!(aside <dom::HtmlElement>);
575children_allowed!(aside);
576
577html_element!(
578    /// The [HTML `<footer>` element][mdn] represents a footer for its nearest [sectioning content]
579    /// or [sectioning root] element. A footer typically contains information about the author of
580    /// the section, copyright data or links to related documents.
581    /// 
582    /// [mdn]: https://developer.mozilla.org/en-US/docs/Web/HTML/Element/footer
583    /// [sectioning content]: https://developer.mozilla.org/en-US/docs/Web/Guide/HTML/Content_categories#Sectioning_content
584    /// [sectioning root]: https://developer.mozilla.org/en-US/docs/Web/Guide/HTML/Sections_and_Outlines_of_an_HTML5_document#Sectioning_roots
585    footer {
586    }
587);
588
589dom_type!(footer <dom::HtmlElement>);
590children_allowed!(footer);
591
592html_element!(
593    /// The [HTML `<header>` element][mdn] represents introductory content, typically a group of
594    /// introductory or navigational aids. It may contain some heading elements but also a logo, a
595    /// search form, an author name, and other elements.
596    /// 
597    /// [mdn]: https://developer.mozilla.org/en-US/docs/Web/HTML/Element/header
598    header {
599    }
600);
601
602dom_type!(header <dom::HtmlElement>);
603children_allowed!(header);
604
605html_element!(
606    /// The [HTML `<h1>`–`<h6>` elements][mdn] represent six levels of section headings. `<h1>` is
607    /// the highest section level and `<h6>` is the lowest.
608    /// 
609    /// [mdn]: https://developer.mozilla.org/en-US/docs/Web/HTML/Element/h1
610    h1 {
611    }
612);
613
614dom_type!(h1 <dom::HtmlHeadingElement>);
615children_allowed!(h1);
616
617html_element!(
618    /// The [HTML `<h1>`–`<h6>` elements][mdn] represent six levels of section headings. `<h1>` is
619    /// the highest section level and `<h6>` is the lowest.
620    /// 
621    /// [mdn]: https://developer.mozilla.org/en-US/docs/Web/HTML/Element/h2
622    h2 {
623    }
624);
625
626dom_type!(h2 <dom::HtmlHeadingElement>);
627children_allowed!(h2);
628
629html_element!(
630    /// The [HTML `<h1>`–`<h6>` elements][mdn] represent six levels of section headings. `<h1>` is
631    /// the highest section level and `<h6>` is the lowest.
632    /// 
633    /// [mdn]: https://developer.mozilla.org/en-US/docs/Web/HTML/Element/h3
634    h3 {
635    }
636);
637
638dom_type!(h3 <dom::HtmlHeadingElement>);
639children_allowed!(h3);
640
641html_element!(
642    /// The [HTML `<h1>`–`<h6>` elements][mdn] represent six levels of section headings. `<h1>` is
643    /// the highest section level and `<h6>` is the lowest.
644    /// 
645    /// [mdn]: https://developer.mozilla.org/en-US/docs/Web/HTML/Element/h4
646    h4 {
647    }
648);
649
650dom_type!(h4 <dom::HtmlHeadingElement>);
651children_allowed!(h4);
652
653html_element!(
654    /// The [HTML `<h1>`–`<h6>` elements][mdn] represent six levels of section headings. `<h1>` is
655    /// the highest section level and `<h6>` is the lowest.
656    /// 
657    /// [mdn]: https://developer.mozilla.org/en-US/docs/Web/HTML/Element/h5
658    h5 {
659    }
660);
661
662dom_type!(h5 <dom::HtmlHeadingElement>);
663children_allowed!(h5);
664
665html_element!(
666    /// The [HTML `<h1>`–`<h6>` elements][mdn] represent six levels of section headings. `<h1>` is
667    /// the highest section level and `<h6>` is the lowest.
668    /// 
669    /// [mdn]: https://developer.mozilla.org/en-US/docs/Web/HTML/Element/h6
670    h6 {
671    }
672);
673
674dom_type!(h6 <dom::HtmlHeadingElement>);
675children_allowed!(h6);
676
677html_element!(
678    /// The [HTML `<hgroup>` element][mdn] represents a multi-level heading for a section of a
679    /// document. It groups a set of [`<h1>–<h6>`][heading] elements.
680    /// 
681    /// [mdn]: https://developer.mozilla.org/en-US/docs/Web/HTML/Element/hgroup
682    /// [heading]: https://developer.mozilla.org/en-US/docs/Web/HTML/Element/Heading_Elements
683    hgroup {
684    }
685);
686
687dom_type!(hgroup <dom::HtmlElement>);
688children_allowed!(hgroup);
689
690html_element!(
691    /// The [HTML `<main>` element][mdn] represents the dominant content of the [`<body>`][body] of
692    /// a document. The main content area consists of content that is directly related to or expands
693    /// upon the central topic of a document, or the central functionality of an application.
694    /// 
695    /// [mdn]: https://developer.mozilla.org/en-US/docs/Web/HTML/Element/main
696    /// [body]: https://developer.mozilla.org/en-US/docs/Web/HTML/Element/body
697    main {
698    }
699);
700
701dom_type!(main <dom::HtmlElement>);
702children_allowed!(main);
703
704html_element!(
705    /// The [HTML `<nav>` element][mdn] represents a section of a page whose purpose is to provide
706    /// navigation links, either within the current document or to other documents. Common examples
707    /// of navigation sections are menus, tables of contents, and indexes.
708    /// 
709    /// [mdn]: https://developer.mozilla.org/en-US/docs/Web/HTML/Element/nav
710    nav {
711    }
712);
713
714dom_type!(nav <dom::HtmlElement>);
715children_allowed!(nav);
716
717html_element!(
718    /// The [HTML `<section>` element][mdn] represents a standalone section — which doesn't have a
719    /// more specific semantic element to represent it — contained within an HTML document.
720    /// 
721    /// [mdn]: https://developer.mozilla.org/en-US/docs/Web/HTML/Element/section
722    section {
723    }
724);
725
726dom_type!(section <dom::HtmlElement>);
727children_allowed!(section);
728
729html_element!(
730    /// The [HTML `<embed>` element][mdn] embeds external content at the specified point in the
731    /// document. This content is provided by an external application or other source of interactive
732    /// content such as a browser plug-in.
733    /// 
734    /// [mdn]: https://developer.mozilla.org/en-US/docs/Web/HTML/Element/embed
735    embed {
736        /// The displayed height of the resource, in [CSS pixels]. This must be an absolute value;
737        /// percentages are not allowed.
738        /// 
739        /// [CSS pixels]: https://drafts.csswg.org/css-values/#px
740        height: String,
741
742        /// The URL of the resource being embedded.
743        src: String,
744
745        /// The [MIME type] to use to select the plug-in to instantiate.
746        /// 
747        /// [MIME type]: https://developer.mozilla.org/en-US/docs/Glossary/MIME_type
748        type_: String,
749
750        /// The displayed width of the resource, in [CSS pixels]. This must be an absolute value;
751        /// percentages are not allowed.
752        /// 
753        /// [CSS pixels]: https://drafts.csswg.org/css-values/#px
754        width: String,
755
756    }
757);
758
759dom_type!(embed <dom::HtmlEmbedElement>);
760
761html_element!(
762    /// The [HTML Inline Frame element (`<iframe>`)][mdn] represents a nested [browsing context],
763    /// embedding another HTML page into the current one.
764    /// 
765    /// [mdn]: https://developer.mozilla.org/en-US/docs/Web/HTML/Element/iframe
766    /// [browsing context]: https://developer.mozilla.org/en-US/docs/Glossary/browsing_context
767    iframe {
768        /// Specifies a feature policy for the `<iframe>`.
769        allow: String,
770
771        /// The height of the frame in CSS pixels. Default is 150.
772        height: String,
773
774        /// A targetable name for the embedded browsing context. This can be used in the target
775        /// attribute of the `<a>`, `<form>`, or `<base>` elements; the formtarget attribute of the
776        /// `<input>` or `<button>` elements; or the windowName parameter in the window.open() method.
777        name: String,
778
779        /// Indicates which referrer to send when fetching the frame's resource.
780        referrerpolicy: String,
781
782        /// Applies extra restrictions to the content in the frame. The value of the attribute can
783        /// either be empty to apply all restrictions, or space-separated tokens to lift particular
784        /// restrictions:
785        /// 
786        /// * allow-downloads-without-user-activation: Allows for downloads to occur without a
787        /// gesture from the user.
788        /// * allow-forms: Allows the resource to submit forms. If this keyword is not used, form
789        /// submission is blocked.
790        /// * allow-modals: Lets the resource open modal windows.
791        /// * allow-orientation-lock: Lets the resource lock the screen orientation.
792        /// * allow-pointer-lock: Lets the resource use the Pointer Lock API.
793        /// * allow-popups: Allows popups (such as window.open(), target="_blank", or
794        /// showModalDialog()). If this keyword is not used, the popup will silently fail to open.
795        /// * allow-popups-to-escape-sandbox: Lets the sandboxed document open new windows without
796        /// those windows inheriting the sandboxing. For example, this can safely sandbox an
797        /// advertisement without forcing the same restrictions upon the page the ad links to.
798        /// * allow-presentation: Lets the resource start a presentation session.
799        /// * allow-same-origin: If this token is not used, the resource is treated as being from a
800        /// special origin that always fails the same-origin policy.
801        /// * allow-scripts: Lets the resource run scripts (but not create popup windows).
802        /// * allow-storage-access-by-user-activation : Lets the resource request access to the
803        /// parent's storage capabilities with the Storage Access API.
804        /// * allow-top-navigation: Lets the resource navigate the top-level browsing context (the
805        /// one named _top).
806        /// * allow-top-navigation-by-user-activation: Lets the resource navigate the top-level
807        /// browsing context, but only if initiated by a user gesture.
808        /// 
809        /// Notes about sandboxing:
810        /// 
811        /// When the embedded document has the same origin as the embedding page, it is strongly
812        /// discouraged to use both allow-scripts and allow-same-origin, as that lets the embedded
813        /// document remove the sandbox attribute — making it no more secure than not using the
814        /// sandbox attribute at all.
815        /// 
816        /// Sandboxing is useless if the attacker can display content outside a sandboxed iframe —
817        /// such as if the viewer opens the frame in a new tab. Such content should be also served
818        /// from a separate origin to limit potential damage.
819        sandbox: String,
820
821        /// The URL of the page to embed. Use a value of about:blank to embed an empty page that
822        /// conforms to the same-origin policy. Also note that programatically removing an
823        /// `<iframe>`'s src attribute (e.g. via Element.removeAttribute()) causes about:blank to be
824        /// loaded in the frame in Firefox (from version 65), Chromium-based browsers, and
825        /// Safari/iOS.
826        src: String,
827
828        /// Inline HTML to embed, overriding the src attribute. If a browser does not support the
829        /// srcdoc attribute, it will fall back to the URL in the src attribute.
830        srcdoc: String,
831
832        /// The width of the frame in CSS pixels. Default is 300.
833        width: String,
834
835    }
836);
837
838dom_type!(iframe <dom::HtmlIFrameElement>);
839children_allowed!(iframe);
840
841html_element!(
842    /// The [HTML `<object>` element][mdn] represents an external resource, which can be treated as
843    /// an image, a nested browsing context, or a resource to be handled by a plugin.
844    /// 
845    /// [mdn]: https://developer.mozilla.org/en-US/docs/Web/HTML/Element/object
846    object {
847        /// Specifies the URL of the resource.
848        data: String,
849
850        /// The form element, if any, that the object element is associated with (its form owner).
851        /// The value of the attribute must be an ID of a `<form>` element in the same document.
852        form: String,
853
854        /// The height of the displayed resource, in CSS pixels. No percentages.
855        height: String,
856
857        /// The name of valid browsing context.
858        name: String,
859
860        /// The content type of the resource specified by data. At least one of data and type must
861        /// be defined.
862        type_: String,
863
864        /// Indicates if the type attribute and the actual content type of the resource must match
865        /// to be used.
866        typemustmatch: bool,
867
868        /// A hash-name reference to a `<map>` element; that is a '#' followed by the value of a name
869        /// of a map element.
870        usemap: String,
871
872        /// The width of the display resource, in CSS pixels. No percentages.
873        width: String,
874
875    }
876);
877
878dom_type!(object <dom::HtmlObjectElement>);
879children_allowed!(object);
880
881html_element!(
882    /// The [HTML `<param>` element][param] defines parameters for an [`<object>`][object] element.
883    /// 
884    /// [mdn]: https://developer.mozilla.org/en-US/docs/Web/HTML/Element/param
885    /// [object]: https://developer.mozilla.org/en-US/docs/Web/HTML/Element/object
886    param {
887        /// Name of the parameter.
888        name: String,
889
890        /// Specifies the value of the parameter.
891        value: String,
892
893    }
894);
895
896dom_type!(param <dom::HtmlParamElement>);
897
898html_element!(
899    /// The [HTML `<picture>` element][mdn] contains zero or more [`<source>`][source] elements and
900    /// one [`<img>`][img] element to provide versions of an image for different display/device
901    /// scenarios.
902    /// 
903    /// [mdn]: https://developer.mozilla.org/en-US/docs/Web/HTML/Element/picture
904    /// [source]: https://developer.mozilla.org/en-US/docs/Web/HTML/Element/source
905    /// [img]: https://developer.mozilla.org/en-US/docs/Web/HTML/Element/img
906    picture {
907    }
908);
909
910dom_type!(picture <dom::HtmlPictureElement>);
911children_allowed!(picture);
912
913html_element!(
914    /// The [HTML `<source>` element][source] specifies multiple media resources for the
915    /// [`<picture>`][picture], the [`<audio>`][audio] element, or the [`<video>`][video] element.
916    /// 
917    /// [mdn]: https://developer.mozilla.org/en-US/docs/Web/HTML/Element/source
918    /// [picture]: https://developer.mozilla.org/en-US/docs/Web/HTML/Element/picture
919    /// [audio]: https://developer.mozilla.org/en-US/docs/Web/HTML/Element/audio
920    /// [video]: https://developer.mozilla.org/en-US/docs/Web/HTML/Element/video
921    source {
922        /// Media query of the resource's intended media; this should be used only in a `<picture>`
923        /// element.
924        media: String,
925
926        /// Is a list of source sizes that describes the final rendered width of the image
927        /// represented by the source. Each source size consists of a comma-separated list of media
928        /// condition-length pairs. This information is used by the browser to determine, before
929        /// laying the page out, which image defined in srcset to use. Please note that sizes will
930        /// have its effect only if width dimension descriptors are provided with srcset instead of
931        /// pixel ratio values (200w instead of 2x for example).
932        /// 
933        /// The sizes attribute has an effect only when the `<source>` element is the direct child of
934        /// a `<picture>` element.
935        sizes: String,
936
937        /// Required for `<audio>` and `<video>`, address of the media resource. The value of this
938        /// attribute is ignored when the `<source>` element is placed inside a `<picture>` element.
939        src: String,
940
941        /// A list of one or more strings separated by commas indicating a set of possible images
942        /// represented by the source for the browser to use. Each string is composed of:
943        /// 
944        /// 1. One URL specifying an image.
945        /// 2. A width descriptor, which consists of a string containing a positive integer directly
946        /// followed by "w", such as 300w. The default value, if missing, is the infinity.
947        /// 3. A pixel density descriptor, that is a positive floating number directly followed by
948        /// "x". The default value, if missing, is 1x.
949        /// 
950        /// Each string in the list must have at least a width descriptor or a pixel density
951        /// descriptor to be valid. Among the list, there must be only one string containing the
952        /// same tuple of width descriptor and pixel density descriptor. The browser chooses the
953        /// most adequate image to display at a given point of time.
954        /// 
955        /// The srcset attribute has an effect only when the `<source>` element is the direct child of
956        /// a `<picture>` element.
957        srcset: String,
958
959        /// The MIME media type of the resource, optionally with a codecs parameter.
960        type_: String,
961
962    }
963);
964
965dom_type!(source <dom::HtmlSourceElement>);
966
967html_element!(
968    /// Use the [HTML `<canvas>` element][mdn] with either the [canvas scripting API][api] or the
969    /// [WebGL API][gl] to draw graphics and animations.
970    /// 
971    /// [mdn]: https://developer.mozilla.org/en-US/docs/Web/HTML/Element/canvas
972    /// [api]: https://developer.mozilla.org/en-US/docs/Web/API/Canvas_API
973    /// [gl]: https://developer.mozilla.org/en-US/docs/Web/API/WebGL_API
974    canvas {
975        /// The height of the coordinate space in CSS pixels. Defaults to 150.
976        height: String,
977
978        /// The width of the coordinate space in CSS pixels. Defaults to 300.
979        width: String,
980
981    }
982);
983
984dom_type!(canvas <dom::HtmlCanvasElement>);
985children_allowed!(canvas);
986
987html_element!(
988    /// The [HTML `<noscript>` element][mdn] defines a section of HTML to be inserted if a script
989    /// type on the page is unsupported or if scripting is currently turned off in the browser.
990    /// 
991    /// [mdn]: https://developer.mozilla.org/en-US/docs/Web/HTML/Element/noscript
992    noscript {
993    }
994);
995
996dom_type!(noscript <dom::HtmlElement>);
997children_allowed!(noscript);
998
999html_element!(
1000    /// The [HTML `<script>` element][mdn] is used to embed or reference executable code; this is
1001    /// typically used to embed or refer to JavaScript code.
1002    /// 
1003    /// [mdn]: https://developer.mozilla.org/en-US/docs/Web/HTML/Element/script
1004    script {
1005        /// For classic scripts, if the async attribute is present, then the classic script will be
1006        /// fetched in parallel to parsing and evaluated as soon as it is available.
1007        /// 
1008        /// For module scripts, if the async attribute is present then the scripts and all their
1009        /// dependencies will be executed in the defer queue, therefore they will get fetched in
1010        /// parallel to parsing and evaluated as soon as they are available.
1011        /// 
1012        /// This attribute allows the elimination of parser-blocking JavaScript where the browser
1013        /// would have to load and evaluate scripts before continuing to parse. defer has a similar
1014        /// effect in this case.
1015        async_: bool,
1016
1017        /// Normal script elements pass minimal information to the window.onerror for scripts which
1018        /// do not pass the standard CORS checks. To allow error logging for sites which use a
1019        /// separate domain for static media, use this attribute.
1020        crossorigin: String,
1021
1022        /// Indicates to a browser that the script is meant to be executed after the document has
1023        /// been parsed, but before firing DOMContentLoaded.
1024        /// 
1025        /// Scripts with the defer attribute will prevent the DOMContentLoaded event from firing
1026        /// until the script has loaded and finished evaluating.
1027        /// 
1028        /// This attribute must not be used if the src attribute is absent (i.e. for inline
1029        /// scripts), in this case it would have no effect.
1030        /// 
1031        /// The defer attribute has no effect on module scripts — they defer by default.
1032        /// 
1033        /// Scripts with the defer attribute will execute in the order in which they appear in the
1034        /// document.
1035        /// 
1036        /// This attribute allows the elimination of parser-blocking JavaScript where the browser
1037        /// would have to load and evaluate scripts before continuing to parse. async has a similar
1038        /// effect in this case.
1039        defer: bool,
1040
1041        /// This attribute contains inline metadata that a user agent can use to verify that a
1042        /// fetched resource has been delivered free of unexpected manipulation.
1043        integrity: String,
1044
1045        /// Indicates that the script should not be executed in browsers that support ES2015 modules
1046        /// — in effect, this can be used to serve fallback scripts to older browsers that do not
1047        /// support modular JavaScript code.
1048        nomodule: bool,
1049
1050        /// A cryptographic nonce (number used once) to whitelist scripts in a script-src
1051        /// Content-Security-Policy. The server must generate a unique nonce value each time it
1052        /// transmits a policy. It is critical to provide a nonce that cannot be guessed as
1053        /// bypassing a resource's policy is otherwise trivial.
1054        nonce: String,
1055
1056        /// Indicates which referrer to send when fetching the script, or resources fetched by the
1057        /// script.
1058        referrerpolicy: String,
1059
1060        /// This attribute specifies the URI of an external script; this can be used as an
1061        /// alternative to embedding a script directly within a document.
1062        src: String,
1063
1064        /// This attribute indicates the type of script represented. The value of this attribute
1065        /// will be in one of the following categories:
1066        /// 
1067        /// * Omitted or a JavaScript MIME type: This indicates the script is JavaScript. The HTML5
1068        /// specification urges authors to omit the attribute rather than provide a redundant MIME
1069        /// type.
1070        /// * `module`: Causes the code to be treated as a JavaScript module. The processing of the
1071        /// script contents is not affected by the charset and defer attributes. Unlike classic
1072        /// scripts, module scripts require the use of the CORS protocol for cross-origin
1073        /// fetching.
1074        /// * Any other value: The embedded content is treated as a data block which won't be
1075        /// processed by the browser. Developers must use a valid MIME type that is not a
1076        /// JavaScript MIME type to denote data blocks. The src attribute will be ignored.
1077        type_: String,
1078
1079    }
1080);
1081
1082dom_type!(script <dom::HtmlScriptElement>);
1083children_allowed!(script);
1084
1085html_element!(
1086    /// The [HTML `<area>` element][mdn] defines a hot-spot region on an image, and optionally
1087    /// associates it with a [hypertext link]. This element is used only within a [`<map>`][map]
1088    /// element.
1089    /// 
1090    /// [mdn]: https://developer.mozilla.org/en-US/docs/Web/HTML/Element/area
1091    /// [hypertext link]: https://developer.mozilla.org/en-US/docs/Glossary/Hyperlink
1092    /// [map]: https://developer.mozilla.org/en-US/docs/Web/HTML/Element/map
1093    area {
1094        /// A text string alternative to display on browsers that do not display images. The text
1095        /// should be phrased so that it presents the user with the same kind of choice as the image
1096        /// would offer when displayed without the alternative text. This attribute is required only
1097        /// if the href attribute is used.
1098        alt: String,
1099
1100        /// A set of values specifying the coordinates of the hot-spot region. The number and
1101        /// meaning of the values depend upon the value specified for the shape attribute.
1102        /// 
1103        /// * rect or rectangle: the coords value is two x,y pairs: left, top, right, bottom.
1104        /// * circle: the value is x,y,r where x,y is a pair specifying the center of the circle and
1105        /// r is a value for the radius.
1106        /// * poly or polygon: the value is a set of x,y pairs for each point in the polygon:
1107        /// x1,y1,x2,y2,x3,y3, and so on.
1108        /// 
1109        /// The values are numbers of CSS pixels.
1110        coords: String,
1111
1112        /// This attribute, if present, indicates that the author intends the hyperlink to be used
1113        /// for downloading a resource. See `<a>` for a full description of the download attribute.
1114        download: bool,
1115
1116        /// The hyperlink target for the area. Its value is a valid URL. This attribute may be
1117        /// omitted; if so, the area element does not represent a hyperlink.
1118        href: String,
1119
1120        /// Indicates the language of the linked resource. Allowed values are determined by BCP47.
1121        /// Use this attribute only if the href attribute is present.
1122        hreflang: String,
1123
1124        /// Contains a space-separated list of URLs to which, when the hyperlink is followed, POST
1125        /// requests with the body PING will be sent by the browser (in the background). Typically
1126        /// used for tracking.
1127        ping: String,
1128
1129        /// For anchors containing the href attribute, this attribute specifies the relationship of
1130        /// the target object to the link object. The value is a space-separated list of link types
1131        /// values. The values and their semantics will be registered by some authority that might
1132        /// have meaning to the document author. The default relationship, if no other is given, is
1133        /// void. Use this attribute only if the href attribute is present.
1134        rel: String,
1135
1136        /// This attribute specifies where to display the linked resource. It is a name of, or
1137        /// keyword for, a browsing context (for example, tab, window, or inline frame). The
1138        /// following keywords have special meanings:
1139        /// 
1140        /// * _self: Load the response into the same browsing context as the current one. This value
1141        /// is the default if the attribute is not specified.
1142        /// * _blank: Load the response into a new unnamed browsing context.
1143        /// * _parent: Load the response into the parent browsing context of the current one. If
1144        /// there is no parent, this option behaves the same way as _self.
1145        /// * _top: Load the response into the top-level browsing context (that is, the browsing
1146        /// context that is an ancestor of the current one, and has no parent). If there is no
1147        /// parent, this option behaves the same way as _self.
1148        /// 
1149        /// Use this attribute only if the `href` attribute is present.
1150        target: String,
1151
1152    }
1153);
1154
1155dom_type!(area <dom::HtmlAreaElement>);
1156
1157html_element!(
1158    /// The [HTML `<audio>` element][mdn] is used to embed sound content in documents. It may
1159    /// contain one or more audio sources, represented using the `src` attribute or the
1160    /// [`<source>`][source] element: the browser will choose the most suitable one. It can also be
1161    /// the destination for streamed media, using a [`MediaStream`][stream].
1162    /// 
1163    /// [mdn]: https://developer.mozilla.org/en-US/docs/Web/HTML/Element/audio
1164    /// [source]: https://developer.mozilla.org/en-US/docs/Web/HTML/Element/source
1165    /// [stream]: https://developer.mozilla.org/en-US/docs/Web/API/MediaStream
1166    audio {
1167        /// If specified, the audio will automatically begin playback as soon as it can do so,
1168        /// without waiting for the entire audio file to finish downloading.
1169        /// 
1170        /// Note: Sites that automatically play audio (or videos with an audio track) can be an
1171        /// unpleasant experience for users, so should be avoided when possible. If you must offer
1172        /// autoplay functionality, you should make it opt-in (requiring a user to specifically
1173        /// enable it). However, this can be useful when creating media elements whose source will
1174        /// be set at a later time, under user control. See our autoplay guide for additional
1175        /// information about how to properly use autoplay.
1176        autoplay: bool,
1177
1178        /// If this attribute is present, the browser will offer controls to allow the user to
1179        /// control audio playback, including volume, seeking, and pause/resume playback.
1180        controls: bool,
1181
1182        /// This enumerated attribute indicates whether to use CORS to fetch the related audio file.
1183        /// CORS-enabled resources can be reused in the `<canvas>` element without being tainted.
1184        /// 
1185        /// When not present, the resource is fetched without a CORS request (i.e. without sending
1186        /// the Origin: HTTP header), preventing its non-tainted used in `<canvas>` elements. If
1187        /// invalid, it is handled as if the enumerated keyword anonymous was used.
1188        /// 
1189        /// The allowed values are:
1190        /// 
1191        /// # `anonymous`
1192        /// 
1193        /// Sends a cross-origin request without a credential. In other words, it sends the
1194        /// `Origin: HTTP` header without a cookie, X.509 certificate, or performing HTTP Basic
1195        /// authentication. If the server does not give credentials to the origin site (by not
1196        /// setting the `Access-Control-Allow-Origin: HTTP` header), the image will be tainted, and
1197        /// its usage restricted.
1198        /// 
1199        /// # `use-credentials`
1200        /// 
1201        /// Sends a cross-origin request with a credential. In other words, it sends the
1202        /// `Origin: HTTP` header with a cookie, a certificate, or performing HTTP Basic
1203        /// authentication. If the server does not give credentials to the origin site (through
1204        /// `Access-Control-Allow-Credentials: HTTP` header), the image will be tainted and its
1205        /// usage restricted.
1206        crossorigin: String,
1207
1208        /// Reading currentTime returns a double-precision floating-point value indicating the
1209        /// current playback position, in seconds, of the audio. If the audio's metadata isn't
1210        /// available yet—thereby preventing you from knowing the media's start time or
1211        /// duration—currentTime instead indicates, and can be used to change, the time at which
1212        /// playback will begin. Otherwise, setting currentTime sets the current playback position
1213        /// to the given time and seeks the media to that position if the media is currently loaded.
1214        /// 
1215        /// If the audio is being streamed, it's possible that the user agent may not be able to
1216        /// obtain some parts of the resource if that data has expired from the media buffer. Other
1217        /// audio may have a media timeline that doesn't start at 0 seconds, so setting currentTime
1218        /// to a time before that would fail. For example, if the audio's media timeline starts at
1219        /// 12 hours, setting currentTime to 3600 would be an attempt to set the current playback
1220        /// position well before the beginning of the media, and would fail. The getStartDate()
1221        /// method can be used to determine the beginning point of the media timeline's reference
1222        /// frame.
1223        current_time: String,
1224
1225        /// If specified, the audio player will automatically seek back to the start upon reaching
1226        /// the end of the audio.
1227        loop_: bool,
1228
1229        /// Indicates whether the audio will be initially silenced. Its default value is false.
1230        muted: bool,
1231
1232        /// This enumerated attribute is intended to provide a hint to the browser about what the
1233        /// author thinks will lead to the best user experience. It may have one of the following
1234        /// values:
1235        /// 
1236        /// * `none`: Indicates that the audio should not be preloaded.
1237        /// * `metadata`: Indicates that only audio metadata (e.g. length) is fetched.
1238        /// * `auto`: Indicates that the whole audio file can be downloaded, even if the user is not
1239        /// expected to use it.
1240        /// * empty string: A synonym of the auto value.
1241        /// 
1242        /// The default value is different for each browser. The spec advises it to be set to
1243        /// metadata.
1244        /// 
1245        /// Usage notes:
1246        /// 
1247        /// The autoplay attribute has precedence over preload. If autoplay is specified, the
1248        /// browser would obviously need to start downloading the audio for playback.
1249        /// 
1250        /// The browser is not forced by the specification to follow the value of this attribute; it
1251        /// is a mere hint.
1252        preload: String,
1253
1254        /// The URL of the audio to embed. This is subject to HTTP access controls. This is
1255        /// optional; you may instead use the `<source>` element within the audio block to specify
1256        /// the audio to embed.
1257        src: String,
1258
1259    }
1260);
1261
1262dom_type!(audio <dom::HtmlAudioElement>);
1263children_allowed!(audio);
1264
1265html_element!(
1266    /// The [HTML `<img>` element][mdn] embeds an image into the document.
1267    /// 
1268    /// [mdn]: https://developer.mozilla.org/en-US/docs/Web/HTML/Element/img
1269    img {
1270        /// Defines an alternative text description of the image.
1271        /// 
1272        /// > Note: Browsers do not always display images. For example:
1273        /// >
1274        /// > * Non-visual browsers (such as those used by people with visual impairments)
1275        /// > * The user chooses not to display images (saving bandwidth, privacy reasons)
1276        /// > * The image is invalid or an unsupported type
1277        /// > * In these cases, the browser may replace the image with the text in the element's alt
1278        /// attribute. For these reasons and others, provide a useful value for alt whenever
1279        /// possible.
1280        /// 
1281        /// Omitting alt altogether indicates that the image is a key part of the content and no
1282        /// textual equivalent is available. Setting this attribute to an empty string (alt="")
1283        /// indicates that this image is not a key part of the content (it’s decoration or a
1284        /// tracking pixel), and that non-visual browsers may omit it from rendering. Visual
1285        /// browsers will also hide the broken image icon if the alt is empty and the image failed
1286        /// to display.
1287        /// 
1288        /// This attribute is also used when copying and pasting the image to text, or saving a
1289        /// linked image to a bookmark.
1290        alt: String,
1291
1292        /// Indicates if the fetching of the image must be done using a CORS request. Image data
1293        /// from a CORS-enabled image returned from a CORS request can be reused in the `<canvas>`
1294        /// element without being marked "tainted".
1295        /// 
1296        /// If the crossorigin attribute is not specified, then a non-CORS request is sent (without
1297        /// the Origin request header), and the browser marks the image as tainted and restricts
1298        /// access to its image data, preventing its usage in `<canvas>` elements.
1299        /// 
1300        /// If the crossorigin attribute is specified, then a CORS request is sent (with the Origin
1301        /// request header); but if the server does not opt into allowing cross-origin access to the
1302        /// image data by the origin site (by not sending any Access-Control-Allow-Origin response
1303        /// header, or by not including the site's origin in any Access-Control-Allow-Origin
1304        /// response header it does send), then the browser marks the image as tainted and restricts
1305        /// access to its image data, preventing its usage in `<canvas>` elements.
1306        /// 
1307        /// Allowed values:
1308        /// 
1309        /// * `anonymous`: A CORS request is sent with credentials omitted (that is, no cookies,
1310        /// X.509 certificates, or Authorization request header).
1311        /// * `use-credentials`: The CORS request is sent with any credentials included (that is,
1312        /// cookies, X.509 certificates, and the `Authorization` request header). If the server
1313        /// does not opt into sharing credentials with the origin site (by sending back the
1314        /// `Access-Control-Allow-Credentials: true` response header), then the browser marks the
1315        /// image as tainted and restricts access to its image data.
1316        /// 
1317        /// If the attribute has an invalid value, browsers handle it as if the anonymous value was
1318        /// used.
1319        crossorigin: String,
1320
1321        /// Provides an image decoding hint to the browser. Allowed values:
1322        /// 
1323        /// * `sync`: Decode the image synchronously, for atomic presentation with other content.
1324        /// * `async`: Decode the image asynchronously, to reduce delay in presenting other content.
1325        /// * `auto`: Default: no preference for the decoding mode. The browser decides what is best
1326        /// for the user.
1327        decoding: String,
1328
1329        /// The intrinsic height of the image, in pixels. Must be an integer without a unit.
1330        height: String,
1331
1332        /// Indicates that the image is part of a server-side map. If so, the coordinates where the
1333        /// user clicked on the image are sent to the server.
1334        /// 
1335        /// Note: This attribute is allowed only if the `<img>` element is a descendant of an `<a>`
1336        /// element with a valid href attribute. This gives users without pointing devices a
1337        /// fallback destination.
1338        ismap: bool,
1339
1340        /// Indicates how the browser should load the image:
1341        /// 
1342        /// * `eager`: Loads the image immediately, regardless of whether or not the image is
1343        /// currently within the visible viewport (this is the default value).
1344        /// * `lazy`: Defers loading the image until it reaches a calculated distance from the
1345        /// viewport, as defined by the browser. The intent is to avoid the network and storage
1346        /// bandwidth needed to handle the image until it's reasonably certain that it will be
1347        /// needed. This generally improves the performance of the content in most typical use
1348        /// cases.
1349        /// 
1350        /// > Note: Loading is only deferred when JavaScript is enabled. This is an anti-tracking
1351        /// measure, because if a user agent supported lazy loading when scripting is disabled, it
1352        /// would still be possible for a site to track a user's approximate scroll position
1353        /// throughout a session, by strategically placing images in a page's markup such that a
1354        /// server can track how many images are requested and when.
1355        loading: String,
1356
1357        /// One or more strings separated by commas, indicating a set of source sizes. Each source
1358        /// size consists of:
1359        /// 
1360        /// * A media condition. This must be omitted for the last item in the list.
1361        /// * A source size value.
1362        /// 
1363        /// Media Conditions describe properties of the viewport, not of the image. For example,
1364        /// (max-height: 500px) 1000px proposes to use a source of 1000px width, if the viewport is
1365        /// not higher than 500px.
1366        /// 
1367        /// Source size values specify the intended display size of the image. User agents use the
1368        /// current source size to select one of the sources supplied by the srcset attribute, when
1369        /// those sources are described using width (w) descriptors. The selected source size
1370        /// affects the intrinsic size of the image (the image’s display size if no CSS styling is
1371        /// applied). If the srcset attribute is absent, or contains no values with a width
1372        /// descriptor, then the sizes attribute has no effect.
1373        sizes: String,
1374
1375        /// The image URL. Mandatory for the `<img>` element. On browsers supporting srcset, src is
1376        /// treated like a candidate image with a pixel density descriptor 1x, unless an image with
1377        /// this pixel density descriptor is already defined in srcset, or unless srcset contains w
1378        /// descriptors.
1379        src: String,
1380
1381        /// One or more strings separated by commas, indicating possible image sources for the user
1382        /// agent to use. Each string is composed of:
1383        /// 
1384        /// * A URL to an image
1385        /// * Optionally, whitespace followed by one of:
1386        /// * A width descriptor (a positive integer directly followed by w). The width descriptor
1387        /// is divided by the source size given in the sizes attribute to calculate the
1388        /// effective pixel density.
1389        /// * A pixel density descriptor (a positive floating point number directly followed by
1390        /// x).
1391        /// * If no descriptor is specified, the source is assigned the default descriptor of 1x.
1392        /// 
1393        /// It is incorrect to mix width descriptors and pixel density descriptors in the same
1394        /// srcset attribute. Duplicate descriptors (for instance, two sources in the same srcset
1395        /// which are both described with 2x) are also invalid.
1396        /// 
1397        /// The user agent selects any of the available sources at its discretion. This provides
1398        /// them with significant leeway to tailor their selection based on things like user
1399        /// preferences or bandwidth conditions. See our Responsive images tutorial for an example.
1400        srcset: String,
1401
1402        /// The intrinsic width of the image in pixels. Must be an integer without a unit.
1403        width: String,
1404
1405        /// The partial URL (starting with #) of an image map associated with the element.
1406        /// 
1407        /// Note: You cannot use this attribute if the `<img>` element is inside an `<a>` or
1408        /// `<button>` element.
1409        usemap: String,
1410
1411    }
1412);
1413
1414dom_type!(img <dom::HtmlImageElement>);
1415
1416html_element!(
1417    /// The [HTML `<map>` element][mdn] is used with [`<area>`][area] elements to define an image
1418    /// map (a clickable link area).
1419    /// 
1420    /// [mdn]: https://developer.mozilla.org/en-US/docs/Web/HTML/Element/map
1421    /// [area]: https://developer.mozilla.org/en-US/docs/Web/HTML/Element/area
1422    map {
1423        /// The name attribute gives the map a name so that it can be referenced. The attribute must
1424        /// be present and must have a non-empty value with no space characters. The value of the
1425        /// name attribute must not be a compatibility-caseless match for the value of the name
1426        /// attribute of another `<map>` element in the same document. If the id attribute is also
1427        /// specified, both attributes must have the same value.
1428        name: String,
1429
1430    }
1431);
1432
1433dom_type!(map <dom::HtmlMapElement>);
1434children_allowed!(map);
1435
1436html_element!(
1437    /// The [HTML `<track>` element][mdn] is used as a child of the media elements
1438    /// [`<audio>`][audio] and [`<video>`][video]. It lets you specify timed text tracks (or
1439    /// time-based data), for example to automatically handle subtitles. The tracks are formatted in
1440    /// [WebVTT format][vtt] (`.vtt` files) — Web Video Text Tracks or [Timed Text Markup Language
1441    /// (TTML)][ttml].
1442    /// 
1443    /// [mdn]: https://developer.mozilla.org/en-US/docs/Web/HTML/Element/track
1444    /// [audio]: https://developer.mozilla.org/en-US/docs/Web/HTML/Element/audio
1445    /// [video]: https://developer.mozilla.org/en-US/docs/Web/HTML/Element/video
1446    /// [vtt]: https://developer.mozilla.org/en-US/docs/Web/API/Web_Video_Text_Tracks_Format
1447    /// [ttml]: https://w3c.github.io/ttml2/index.html
1448    track {
1449        /// This attribute indicates that the track should be enabled unless the user's preferences
1450        /// indicate that another track is more appropriate. This may only be used on one track
1451        /// element per media element.
1452        default: bool,
1453
1454        /// How the text track is meant to be used. If omitted the default kind is subtitles. If the
1455        /// attribute is not present, it will use the subtitles. If the attribute contains an
1456        /// invalid value, it will use metadata. The following keywords are allowed:
1457        /// Subtitles provide translation of content that cannot be understood by the viewer. For
1458        /// example dialogue or text that is not English in an English language film.
1459        /// 
1460        /// Subtitles may contain additional content, usually extra background information. For
1461        /// example the text at the beginning of the Star Wars films, or the date, time, and
1462        /// location of a scene.
1463        subtitles: String,
1464
1465        /// Closed captions provide a transcription and possibly a translation of audio.
1466        /// 
1467        /// It may include important non-verbal information such as music cues or sound effects. It
1468        /// may indicate the cue's source (e.g. music, text, character).
1469        /// 
1470        /// Suitable for users who are deaf or when the sound is muted.
1471        captions: String,
1472
1473        /// Textual description of the video content.
1474        /// 
1475        /// * `descriptions`: Suitable for users who are blind or where the video cannot be seen.
1476        /// * `chapters`: Chapter titles are intended to be used when the user is navigating the
1477        /// media resource.
1478        /// * `metadata`: Tracks used by scripts. Not visible to the user.
1479        /// * `label`: A user-readable title of the text track which is used by the browser when
1480        /// listing available text tracks.
1481        kind: String,
1482
1483        /// Address of the track (.vtt file). Must be a valid URL. This attribute must be specified
1484        /// and its URL value must have the same origin as the document — unless the `<audio>` or
1485        /// `<video>` parent element of the track element has a crossorigin attribute.
1486        src: String,
1487
1488        /// Language of the track text data. It must be a valid BCP 47 language tag. If the kind
1489        /// attribute is set to subtitles, then srclang must be defined.
1490        srclang: String,
1491
1492    }
1493);
1494
1495dom_type!(track <dom::HtmlTrackElement>);
1496
1497html_element!(
1498    /// The [HTML Video element (`<video>`)][mdn] embeds a media player which supports video
1499    /// playback into the document.
1500    /// 
1501    /// [mdn]: https://developer.mozilla.org/en-US/docs/Web/HTML/Element/video
1502    video {
1503        /// If specified, the video automatically begins to play back as soon as it can do so
1504        /// without stopping to finish loading the data.
1505        /// 
1506        /// Note: Sites that automatically play audio (or videos with an audio track) can be an
1507        /// unpleasant experience for users, so should be avoided when possible. If you must offer
1508        /// autoplay functionality, you should make it opt-in (requiring a user to specifically
1509        /// enable it). However, this can be useful when creating media elements whose source will
1510        /// be set at a later time, under user control. See our autoplay guide for additional
1511        /// information about how to properly use autoplay.
1512        /// 
1513        /// To disable video autoplay, autoplay="false" will not work; the video will autoplay if
1514        /// the attribute is there in the `<video>` tag at all. To remove autoplay, the attribute
1515        /// needs to be removed altogether.
1516        autoplay: bool,
1517
1518        /// An attribute you can read to determine the time ranges of the buffered media. This
1519        /// attribute contains a TimeRanges object.
1520        buffered: String,
1521
1522        /// If this attribute is present, the browser will offer controls to allow the user to
1523        /// control video playback, including volume, seeking, and pause/resume playback.
1524        controls: bool,
1525
1526        /// This enumerated attribute indicates whether to use CORS to fetch the related image.
1527        /// CORS-enabled resources can be reused in the `<canvas>` element without being tainted.
1528        /// The allowed values are:
1529        /// 
1530        /// * `anonymous`: Sends a cross-origin request without a credential. In other words, it
1531        /// sends the `Origin: HTTP` header without a cookie, X.509 certificate, or performing
1532        /// HTTP Basic authentication. If the server does not give credentials to the origin site
1533        /// (by not setting the `Access-Control-Allow-Origin: HTTP` header), the image will be
1534        /// tainted, and its usage restricted.
1535        /// * `use-credentials`: Sends a cross-origin request with a credential. In other words, it
1536        /// sends the Origin: HTTP header with a cookie, a certificate, or performing HTTP Basic
1537        /// authentication. If the server does not give credentials to the origin site (through
1538        /// `Access-Control-Allow-Credentials: HTTP` header), the image will be tainted and its
1539        /// usage restricted.
1540        /// 
1541        /// When not present, the resource is fetched without a CORS request (i.e. without sending
1542        /// the `Origin: HTTP` header), preventing its non-tainted used in `<canvas>` elements. If
1543        /// invalid, it is handled as if the enumerated keyword anonymous was used.
1544        crossorigin: String,
1545
1546        /// Reading currentTime returns a double-precision floating-point value indicating the
1547        /// current playback position of the media specified in seconds. If the media has not
1548        /// started playing yet, the time offset at which it will begin is returned. Setting
1549        /// currentTime sets the current playback position to the given time and seeks the media to
1550        /// that position if the media is currently loaded.
1551        /// 
1552        /// If the media is being streamed, it's possible that the user agent may not be able to
1553        /// obtain some parts of the resource if that data has expired from the media buffer. Other
1554        /// media may have a media timeline that doesn't start at 0 seconds, so setting currentTime
1555        /// to a time before that would fail. The getStartDate() method can be used to determine the
1556        /// beginning point of the media timeline's reference frame.
1557        current_time: String,
1558
1559        /// The height of the video's display area, in CSS pixels (absolute values only; no
1560        /// percentages.)
1561        height: String,
1562
1563        /// If specified, the browser will automatically seek back to the start upon reaching the
1564        /// end of the video.
1565        loop_: bool,
1566
1567        /// Indicates the default setting of the audio contained in the video. If set, the audio
1568        /// will be initially silenced. Its default value is false, meaning that the audio will be
1569        /// played when the video is played.
1570        muted: bool,
1571
1572        /// Indicating that the video is to be played "inline", that is within the element's
1573        /// playback area. Note that the absence of this attribute does not imply that the video
1574        /// will always be played in fullscreen.
1575        playsinline: bool,
1576
1577        /// A URL for an image to be shown while the video is downloading. If this attribute isn't
1578        /// specified, nothing is displayed until the first frame is available, then the first frame
1579        /// is shown as the poster frame.
1580        poster: String,
1581
1582        /// This enumerated attribute is intended to provide a hint to the browser about what the
1583        /// author thinks will lead to the best user experience with regards to what content is
1584        /// loaded before the video is played. It may have one of the following values:
1585        /// 
1586        /// * `none`: Indicates that the video should not be preloaded.
1587        /// * `metadata`: Indicates that only video metadata (e.g. length) is fetched.
1588        /// * `auto`: Indicates that the whole video file can be downloaded, even if the user is not
1589        /// expected to use it.
1590        /// * empty string: Synonym of the auto value.
1591        /// 
1592        /// The default value is different for each browser. The spec advises it to be set to
1593        /// metadata.
1594        /// 
1595        /// > Note:
1596        /// >
1597        /// > The autoplay attribute has precedence over preload. If autoplay is specified, the
1598        /// browser would obviously need to start downloading the video for playback.
1599        /// >
1600        /// > The specification does not force the browser to follow the value of this attribute; it
1601        /// is a mere hint.
1602        preload: String,
1603
1604        /// The URL of the video to embed. This is optional; you may instead use the `<source>`
1605        /// element within the video block to specify the video to embed.
1606        src: String,
1607
1608        /// The width of the video's display area, in CSS pixels (absolute values only; no
1609        /// percentages).
1610        width: String,
1611
1612    }
1613);
1614
1615dom_type!(video <dom::HtmlVideoElement>);
1616children_allowed!(video);
1617
1618html_element!(
1619    /// The [HTML Details Element (`<details>`)][mdn] creates a disclosure widget in which
1620    /// information is visible only when the widget is toggled into an "open" state.
1621    /// 
1622    /// [mdn]: https://developer.mozilla.org/en-US/docs/Web/HTML/Element/details
1623    details {
1624        /// Indicates whether the details will be shown on page load.
1625        open: bool,
1626
1627    }
1628);
1629
1630dom_type!(details <dom::HtmlDetailsElement>);
1631children_allowed!(details);
1632
1633html_element!(
1634    /// The [HTML `<dialog>` element][mdn] represents a dialog box or other interactive component,
1635    /// such as an inspector or window.
1636    /// 
1637    /// [mdn]: https://developer.mozilla.org/en-US/docs/Web/HTML/Element/dialog
1638    dialog {
1639        /// Indicates that the dialog is active and can be interacted with. When the open attribute
1640        /// is not set, the dialog shouldn't be shown to the user.
1641        open: bool,
1642
1643    }
1644);
1645
1646dom_type!(dialog <dom::HtmlDialogElement>);
1647children_allowed!(dialog);
1648
1649html_element!(
1650    /// The [HTML `<menu>` element][mdn] represents a group of commands that a user can perform or
1651    /// activate. This includes both list menus, which might appear across the top of a screen, as
1652    /// well as context menus, such as those that might appear underneath a button after it has been
1653    /// clicked.
1654    /// 
1655    /// [mdn]: https://developer.mozilla.org/en-US/docs/Web/HTML/Element/menu
1656    menu {
1657    }
1658);
1659
1660dom_type!(menu <dom::HtmlMenuElement>);
1661children_allowed!(menu);
1662
1663html_element!(
1664    /// The [HTML Disclosure Summary element (`<summary>`)][mdn] element specifies a summary,
1665    /// caption, or legend for a [`<details>`][details] element's disclosure box.
1666    /// 
1667    /// [mdn]: https://developer.mozilla.org/en-US/docs/Web/HTML/Element/summary
1668    /// [details]: https://developer.mozilla.org/en-US/docs/Web/HTML/Element/details
1669    summary {
1670    }
1671);
1672
1673dom_type!(summary <dom::HtmlElement>);
1674children_allowed!(summary);
1675
1676html_element!(
1677    /// The [HTML `<blockquote>` element][mdn] (or *HTML Block Quotation Element*) indicates that
1678    /// the enclosed text is an extended quotation. Usually, this is rendered visually by
1679    /// indentation. A URL for the source of the quotation may be given using the `cite` attribute,
1680    /// while a text representation of the source can be given using the [`<cite>`][cite] element.
1681    /// 
1682    /// [mdn]: https://developer.mozilla.org/en-US/docs/Web/HTML/Element/blockquote
1683    /// [cite]: https://developer.mozilla.org/en-US/docs/Web/HTML/Element/cite
1684    blockquote {
1685        /// A URL that designates a source document or message for the information quoted. This
1686        /// attribute is intended to point to information explaining the context or the reference
1687        /// for the quote.
1688        cite: String,
1689
1690    }
1691);
1692
1693dom_type!(blockquote <dom::HtmlQuoteElement>);
1694children_allowed!(blockquote);
1695
1696html_element!(
1697    /// The [HTML `<dd>` element][mdn] provides the description, definition, or value for the
1698    /// preceding term ([`<dt>`][dt]) in a description list ([`<dl>`][dl]).
1699    /// 
1700    /// [mdn]: https://developer.mozilla.org/en-US/docs/Web/HTML/Element/dd
1701    /// [dt]: https://developer.mozilla.org/en-US/docs/Web/HTML/Element/dt
1702    /// [dl]: https://developer.mozilla.org/en-US/docs/Web/HTML/Element/dl
1703    dd {
1704    }
1705);
1706
1707dom_type!(dd <dom::HtmlElement>);
1708children_allowed!(dd);
1709
1710html_element!(
1711    /// The [HTML Content Division element (`<div>`)][mdn] is the generic container for flow
1712    /// content. It has no effect on the content or layout until styled using [CSS].
1713    /// 
1714    /// [mdn]: https://developer.mozilla.org/en-US/docs/Web/HTML/Element/div
1715    /// [CSS]: https://developer.mozilla.org/en-US/docs/Glossary/CSS
1716    div {
1717    }
1718);
1719
1720dom_type!(div <dom::HtmlDivElement>);
1721children_allowed!(div);
1722
1723html_element!(
1724    /// The [HTML `<dl>` element][mdn] represents a description list. The element encloses a list of
1725    /// groups of terms (specified using the [`<dt>`][dt] element) and descriptions (provided by
1726    /// [`<dd>`][dd] elements). Common uses for this element are to implement a glossary or to
1727    /// display metadata (a list of key-value pairs).
1728    /// 
1729    /// [mdn]: https://developer.mozilla.org/en-US/docs/Web/HTML/Element/dl
1730    /// [dt]: https://developer.mozilla.org/en-US/docs/Web/HTML/Element/dt
1731    /// [dd]: https://developer.mozilla.org/en-US/docs/Web/HTML/Element/dd
1732    dl {
1733    }
1734);
1735
1736dom_type!(dl <dom::HtmlDListElement>);
1737children_allowed!(dl);
1738
1739html_element!(
1740    /// The [HTML `<dt>` element][mdn] specifies a term in a description or definition list, and as
1741    /// such must be used inside a [`<dl>`][dl] element.
1742    /// 
1743    /// [mdn]: https://developer.mozilla.org/en-US/docs/Web/HTML/Element/dt
1744    /// [dl]: https://developer.mozilla.org/en-US/docs/Web/HTML/Element/dl
1745    dt {
1746    }
1747);
1748
1749dom_type!(dt <dom::HtmlElement>);
1750children_allowed!(dt);
1751
1752html_element!(
1753    /// The [HTML `<figcaption>` or Figure Caption element][mdn] represents a caption or legend
1754    /// describing the rest of the contents of its parent [`<figure>`][figure] element.
1755    /// 
1756    /// [mdn]: https://developer.mozilla.org/en-US/docs/Web/HTML/Element/figcaption
1757    /// [figure]: https://developer.mozilla.org/en-US/docs/Web/HTML/Element/figure
1758    figcaption {
1759    }
1760);
1761
1762dom_type!(figcaption <dom::HtmlElement>);
1763children_allowed!(figcaption);
1764
1765html_element!(
1766    /// The [HTML `<figure>` (Figure With Optional Caption) element][mdn] represents self-contained
1767    /// content, potentially with an optional caption, which is specified using the
1768    /// ([`<figcaption>`][figcaption]) element.
1769    /// 
1770    /// [mdn]: https://developer.mozilla.org/en-US/docs/Web/HTML/Element/figure
1771    /// [figcaption]: https://developer.mozilla.org/en-US/docs/Web/HTML/Element/figcaption
1772    figure {
1773    }
1774);
1775
1776dom_type!(figure <dom::HtmlElement>);
1777children_allowed!(figure);
1778
1779html_element!(
1780    /// The [HTML `<hr>` element][mdn] represents a thematic break between paragraph-level elements:
1781    /// for example, a change of scene in a story, or a shift of topic within a section.
1782    /// 
1783    /// [mdn]: https://developer.mozilla.org/en-US/docs/Web/HTML/Element/hr
1784    hr {
1785    }
1786);
1787
1788dom_type!(hr <dom::HtmlHrElement>);
1789
1790html_element!(
1791    /// The [HTML `<li>` element][mdn] is used to represent an item in a list.
1792    /// 
1793    /// [mdn]: https://developer.mozilla.org/en-US/docs/Web/HTML/Element/li
1794    li {
1795    }
1796);
1797
1798dom_type!(li <dom::HtmlLiElement>);
1799children_allowed!(li);
1800
1801html_element!(
1802    /// The [HTML `<ol>` element][mdn] represents an ordered list of items, typically rendered as a
1803    /// numbered list.
1804    /// 
1805    /// [mdn]: https://developer.mozilla.org/en-US/docs/Web/HTML/Element/ol
1806    ol {
1807        /// Specifies that the list’s items are in reverse order. Items will be numbered from high
1808        /// to low.
1809        reversed: bool,
1810
1811        /// An integer to start counting from for the list items. Always an Arabic numeral (1, 2, 3,
1812        /// etc.), even when the numbering type is letters or Roman numerals. For example, to start
1813        /// numbering elements from the letter "d" or the Roman numeral "iv," use start="4".
1814        start: u32,
1815
1816        /// Sets the numbering type:
1817        /// 
1818        /// * `a` for lowercase letters
1819        /// * `A` for uppercase letters
1820        /// * `i` for lowercase Roman numerals
1821        /// * `I` for uppercase Roman numerals
1822        /// * `1` for numbers (default)
1823        /// 
1824        /// The specified type is used for the entire list unless a different type attribute is used
1825        /// on an enclosed `<li>` element.
1826        /// 
1827        /// > Note: Unless the type of the list number matters (like legal or technical documents
1828        /// where items are referenced by their number/letter), use the CSS list-style-type property
1829        /// instead.
1830        type_: String,
1831
1832    }
1833);
1834
1835dom_type!(ol <dom::HtmlOListElement>);
1836children_allowed!(ol);
1837
1838html_element!(
1839    /// The [HTML `<p>` element][mdn] represents a paragraph.
1840    /// 
1841    /// [mdn]: https://developer.mozilla.org/en-US/docs/Web/HTML/Element/p
1842    p {
1843    }
1844);
1845
1846dom_type!(p <dom::HtmlParagraphElement>);
1847children_allowed!(p);
1848
1849html_element!(
1850    /// The [HTML `<pre>` element][mdn] represents preformatted text which is to be presented
1851    /// exactly as written in the HTML file.
1852    /// 
1853    /// [mdn]: https://developer.mozilla.org/en-US/docs/Web/HTML/Element/pre
1854    pre {
1855    }
1856);
1857
1858dom_type!(pre <dom::HtmlPreElement>);
1859children_allowed!(pre);
1860
1861html_element!(
1862    /// The [HTML `<ul>` element][mdn] represents an unordered list of items, typically rendered as
1863    /// a bulleted list.
1864    /// 
1865    /// [mdn]: https://developer.mozilla.org/en-US/docs/Web/HTML/Element/ul
1866    ul {
1867    }
1868);
1869
1870dom_type!(ul <dom::HtmlUListElement>);
1871children_allowed!(ul);
1872
1873html_element!(
1874    /// The [HTML Table Caption element (`<caption>`)][mdn] specifies the caption (or title) of a
1875    /// table, and if used is *always* the first child of a [`<table>`][table].
1876    /// 
1877    /// [mdn]: https://developer.mozilla.org/en-US/docs/Web/HTML/Element/caption
1878    /// [table]: https://developer.mozilla.org/en-US/docs/Web/HTML/Element/table
1879    caption {
1880    }
1881);
1882
1883dom_type!(caption <dom::HtmlTableCaptionElement>);
1884children_allowed!(caption);
1885
1886html_element!(
1887    /// The [HTML `<col>` element][mdn] defines a column within a table and is used for defining
1888    /// common semantics on all common cells. It is generally found within a [`<colgroup>`][cg]
1889    /// element.
1890    /// 
1891    /// [mdn]: https://developer.mozilla.org/en-US/docs/Web/HTML/Element/col
1892    /// [cg]: https://developer.mozilla.org/en-US/docs/Web/HTML/Element/colgroup
1893    col {
1894        /// This attribute contains a positive integer indicating the number of consecutive columns
1895        /// the `<col>` element spans. If not present, its default value is 1.
1896        span: String,
1897
1898    }
1899);
1900
1901dom_type!(col <dom::HtmlTableColElement>);
1902
1903html_element!(
1904    /// The [HTML `<colgroup>` element][mdn] defines a group of columns within a table.
1905    /// 
1906    /// [mdn]: https://developer.mozilla.org/en-US/docs/Web/HTML/Element/colgroup
1907    colgroup {
1908        /// This attribute contains a positive integer indicating the number of consecutive columns
1909        /// the `<colgroup>` element spans. If not present, its default value is 1.
1910        /// 
1911        /// > Note: This attribute is applied on the attributes of the column group, it has no
1912        /// > effect on the CSS styling rules associated with it or, even more, to the cells of the
1913        /// > column's members of the group.
1914        /// >
1915        /// > The span attribute is not permitted if there are one or more `<col>` elements within
1916        /// > the `<colgroup>`.
1917        span: String,
1918
1919    }
1920);
1921
1922dom_type!(colgroup <dom::HtmlTableColElement>);
1923children_allowed!(colgroup);
1924
1925html_element!(
1926    /// The [HTML `<table>` element][mdn] represents tabular data — that is, information presented
1927    /// in a two-dimensional table comprised of rows and columns of cells containing data.
1928    /// 
1929    /// [mdn]: https://developer.mozilla.org/en-US/docs/Web/HTML/Element/table
1930    table {
1931    }
1932);
1933
1934dom_type!(table <dom::HtmlTableElement>);
1935children_allowed!(table);
1936
1937html_element!(
1938    /// The [HTML Table Body element (`<tbody>`)][mdn] encapsulates a set of table rows
1939    /// ([`<tr>`][tr] elements), indicating that they comprise the body of the table
1940    /// ([`<table>`][table]).
1941    /// 
1942    /// [mdn]: https://developer.mozilla.org/en-US/docs/Web/HTML/Element/tbody
1943    /// [tr]: https://developer.mozilla.org/en-US/docs/Web/HTML/Element/tr
1944    /// [table]: https://developer.mozilla.org/en-US/docs/Web/HTML/Element/table
1945    tbody {
1946    }
1947);
1948
1949dom_type!(tbody <dom::HtmlTableSectionElement>);
1950children_allowed!(tbody);
1951
1952html_element!(
1953    /// The [HTML `<td>` element][mdn] defines a cell of a table that contains data. It participates
1954    /// in the *table model*.
1955    /// 
1956    /// [mdn]: https://developer.mozilla.org/en-US/docs/Web/HTML/Element/td
1957    td {
1958        /// This attribute contains a non-negative integer value that indicates for how many columns
1959        /// the cell extends. Its default value is 1. Values higher than 1000 will be considered as
1960        /// incorrect and will be set to the default value (1).
1961        colspan: String,
1962
1963        /// This attribute contains a list of space-separated strings, each corresponding to the id
1964        /// attribute of the `<th>` elements that apply to this element.
1965        headers: String,
1966
1967        /// This attribute contains a non-negative integer value that indicates for how many rows
1968        /// the cell extends. Its default value is 1; if its value is set to 0, it extends until the
1969        /// end of the table section (`<thead>`, `<tbody>`, `<tfoot>`, even if implicitly defined),
1970        /// that the cell belongs to. Values higher than 65534 are clipped down to 65534.
1971        rowspan: String,
1972
1973    }
1974);
1975
1976dom_type!(td <dom::HtmlTableCellElement>);
1977children_allowed!(td);
1978
1979html_element!(
1980    /// The [HTML `<tfoot>` element][mdn] defines a set of rows summarizing the columns of the
1981    /// table.
1982    /// 
1983    /// [mdn]: https://developer.mozilla.org/en-US/docs/Web/HTML/Element/tfoot
1984    tfoot {
1985    }
1986);
1987
1988dom_type!(tfoot <dom::HtmlTableSectionElement>);
1989children_allowed!(tfoot);
1990
1991html_element!(
1992    /// The [HTML `<th>` element][mdn] defines a cell as header of a group of table cells. The exact
1993    /// nature of this group is defined by the [`scope`][scope] and [`headers`][headers] attributes.
1994    /// 
1995    /// [mdn]: https://developer.mozilla.org/en-US/docs/Web/HTML/Element/th
1996    /// [scope]: https://developer.mozilla.org/en-US/docs/Web/HTML/Element/th#attr-scope
1997    /// [headers]: https://developer.mozilla.org/en-US/docs/Web/HTML/Element/th#attr-headers
1998    th {
1999        /// This attribute contains a short abbreviated description of the cell's content. Some
2000        /// user-agents, such as speech readers, may present this description before the content
2001        /// itself.
2002        abbr: String,
2003
2004        /// This attribute contains a non-negative integer value that indicates for how many columns
2005        /// the cell extends. Its default value is 1. Values higher than 1000 will be considered as
2006        /// incorrect and will be set to the default value (1).
2007        colspan: String,
2008
2009        /// This attribute contains a list of space-separated strings, each corresponding to the id
2010        /// attribute of the `<th>` elements that apply to this element.
2011        headers: String,
2012
2013        /// This attribute contains a non-negative integer value that indicates for how many rows
2014        /// the cell extends. Its default value is 1; if its value is set to 0, it extends until the
2015        /// end of the table section (`<thead>`, `<tbody>`, `<tfoot>`, even if implicitly defined),
2016        /// that the cell belongs to. Values higher than 65534 are clipped down to 65534.
2017        rowspan: String,
2018
2019        /// This enumerated attribute defines the cells that the header (defined in the `<th>`)
2020        /// element relates to. It may have the following values:
2021        /// 
2022        /// * `row`: The header relates to all cells of the row it belongs to.
2023        /// * `col`: The header relates to all cells of the column it belongs to.
2024        /// * `rowgroup`: The header belongs to a rowgroup and relates to all of its cells. These
2025        /// cells can be placed to the right or the left of the header, depending on the value of
2026        /// the dir attribute in the `<table>` element.
2027        /// * `colgroup`: The header belongs to a colgroup and relates to all of its cells.
2028        /// * `auto`
2029        /// 
2030        /// The default value when this attribute is not specified is auto.
2031        scope: String,
2032
2033    }
2034);
2035
2036dom_type!(th <dom::HtmlTableCellElement>);
2037children_allowed!(th);
2038
2039html_element!(
2040    /// The [HTML `<thead>` element][mdn] defines a set of rows defining the head of the columns of
2041    /// the table.
2042    /// 
2043    /// [mdn]: https://developer.mozilla.org/en-US/docs/Web/HTML/Element/thead
2044    thead {
2045    }
2046);
2047
2048dom_type!(thead <dom::HtmlTableSectionElement>);
2049children_allowed!(thead);
2050
2051html_element!(
2052    /// The [HTML `<tr>` element][mdn] defines a row of cells in a table. The row's cells can then
2053    /// be established using a mix of [`<td>`][td] (data cell) and [`<th>`][th] (header cell)
2054    /// elements.
2055    /// 
2056    /// [mdn]: https://developer.mozilla.org/en-US/docs/Web/HTML/Element/tr
2057    /// [td]: https://developer.mozilla.org/en-US/docs/Web/HTML/Element/td
2058    /// [th]: https://developer.mozilla.org/en-US/docs/Web/HTML/Element/th
2059    tr {
2060    }
2061);
2062
2063dom_type!(tr <dom::HtmlTableRowElement>);
2064children_allowed!(tr);
2065
2066html_element!(
2067    /// The [HTML `<base> element`][mdn] specifies the base URL to use for all relative URLs
2068    /// contained within a document. There can be only one `<base>` element in a document.
2069    /// 
2070    /// If either of its inherent attributes are specified, this element must come before other
2071    /// elements with attributes whose values are URLs, such as <link>’s href attribute.
2072    /// 
2073    /// [mdn]: https://developer.mozilla.org/en-US/docs/Web/HTML/Element/base
2074    base {
2075        /// The base URL to be used throughout the document for relative URLs. Absolute and relative
2076        /// URLs are allowed.
2077        href: String,
2078
2079        /// A keyword or author-defined name of the default browsing context to display the result
2080        /// when links or forms cause navigation, for `<a>` or `<form>` elements without an explicit
2081        /// target attribute. The attribute value targets a browsing context (such as a tab, window,
2082        /// or `<iframe>`).
2083        /// 
2084        /// The following keywords have special meanings:
2085        /// 
2086        /// * `_self`: Load the result into the same browsing context as the current one. (This is
2087        /// the default.)
2088        /// * `_blank`: Load the result into a new, unnamed browsing context.
2089        /// * `_parent`: Load the result into the parent browsing context of the current one. (If
2090        /// the current page is inside a frame.) If there is no parent, behaves the same way as
2091        /// _self.
2092        /// * `_top`: Load the result into the topmost browsing context (that is, the browsing
2093        /// context that is an ancestor of the current one, and has no parent). If there is no
2094        /// parent, behaves the same way as _self.
2095        target: String,
2096
2097    }
2098);
2099
2100dom_type!(base <dom::HtmlBaseElement>);
2101
2102html_element!(
2103    /// The [HTML `<head>` element][mdn] contains machine-readable information ([metadata]) about
2104    /// the document, like its [title], [scripts], and [style sheets].
2105    /// 
2106    /// [mdn]: https://developer.mozilla.org/en-US/docs/Web/HTML/Element/head
2107    /// [metadata]: https://developer.mozilla.org/en-US/docs/Glossary/metadata
2108    /// [title]: https://developer.mozilla.org/en-US/docs/Web/HTML/Element/title
2109    /// [scripts]: https://developer.mozilla.org/en-US/docs/Web/HTML/Element/script
2110    /// [style sheets]: https://developer.mozilla.org/en-US/docs/Web/HTML/Element/style
2111    head {
2112    }
2113);
2114
2115dom_type!(head <dom::HtmlHeadElement>);
2116children_allowed!(head);
2117
2118html_element!(
2119    /// The [HTML External Resource Link element (`<link>`)][mdn] specifies relationships between
2120    /// the current document and an external resource. This element is most commonly used to link to
2121    /// [stylesheets], but is also used to establish site icons (both "favicon" style icons and
2122    /// icons for the home screen and apps on mobile devices) among other things.
2123    /// 
2124    /// [mdn]: https://developer.mozilla.org/en-US/docs/Web/HTML/Element/link
2125    /// [stylesheets]: https://developer.mozilla.org/en-US/docs/Glossary/CSS
2126    link {
2127        /// This attribute is only used when rel="preload" or rel="prefetch" has been set on the
2128        /// `<link>` element. It specifies the type of content being loaded by the `<link>`, which is
2129        /// necessary for request matching, application of correct content security policy, and
2130        /// setting of correct Accept request header. Furthermore, rel="preload" uses this as a
2131        /// signal for request prioritization. The table below lists the valid values for this
2132        /// attribute and the elements or resources they apply to.
2133        /// 
2134        /// | Value    | Applies To                                                                |
2135        /// | -------- | ------------------------------------------------------------------------- |
2136        /// | audio    | `<audio>` elements                                                        |
2137        /// | document | `<iframe>` and `<frame>` elements                                         |
2138        /// | embed    | `<embed>` elements                                                        |
2139        /// | fetch    | fetch, XHR (also requires `<link>` to contain the crossorigin attribute.) |
2140        /// | font     | CSS @font-face                                                            |
2141        /// | image    | `<img>` and `<picture>` elements with srcset or imageset attributes,      |
2142        /// |          | SVG `<image>` elements, CSS *-image rules                                 |
2143        /// | object   | `<object>` elements                                                       |
2144        /// | script   | `<script>` elements, Worker importScripts                                 |
2145        /// | style    | `<link rel=stylesheet>` elements, CSS @import                             |
2146        /// | track    | `<track>` elements                                                        |
2147        /// | video    | `<video>` elements                                                        |
2148        /// | worker   | Worker, SharedWorker                                                      |
2149        as_: String,
2150
2151        /// This enumerated attribute indicates whether CORS must be used when fetching the
2152        /// resource. CORS-enabled images can be reused in the `<canvas>` element without being
2153        /// tainted. The allowed values are:
2154        /// 
2155        /// * `anonymous`: A cross-origin request (i.e. with an Origin HTTP header) is performed,
2156        /// but no credential is sent (i.e. no cookie, X.509 certificate, or HTTP Basic
2157        /// authentication). If the server does not give credentials to the origin site (by not
2158        /// setting the Access-Control-Allow-Origin HTTP header) the resource will be tainted and
2159        /// its usage restricted.
2160        /// * `use-credentials`: A cross-origin request (i.e. with an Origin HTTP header) is
2161        /// performed along with a credential sent (i.e. a cookie, certificate, and/or HTTP Basic
2162        /// authentication is performed). If the server does not give credentials to the origin
2163        /// site (through Access-Control-Allow-Credentials HTTP header), the resource will be
2164        /// tainted and its usage restricted.
2165        /// 
2166        /// If the attribute is not present, the resource is fetched without a CORS request (i.e.
2167        /// without sending the Origin HTTP header), preventing its non-tainted usage. If invalid,
2168        /// it is handled as if the enumerated keyword anonymous was used.
2169        crossorigin: String,
2170
2171        /// For rel="stylesheet" only, the disabled Boolean attribute indicates whether or not the
2172        /// described stylesheet should be loaded and applied to the document. If disabled is
2173        /// specified in the HTML when it is loaded, the stylesheet will not be loaded during page
2174        /// load. Instead, the stylesheet will be loaded on-demand, if and when the disabled
2175        /// attribute is changed to false or removed.
2176        /// 
2177        /// Once the stylesheet has been loaded, however, changes made to the value of the disabled
2178        /// property no longer have any relationship to the value of the StyleSheet.disabled
2179        /// property. Changing the value of this property instead simply enables and disables the
2180        /// stylesheet form being applied to the document.
2181        /// 
2182        /// This differs from StyleSheet's disabled property; changing it to true removes the
2183        /// stylesheet from the document's document.styleSheets list, and doesn't automatically
2184        /// reload the stylesheet when it's toggled back to false.
2185        disabled: String,
2186
2187        /// This attribute specifies the URL of the linked resource. A URL can be absolute or
2188        /// relative.
2189        href: String,
2190
2191        /// This attribute indicates the language of the linked resource. It is purely advisory.
2192        /// Allowed values are determined by BCP47. Use this attribute only if the href attribute is
2193        /// present.
2194        hreflang: String,
2195
2196        /// This attribute specifies the media that the linked resource applies to. Its value must
2197        /// be a media type / media query. This attribute is mainly useful when linking to external
2198        /// stylesheets — it allows the user agent to pick the best adapted one for the device it
2199        /// runs on.
2200        media: String,
2201
2202        /// This attribute names a relationship of the linked document to the current document. The
2203        /// attribute must be a space-separated list of link type values.
2204        rel: String,
2205
2206        /// This attribute defines the sizes of the icons for visual media contained in the
2207        /// resource. It must be present only if the rel contains a value of icon or a non-standard
2208        /// type such as Apple's apple-touch-icon. It may have the following values:
2209        /// 
2210        /// * `any`, meaning that the icon can be scaled to any size as it is in a vector format,
2211        /// like image/svg+xml.
2212        /// * a white-space separated list of sizes, each in the format <width in pixels>x<height in
2213        /// pixels> or <width in pixels>X<height in pixels>. Each of these sizes must be contained
2214        /// in the resource.
2215        /// 
2216        /// Note: Most icon formats are only able to store one single icon; therefore most of the
2217        /// time the sizes attribute contains only one entry. MS's ICO format does, as well as
2218        /// Apple's ICNS. ICO is more ubiquitous, so you should use this format if cross-browser
2219        /// support is a concern (especially for old IE versions).
2220        sizes: String,
2221
2222        /// The title attribute has special semantics on the `<link>` element. When used on a
2223        /// `<link rel="stylesheet">` it defines a preferred or an alternate stylesheet. Incorrectly
2224        /// using it may cause the stylesheet to be ignored.
2225        title: String,
2226
2227        /// This attribute is used to define the type of the content linked to. The value of the
2228        /// attribute should be a MIME type such as text/html, text/css, and so on. The common use
2229        /// of this attribute is to define the type of stylesheet being referenced (such as
2230        /// text/css), but given that CSS is the only stylesheet language used on the web, not only
2231        /// is it possible to omit the type attribute, but is actually now recommended practice. It
2232        /// is also used on rel="preload" link types, to make sure the browser only downloads file
2233        /// types that it supports.
2234        type_: String,
2235
2236    }
2237);
2238
2239dom_type!(link <dom::HtmlLinkElement>);
2240
2241html_element!(
2242    /// The [HTML `<meta>` element][mdn] represents [metadata] that cannot be represented by other
2243    /// HTML meta-related elements, like [`<base>`], [`<link>`], [`<script>`], [`<style>`] or
2244    /// [`<title>`].
2245    /// 
2246    /// Note: the attribute `name` has a specific meaning for the `<meta>` element, and the
2247    /// `itemprop` attribute must not be set on the same `<meta>` element that has any existing
2248    /// name, `http-equiv` or `charset` attributes.
2249    /// 
2250    /// [mdn]: https://developer.mozilla.org/en-US/docs/Web/HTML/Element/meta
2251    /// [metadata]: https://developer.mozilla.org/en-US/docs/Glossary/Metadata
2252    /// [`<base>`]: https://developer.mozilla.org/en-US/docs/Web/HTML/Element/base
2253    /// [`<link>`]: https://developer.mozilla.org/en-US/docs/Web/HTML/Element/link
2254    /// [`<script>`]: https://developer.mozilla.org/en-US/docs/Web/HTML/Element/script
2255    /// [`<style>`]: https://developer.mozilla.org/en-US/docs/Web/HTML/Element/style
2256    /// [`<title>`]: https://developer.mozilla.org/en-US/docs/Web/HTML/Element/title
2257    meta {
2258        /// This attribute declares the document's character encoding. If the attribute is present,
2259        /// its value must be an ASCII case-insensitive match for the string "utf-8".
2260        charset: String,
2261
2262        /// This attribute contains the value for the http-equiv or name attribute, depending on
2263        /// which is used.
2264        content: String,
2265
2266        /// Defines a pragma directive. The attribute is named http-equiv(alent) because all the
2267        /// allowed values are names of particular HTTP headers:
2268        /// 
2269        /// * `content-security-policy`: Allows page authors to define a content policy for the
2270        /// current page. Content policies mostly specify allowed server origins and script
2271        /// endpoints which help guard against cross-site scripting attacks.
2272        /// * `content-type`: If specified, the content attribute must have the value
2273        /// `text/html; charset=utf-8`. Note: Can only be used in documents served with a
2274        /// text/html MIME type — not in documents served with an XML MIME type.
2275        /// * `default-style`: Sets the name of the default CSS style sheet set.
2276        /// * `x-ua-compatible`: If specified, the content attribute must have the value "IE=edge".
2277        /// User agents are required to ignore this pragma.
2278        /// * `refresh`: This instruction specifies:
2279        /// * The number of seconds until the page should be reloaded - only if the content
2280        /// attribute contains a positive integer.
2281        /// * The number of seconds until the page should redirect to another - only if the
2282        /// content attribute contains a positive integer followed by the string ';url=', and a
2283        /// valid URL.
2284        /// * Accessibility concerns: Pages set with a refresh value run the risk of having the
2285        /// time interval being too short. People navigating with the aid of assistive
2286        /// technology such as a screen reader may be unable to read through and understand the
2287        /// page's content before being automatically redirected. The abrupt, unannounced
2288        /// updating of the page content may also be disorienting for people experiencing low
2289        /// vision conditions.
2290        http_equiv: String,
2291
2292        /// The name and content attributes can be used together to provide document metadata in
2293        /// terms of name-value pairs, with the name attribute giving the metadata name, and the
2294        /// content attribute giving the value.
2295        /// 
2296        /// See [standard metadata names] for details about the set of standard metadata names
2297        /// defined in the HTML specification.
2298        /// 
2299        /// [standard metadata names]: https://developer.mozilla.org/en-US/docs/Web/HTML/Element/meta/name
2300        name: String,
2301
2302    }
2303);
2304
2305dom_type!(meta <dom::HtmlMetaElement>);
2306
2307html_element!(
2308    /// The [HTML `<style>` element][mdn] contains style information for a document, or part of a
2309    /// document.
2310    /// 
2311    /// [mdn]: https://developer.mozilla.org/en-US/docs/Web/HTML/Element/style
2312    style {
2313        /// This attribute defines which media the style should be applied to. Its value is a media
2314        /// query, which defaults to all if the attribute is missing.
2315        media: String,
2316
2317        /// A cryptographic nonce (number used once) used to whitelist inline styles in a style-src
2318        /// Content-Security-Policy. The server must generate a unique nonce value each time it
2319        /// transmits a policy. It is critical to provide a nonce that cannot be guessed as
2320        /// bypassing a resource’s policy is otherwise trivial.
2321        nonce: String,
2322
2323        /// This attribute specifies alternative style sheet sets.
2324        title: String,
2325
2326    }
2327);
2328
2329dom_type!(style <dom::HtmlStyleElement>);
2330children_allowed!(style);
2331
2332html_element!(
2333    /// The [HTML Title element (`<title>`)][mdn] defines the document's title that is shown in a
2334    /// [browser]'s title bar or a page's tab.
2335    /// 
2336    /// [mdn]: https://developer.mozilla.org/en-US/docs/Web/HTML/Element/title
2337    /// [browser]: https://developer.mozilla.org/en-US/docs/Glossary/Browser
2338    title {
2339    }
2340);
2341
2342dom_type!(title <dom::HtmlTitleElement>);
2343children_allowed!(title);
2344
2345html_element!(
2346    /// The [HTML `<button>` element][mdn] represents a clickable button, which can be used in
2347    /// [forms] or anywhere in a document that needs simple, standard button functionality.
2348    /// 
2349    /// [mdn]: https://developer.mozilla.org/en-US/docs/Web/HTML/Element/button
2350    /// [forms]: https://developer.mozilla.org/en-US/docs/Learn/HTML/Forms
2351    button {
2352        /// Specifies that the button should have input focus when the page loads. Only one element
2353        /// in a document can have this attribute.
2354        autofocus: bool,
2355
2356        /// Prevents the user from interacting with the button: it cannot be pressed or focused.
2357        disabled: bool,
2358
2359        /// The `<form>` element to associate the button with (its form owner). The value of this
2360        /// attribute must be the id of a `<form>` in the same document. (If this attribute is not
2361        /// set, the `<button>` is associated with its ancestor `<form>` element, if any.)
2362        /// 
2363        /// This attribute lets you associate `<button>` elements to `<form>`s anywhere in the
2364        /// document, not just inside a `<form>`. It can also override an ancestor `<form>` element.
2365        form: String,
2366
2367        /// The URL that processes the information submitted by the button. Overrides the action
2368        /// attribute of the button's form owner. Does nothing if there is no form owner.
2369        formaction: String,
2370
2371        /// If the button is a submit button (it's inside/associated with a `<form>` and doesn't
2372        /// have type="button"), specifies how to encode the form data that is submitted. Possible
2373        /// values:
2374        /// 
2375        /// * application/x-www-form-urlencoded: The default if the attribute is not used.
2376        /// * multipart/form-data: Use to submit `<input>` elements with their type attributes set
2377        /// to file.
2378        /// * text/plain: Specified as a debugging aid; shouldn’t be used for real form submission.
2379        /// 
2380        /// If this attribute is specified, it overrides the enctype attribute of the button's form
2381        /// owner.
2382        formenctype: String,
2383
2384        /// If the button is a submit button (it's inside/associated with a `<form>` and doesn't
2385        /// have type="button"), this attribute specifies the HTTP method used to submit the form.
2386        /// Possible values:
2387        /// 
2388        /// * post: The data from the form are included in the body of the HTTP request when sent to
2389        /// the server. Use when the form contains information that shouldn’t be public, like
2390        /// login credentials.
2391        /// * get: The form data are appended to the form's action URL, with a ? as a separator, and
2392        /// the resulting URL is sent to the server. Use this method when the form has no side
2393        /// effects, like search forms.
2394        /// 
2395        /// If specified, this attribute overrides the method attribute of the button's form owner.
2396        formmethod: String,
2397
2398        /// If the button is a submit button, specifies that the form is not to be validated when it
2399        /// is submitted. If this attribute is specified, it overrides the novalidate attribute of
2400        /// the button's form owner.
2401        /// 
2402        /// This attribute is also available on `<input type="image">` and `<input type="submit">`
2403        /// elements.
2404        formnovalidate: bool,
2405
2406        /// If the button is a submit button, this attribute is a author-defined name or
2407        /// standardized, underscore-prefixed keyword indicating where to display the response from
2408        /// submitting the form. This is the name of, or keyword for, a browsing context (a tab,
2409        /// window, or `<iframe>`). If this attribute is specified, it overrides the target
2410        /// attribute of the button's form owner. The following keywords have special meanings:
2411        /// 
2412        /// * _self: Load the response into the same browsing context as the current one.
2413        /// This is the default if the attribute is not specified.
2414        /// * _blank: Load the response into a new unnamed browsing context — usually a new tab or
2415        /// window, depending on the user’s browser settings.
2416        /// * _parent: Load the response into the parent browsing context of the current one. If
2417        /// there is no parent, this option behaves the same way as _self.
2418        /// * _top: Load the response into the top-level browsing context (that is, the browsing
2419        /// context that is an ancestor of the current one, and has no parent). If there is no
2420        /// parent, this option behaves the same way as _self.
2421        formtarget: String,
2422
2423        /// The name of the button, submitted as a pair with the button’s value as part of the form
2424        /// data.
2425        name: String,
2426
2427        /// The default behavior of the button. Possible values are:
2428        /// 
2429        /// * submit: The button submits the form data to the server. This is the default if the
2430        /// attribute is not specified for buttons associated with a `<form>`, or if the attribute
2431        /// is an empty or invalid value.
2432        /// * reset: The button resets all the controls to their initial values, like
2433        /// `<input type="reset">`. (This behavior tends to annoy users.)
2434        /// * button: The button has no default behavior, and does nothing when pressed by default.
2435        /// It can have client-side scripts listen to the element's events, which are triggered
2436        /// when the events occur.
2437        type_: String,
2438
2439        /// Defines the value associated with the button’s name when it’s submitted with the form
2440        /// data. This value is passed to the server in params when the form is submitted.
2441        value: String,
2442
2443    }
2444);
2445
2446dom_type!(button <dom::HtmlButtonElement>);
2447children_allowed!(button);
2448
2449html_element!(
2450    /// The [HTML `<datalist>` element][mdn] contains a set of [`<option>`][option] elements that
2451    /// represent the values available for other controls.
2452    /// 
2453    /// [mdn]: https://developer.mozilla.org/en-US/docs/Web/HTML/Element/datalist
2454    /// [option]: https://developer.mozilla.org/en-US/docs/Web/HTML/Element/option
2455    datalist {
2456    }
2457);
2458
2459dom_type!(datalist <dom::HtmlDataListElement>);
2460children_allowed!(datalist);
2461
2462html_element!(
2463    /// The [HTML `<fieldset>` element][mdn] is used to group several controls as well as labels
2464    /// ([`<label>`][label]) within a web form.
2465    /// 
2466    /// [mdn]: https://developer.mozilla.org/en-US/docs/Web/HTML/Element/fieldset
2467    /// [label]: https://developer.mozilla.org/en-US/docs/Web/HTML/Element/label
2468    fieldset {
2469        /// If this Boolean attribute is set, all form controls that are descendants of the
2470        /// `<fieldset>` are disabled, meaning they are not editable and won't be submitted along
2471        /// with the `<form>`. They won't receive any browsing events, like mouse clicks or
2472        /// focus-related events. By default browsers display such controls grayed out. Note that
2473        /// form elements inside the `<legend>` element won't be disabled.
2474        disabled: String,
2475
2476        /// This attribute takes the value of the id attribute of a `<form>` element you want the
2477        /// `<fieldset>` to be part of, even if it is not inside the form.
2478        form: String,
2479
2480        /// The name associated with the group.
2481        /// 
2482        /// Note: The caption for the fieldset is given by the first `<legend>` element inside it.
2483        name: String,
2484
2485    }
2486);
2487
2488dom_type!(fieldset <dom::HtmlFieldSetElement>);
2489children_allowed!(fieldset);
2490
2491html_element!(
2492    /// The [HTML `<form>` element][mdn] represents a document section that contains interactive
2493    /// controls for submitting information to a web server.
2494    /// 
2495    /// [mdn]: https://developer.mozilla.org/en-US/docs/Web/HTML/Element/form
2496    form {
2497        /// Space-separated [character encodings] the server accepts. The browser uses
2498        /// them in the order in which they are listed. The default value means
2499        /// the same encoding as the page.
2500        /// 
2501        /// [character encodings]: https://developer.mozilla.org/en-US/docs/Web/Guide/Localizations_and_character_encodings
2502        accept_charset: String,
2503
2504        /// The URI of a program that processes the information submitted via the form.
2505        action: String,
2506
2507        /// Indicates whether input elements can by default have their values automatically
2508        /// completed by the browser. autocomplete attributes on form elements override it on
2509        /// `<form>`. Possible values:
2510        /// 
2511        /// * off: The browser may not automatically complete entries. (Browsers tend to ignore this
2512        /// for suspected login forms; see The autocomplete attribute and login fields.)
2513        /// * on: The browser may automatically complete entries.
2514        autocomplete: String,
2515
2516        /// If the value of the method attribute is post, enctype is the MIME type of the form
2517        /// submission. Possible values:
2518        /// 
2519        /// * application/x-www-form-urlencoded: The default value.
2520        /// * multipart/form-data: Use this if the form contains `<input>` elements with type=file.
2521        /// * text/plain: Introduced by HTML5 for debugging purposes.
2522        /// 
2523        /// This value can be overridden by formenctype attributes on `<button>`,
2524        /// `<input type="submit">`, or `<input type="image">` elements.
2525        enctype: String,
2526
2527        /// The HTTP method to submit the form with. Possible values:
2528        /// 
2529        /// * post: The POST method; form data sent as the request body.
2530        /// * get: The GET method; form data appended to the action URL with a ? separator. Use this
2531        /// method when the form has no side-effects.
2532        /// * dialog: When the form is inside a `<dialog>`, closes the dialog on submission.
2533        /// 
2534        /// This value is overridden by formmethod attributes on `<button>`,
2535        /// `<input type="submit">`, or `<input type="image">` elements.
2536        method: String,
2537
2538        /// Indicates that the form shouldn't be validated when submitted. If this attribute is not
2539        /// set (and therefore the form is validated), it can be overridden by a formnovalidate
2540        /// attribute on a `<button>`, `<input type="submit">`, or `<input type="image">` element
2541        /// belonging to the form.
2542        novalidate: bool,
2543
2544        /// Creates a hyperlink or annotation depending on the value.
2545        rel: String,
2546
2547        /// Indicates where to display the response after submitting the form. It is a name/keyword
2548        /// for a browsing context (for example, tab, window, or iframe). The following keywords
2549        /// have special meanings:
2550        /// 
2551        /// * _self (default): Load into the same browsing context as the current one.
2552        /// * _blank: Load into a new unnamed browsing context.
2553        /// * _parent: Load into the parent browsing context of the current one. If no parent,
2554        /// behaves the same as _self.
2555        /// * _top: Load into the top-level browsing context (i.e., the browsing context that is an
2556        /// ancestor of the current one and has no parent). If no parent, behaves the same as
2557        /// _self.
2558        /// 
2559        /// This value can be overridden by a formtarget attribute on a `<button>`,
2560        /// `<input type="submit">`, or `<input type="image">` element.
2561        target: String,
2562
2563    }
2564);
2565
2566dom_type!(form <dom::HtmlFormElement>);
2567children_allowed!(form);
2568
2569html_element!(
2570    /// The [HTML `<input>` element][mdn] is used to create interactive controls for web-based forms
2571    /// in order to accept data from the user; a wide variety of types of input data and control
2572    /// widgets are available, depending on the device and [user agent].
2573    /// 
2574    /// [mdn]: https://developer.mozilla.org/en-US/docs/Web/HTML/Element/input
2575    /// [user agent]: https://developer.mozilla.org/en-US/docs/Glossary/user_agent
2576    input {
2577        /// Valid for the file input type only, the accept property defines which file types are
2578        /// selectable in a file upload control. See the file input type.
2579        accept: String,
2580
2581        /// Valid for the image button only, the alt attribute provides alternative text for the
2582        /// image, displaying the value of the attribute if the image src is missing or otherwise
2583        /// fails to load. See the image input type.
2584        alt: String,
2585
2586        /// The autocomplete attribute takes as its value a space-separated string that describes
2587        /// what, if any, type of autocomplete functionality the input should provide. A typical
2588        /// implementation of autocomplete simply recalls previous values entered in the same input
2589        /// field, but more complex forms of autocomplete can exist. For instance, a browser could
2590        /// integrate with a device's contacts list to autocomplete email addresses in an email
2591        /// input field. See Values in The HTML autocomplete attribute for permitted values.
2592        /// 
2593        /// The autocomplete attribute is valid on hidden, text, search, url, tel, email, date,
2594        /// month, week, time, datetime-local, number, range, color, and password. This attribute
2595        /// has no effect on input types that do not return numeric or text data, being valid for
2596        /// all input types except checkbox, radio, file, or any of the button types.
2597        /// 
2598        /// See The HTML autocomplete attribute for additional information, including information on
2599        /// password security and how autocomplete is slightly different for hidden than for other
2600        /// input types.
2601        autocomplete: String,
2602
2603        /// Indicates if present that the input should automatically have focus when the page has
2604        /// finished loading (or when the `<dialog>` containing the element has been displayed).
2605        /// 
2606        /// Note: An element with the autofocus attribute may gain focus before the DOMContentLoaded
2607        /// event is fired.
2608        /// 
2609        /// No more than one element in the document may have the autofocus attribute. The autofocus
2610        /// attribute cannot be used on inputs of type hidden, since hidden inputs cannot be
2611        /// focused.
2612        /// 
2613        /// If put on more than one element, the first one with the attribute receives focus.
2614        /// 
2615        /// Warning: Automatically focusing a form control can confuse visually-impaired people
2616        /// using screen-reading technology and people with cognitive impairments. When autofocus is
2617        /// assigned, screen-readers "teleport" their user to the form control without warning them
2618        /// beforehand.
2619        /// 
2620        /// For better usability, avoid using autofocus. Automatically focusing on a form control
2621        /// can cause the page to scroll on load. The focus can also cause dynamic keyboards to
2622        /// display on some touch devices. While a screen reader will announce the label of the form
2623        /// control receiving focus, the screen reader  will not announce anything before the label,
2624        /// and the sighted user on a small device will equally miss the context created by the
2625        /// preceding content.
2626        autofocus: bool,
2627
2628        /// Introduced in the HTML Media Capture specification and valid for the file input type
2629        /// only, the capture attribute defines which media—microphone, video, or camera—should be
2630        /// used to capture a new file for upload with file upload control in supporting scenarios.
2631        /// See the file input type.
2632        capture: String,
2633
2634        /// Valid for both radio and checkbox types, checked is a Boolean attribute. If present on a
2635        /// radio type, it indicates that that radio button is the currently selected one in the
2636        /// group of same-named radio buttons. If present on a checkbox type, it indicates that the
2637        /// checkbox is checked by default (when the page loads). It does not indicate whether this
2638        /// checkbox is currently checked: if the checkbox’s state is changed, this content
2639        /// attribute does not reflect the change. (Only the HTMLInputElement’s checked IDL
2640        /// attribute is updated.)
2641        /// 
2642        /// Note: Unlike other input controls, a checkboxes and radio buttons value are only
2643        /// included in the submitted data if they are currently checked. If they are, the name and
2644        /// the value(s) of the checked controls are submitted.
2645        /// 
2646        /// For example, if a checkbox whose name is fruit has a value of cherry, and the checkbox
2647        /// is checked, the form data submitted will include fruit=cherry. If the checkbox isn't
2648        /// active, it isn't listed in the form data at all. The default value for checkboxes and
2649        /// radio buttons is on.
2650        checked: bool,
2651
2652        /// Valid for text and search input types only, the dirname attribute enables the submission
2653        /// of the directionality of the element. When included, the form control will submit with
2654        /// two name/value pairs: the first being the name and value, the second being the value of
2655        /// the dirname as the name with the value of ltr or rtl being set by the browser.
2656        dirname: String,
2657
2658        /// If present indicates that the user should not be able to interact with the input.
2659        /// Disabled inputs are typically rendered with a dimmer color or using some other form of
2660        /// indication that the field is not available for use.
2661        /// 
2662        /// Specifically, disabled inputs do not receive the click event, and disabled inputs are
2663        /// not submitted with the form.
2664        disabled: bool,
2665
2666        /// A string specifying the `<form>` element with which the input is associated (that is,
2667        /// its form owner). This string's value, if present, must match the id of a `<form>`
2668        /// element in the same document. If this attribute isn't specified, the `<input>` element
2669        /// is associated with the nearest containing form, if any.
2670        /// 
2671        /// The form attribute lets you place an input anywhere in the document but have it included
2672        /// with a form elsewhere in the document.
2673        /// 
2674        /// Note: An input can only be associated with one form.
2675        form: String,
2676
2677        /// Valid for the image and submit input types only. See the submit input type for more
2678        /// information.
2679        formaction: String,
2680
2681        /// Valid for the image and submit input types only. See the submit input type for more
2682        /// information.
2683        formenctype: String,
2684
2685        /// Valid for the image and submit input types only. See the submit input type for more
2686        /// information.
2687        formmethod: String,
2688
2689        /// Valid for the image and submit input types only. See the submit input type for more
2690        /// information.
2691        formnovalidate: String,
2692
2693        /// Valid for the image and submit input types only. See the submit input type for more
2694        /// information.
2695        formtarget: String,
2696
2697        /// Valid for the image input button only, the height is the height of the image file to
2698        /// display to represent the graphical submit button. See the image input type.
2699        height: String,
2700
2701        /// Global value valid for all elements, it provides a hint to browsers as to the type of
2702        /// virtual keyboard configuration to use when editing this element or its contents. Values
2703        /// include none, text, tel, url, email, numeric, decimal, and search.
2704        inputmode: String,
2705
2706        /// The values of the list attribute is the id of a `<datalist>` element located in the same
2707        /// document. The `<datalist>`  provides a list of predefined values to suggest to the user
2708        /// for this input. Any values in the list that are not compatible with the type are not
2709        /// included in the suggested options.  The values provided are suggestions, not
2710        /// requirements: users can select from this predefined list or provide a different value.
2711        /// 
2712        /// It is valid on text, search, url, tel, email, date, month, week, time, datetime-local,
2713        /// number, range, and color.
2714        /// 
2715        /// Per the specifications, the list attribute is not supported by the hidden, password,
2716        /// checkbox, radio, file, or any of the button types.
2717        /// 
2718        /// Depending on the browser, the user may see a custom color palette suggested, tic marks
2719        /// along a range, or even a input that opens like a select but allows for non-listed
2720        /// values. Check out the browser compatibility table for the other input types.
2721        /// 
2722        /// See the `<datalist>` element.
2723        list: String,
2724
2725        /// Valid for date, month, week, time, datetime-local, number, and range, it defines the
2726        /// greatest value in the range of permitted values. If the value entered into the element
2727        /// exceeds this, the element fails constraint validation. If the value of the max attribute
2728        /// isn't a number, then the element has no maximum value.
2729        /// 
2730        /// There is a special case: if the data type is periodic (such as for dates or times), the
2731        /// value of max may be lower than the value of min, which indicates that the range may wrap
2732        /// around; for example, this allows you to specify a time range from 10 PM to 4 AM.
2733        max: String,
2734
2735        /// Valid for text, search, url, tel, email, and password, it defines the maximum number of
2736        /// characters (as UTF-16 code units) the user can enter into the field. This must be an
2737        /// integer value 0 or higher. If no maxlength is specified, or an invalid value is
2738        /// specified, the field has no maximum length. This value must also be greater than or
2739        /// equal to the value of minlength.
2740        /// 
2741        /// The input will fail constraint validation if the length of the text entered into the
2742        /// field is greater than maxlength UTF-16 code units long. By default, browsers prevent
2743        /// users from entering more characters than allowed by the maxlength attribute.
2744        maxlength: String,
2745
2746        /// Valid for date, month, week, time, datetime-local, number, and range, it defines the
2747        /// most negative value in the range of permitted values. If the value entered into the
2748        /// element is less than this this, the element fails constraint validation. If the value of
2749        /// the min attribute isn't a number, then the element has no minimum value.
2750        /// 
2751        /// This value must be less than or equal to the value of the max attribute. If the min
2752        /// attribute is present but is not specified or is invalid, no min value is applied. If the
2753        /// min attribute is valid and a non-empty value is less than the minimum allowed by the min
2754        /// attribute, constraint validation will prevent form submission.
2755        /// 
2756        /// There is a special case: if the data type is periodic (such as for dates or times), the
2757        /// value of max may be lower than the value of min, which indicates that the range may wrap
2758        /// around; for example, this allows you to specify a time range from 10 PM to 4 AM.
2759        min: String,
2760
2761        /// Valid for text, search, url, tel, email, and password, it defines the minimum number of
2762        /// characters (as UTF-16 code units) the user can enter into the entry field. This must be
2763        /// an non-negative integer value smaller than or equal to the value specified by maxlength.
2764        /// If no minlength is specified, or an invalid value is specified, the input has no minimum
2765        /// length.
2766        /// 
2767        /// The input will fail constraint validation if the length of the text entered into the
2768        /// field is fewer than minlength UTF-16 code units long, preventing form submission.
2769        minlength: String,
2770
2771        /// If set, means the user can enter comma separated email addresses in the email widget or
2772        /// can choose more than one file with the file input. See the email and file input type.
2773        multiple: bool,
2774
2775        /// A string specifying a name for the input control. This name is submitted along with the
2776        /// control's value when the form data is submitted.
2777        /// 
2778        /// # What's in a name
2779        /// 
2780        /// Consider the name a required attribute (even though it's not). If an input has no name
2781        /// specified, or name is empty, the input's value is not submitted with the form! (Disabled
2782        /// controls, unchecked radio buttons, unchecked checkboxes, and reset buttons are also not
2783        /// sent.)
2784        /// 
2785        /// There are two special cases:
2786        /// 
2787        /// * `_charset_`: If used as the name of an `<input>` element of type hidden, the input's
2788        /// value is automatically set by the user agent to the character encoding being used to
2789        /// submit the form.
2790        /// * `isindex`: For historical reasons, the name isindex is not allowed.
2791        /// 
2792        /// # name and radio buttons
2793        /// 
2794        /// The name attribute creates a unique behavior for radio buttons.
2795        /// 
2796        /// Only one radio button in a same-named group of radio buttons can be checked at a time.
2797        /// Selecting any radio button in that group automatically deselects any currently-selected
2798        /// radio button in the same group. The value of that one checked radio button is sent along
2799        /// with the name if the form is submitted.
2800        /// 
2801        /// When tabbing into a series of same-named group of radio buttons, if one is checked, that
2802        /// one will receive focus. If they aren't grouped together in source order, if one of the
2803        /// group is checked, tabbing into the group starts when the first one in the group is
2804        /// encountered, skipping all those that aren't checked. In other words, if one is checked,
2805        /// tabbing skips the unchecked radio buttons in the group. If none are checked, the radio
2806        /// button group receives focus when the first button in the same name group is reached.
2807        /// 
2808        /// Once one of the radio buttons in a group has focus, using the arrow keys will navigate
2809        /// through all the radio buttons of the same name, even if the radio buttons are not
2810        /// grouped together in the source order.
2811        /// 
2812        /// # HTMLFormElement.elements
2813        /// 
2814        /// When an input element is given a name, that name becomes a property of the owning form
2815        /// element's HTMLFormElement.elements property.
2816        /// 
2817        /// Warning: Avoid giving form elements a name that corresponds to a built-in property of
2818        /// the form, since you would then override the predefined property or method with this
2819        /// reference to the corresponding input.
2820        name: String,
2821
2822        /// The pattern attribute, when specified, is a regular expression that the input's value
2823        /// must match in order for the value to pass constraint validation. It must be a valid
2824        /// JavaScript regular expression, as used by the RegExp type, and as documented in our
2825        /// guide on regular expressions; the 'u' flag is specified when compiling the regular
2826        /// expression, so that the pattern is treated as a sequence of Unicode code points, instead
2827        /// of as ASCII. No forward slashes should be specified around the pattern text.
2828        /// 
2829        /// If the pattern attribute is present but is not specified or is invalid, no regular
2830        /// expression is applied and this attribute is ignored completely. If the pattern attribute
2831        /// is valid and a non-empty value does not match the pattern, constraint validation will
2832        /// prevent form submission.
2833        /// 
2834        /// Tip: If using the pattern attribute, inform the user about the expected format by
2835        /// including explanatory text nearby. You can also include a title attribute to explain
2836        /// what the requirements are to match the pattern; most browsers will display this title as
2837        /// a tooltip. The visible explanation is required for accessibility. The tooltip is an
2838        /// enhancement.
2839        pattern: String,
2840
2841        /// The placeholder attribute is a string that provides a brief hint to the user as to what
2842        /// kind of information is expected in the field. It should be a word or short phrase that
2843        /// demonstrates the expected type of data, rather than an explanatory message. The text
2844        /// must not include carriage returns or line feeds.
2845        /// 
2846        /// Note: The placeholder attribute is not as semantically useful as other ways to explain
2847        /// your form, and can cause unexpected technical issues with your content.
2848        placeholder: String,
2849
2850        /// If present, indicates that the user should not be able to edit the value of the input.
2851        /// The readonly attribute is supported  text, search, url, tel, email, date, month, week,
2852        /// time, datetime-local, number, and password input types.
2853        readonly: bool,
2854
2855        /// If present, indicates that the user must specify a value for the input before the owning
2856        /// form can be submitted. The required attribute is supported  text, search, url, tel,
2857        /// email, date, month, week, time, datetime-local, number, password, checkbox, radio, and
2858        /// file.
2859        required: bool,
2860
2861        /// Valid for email, password, tel, and text input types only. Specifies how much of the
2862        /// input is shown. Basically creates same result as setting CSS width property with a few
2863        /// specialities. The actual unit of the value depends on the input type. For password and
2864        /// text it's number of characters (or em units) and pixels for others. CSS width takes
2865        /// precedence over size attribute.
2866        size: String,
2867
2868        /// Valid for the image input button only, the src is string specifying the URL of the image
2869        /// file to display to represent the graphical submit button. See the image input type.
2870        src: String,
2871
2872        /// Valid for the numeric input types, including number, date/time input types, and range,
2873        /// the step attribute is a number that specifies the granularity that the value must adhere
2874        /// to.
2875        /// 
2876        /// If not explicitly included, step defaults to 1 for number and range, and 1 unit type
2877        /// (second, week, month, day) for the date/time input types. The value can must be a
2878        /// positive number—integer or float—or the special value any, which means no stepping is
2879        /// implied, and any value is allowed (barring other constraints, such as min and max).
2880        /// 
2881        /// If any is not explicity set, valid values for the number, date/time input types, and
2882        /// range input types are equal to the basis for stepping - the min value and increments of
2883        /// the step value, up to the max value, if specified.
2884        /// 
2885        /// For example, if you have `<input type="number" min="10" step="2">`, then any even
2886        /// integer, 10 or greater, is valid. If omitted, `<input type="number">`, any integer is
2887        /// valid, but floats (like 4.2) are not valid, because step defaults to 1. For 4.2 to be
2888        /// valid, step would have had to be set to any, 0.1, 0.2, or any the min value would have
2889        /// had to be a number ending in .2, such as `<input type="number" min="-5.2">`.
2890        /// 
2891        /// Note: When the data entered by the user doesn't adhere to the stepping configuration,
2892        /// the value is considered invalid in contraint validation and will match the :invalid
2893        /// pseudoclass.
2894        /// 
2895        /// The default stepping value for number inputs is 1, allowing only integers to be entered,
2896        /// unless the stepping base is not an integer. The default stepping value for time is 1
2897        /// second (with 900 being equal to 15 minutes).
2898        step: String,
2899
2900        /// Global attribute valid for all elements, including all the input types, an integer
2901        /// attribute indicating if the element can take input focus (is focusable), if it should
2902        /// participate to sequential keyboard navigation. As all input types except for input of
2903        /// type hidden are focusable, this attribute should not be used on form controls, because
2904        /// doing so would require the management of the focus order for all elements within the
2905        /// document with the risk of harming usability and accessibility if done incorrectly.
2906        tabindex: String,
2907
2908        /// Global attribute valid for all elements, including all input types, containing a text
2909        /// representing advisory information related to the element it belongs to. Such information
2910        /// can typically, but not necessarily, be presented to the user as a tooltip. The title
2911        /// should NOT be used as the primary explanation of the purpose of the form control.
2912        /// Instead, use the `<label>` element with a for attribute set to the form control's id
2913        /// attribute.
2914        title: String,
2915
2916        /// A string specifying the type of control to render. For example, to create a checkbox, a
2917        /// value of checkbox is used. If omitted (or an unknown value is specified), the input type
2918        /// text is used, creating a plaintext input field.
2919        /// 
2920        /// Permitted values are listed in `<input>` types above.
2921        type_: String,
2922
2923        /// The input control's value. When specified in the HTML, this is the initial value, and
2924        /// from then on it can be altered or retrieved at any time using JavaScript to access the
2925        /// respective HTMLInputElement object's value property. The value attribute is always
2926        /// optional, though should be considered mandatory for checkbox, radio, and hidden.
2927        value: String,
2928
2929        /// Valid for the image input button only, the width is the width of the image file to
2930        /// display to represent the graphical submit button. See the image input type.
2931        width: String,
2932
2933    }
2934);
2935
2936dom_type!(input <dom::HtmlInputElement>);
2937
2938html_element!(
2939    /// The [HTML `<label>` element][mdn] represents a caption for an item in a user interface.
2940    /// 
2941    /// [mdn]: https://developer.mozilla.org/en-US/docs/Web/HTML/Element/label
2942    label {
2943        /// The id of a labelable form-related element in the same document as the `<label>`
2944        /// element. The first element in the document with an id matching the value of the for
2945        /// attribute is the labeled control for this label element, if it is a labelable element.
2946        /// If it is not labelable then the for attribute has no effect. If there are other elements
2947        /// which also match the id value, later in the document, they are not considered.
2948        /// 
2949        /// Note: A `<label>` element can have both a for attribute and a contained control element,
2950        /// as long as the for attribute points to the contained control element.
2951        for_: String,
2952
2953        /// The `<form>` element with which the label is associated (its form owner). If specified,
2954        /// the value of the attribute is the id of a `<form>` element in the same document. This
2955        /// lets you place label elements anywhere within a document, not just as descendants of
2956        /// their form elements.
2957        form: String,
2958
2959    }
2960);
2961
2962dom_type!(label <dom::HtmlLabelElement>);
2963children_allowed!(label);
2964
2965html_element!(
2966    /// The [HTML `<legend>` element][mdn] represents a caption for the content of its parent
2967    /// [`<fieldset>`][fieldset].
2968    /// 
2969    /// [mdn]: https://developer.mozilla.org/en-US/docs/Web/HTML/Element/legend
2970    /// [fieldset]: https://developer.mozilla.org/en-US/docs/Web/HTML/Element/fieldset
2971    legend {
2972    }
2973);
2974
2975dom_type!(legend <dom::HtmlLegendElement>);
2976children_allowed!(legend);
2977
2978html_element!(
2979    /// The [HTML `<meter>` element][mdn] represents either a scalar value within a known range or a
2980    /// fractional value.
2981    /// 
2982    /// [mdn]: https://developer.mozilla.org/en-US/docs/Web/HTML/Element/meter
2983    meter {
2984        /// The current numeric value. This must be between the minimum and maximum values (min
2985        /// attribute and max attribute) if they are specified. If unspecified or malformed, the
2986        /// value is 0. If specified, but not within the range given by the min attribute and max
2987        /// attribute, the value is equal to the nearest end of the range.
2988        /// 
2989        /// Note: Unless the value attribute is between 0 and 1 (inclusive), the min and max
2990        /// attributes should define the range so that the value attribute's value is within it.
2991        value: String,
2992
2993        /// The lower numeric bound of the measured range. This must be less than the maximum value
2994        /// (max attribute), if specified. If unspecified, the minimum value is 0.
2995        min: String,
2996
2997        /// The upper numeric bound of the measured range. This must be greater than the minimum
2998        /// value (min attribute), if specified. If unspecified, the maximum value is 1.
2999        max: String,
3000
3001        /// The `<form>` element to associate the `<meter>` element with (its form owner). The value
3002        /// of this attribute must be the id of a `<form>` in the same document. If this attribute
3003        /// is not set, the `<button>` is associated with its ancestor `<form>` element, if any.
3004        /// This attribute is only used if the `<meter>` element is being used as a form-associated
3005        /// element, such as one displaying a range corresponding to an `<input type="number">`.
3006        form: String,
3007
3008        /// The upper numeric bound of the low end of the measured range. This must be greater than
3009        /// the minimum value (min attribute), and it also must be less than the high value and
3010        /// maximum value (high attribute and max attribute, respectively), if any are specified. If
3011        /// unspecified, or if less than the minimum value, the low value is equal to the minimum
3012        /// value.
3013        high: u32,
3014
3015        /// The lower numeric bound of the high end of the measured range. This must be less than
3016        /// the maximum value (max attribute), and it also must be greater than the low value and
3017        /// minimum value (low attribute and min attribute, respectively), if any are specified. If
3018        /// unspecified, or if greater than the maximum value, the high value is equal to the
3019        /// maximum value.
3020        low: u32,
3021
3022        /// This attribute indicates the optimal numeric value. It must be within the range (as
3023        /// defined by the min attribute and max attribute). When used with the low attribute and
3024        /// high attribute, it gives an indication where along the range is considered preferable.
3025        /// For example, if it is between the min attribute and the low attribute, then the lower
3026        /// range is considered preferred.
3027        optimum: u32,
3028
3029    }
3030);
3031
3032dom_type!(meter <dom::HtmlMeterElement>);
3033children_allowed!(meter);
3034
3035html_element!(
3036    /// The [HTML `<optgroup>` element][mdn] creates a grouping of options within a
3037    /// [`<select>`][select] element.
3038    /// 
3039    /// [mdn]: https://developer.mozilla.org/en-US/docs/Web/HTML/Element/optgroup
3040    /// [select]: https://developer.mozilla.org/en-US/docs/Web/HTML/Element/select
3041    optgroup {
3042        /// If set, none of the items in this option group is selectable. Often browsers grey out
3043        /// such control and it won't receive any browsing events, like mouse clicks or
3044        /// focus-related ones.
3045        disabled: bool,
3046
3047        /// The name of the group of options, which the browser can use when labeling the options in
3048        /// the user interface. This attribute is mandatory if this element is used.
3049        label: String,
3050
3051    }
3052);
3053
3054dom_type!(optgroup <dom::HtmlOptGroupElement>);
3055children_allowed!(optgroup);
3056
3057html_element!(
3058    /// The [HTML `<option>` element][mdn] is used to define an item contained in a
3059    /// [`<select>`][select], an [`<optgroup>`][optgroup], or a [`<datalist>`][datalist] element. As
3060    /// such, `<option>` can represent menu items in popups and other lists of items in an HTML
3061    /// document.
3062    /// 
3063    /// [mdn]: https://developer.mozilla.org/en-US/docs/Web/HTML/Element/option
3064    /// [select]: https://developer.mozilla.org/en-US/docs/Web/HTML/Element/select
3065    /// [optgroup]: https://developer.mozilla.org/en-US/docs/Web/HTML/Element/optgroup
3066    /// [datalist]: https://developer.mozilla.org/en-US/docs/Web/HTML/Element/datalist
3067    option {
3068        /// If set, this option is not checkable. Often browsers grey out such control and it won't
3069        /// receive any browsing event, like mouse clicks or focus-related ones. If this attribute
3070        /// is not set, the element can still be disabled if one of its ancestors is a disabled
3071        /// `<optgroup>` element.
3072        disabled: bool,
3073
3074        /// This attribute is text for the label indicating the meaning of the option. If the label
3075        /// attribute isn't defined, its value is that of the element text content.
3076        label: String,
3077
3078        /// If present, indicates that the option is initially selected. If the `<option>` element
3079        /// is the descendant of a `<select>` element whose multiple attribute is not set, only one
3080        /// single `<option>` of this `<select>` element may have the selected attribute.
3081        selected: bool,
3082
3083        /// The content of this attribute represents the value to be submitted with the form, should
3084        /// this option be selected. If this attribute is omitted, the value is taken from the text
3085        /// content of the option element.
3086        value: String,
3087
3088    }
3089);
3090
3091dom_type!(option <dom::HtmlOptionElement>);
3092children_allowed!(option);
3093
3094html_element!(
3095    /// The [HTML Output element (`<output>`)][mdn] is a container element into which a site or app
3096    /// can inject the results of a calculation or the outcome of a user action.
3097    /// 
3098    /// [mdn]: https://developer.mozilla.org/en-US/docs/Web/HTML/Element/output
3099    output {
3100        /// A space-separated list of other elements’ ids, indicating that those elements
3101        /// contributed input values to (or otherwise affected) the calculation.
3102        for_: String,
3103
3104        /// The `<form>` element to associate the output with (its form owner). The value of this
3105        /// attribute must be the id of a `<form>` in the same document. (If this attribute is not
3106        /// set, the `<output>` is associated with its ancestor `<form>` element, if any.)
3107        /// 
3108        /// This attribute lets you associate `<output>` elements to `<form>`s anywhere in the
3109        /// document, not just inside a `<form>`. It can also override an ancestor `<form>` element.
3110        form: String,
3111
3112        /// The element's name. Used in the form.elements API.
3113        name: String,
3114
3115    }
3116);
3117
3118dom_type!(output <dom::HtmlOutputElement>);
3119children_allowed!(output);
3120
3121html_element!(
3122    /// The [HTML `<progress>` element][progress] displays an indicator showing the completion
3123    /// progress of a task, typically displayed as a progress bar.
3124    /// 
3125    /// [mdn]: https://developer.mozilla.org/en-US/docs/Web/HTML/Element/progress
3126    progress {
3127        /// This attribute describes how much work the task indicated by the progress element
3128        /// requires. The max attribute, if present, must have a value greater than 0 and be a valid
3129        /// floating point number. The default value is 1.
3130        max: f32,
3131
3132        /// This attribute specifies how much of the task that has been completed. It must be a
3133        /// valid floating point number between 0 and max, or between 0 and 1 if max is omitted. If
3134        /// there is no value attribute, the progress bar is indeterminate; this indicates that an
3135        /// activity is ongoing with no indication of how long it is expected to take.
3136        value: f32,
3137
3138    }
3139);
3140
3141dom_type!(progress <dom::HtmlProgressElement>);
3142children_allowed!(progress);
3143
3144html_element!(
3145    /// The [HTML `<select>` element][mdn] represents a control that provides a menu of options.
3146    /// 
3147    /// [mdn]: https://developer.mozilla.org/en-US/docs/Web/HTML/Element/select
3148    select {
3149        /// A DOMString providing a hint for a user agent's autocomplete feature.
3150        autocomplete: String,
3151
3152        /// Lets you specify that a form control should have input focus when the page loads. Only
3153        /// one form element in a document can have the autofocus attribute.
3154        autofocus: bool,
3155
3156        /// Indicates that the user cannot interact with the control. If this attribute is not
3157        /// specified, the control inherits its setting from the containing element, for example
3158        /// `<fieldset>`; if there is no containing element with the disabled attribute set, then
3159        /// the control is enabled.
3160        disabled: bool,
3161
3162        /// The `<form>` element to associate the `<select>` with (its form owner). The value of
3163        /// this attribute must be the id of a `<form>` in the same document. (If this attribute is
3164        /// not set, the `<select>` is associated with its ancestor `<form>` element, if any.)
3165        /// 
3166        /// This attribute lets you associate `<select>` elements to `<form>`s anywhere in the
3167        /// document, not just inside a `<form>`. It can also override an ancestor `<form>` element.
3168        form: String,
3169
3170        /// Indicates that multiple options can be selected in the list. If it is not specified,
3171        /// then only one option can be selected at a time. When multiple is specified, most
3172        /// browsers will show a scrolling list box instead of a single line dropdown.
3173        multiple: bool,
3174
3175        /// This attribute is used to specify the name of the control.
3176        name: String,
3177
3178        /// Indicates that an option with a non-empty string value must be selected.
3179        required: bool,
3180
3181        /// If the control is presented as a scrolling list box (e.g. when multiple is specified),
3182        /// this attribute represents the number of rows in the list that should be visible at one
3183        /// time. Browsers are not required to present a select element as a scrolled list box. The
3184        /// default value is 0.
3185        size: String,
3186
3187    }
3188);
3189
3190dom_type!(select <dom::HtmlSelectElement>);
3191children_allowed!(select);
3192
3193html_element!(
3194    /// The [HTML `<textarea>` element][mdn] represents a multi-line plain-text editing control,
3195    /// useful when you want to allow users to enter a sizeable amount of free-form text, for
3196    /// example a comment on a review or feedback form.
3197    /// 
3198    /// [mdn]: https://developer.mozilla.org/en-US/docs/Web/HTML/Element/textarea
3199    textarea {
3200        /// This attribute indicates whether the value of the control can be automatically completed
3201        /// by the browser. Possible values are:
3202        /// 
3203        /// * off: The user must explicitly enter a value into this field for every use, or the
3204        /// document provides its own auto-completion method; the browser does not automatically
3205        /// complete the entry.
3206        /// * on: The browser can automatically complete the value based on values that the user has
3207        /// entered during previous uses.
3208        /// 
3209        /// If the autocomplete attribute is not specified on a `<textarea>` element, then the
3210        /// browser uses the autocomplete attribute value of the `<textarea>` element's form owner.
3211        /// The form owner is either the `<form>` element that this `<textarea>` element is a
3212        /// descendant of or the form element whose id is specified by the form attribute of the
3213        /// input element. For more information, see the autocomplete attribute in `<form>`.
3214        autocomplete: String,
3215
3216        /// Lets you specify that a form control should have input focus when the page loads. Only
3217        /// one form-associated element in a document can have this attribute specified.
3218        autofocus: bool,
3219
3220        /// The visible width of the text control, in average character widths. If it is not
3221        /// specified, the default value is 20.
3222        cols: u32,
3223
3224        /// Indicates that the user cannot interact with the control. If this attribute is not
3225        /// specified, the control inherits its setting from the containing element, for example
3226        /// `<fieldset>`; if there is no containing element when the disabled attribute is set, the
3227        /// control is enabled.
3228        disabled: bool,
3229
3230        /// The form element that the `<textarea>` element is associated with (its "form owner").
3231        /// The value of the attribute must be the id of a form element in the same document. If
3232        /// this attribute is not specified, the `<textarea>` element must be a descendant of a form
3233        /// element. This attribute enables you to place `<textarea>` elements anywhere within a
3234        /// document, not just as descendants of form elements.
3235        form: String,
3236
3237        /// The maximum number of characters (UTF-16 code units) that the user can enter. If this
3238        /// value isn't specified, the user can enter an unlimited number of characters.
3239        maxlength: u32,
3240
3241        /// The minimum number of characters (UTF-16 code units) required that the user should
3242        /// enter.
3243        minlength: u32,
3244
3245        /// The name of the control.
3246        name: String,
3247
3248        /// A hint to the user of what can be entered in the control. Carriage returns or line-feeds
3249        /// within the placeholder text must be treated as line breaks when rendering the hint.
3250        /// 
3251        /// Note: Placeholders should only be used to show an example of the type of data that
3252        /// should be entered into a form; they are not a substitute for a proper `<label>` element
3253        /// tied to the input.
3254        placeholder: String,
3255
3256        /// Indicates that the user cannot modify the value of the control. Unlike the disabled
3257        /// attribute, the readonly attribute does not prevent the user from clicking or selecting
3258        /// in the control. The value of a read-only control is still submitted with the form.
3259        readonly: bool,
3260
3261        /// This attribute specifies that the user must fill in a value before submitting a form.
3262        required: String,
3263
3264        /// The number of visible text lines for the control.
3265        rows: String,
3266
3267        /// Specifies whether the `<textarea>` is subject to spell checking by the underlying
3268        /// browser/OS. the value can be:
3269        /// 
3270        /// * true: Indicates that the element needs to have its spelling and grammar checked.
3271        /// * default : Indicates that the element is to act according to a default behavior,
3272        /// possibly based on the parent element's own spellcheck value.
3273        /// * false : Indicates that the element should not be spell checked.
3274        spellcheck: String,
3275
3276        /// Indicates how the control wraps text. Possible values are:
3277        /// 
3278        /// * hard: The browser automatically inserts line breaks (CR+LF) so that each line has no
3279        /// more than the width of the control; the cols attribute must also be specified for this
3280        /// to take effect.
3281        /// * soft: The browser ensures that all line breaks in the value consist of a CR+LF pair,
3282        /// but does not insert any additional line breaks.
3283        /// 
3284        /// If this attribute is not specified, soft is its default value.
3285        wrap: String,
3286
3287    }
3288);
3289
3290dom_type!(textarea <dom::HtmlTextAreaElement>);
3291children_allowed!(textarea);
3292