Skip to main content

tachys/html/attribute/
key.rs

1use super::{Attr, AttributeValue};
2use std::fmt::Debug;
3
4/// An HTML attribute key.
5pub trait AttributeKey: Clone + Send + 'static {
6    /// The name of the attribute.
7    const KEY: &'static str;
8}
9
10macro_rules! attributes {
11	($(#[$meta:meta] $key:ident $html:literal),* $(,)?) => {
12        paste::paste! {
13            $(
14                #[$meta]
15                #[track_caller]
16                pub fn $key<V>(value: V) -> Attr<[<$key:camel>], V>
17				where V: AttributeValue,
18
19                {
20                    Attr([<$key:camel>], value)
21                }
22
23                #[$meta]
24				#[derive(Debug, Copy, Clone, PartialEq, Eq, Hash)]
25				pub struct [<$key:camel>];
26
27				impl AttributeKey for [<$key:camel>] {
28					const KEY: &'static str = $html;
29				}
30            )*
31		}
32    }
33}
34
35attributes! {
36    // HTML
37    /// The `abbr` attribute specifies an abbreviated form of the element's content.
38    abbr "abbr",
39    /// The `accept-charset` attribute specifies the character encodings that are to be used for the form submission.
40    accept_charset "accept-charset",
41    /// The `accept` attribute specifies a list of types the server accepts, typically a file type.
42    accept "accept",
43    /// The `accesskey` attribute specifies a shortcut key to activate or focus an element.
44    accesskey "accesskey",
45    /// The `action` attribute defines the URL to which the form data will be sent.
46    action "action",
47    /// The `align` attribute specifies the alignment of an element.
48    align "align",
49    /// The `allow` attribute defines a feature policy for the content in an iframe.
50    allow "allow",
51    /// The `allowfullscreen` attribute allows the iframe to be displayed in fullscreen mode.
52    allowfullscreen "allowfullscreen",
53    /// The `allowpaymentrequest` attribute allows a cross-origin iframe to invoke the Payment Request API.
54    allowpaymentrequest "allowpaymentrequest",
55    /// The `alt` attribute provides alternative text for an image, if the image cannot be displayed.
56    alt "alt",
57    // ARIA
58    /// The `aria-activedescendant` attribute identifies the currently active element when DOM focus is on a composite widget, textbox, group, or application.
59    aria_activedescendant "aria-activedescendant",
60    /// The `aria-atomic` attribute indicates whether assistive technologies will present all, or only parts of, the changed region based on the change notifications defined by the aria-relevant attribute.
61    aria_atomic "aria-atomic",
62    /// The `aria-autocomplete` attribute indicates whether user input completion suggestions are provided.
63    aria_autocomplete "aria-autocomplete",
64    /// The `aria-busy` attribute indicates whether an element, and its subtree, are currently being updated.
65    aria_busy "aria-busy",
66    /// The `aria-checked` attribute indicates the current "checked" state of checkboxes, radio buttons, and other widgets.
67    aria_checked "aria-checked",
68    /// The `aria-colcount` attribute defines the total number of columns in a table, grid, or treegrid.
69    aria_colcount "aria-colcount",
70    /// The `aria-colindex` attribute defines an element's column index or position with respect to the total number of columns within a table, grid, or treegrid.
71    aria_colindex "aria-colindex",
72    /// The `aria-colspan` attribute defines the number of columns spanned by a cell or gridcell within a table, grid, or treegrid.
73    aria_colspan "aria-colspan",
74    /// The `aria-controls` attribute identifies the element (or elements) whose contents or presence are controlled by the current element.
75    aria_controls "aria-controls",
76    /// The `aria-current` attribute indicates the element representing the current item within a container or set of related elements.
77    aria_current "aria-current",
78    /// The `aria-describedby` attribute identifies the element (or elements) that describes the object.
79    aria_describedby "aria-describedby",
80    /// The `aria-description` attribute provides a string value that describes or annotates the current element.
81    aria_description "aria-description",
82    /// The `aria-details` attribute identifies the element that provides a detailed, extended description for the object.
83    aria_details "aria-details",
84    /// The `aria-disabled` attribute indicates that the element is perceivable but disabled, so it is not editable or otherwise operable.
85    aria_disabled "aria-disabled",
86    /// The `aria-dropeffect` attribute indicates what functions can be performed when a dragged object is released on the drop target.
87    aria_dropeffect "aria-dropeffect",
88    /// The `aria-errormessage` attribute identifies the element that provides an error message for the object.
89    aria_errormessage "aria-errormessage",
90    /// The `aria-expanded` attribute indicates whether an element, or another grouping element it controls, is currently expanded or collapsed.
91    aria_expanded "aria-expanded",
92    /// The `aria-flowto` attribute identifies the next element (or elements) in an alternate reading order of content.
93    aria_flowto "aria-flowto",
94    /// The `aria-grabbed` attribute indicates an element's "grabbed" state in a drag-and-drop operation.
95    aria_grabbed "aria-grabbed",
96    /// The `aria-haspopup` attribute indicates the availability and type of interactive popup element, such as menu or dialog, that can be triggered by an element.
97    aria_haspopup "aria-haspopup",
98    /// The `aria-hidden` attribute indicates whether the element is exposed to an accessibility API.
99    aria_hidden "aria-hidden",
100    /// The `aria-invalid` attribute indicates the entered value does not conform to the format expected by the application.
101    aria_invalid "aria-invalid",
102    /// The `aria-keyshortcuts` attribute indicates keyboard shortcuts that an author has implemented to activate or give focus to an element.
103    aria_keyshortcuts "aria-keyshortcuts",
104    /// The `aria-label` attribute defines a string value that labels the current element.
105    aria_label "aria-label",
106    /// The `aria-labelledby` attribute identifies the element (or elements) that labels the current element.
107    aria_labelledby "aria-labelledby",
108    /// The `aria-live` attribute indicates that an element will be updated, and describes the types of updates the user agents, assistive technologies, and user can expect from the live region.
109    aria_live "aria-live",
110    /// The `aria-modal` attribute indicates whether an element is modal when displayed.
111    aria_modal "aria-modal",
112    /// The `aria-multiline` attribute indicates whether a text box accepts multiple lines of input or only a single line.
113    aria_multiline "aria-multiline",
114    /// The `aria-multiselectable` attribute indicates that the user may select more than one item from the current selectable descendants.
115    aria_multiselectable "aria-multiselectable",
116    /// The `aria-orientation` attribute indicates whether the element's orientation is horizontal, vertical, or unknown/ambiguous.
117    aria_orientation "aria-orientation",
118    /// The `aria-owns` attribute identifies an element (or elements) in order to define a relationship between the element with `aria-owns` and the target element.
119    aria_owns "aria-owns",
120    /// The `aria-placeholder` attribute defines a short hint (a word or short phrase) intended to aid the user with data entry when the control has no value.
121    aria_placeholder "aria-placeholder",
122    /// The `aria-posinset` attribute defines an element's position within a set or treegrid.
123    aria_posinset "aria-posinset",
124    /// The `aria-pressed` attribute indicates the current "pressed" state of toggle buttons.
125    aria_pressed "aria-pressed",
126    /// The `aria-readonly` attribute indicates that the element is not editable, but is otherwise operable.
127    aria_readonly "aria-readonly",
128    /// The `aria-relevant` attribute indicates what user agent changes to the accessibility tree should be monitored.
129    aria_relevant "aria-relevant",
130    /// The `aria-required` attribute indicates that user input is required on the element before a form may be submitted.
131    aria_required "aria-required",
132    /// The `aria-roledescription` attribute defines a human-readable, author-localized description for the role of an element.
133    aria_roledescription "aria-roledescription",
134    /// The `aria-rowcount` attribute defines the total number of rows in a table, grid, or treegrid.
135    aria_rowcount "aria-rowcount",
136    /// The `aria-rowindex` attribute defines an element's row index or position with respect to the total number of rows within a table, grid, or treegrid.
137    aria_rowindex "aria-rowindex",
138    /// The `aria-rowspan` attribute defines the number of rows spanned by a cell or gridcell within a table, grid, or treegrid.
139    aria_rowspan "aria-rowspan",
140    /// The `aria-selected` attribute indicates the current "selected" state of various widgets.
141    aria_selected "aria-selected",
142    /// The `aria-setsize` attribute defines the number of items in the current set of listitems or treeitems.
143    aria_setsize "aria-setsize",
144    /// The `aria-sort` attribute indicates if items in a table or grid are sorted in ascending or descending order.
145    aria_sort "aria-sort",
146    /// The `aria-valuemax` attribute defines the maximum allowed value for a range widget.
147    aria_valuemax "aria-valuemax",
148    /// The `aria-valuemin` attribute defines the minimum allowed value for a range widget.
149    aria_valuemin "aria-valuemin",
150    /// The `aria-valuenow` attribute defines the current value for a range widget.
151    aria_valuenow "aria-valuenow",
152    /// The `aria-valuetext` attribute defines the human-readable text alternative of aria-valuenow for a range widget.
153    aria_valuetext "aria-valuetext",
154    /// The `as` attribute specifies the type of destination for the content of the link.
155    r#as "as",
156    /// The `async` attribute indicates that the script should be executed asynchronously.
157    r#async "async",
158    /// The `attributionsrc` attribute indicates that you want the browser to send an `Attribution-Reporting-Eligible` header along with a request.
159    attributionsrc "attributionsrc",
160    /// The `autocapitalize` attribute controls whether and how text input is automatically capitalized as it is entered/edited by the user.
161    autocapitalize "autocapitalize",
162    /// The `autocomplete` attribute indicates whether an input field can have its value automatically completed by the browser.
163    autocomplete "autocomplete",
164    /// The `autofocus` attribute indicates that an element should be focused on page load.
165    autofocus "autofocus",
166    /// The `autoplay` attribute indicates that the media should start playing as soon as it is loaded.
167    autoplay "autoplay",
168    /// The `background` attribute sets the URL of the background image for the document.
169    background "background",
170    /// The `bgcolor` attribute sets the background color of an element.
171    bgcolor "bgcolor",
172    /// The `blocking` attribute indicates that the script will block the page loading until it is executed.
173    blocking "blocking",
174    /// The `border` attribute sets the width of an element's border.
175    border "border",
176    /// The `buffered` attribute contains the time ranges that the media has been buffered.
177    buffered "buffered",
178    /// The `capture` attribute indicates that the user must capture media using a camera or microphone instead of selecting a file from the file picker.
179    capture "capture",
180    /// The `challenge` attribute specifies the challenge string that is paired with the keygen element.
181    challenge "challenge",
182    /// The `closedby` attribute specifies the types of user actions that can be used to close the associated `<dialog>` element.
183    closedby "closedby",
184    /// The `charset` attribute specifies the character encoding of the HTML document.
185    charset "charset",
186    /// The `checked` attribute indicates whether an input element is checked or not.
187    checked "checked",
188    /// The `cite` attribute contains a URL that points to the source of the quotation or change.
189    cite "cite",
190    // class is handled in ../class.rs instead
191    //class "class",
192    /// The `code` attribute specifies the URL of the applet's class file to be loaded and executed.
193    code "code",
194    /// The `color` attribute specifies the color of an element's text.
195    color "color",
196    /// The `cols` attribute specifies the visible width of a text area.
197    cols "cols",
198    /// The `colspan` attribute defines the number of columns a cell should span.
199    colspan "colspan",
200    /// The `command` attribute defines the command to be invoked when user clicks the `<button>` element which has `commandfor` attribute specified.
201    command "command",
202    /// The `commandfor` attribute defines the id of the element which button is controlling. It is generic version of `popovertarget`.
203    commandfor "commandfor",
204    /// The `content` attribute gives the value associated with the http-equiv or name attribute.
205    content "content",
206    /// The `contenteditable` attribute indicates whether the element's content is editable.
207    contenteditable "contenteditable",
208    /// The `contextmenu` attribute specifies the ID of a `<menu>` element to open as a context menu.
209    contextmenu "contextmenu",
210    /// The `controls` attribute indicates whether the browser should display playback controls for the media.
211    controls "controls",
212    /// The `controlslist` attribute allows the control of which controls to show on the media element whenever the browser shows its native controls.
213    controlslist "controlslist",
214    /// The `coords` attribute specifies the coordinates of an area in an image map.
215    coords "coords",
216    /// The `crossorigin` attribute indicates whether the resource should be fetched with a CORS request.
217    crossorigin "crossorigin",
218    /// The `csp` attribute allows the embedding document to define the Content Security Policy that an embedded document must agree to enforce upon itself.
219    csp "csp",
220    /// The `data` attribute specifies the URL of the resource that is being embedded.
221    data "data",
222    /// The `datetime` attribute specifies the date and time.
223    datetime "datetime",
224    /// The `decoding` attribute indicates the preferred method for decoding images.
225    decoding "decoding",
226    /// The `default` attribute indicates that the track should be enabled unless the user's preferences indicate that another track is more appropriate.
227    default "default",
228    /// The `defer` attribute indicates that the script should be executed after the document has been parsed.
229    defer "defer",
230    /// The `dir` attribute specifies the text direction for the content in an element.
231    dir "dir",
232    /// The `dirname` attribute identifies the text directionality of an input element.
233    dirname "dirname",
234    /// The `disabled` attribute indicates whether the element is disabled.
235    disabled "disabled",
236    /// The `disablepictureinpicture` attribute indicates that the element is not allowed to be displayed in Picture-in-Picture mode.
237    disablepictureinpicture "disablepictureinpicture",
238    /// The `disableremoteplayback` attribute indicates that the element is not allowed to be displayed using remote playback.
239    disableremoteplayback "disableremoteplayback",
240    /// The `download` attribute indicates that the linked resource is intended to be downloaded rather than displayed in the browser.
241    download "download",
242    /// The `draggable` attribute indicates whether the element is draggable.
243    draggable "draggable",
244    /// The `elementtiming` attributes marks the element for observation by the `PerformanceElementTiming` API.
245    elementtiming "elementtiming",
246    /// The `enctype` attribute specifies the MIME type of the form submission.
247    enctype "enctype",
248    /// The `enterkeyhint` attribute allows authors to specify what kind of action label or icon will be presented to users in a virtual keyboard's enter key.
249    enterkeyhint "enterkeyhint",
250    /// The `exportparts` attribute enables the sharing of parts of an element's shadow DOM with a containing document.
251    exportparts "exportparts",
252    /// The `fetchpriority` attribute allows developers to specify the priority of a resource fetch request.
253    fetchpriority "fetchpriority",
254    /// The `for` attribute specifies which form element a label is bound to.
255    r#for "for",
256    /// The `form` attribute associates the element with a form element.
257    form "form",
258    /// The `formaction` attribute specifies the URL that processes the form submission.
259    formaction "formaction",
260    /// The `formenctype` attribute specifies how the form data should be encoded when submitted.
261    formenctype "formenctype",
262    /// The `formmethod` attribute specifies the HTTP method to use when submitting the form.
263    formmethod "formmethod",
264    /// The `formnovalidate` attribute indicates that the form should not be validated when submitted.
265    formnovalidate "formnovalidate",
266    /// The `formtarget` attribute specifies where to display the response after submitting the form.
267    formtarget "formtarget",
268    /// The `headers` attribute specifies the headers associated with the element.
269    headers "headers",
270    /// The `height` attribute specifies the height of an element.
271    height "height",
272    /// The `hidden` attribute indicates that the element is not yet, or is no longer, relevant.
273    hidden "hidden",
274    /// The `high` attribute specifies the range that is considered to be a high value.
275    high "high",
276    /// The `href` attribute specifies the URL of a linked resource.
277    href "href",
278    /// The `hreflang` attribute specifies the language of the linked resource.
279    hreflang "hreflang",
280    /// The `http-equiv` attribute provides an HTTP header for the information/value of the content attribute.
281    http_equiv "http-equiv",
282    /// The `icon` attribute specifies the URL of an image to be used as a graphical icon for the element.
283    icon "icon",
284    /// The `id` attribute specifies a unique id for an element.
285    id "id",
286    /// The `imagesizes` attribute specifies image sizes for different page layouts.
287    imagesizes "imagesizes",
288    /// The `imagesrcset` attribute specifies the URLs of multiple images to be used in different situations.
289    imagesrcset "imagesrcset",
290    /// The `importance` attribute specifies the relative importance of the element.
291    importance "importance",
292    /// The `inert` attribute indicates that the element is non-interactive and won't be accessible to user interactions or assistive technologies.
293    inert "inert",
294    /// The `inputmode` attribute specifies the type of data that the user will enter.
295    inputmode "inputmode",
296    /// The `integrity` attribute contains a hash value that the browser can use to verify that the resource hasn't been altered.
297    integrity "integrity",
298    /// The `intrinsicsize` attribute specifies the intrinsic size of an image or video.
299    intrinsicsize "intrinsicsize",
300    /// The `is` attribute allows you to specify the name of a custom element.
301    is "is",
302    /// The `ismap` attribute indicates that the image is part of a server-side image map.
303    ismap "ismap",
304    /// The `itemid` attribute assigns a unique identifier to an item.
305    itemid "itemid",
306    /// The `itemprop` attribute adds a property to an item.
307    itemprop "itemprop",
308    /// The `itemref` attribute provides a list of element IDs that have additional properties for the item.
309    itemref "itemref",
310    /// The `itemscope` attribute creates a new item and adds it to the page's items.
311    itemscope "itemscope",
312    /// The `itemtype` attribute specifies the type of an item.
313    itemtype "itemtype",
314    /// The `keytype` attribute specifies the type of key used by the `<keygen>` element.
315    keytype "keytype",
316    /// The `kind` attribute specifies the kind of text track.
317    kind "kind",
318    /// The `label` attribute provides a user-readable title for an element.
319    label "label",
320    /// The `lang` attribute specifies the language of the element's content.
321    lang "lang",
322    /// The `language` attribute specifies the scripting language used for the script.
323    language "language",
324    /// The `list` attribute identifies a `<datalist>` element that contains pre-defined options for an `<input>` element.
325    list "list",
326    /// The `loading` attribute indicates how the browser should load the image.
327    loading "loading",
328    /// The `loop` attribute indicates whether the media should start over again when it reaches the end.
329    r#loop "loop",
330    /// The `low` attribute specifies the range that is considered to be a low value.
331    low "low",
332    /// The `manifest` attribute specifies the URL of a document's cache manifest.
333    manifest "manifest",
334    /// The `max` attribute specifies the maximum value for an input element.
335    max "max",
336    /// The `maxlength` attribute specifies the maximum number of characters that an input element can accept.
337    maxlength "maxlength",
338    /// The `media` attribute specifies what media/device the linked resource is optimized for.
339    media "media",
340    /// The `method` attribute specifies the HTTP method to use when submitting the form.
341    method "method",
342    /// The `min` attribute specifies the minimum value for an input element.
343    min "min",
344    /// The `minlength` attribute specifies the minimum number of characters that an input element can accept.
345    minlength "minlength",
346    /// The `multiple` attribute indicates whether the user can enter more than one value.
347    multiple "multiple",
348    /// The `muted` attribute indicates whether the audio will be initially silenced on page load.
349    muted "muted",
350    /// The `name` attribute specifies the name of the element.
351    name "name",
352    /// The `nomodule` attribute indicates that the script should not be executed in browsers that support ES modules.
353    nomodule "nomodule",
354    /// The `nonce` attribute provides a cryptographic nonce to ensure that a script or style is approved for execution.
355    nonce "nonce",
356    /// The `novalidate` attribute indicates that the form should not be validated when submitted.
357    novalidate "novalidate",
358    /// The `open` attribute indicates whether the details element is open or closed.
359    open "open",
360    /// The `optimum` attribute specifies the range that is considered to be an optimum value.
361    optimum "optimum",
362    /// The `part` attribute identifies the element as a shadow DOM part.
363    part "part",
364    /// The `pattern` attribute specifies a regular expression that the input element's value is checked against.
365    pattern "pattern",
366    /// The `ping` attribute contains a space-separated list of URLs to be notified if the user follows the hyperlink.
367    ping "ping",
368    /// The `placeholder` attribute provides a short hint that describes the expected value of the input element.
369    placeholder "placeholder",
370    /// The `playsinline` attribute indicates that the video should play inline in the element's playback area.
371    playsinline "playsinline",
372    /// The `popover` attribute indicates that an element is a popover and specifies the event that causes the popover to be shown.
373    popover "popover",
374    /// The `popovertarget` attribute specifies the ID of an element to toggle a popover.
375    popovertarget "popovertarget",
376    /// The `popovertargetaction` attribute specifies the action that shows the popover.
377    popovertargetaction "popovertargetaction",
378    /// The `poster` attribute specifies an image to be shown while the video is downloading or until the user hits the play button.
379    poster "poster",
380    /// The `preload` attribute specifies if and how the author thinks that the media file should be loaded when the page loads.
381    preload "preload",
382    /// The `radiogroup` attribute specifies the name of the group to which the element belongs.
383    radiogroup "radiogroup",
384    /// The `readonly` attribute indicates that the user cannot modify the value of the input element.
385    readonly "readonly",
386    /// The `referrerpolicy` attribute specifies which referrer information to include with requests.
387    referrerpolicy "referrerpolicy",
388    /// The `rel` attribute specifies the relationship between the current document and the linked document.
389    rel "rel",
390    /// The `required` attribute indicates that the user must fill in the input element before submitting the form.
391    required "required",
392    /// The `reversed` attribute indicates that the list should be displayed in a descending order.
393    reversed "reversed",
394    /// The `role` attribute defines the role of an element in the context of a web application.
395    role "role",
396    /// The `rows` attribute specifies the number of visible text lines for a text area.
397    rows "rows",
398    /// The `rowspan` attribute defines the number of rows a cell should span.
399    rowspan "rowspan",
400    /// The `sandbox` attribute applies extra restrictions to the content in the `<iframe>`.
401    sandbox "sandbox",
402    /// The `scope` attribute specifies whether a header cell is a header for a column, row, or group of columns or rows.
403    scope "scope",
404    /// The `scoped` attribute indicates that the styles in a `<style>` element are scoped to the parent element.
405    scoped "scoped",
406    /// The `selected` attribute indicates that the option is selected.
407    selected "selected",
408    /// The `shape` attribute specifies the shape of the area.
409    shape "shape",
410    /// The `size` attribute specifies the width of the input element.
411    size "size",
412    /// The `sizes` attribute specifies the sizes of icons for visual media.
413    sizes "sizes",
414    /// The `slot` attribute assigns a slot to an element.
415    slot "slot",
416    /// The `span` attribute defines the number of columns in a `<colgroup>` or the number of rows in a `<rowgroup>`.
417    span "span",
418    /// The `spellcheck` attribute indicates whether spell checking is allowed for the element.
419    spellcheck "spellcheck",
420    /// The `src` attribute specifies the URL of the media resource.
421    src "src",
422    /// The `srcdoc` attribute specifies the HTML content of the page to show in the `<iframe>`.
423    srcdoc "srcdoc",
424    /// The `srclang` attribute specifies the language of the text track.
425    srclang "srclang",
426    /// The `srcset` attribute specifies the URLs of multiple images to be used in different situations.
427    srcset "srcset",
428    /// The `start` attribute specifies the start value of the list.
429    start "start",
430    /// The `step` attribute specifies the legal number intervals for an input element.
431    step "step",
432    // style is handled in ../style.rs instead
433    // style "style",
434    /// The `summary` attribute provides a summary of the content of the table.
435    summary "summary",
436    /// The `tabindex` attribute specifies the tab order of an element.
437    tabindex "tabindex",
438    /// The `target` attribute specifies where to open the linked document.
439    target "target",
440    /// The `title` attribute provides additional information about an element.
441    title "title",
442    /// The `translate` attribute specifies whether the content of an element should be translated or not.
443    translate "translate",
444    /// The `type` attribute specifies the type of the element.
445    r#type "type",
446    /// The `usemap` attribute specifies the image map to be used by an `<img>` element.
447    usemap "usemap",
448    /// The `value` attribute specifies the value of the element.
449    value "value",
450    /// The `virtualkeyboardpolicy` attribute controls the policy for virtual keyboards.
451    virtualkeyboardpolicy "virtualkeyboardpolicy",
452    /// The `width` attribute specifies the width of an element.
453    width "width",
454    /// The `wrap` attribute specifies how the text in a text area is to be wrapped when submitted in a form.
455    wrap "wrap",
456    // Event Handler Attributes
457    /// The `onabort` attribute specifies the event handler for the abort event.
458    onabort "onabort",
459    /// The `onautocomplete` attribute specifies the event handler for the autocomplete event.
460    onautocomplete "onautocomplete",
461    /// The `onautocompleteerror` attribute specifies the event handler for the autocompleteerror event.
462    onautocompleteerror "onautocompleteerror",
463    /// The `onblur` attribute specifies the event handler for the blur event.
464    onblur "onblur",
465    /// The `oncancel` attribute specifies the event handler for the cancel event.
466    oncancel "oncancel",
467    /// The `oncanplay` attribute specifies the event handler for the canplay event.
468    oncanplay "oncanplay",
469    /// The `oncanplaythrough` attribute specifies the event handler for the canplaythrough event.
470    oncanplaythrough "oncanplaythrough",
471    /// The `onchange` attribute specifies the event handler for the change event.
472    onchange "onchange",
473    /// The `onclick` attribute specifies the event handler for the click event.
474    onclick "onclick",
475    /// The `onclose` attribute specifies the event handler for the close event.
476    onclose "onclose",
477    /// The `oncontextmenu` attribute specifies the event handler for the contextmenu event.
478    oncontextmenu "oncontextmenu",
479    /// The `oncuechange` attribute specifies the event handler for the cuechange event.
480    oncuechange "oncuechange",
481    /// The `ondblclick` attribute specifies the event handler for the double click event.
482    ondblclick "ondblclick",
483    /// The `ondrag` attribute specifies the event handler for the drag event.
484    ondrag "ondrag",
485    /// The `ondragend` attribute specifies the event handler for the dragend event.
486    ondragend "ondragend",
487    /// The `ondragenter` attribute specifies the event handler for the dragenter event.
488    ondragenter "ondragenter",
489    /// The `ondragleave` attribute specifies the event handler for the dragleave event.
490    ondragleave "ondragleave",
491    /// The `ondragover` attribute specifies the event handler for the dragover event.
492    ondragover "ondragover",
493    /// The `ondragstart` attribute specifies the event handler for the dragstart event.
494    ondragstart "ondragstart",
495    /// The `ondrop` attribute specifies the event handler for the drop event.
496    ondrop "ondrop",
497    /// The `ondurationchange` attribute specifies the event handler for the durationchange event.
498    ondurationchange "ondurationchange",
499    /// The `onemptied` attribute specifies the event handler for the emptied event.
500    onemptied "onemptied",
501    /// The `onended` attribute specifies the event handler for the ended event.
502    onended "onended",
503    /// The `onerror` attribute specifies the event handler for the error event.
504    onerror "onerror",
505    /// The `onfocus` attribute specifies the event handler for the focus event.
506    onfocus "onfocus",
507    /// The `onformdata` attribute specifies the event handler for the formdata event.
508    onformdata "onformdata",
509    /// The `oninput` attribute specifies the event handler for the input event.
510    oninput "oninput",
511    /// The `oninvalid` attribute specifies the event handler for the invalid event.
512    oninvalid "oninvalid",
513    /// The `onkeydown` attribute specifies the event handler for the keydown event.
514    onkeydown "onkeydown",
515    /// The `onkeypress` attribute specifies the event handler for the keypress event.
516    onkeypress "onkeypress",
517    /// The `onkeyup` attribute specifies the event handler for the keyup event.
518    onkeyup "onkeyup",
519    /// The `onlanguagechange` attribute specifies the event handler for the languagechange event.
520    onlanguagechange "onlanguagechange",
521    /// The `onload` attribute specifies the event handler for the load event.
522    onload "onload",
523    /// The `onloadeddata` attribute specifies the event handler for the loadeddata event.
524    onloadeddata "onloadeddata",
525    /// The `onloadedmetadata` attribute specifies the event handler for the loadedmetadata event.
526    onloadedmetadata "onloadedmetadata",
527    /// The `onloadstart` attribute specifies the event handler for the loadstart event.
528    onloadstart "onloadstart",
529    /// The `onmousedown` attribute specifies the event handler for the mousedown event.
530    onmousedown "onmousedown",
531    /// The `onmouseenter` attribute specifies the event handler for the mouseenter event.
532    onmouseenter "onmouseenter",
533    /// The `onmouseleave` attribute specifies the event handler for the mouseleave event.
534    onmouseleave "onmouseleave",
535    /// The `onmousemove` attribute specifies the event handler for the mousemove event.
536    onmousemove "onmousemove",
537    /// The `onmouseout` attribute specifies the event handler for the mouseout event.
538    onmouseout "onmouseout",
539    /// The `onmouseover` attribute specifies the event handler for the mouseover event.
540    onmouseover "onmouseover",
541    /// The `onmouseup` attribute specifies the event handler for the mouseup event.
542    onmouseup "onmouseup",
543    /// The `onpause` attribute specifies the event handler for the pause event.
544    onpause "onpause",
545    /// The `onplay` attribute specifies the event handler for the play event.
546    onplay "onplay",
547    /// The `onplaying` attribute specifies the event handler for the playing event.
548    onplaying "onplaying",
549    /// The `onprogress` attribute specifies the event handler for the progress event.
550    onprogress "onprogress",
551    /// The `onratechange` attribute specifies the event handler for the ratechange event.
552    onratechange "onratechange",
553    /// The `onreset` attribute specifies the event handler for the reset event.
554    onreset "onreset",
555    /// The `onresize` attribute specifies the event handler for the resize event.
556    onresize "onresize",
557    /// The `onscroll` attribute specifies the event handler for the scroll event.
558    onscroll "onscroll",
559    /// The `onsecuritypolicyviolation` attribute specifies the event handler for the securitypolicyviolation event.
560    onsecuritypolicyviolation "onsecuritypolicyviolation",
561    /// The `onseeked` attribute specifies the event handler for the seeked event.
562    onseeked "onseeked",
563    /// The `onseeking` attribute specifies the event handler for the seeking event.
564    onseeking "onseeking",
565    /// The `onselect` attribute specifies the event handler for the select event.
566    onselect "onselect",
567    /// The `onslotchange` attribute specifies the event handler for the slotchange event.
568    onslotchange "onslotchange",
569    /// The `onstalled` attribute specifies the event handler for the stalled event.
570    onstalled "onstalled",
571    /// The `onsubmit` attribute specifies the event handler for the submit event.
572    onsubmit "onsubmit",
573    /// The `onsuspend` attribute specifies the event handler for the suspend event.
574    onsuspend "onsuspend",
575    /// The `ontimeupdate` attribute specifies the event handler for the timeupdate event.
576    ontimeupdate "ontimeupdate",
577    /// The `ontoggle` attribute specifies the event handler for the toggle event.
578    ontoggle "ontoggle",
579    /// The `onvolumechange` attribute specifies the event handler for the volumechange event.
580    onvolumechange "onvolumechange",
581    /// The `onwaiting` attribute specifies the event handler for the waiting event.
582    onwaiting "onwaiting",
583    /// The `onwebkitanimationend` attribute specifies the event handler for the webkitanimationend event.
584    onwebkitanimationend "onwebkitanimationend",
585    /// The `onwebkitanimationiteration` attribute specifies the event handler for the webkitanimationiteration event.
586    onwebkitanimationiteration "onwebkitanimationiteration",
587    /// The `onwebkitanimationstart` attribute specifies the event handler for the webkitanimationstart event.
588    onwebkitanimationstart "onwebkitanimationstart",
589    /// The `onwebkittransitionend` attribute specifies the event handler for the webkittransitionend event.
590    onwebkittransitionend "onwebkittransitionend",
591    /// The `onwheel` attribute specifies the event handler for the wheel event.
592    onwheel "onwheel",
593
594    // MathML attributes
595    /// The `accent` attribute specifies whether the element should be treated as an accent.
596    accent "accent",
597    /// The `accentunder` attribute specifies whether the element should be treated as an accent under the base element.
598    accentunder "accentunder",
599    /// The `columnalign` attribute specifies the alignment of columns.
600    columnalign "columnalign",
601    /// The `columnlines` attribute specifies the presence of lines between columns.
602    columnlines "columnlines",
603    /// The `columnspacing` attribute specifies the spacing between columns.
604    columnspacing "columnspacing",
605    /// The `columnspan` attribute specifies the number of columns the element should span.
606    columnspan "columnspan",
607    /// The `depth` attribute specifies the depth of the element.
608    depth "depth",
609    /// The `display` attribute specifies the display style of the element.
610    display "display",
611    /// The `displaystyle` attribute specifies whether the element is displayed in display style.
612    displaystyle "displaystyle",
613    /// The `fence` attribute specifies whether the element should act as a fence.
614    fence "fence",
615    /// The `frame` attribute specifies the type of frame for the element.
616    frame "frame",
617    /// The `framespacing` attribute specifies the spacing around frames.
618    framespacing "framespacing",
619    /// The `linethickness` attribute specifies the thickness of lines.
620    linethickness "linethickness",
621    /// The `lspace` attribute specifies the space on the left side of the element.
622    lspace "lspace",
623    /// The `mathbackground` attribute specifies the background color of the element.
624    mathbackground "mathbackground",
625    /// The `mathcolor` attribute specifies the color of the element.
626    mathcolor "mathcolor",
627    /// The `mathsize` attribute specifies the size of the element.
628    mathsize "mathsize",
629    /// The `mathvariant` attribute specifies the mathematical variant of the element.
630    mathvariant "mathvariant",
631    /// The `maxsize` attribute specifies the maximum size of the element.
632    maxsize "maxsize",
633    /// The `minsize` attribute specifies the minimum size of the element.
634    minsize "minsize",
635    /// The `movablelimits` attribute specifies whether the limits of the element are movable.
636    movablelimits "movablelimits",
637    /// The `notation` attribute specifies the type of notation for the element.
638    notation "notation",
639    /// The `rowalign` attribute specifies the alignment of rows.
640    rowalign "rowalign",
641    /// The `rowlines` attribute specifies the presence of lines between rows.
642    rowlines "rowlines",
643    /// The `rowspacing` attribute specifies the spacing between rows.
644    rowspacing "rowspacing",
645    /// The `rspace` attribute specifies the space on the right side of the element.
646    rspace "rspace",
647    /// The `scriptlevel` attribute specifies the script level of the element.
648    scriptlevel "scriptlevel",
649    /// The `separator` attribute specifies whether the element is a separator.
650    separator "separator",
651    /// The `stretchy` attribute specifies whether the element is stretchy.
652    stretchy "stretchy",
653    /// The `symmetric` attribute specifies whether the element is symmetric.
654    symmetric "symmetric",
655    /// The `voffset` attribute specifies the vertical offset of the element.
656    voffset "voffset",
657    /// The `xmlns` attribute specifies the XML namespace of the element.
658    xmlns "xmlns",
659}