Files
dioxus/packages/html/src/elements.rs
T

1638 lines
47 KiB
Rust

#![allow(non_upper_case_globals)]
#[cfg(feature = "hot-reload-context")]
use crate::{map_global_attributes, map_svg_attributes};
use crate::{GlobalAttributes, SvgAttributes};
#[cfg(feature = "hot-reload-context")]
use dioxus_rsx::HotReloadingContext;
pub type AttributeDiscription = (&'static str, Option<&'static str>, bool);
macro_rules! impl_attribute {
(
$(#[$attr_method:meta])*
$fil:ident: $vil:ident (DEFAULT),
) => {
pub const $fil: AttributeDiscription = (stringify!($fil), None, false);
};
(
$(#[$attr_method:meta])*
$fil:ident: $vil:ident ($name:literal),
) => {
pub const $fil: AttributeDiscription = ($name, None, false);
};
(
$(#[$attr_method:meta])*
$fil:ident: $vil:ident (volatile),
) => {
pub const $fil: AttributeDiscription = (stringify!($fil), None, true);
};
(
$(#[$attr_method:meta])*
$fil:ident: $vil:ident (in $ns:literal),
) => {
pub const $fil: AttributeDiscription = (stringify!($fil), Some($ns), false)
};
(
$(#[$attr_method:meta])*
$fil:ident: $vil:ident (in $ns:literal : volatile),
) => {
pub const $fil: AttributeDiscription = (stringify!($fil), Some($ns), true)
};
}
#[cfg(feature = "hot-reload-context")]
macro_rules! impl_attribute_match {
(
$attr:ident $fil:ident: $vil:ident (DEFAULT),
) => {
if $attr == stringify!($fil) {
return Some((stringify!($fil), None));
}
};
(
$attr:ident $fil:ident: $vil:ident (volatile),
) => {
if $attr == stringify!($fil) {
return Some((stringify!($fil), None));
}
};
(
$attr:ident $fil:ident: $vil:ident ($name:literal),
) => {
if $attr == stringify!($fil) {
return Some(($name, None));
}
};
(
$attr:ident $fil:ident: $vil:ident (in $ns:literal),
) => {
if $attr == stringify!($fil) {
return Some((stringify!(fil), Some(ns)));
}
};
}
macro_rules! impl_element {
(
$(#[$attr:meta])*
$name:ident None {
$(
$(#[$attr_method:meta])*
$fil:ident: $vil:ident $extra:tt,
)*
}
) => {
#[allow(non_camel_case_types)]
$(#[$attr])*
pub struct $name;
impl $name {
pub const TAG_NAME: &'static str = stringify!($name);
pub const NAME_SPACE: Option<&'static str> = None;
$(
impl_attribute!(
$(#[$attr_method])*
$fil: $vil ($extra),
);
)*
}
impl GlobalAttributes for $name {}
};
(
$(#[$attr:meta])*
$name:ident $namespace:literal {
$(
$(#[$attr_method:meta])*
$fil:ident: $vil:ident $extra:tt,
)*
}
) => {
#[allow(non_camel_case_types)]
$(#[$attr])*
pub struct $name;
impl SvgAttributes for $name {}
impl $name {
pub const TAG_NAME: &'static str = stringify!($name);
pub const NAME_SPACE: Option<&'static str> = Some($namespace);
$(
impl_attribute!(
$(#[$attr_method])*
$fil: $vil ($extra),
);
)*
}
};
(
$(#[$attr:meta])*
$element:ident [$name:literal, $namespace:tt] {
$(
$(#[$attr_method:meta])*
$fil:ident: $vil:ident $extra:tt,
)*
}
) => {
#[allow(non_camel_case_types)]
$(#[$attr])*
pub struct $element;
impl SvgAttributes for $element {}
impl $element {
pub const TAG_NAME: &'static str = $name;
pub const NAME_SPACE: Option<&'static str> = Some($namespace);
$(
impl_attribute!(
$(#[$attr_method])*
$fil: $vil ($extra),
);
)*
}
}
}
#[cfg(feature = "hot-reload-context")]
macro_rules! impl_element_match {
(
$el:ident $name:ident None {
$(
$fil:ident: $vil:ident $extra:tt,
)*
}
) => {
if $el == stringify!($name) {
return Some((stringify!($name), None));
}
};
(
$el:ident $name:ident $namespace:tt {
$(
$fil:ident: $vil:ident $extra:tt,
)*
}
) => {
if $el == stringify!($name) {
return Some((stringify!($name), Some(stringify!($namespace))));
}
};
}
#[cfg(feature = "hot-reload-context")]
macro_rules! impl_element_match_attributes {
(
$el:ident $attr:ident $name:ident None {
$(
$fil:ident: $vil:ident $extra:tt,
)*
}
) => {
if $el == stringify!($name) {
$(
impl_attribute_match!(
$attr $fil: $vil ($extra),
);
)*
}
};
(
$el:ident $attr:ident $name:ident $namespace:tt {
$(
$fil:ident: $vil:ident $extra:tt,
)*
}
) => {
if $el == stringify!($name) {
$(
impl_attribute_match!(
$attr $fil: $vil ($extra),
);
)*
}
}
}
macro_rules! builder_constructors {
(
$(
$(#[$attr:meta])*
$name:ident $namespace:tt {
$(
$(#[$attr_method:meta])*
$fil:ident: $vil:ident $extra:tt,
)*
};
)*
) => {
#[cfg(feature = "hot-reload-context")]
pub struct HtmlCtx;
#[cfg(feature = "hot-reload-context")]
impl HotReloadingContext for HtmlCtx {
fn map_attribute(element: &str, attribute: &str) -> Option<(&'static str, Option<&'static str>)> {
$(
impl_element_match_attributes!(
element attribute $name $namespace {
$(
$fil: $vil $extra,
)*
}
);
)*
map_global_attributes(attribute).or_else(|| map_svg_attributes(attribute))
}
fn map_element(element: &str) -> Option<(&'static str, Option<&'static str>)> {
$(
impl_element_match!(
element $name $namespace {
$(
$fil: $vil $extra,
)*
}
);
)*
None
}
}
$(
impl_element!(
$(#[$attr])*
$name $namespace {
$(
$(#[$attr_method])*
$fil: $vil $extra,
)*
}
);
)*
};
}
// Organized in the same order as
// https://developer.mozilla.org/en-US/docs/Web/HTML/Element
//
// Does not include obsolete elements.
//
// This namespace represents a collection of modern HTML-5 compatiable elements.
//
// This list does not include obsolete, deprecated, experimental, or poorly supported elements.
builder_constructors! {
// Document metadata
/// Build a
/// [`<base>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/base)
/// element.
///
base None {
href: Uri DEFAULT,
target: Target DEFAULT,
};
/// Build a
/// [`<head>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/head)
/// element.
head None {};
/// Build a
/// [`<link>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/link)
/// element.
link None {
// as: Mime,
crossorigin: CrossOrigin DEFAULT,
href: Uri DEFAULT,
hreflang: LanguageTag DEFAULT,
media: String DEFAULT, // FIXME media query
rel: LinkType DEFAULT,
sizes: String DEFAULT, // FIXME
title: String DEFAULT, // FIXME
r#type: Mime "type",
integrity: String DEFAULT,
};
/// Build a
/// [`<meta>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/meta)
/// element.
meta None {
charset: String DEFAULT, // FIXME IANA standard names
content: String DEFAULT,
http_equiv: String "http-equiv",
name: Metadata DEFAULT,
};
/// Build a
/// [`<style>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/style)
/// element.
style None {
r#type: Mime "type",
media: String DEFAULT, // FIXME media query
nonce: Nonce DEFAULT,
title: String DEFAULT, // FIXME
};
/// Build a
/// [`<title>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/title)
/// element.
title None { };
// Sectioning root
/// Build a
/// [`<body>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/body)
/// element.
body None {};
// ------------------
// Content sectioning
// ------------------
/// Build a
/// [`<address>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/address)
/// element.
address None {};
/// Build a
/// [`<article>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/article)
/// element.
article None {};
/// Build a
/// [`<aside>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/aside)
/// element.
aside None {};
/// Build a
/// [`<footer>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/footer)
/// element.
footer None {};
/// Build a
/// [`<header>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/header)
/// element.
header None {};
/// Build a
/// [`<hgroup>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/hgroup)
/// element.
hgroup None {};
/// Build a
/// [`<h1>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/h1)
/// element.
///
/// # About
/// - The HTML `<h1>` element is found within the `<body>` tag.
/// - Headings can range from `<h1>` to `<h6>`.
/// - The most important heading is `<h1>` and the least important heading is `<h6>`.
/// - The `<h1>` heading is the first heading in the document.
/// - The `<h1>` heading is usually a large bolded font.
///
/// # Usage
///
/// ```rust, ignore
/// html!(<h1> A header element </h1>)
/// rsx!(h1 { "A header element" })
/// LazyNodes::new(|f| f.el(h1).children([f.text("A header element")]).finish())
/// ```
h1 None {};
/// Build a
/// [`<h2>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/h2)
/// element.
///
/// # About
/// - The HTML `<h2>` element is found within the `<body>` tag.
/// - Headings can range from `<h1>` to `<h6>`.
/// - The most important heading is `<h1>` and the least important heading is `<h6>`.
/// - The `<h2>` heading is the second heading in the document.
/// - The `<h2>` heading is usually a large bolded font.
///
/// # Usage
/// ```rust, ignore
/// html!(<h2> A header element </h2>)
/// rsx!(h2 { "A header element" })
/// LazyNodes::new(|f| f.el(h2).children([f.text("A header element")]).finish())
/// ```
h2 None {};
/// Build a
/// [`<h3>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/h3)
/// element.
///
/// # About
/// - The HTML <h1> element is found within the <body> tag.
/// - Headings can range from <h1> to <h6>.
/// - The most important heading is <h1> and the least important heading is <h6>.
/// - The <h1> heading is the first heading in the document.
/// - The <h1> heading is usually a large bolded font.
h3 None {};
/// Build a
/// [`<h4>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/h4)
/// element.
h4 None {};
/// Build a
/// [`<h5>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/h5)
/// element.
h5 None {};
/// Build a
/// [`<h6>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/h6)
/// element.
h6 None {};
/// Build a
/// [`<main>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/main)
/// element.
main None {};
/// Build a
/// [`<nav>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/nav)
/// element.
nav None {};
/// Build a
/// [`<section>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/section)
/// element.
section None {};
// Text content
/// Build a
/// [`<blockquote>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/blockquote)
/// element.
blockquote None {
cite: Uri DEFAULT,
};
/// Build a
/// [`<dd>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/dd)
/// element.
dd None {};
/// Build a
/// [`<div>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/div)
/// element.
///
/// Part of the HTML namespace. Only works in HTML-compatible renderers
///
/// ## Definition and Usage
/// - The <div> tag defines a division or a section in an HTML document.
/// - The <div> tag is used as a container for HTML elements - which is then styled with CSS or manipulated with JavaScript.
/// - The <div> tag is easily styled by using the class or id attribute.
/// - Any sort of content can be put inside the <div> tag!
///
/// Note: By default, browsers always place a line break before and after the <div> element.
///
/// ## Usage
/// ```rust, ignore
/// html!(<div> A header element </div>)
/// rsx!(div { "A header element" })
/// LazyNodes::new(|f| f.element(div, &[], &[], &[], None))
/// ```
///
/// ## References:
/// - <https://developer.mozilla.org/en-US/docs/Web/HTML/Element/div>
/// - <https://www.w3schools.com/tags/tag_div.asp>
div None {};
/// Build a
/// [`<dl>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/dl)
/// element.
dl None {};
/// Build a
/// [`<dt>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/dt)
/// element.
dt None {};
/// Build a
/// [`<figcaption>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/figcaption)
/// element.
figcaption None {};
/// Build a
/// [`<figure>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/figure)
/// element.
figure None {};
/// Build a
/// [`<hr>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/hr)
/// element.
hr None {};
/// Build a
/// [`<li>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/li)
/// element.
li None {
value: isize DEFAULT,
};
/// Build a
/// [`<ol>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/ol)
/// element.
ol None {
reversed: Bool DEFAULT,
start: isize DEFAULT,
r#type: OrderedListType "type",
};
/// Build a
/// [`<p>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/p)
/// element.
p None {};
/// Build a
/// [`<pre>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/pre)
/// element.
pre None {};
/// Build a
/// [`<ul>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/ul)
/// element.
ul None {};
// Inline text semantics
/// Build a
/// [`<a>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/a)
/// element.
a None {
download: String DEFAULT,
href: Uri DEFAULT,
hreflang: LanguageTag DEFAULT,
target: Target DEFAULT,
r#type: Mime "type",
// ping: SpacedList<Uri>,
// rel: SpacedList<LinkType>,
ping: SpacedList DEFAULT,
rel: SpacedList DEFAULT,
};
/// Build a
/// [`<abbr>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/abbr)
/// element.
abbr None {};
/// Build a
/// [`<b>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/b)
/// element.
b None {};
/// Build a
/// [`<bdi>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/bdi)
/// element.
bdi None {};
/// Build a
/// [`<bdo>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/bdo)
/// element.
bdo None {};
/// Build a
/// [`<br>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/br)
/// element.
br None {};
/// Build a
/// [`<cite>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/cite)
/// element.
cite None {};
/// Build a
/// [`<code>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/code)
/// element.
code None {
language: String DEFAULT,
};
/// Build a
/// [`<data>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/data)
/// element.
data None {
value: String DEFAULT,
};
/// Build a
/// [`<dfn>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/dfn)
/// element.
dfn None {};
/// Build a
/// [`<em>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/em)
/// element.
em None {};
/// Build a
/// [`<i>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/i)
/// element.
i None {};
/// Build a
/// [`<kbd>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/kbd)
/// element.
kbd None {};
/// Build a
/// [`<mark>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/mark)
/// element.
mark None {};
/// Build a
/// [`<menu>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/menu)
/// element.
menu None {};
/// Build a
/// [`<q>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/q)
/// element.
q None {
cite: Uri DEFAULT,
};
/// Build a
/// [`<rp>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/rp)
/// element.
rp None {};
/// Build a
/// [`<rt>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/rt)
/// element.
rt None {};
/// Build a
/// [`<ruby>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/ruby)
/// element.
ruby None {};
/// Build a
/// [`<s>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/s)
/// element.
s None {};
/// Build a
/// [`<samp>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/samp)
/// element.
samp None {};
/// Build a
/// [`<small>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/small)
/// element.
small None {};
/// Build a
/// [`<span>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/span)
/// element.
span None {};
/// Build a
/// [`<strong>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/strong)
/// element.
strong None {};
/// Build a
/// [`<sub>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/sub)
/// element.
sub None {};
/// Build a
/// [`<sup>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/sup)
/// element.
sup None {};
/// Build a
/// [`<time>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/time)
/// element.
time None {
datetime: Datetime DEFAULT,
};
/// Build a
/// [`<u>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/u)
/// element.
u None {};
/// Build a
/// [`<var>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/var)
/// element.
var None {};
/// Build a
/// [`<wbr>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/wbr)
/// element.
wbr None {};
// Image and multimedia
/// Build a
/// [`<area>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/area)
/// element.
area None {
alt: String DEFAULT,
coords: String DEFAULT, // TODO could perhaps be validated
download: Bool DEFAULT,
href: Uri DEFAULT,
hreflang: LanguageTag DEFAULT,
shape: AreaShape DEFAULT,
target: Target DEFAULT,
// ping: SpacedList<Uri>,
// rel: SpacedSet<LinkType>,
};
/// Build a
/// [`<audio>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/audio)
/// element.
audio None {
autoplay: Bool DEFAULT,
controls: Bool DEFAULT,
crossorigin: CrossOrigin DEFAULT,
muted: Bool DEFAULT,
preload: Preload DEFAULT,
src: Uri DEFAULT,
r#loop: Bool "loop",
};
/// Build a
/// [`<img>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/img)
/// element.
img None {
alt: String DEFAULT,
crossorigin: CrossOrigin DEFAULT,
decoding: ImageDecoding DEFAULT,
height: usize DEFAULT,
ismap: Bool DEFAULT,
src: Uri DEFAULT,
srcset: String DEFAULT, // FIXME this is much more complicated
usemap: String DEFAULT, // FIXME should be a fragment starting with '#'
width: usize DEFAULT,
referrerpolicy: String DEFAULT,
// sizes: SpacedList<String>, // FIXME it's not really just a string
};
/// Build a
/// [`<map>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/map)
/// element.
map None {
name: Id DEFAULT,
};
/// Build a
/// [`<track>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/track)
/// element.
track None {
default: Bool DEFAULT,
kind: VideoKind DEFAULT,
label: String DEFAULT,
src: Uri DEFAULT,
srclang: LanguageTag DEFAULT,
};
/// Build a
/// [`<video>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/video)
/// element.
video None {
autoplay: Bool DEFAULT,
controls: Bool DEFAULT,
crossorigin: CrossOrigin DEFAULT,
height: usize DEFAULT,
r#loop: Bool "loop",
muted: Bool DEFAULT,
preload: Preload DEFAULT,
playsinline: Bool DEFAULT,
poster: Uri DEFAULT,
src: Uri DEFAULT,
width: usize DEFAULT,
};
// Embedded content
/// Build a
/// [`<embed>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/embed)
/// element.
embed None {
height: usize DEFAULT,
src: Uri DEFAULT,
r#type: Mime "type",
width: usize DEFAULT,
};
/// Build a
/// [`<iframe>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/iframe)
/// element.
iframe None {
allow: FeaturePolicy DEFAULT,
allowfullscreen: Bool DEFAULT,
allowpaymentrequest: Bool DEFAULT,
height: usize DEFAULT,
name: Id DEFAULT,
referrerpolicy: ReferrerPolicy DEFAULT,
src: Uri DEFAULT,
srcdoc: Uri DEFAULT,
width: usize DEFAULT,
margin_width: String "marginWidth",
align: String DEFAULT,
longdesc: String DEFAULT,
scrolling: String DEFAULT,
margin_height: String "marginHeight",
frame_border: String "frameBorder",
// sandbox: SpacedSet<Sandbox>,
};
/// Build a
/// [`<object>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/object)
/// element.
object None {
data: Uri DEFAULT,
form: Id DEFAULT,
height: usize DEFAULT,
name: Id DEFAULT,
r#type: Mime "type",
typemustmatch: Bool DEFAULT,
usemap: String DEFAULT, // TODO should be a fragment starting with '#'
width: usize DEFAULT,
};
/// Build a
/// [`<param>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/param)
/// element.
param None {
name: String DEFAULT,
value: String DEFAULT,
};
/// Build a
/// [`<picture>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/picture)
/// element.
picture None {};
/// Build a
/// [`<source>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/source)
/// element.
source None {
src: Uri DEFAULT,
r#type: Mime "type",
};
// Scripting
/// Build a
/// [`<canvas>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/canvas)
/// element.
canvas None {
height: usize DEFAULT,
width: usize DEFAULT,
};
/// Build a
/// [`<noscript>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/noscript)
/// element.
noscript None {};
/// Build a
/// [`<script>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/script)
/// element.
///
/// The [`script`] HTML element is used to embed executable code or data; this is typically used to embed or refer to
/// JavaScript code. The [`script`] element can also be used with other languages, such as WebGL's GLSL shader
/// programming language and JSON.
script None {
/// Normal script elements pass minimal information to the window.onerror for scripts which do not pass the
/// standard CORS checks. To allow error logging for sites which use a separate domain for static media, use
/// this attribute. See CORS settings attributes for a more descriptive explanation of its valid arguments.
crossorigin: CrossOrigin DEFAULT,
/// This Boolean attribute is set to indicate to a browser that the script is meant to be executed after the
/// document has been parsed, but before firing DOMContentLoaded.
///
/// Scripts with the defer attribute will prevent the DOMContentLoaded event from firing until the script has
/// loaded and finished evaluating.
///
/// ----
/// ### Warning:
///
/// This attribute must not be used if the src attribute is absent (i.e. for inline scripts), in this
/// case it would have no effect.
///
/// ----
///
/// The defer attribute has no effect on module scripts — they defer by default.
/// Scripts with the defer attribute will execute in the order in which they appear in the document.
///
/// This attribute allows the elimination of parser-blocking JavaScript where the browser would have to load and
/// evaluate scripts before continuing to parse. async has a similar effect in this case.
defer: Bool DEFAULT,
integrity: Integrity DEFAULT,
nomodule: Bool DEFAULT,
nonce: Nonce DEFAULT,
src: Uri DEFAULT,
text: String DEFAULT,
// r#async: Bool,
// r#type: String, // TODO could be an enum
r#type: String "type",
r#script: String "script",
};
// Demarcating edits
/// Build a
/// [`<del>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/del)
/// element.
del None {
cite: Uri DEFAULT,
datetime: Datetime DEFAULT,
};
/// Build a
/// [`<ins>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/ins)
/// element.
ins None {
cite: Uri DEFAULT,
datetime: Datetime DEFAULT,
};
// Table content
/// Build a
/// [`<caption>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/caption)
/// element.
caption None {};
/// Build a
/// [`<col>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/col)
/// element.
col None {
span: usize DEFAULT,
};
/// Build a
/// [`<colgroup>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/colgroup)
/// element.
colgroup None {
span: usize DEFAULT,
};
/// Build a
/// [`<table>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/table)
/// element.
table None {};
/// Build a
/// [`<tbody>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/tbody)
/// element.
tbody None {};
/// Build a
/// [`<td>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/td)
/// element.
td None {
colspan: usize DEFAULT,
rowspan: usize DEFAULT,
// headers: SpacedSet<Id>,
};
/// Build a
/// [`<tfoot>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/tfoot)
/// element.
tfoot None {};
/// Build a
/// [`<th>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/th)
/// element.
th None {
abbr: String DEFAULT,
colspan: usize DEFAULT,
rowspan: usize DEFAULT,
scope: TableHeaderScope DEFAULT,
// headers: SpacedSet<Id>,
};
/// Build a
/// [`<thead>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/thead)
/// element.
thead None {};
/// Build a
/// [`<tr>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/tr)
/// element.
tr None {};
// Forms
/// Build a
/// [`<button>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/button)
/// element.
button None {
autofocus: Bool DEFAULT,
disabled: Bool DEFAULT,
form: Id DEFAULT,
formaction: Uri DEFAULT,
formenctype: FormEncodingType DEFAULT,
formmethod: FormMethod DEFAULT,
formnovalidate: Bool DEFAULT,
formtarget: Target DEFAULT,
name: Id DEFAULT,
value: String DEFAULT,
r#type: String "type",
};
/// Build a
/// [`<datalist>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/datalist)
/// element.
datalist None {};
/// Build a
/// [`<fieldset>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/fieldset)
/// element.
fieldset None {};
/// Build a
/// [`<form>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/form)
/// element.
form None {
// accept-charset: SpacedList<CharacterEncoding>,
action: Uri DEFAULT,
autocomplete: OnOff DEFAULT,
enctype: FormEncodingType DEFAULT,
method: FormMethod DEFAULT,
name: Id DEFAULT,
novalidate: Bool DEFAULT,
target: Target DEFAULT,
};
/// Build a
/// [`<input>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/input)
/// element.
input None {
accept: String DEFAULT,
alt: String DEFAULT,
autocomplete: String DEFAULT,
autofocus: Bool DEFAULT,
capture: String DEFAULT,
checked: Bool DEFAULT,
directory: Bool "webkitdirectory",
disabled: Bool DEFAULT,
form: Id DEFAULT,
formaction: Uri DEFAULT,
formenctype: FormEncodingType DEFAULT,
formmethod: FormDialogMethod DEFAULT,
formnovalidate: Bool DEFAULT,
formtarget: Target DEFAULT,
height: isize DEFAULT,
list: Id DEFAULT,
max: String DEFAULT,
maxlength: usize DEFAULT,
min: String DEFAULT,
minlength: usize DEFAULT,
multiple: Bool DEFAULT,
name: Id DEFAULT,
pattern: String DEFAULT,
placeholder: String DEFAULT,
readonly: Bool DEFAULT,
required: Bool DEFAULT,
size: usize DEFAULT,
spellcheck: Bool DEFAULT,
src: Uri DEFAULT,
step: String DEFAULT,
tabindex: usize DEFAULT,
width: isize DEFAULT,
/// The type of input
///
/// Here are the different input types you can use in HTML:
///
/// - `button`
/// - `checkbox`
/// - `color`
/// - `date`
/// - `datetime-local`
/// - `email`
/// - `file`
/// - `hidden`
/// - `image`
/// - `month`
/// - `number`
/// - `password`
/// - `radio`
/// - `range`
/// - `reset`
/// - `search`
/// - `submit`
/// - `tel`
/// - `text`
/// - `time`
/// - `url`
/// - `week`
r#type: InputType "type",
// value: String,
value: String volatile,
initial_value: String DEFAULT,
};
/// Build a
/// [`<label>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/label)
/// element.
label None {
form: Id DEFAULT,
r#for: Id "for",
};
/// Build a
/// [`<legend>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/legend)
/// element.
legend None {};
/// Build a
/// [`<meter>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/meter)
/// element.
meter None {
value: isize DEFAULT,
min: isize DEFAULT,
max: isize DEFAULT,
low: isize DEFAULT,
high: isize DEFAULT,
optimum: isize DEFAULT,
form: Id DEFAULT,
};
/// Build a
/// [`<optgroup>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/optgroup)
/// element.
optgroup None {
disabled: Bool DEFAULT,
label: String DEFAULT,
};
/// Build a
/// [`<option>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/option)
/// element.
option None {
disabled: Bool DEFAULT,
label: String DEFAULT,
value: String DEFAULT,
selected: Bool volatile,
};
/// Build a
/// [`<output>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/output)
/// element.
output None {
form: Id DEFAULT,
name: Id DEFAULT,
// r#for: SpacedSet<Id>,
};
/// Build a
/// [`<progress>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/progress)
/// element.
progress None {
max: f64 DEFAULT,
value: f64 DEFAULT,
};
/// Build a
/// [`<select>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/select)
/// element.
select None {
// defined below
// value: String,
autocomplete: String DEFAULT,
autofocus: Bool DEFAULT,
disabled: Bool DEFAULT,
form: Id DEFAULT,
multiple: Bool DEFAULT,
name: Id DEFAULT,
required: Bool DEFAULT,
size: usize DEFAULT,
value: String volatile,
};
/// Build a
/// [`<textarea>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/textarea)
/// element.
textarea None {
autocomplete: OnOff DEFAULT,
autofocus: Bool DEFAULT,
cols: usize DEFAULT,
disabled: Bool DEFAULT,
form: Id DEFAULT,
maxlength: usize DEFAULT,
minlength: usize DEFAULT,
name: Id DEFAULT,
placeholder: String DEFAULT,
readonly: Bool DEFAULT,
required: Bool DEFAULT,
rows: usize DEFAULT,
spellcheck: BoolOrDefault DEFAULT,
wrap: Wrap DEFAULT,
value: String volatile,
initial_value: String DEFAULT,
};
// Interactive elements
/// Build a
/// [`<details>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/details)
/// element.
details None {
open: Bool DEFAULT,
};
/// Build dialog
/// [`<dialog>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/dialog)
/// element.
dialog None {
open: Bool DEFAULT,
};
/// Build a
/// [`<summary>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/summary)
/// element.
summary None {};
// Web components
/// Build a
/// [`<slot>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/slot)
/// element.
slot None {};
/// Build a
/// [`<template>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/template)
/// element.
template None {};
// SVG components
/// Build a
/// [`<svg>`](https://developer.mozilla.org/en-US/docs/Web/SVG/Element/svg)
/// element.
svg "http://www.w3.org/2000/svg" { };
// /// Build a
// /// [`<a>`](https://developer.mozilla.org/en-US/docs/Web/SVG/Element/a)
// /// element.
// a "http://www.w3.org/2000/svg" {};
/// Build a
/// [`<animate>`](https://developer.mozilla.org/en-US/docs/Web/SVG/Element/animate)
/// element.
animate "http://www.w3.org/2000/svg" {};
/// Build a
/// [`<animateMotion>`](https://developer.mozilla.org/en-US/docs/Web/SVG/Element/animateMotion)
/// element.
animateMotion "http://www.w3.org/2000/svg" {};
/// Build a
/// [`<animateTransform>`](https://developer.mozilla.org/en-US/docs/Web/SVG/Element/animateTransform)
/// element.
animateTransform "http://www.w3.org/2000/svg" {};
/// Build a
/// [`<circle>`](https://developer.mozilla.org/en-US/docs/Web/SVG/Element/circle)
/// element.
circle "http://www.w3.org/2000/svg" {};
/// Build a
/// [`<clipPath>`](https://developer.mozilla.org/en-US/docs/Web/SVG/Element/clipPath)
/// element.
clipPath "http://www.w3.org/2000/svg" {};
/// Build a
/// [`<defs>`](https://developer.mozilla.org/en-US/docs/Web/SVG/Element/defs)
/// element.
defs "http://www.w3.org/2000/svg" {};
/// Build a
/// [`<desc>`](https://developer.mozilla.org/en-US/docs/Web/SVG/Element/desc)
/// element.
desc "http://www.w3.org/2000/svg" {};
/// Build a
/// [`<discard>`](https://developer.mozilla.org/en-US/docs/Web/SVG/Element/discard)
/// element.
discard "http://www.w3.org/2000/svg" {};
/// Build a
/// [`<ellipse>`](https://developer.mozilla.org/en-US/docs/Web/SVG/Element/ellipse)
/// element.
ellipse "http://www.w3.org/2000/svg" {};
/// Build a
/// [`<feBlend>`](https://developer.mozilla.org/en-US/docs/Web/SVG/Element/feBlend)
/// element.
feBlend "http://www.w3.org/2000/svg" {};
/// Build a
/// [`<feColorMatrix>`](https://developer.mozilla.org/en-US/docs/Web/SVG/Element/feColorMatrix)
/// element.
feColorMatrix "http://www.w3.org/2000/svg" {};
/// Build a
/// [`<feComponentTransfer>`](https://developer.mozilla.org/en-US/docs/Web/SVG/Element/feComponentTransfer)
/// element.
feComponentTransfer "http://www.w3.org/2000/svg" {};
/// Build a
/// [`<feComposite>`](https://developer.mozilla.org/en-US/docs/Web/SVG/Element/feComposite)
/// element.
feComposite "http://www.w3.org/2000/svg" {};
/// Build a
/// [`<feConvolveMatrix>`](https://developer.mozilla.org/en-US/docs/Web/SVG/Element/feConvolveMatrix)
/// element.
feConvolveMatrix "http://www.w3.org/2000/svg" {};
/// Build a
/// [`<feDiffuseLighting>`](https://developer.mozilla.org/en-US/docs/Web/SVG/Element/feDiffuseLighting)
/// element.
feDiffuseLighting "http://www.w3.org/2000/svg" {};
/// Build a
/// [`<feDisplacementMap>`](https://developer.mozilla.org/en-US/docs/Web/SVG/Element/feDisplacementMap)
/// element.
feDisplacementMap "http://www.w3.org/2000/svg" {};
/// Build a
/// [`<feDistantLight>`](https://developer.mozilla.org/en-US/docs/Web/SVG/Element/feDistantLight)
/// element.
feDistantLight "http://www.w3.org/2000/svg" {};
/// Build a
/// [`<feDropShadow>`](https://developer.mozilla.org/en-US/docs/Web/SVG/Element/feDropShadow)
/// element.
feDropShadow "http://www.w3.org/2000/svg" {};
/// Build a
/// [`<feFlood>`](https://developer.mozilla.org/en-US/docs/Web/SVG/Element/feFlood)
/// element.
feFlood "http://www.w3.org/2000/svg" {};
/// Build a
/// [`<feFuncA>`](https://developer.mozilla.org/en-US/docs/Web/SVG/Element/feFuncA)
/// element.
feFuncA "http://www.w3.org/2000/svg" {};
/// Build a
/// [`<feFuncB>`](https://developer.mozilla.org/en-US/docs/Web/SVG/Element/feFuncB)
/// element.
feFuncB "http://www.w3.org/2000/svg" {};
/// Build a
/// [`<feFuncG>`](https://developer.mozilla.org/en-US/docs/Web/SVG/Element/feFuncG)
/// element.
feFuncG "http://www.w3.org/2000/svg" {};
/// Build a
/// [`<feFuncR>`](https://developer.mozilla.org/en-US/docs/Web/SVG/Element/feFuncR)
/// element.
feFuncR "http://www.w3.org/2000/svg" {};
/// Build a
/// [`<feGaussianBlur>`](https://developer.mozilla.org/en-US/docs/Web/SVG/Element/feGaussianBlur)
/// element.
feGaussianBlur "http://www.w3.org/2000/svg" {};
/// Build a
/// [`<feImage>`](https://developer.mozilla.org/en-US/docs/Web/SVG/Element/feImage)
/// element.
feImage "http://www.w3.org/2000/svg" {};
/// Build a
/// [`<feMerge>`](https://developer.mozilla.org/en-US/docs/Web/SVG/Element/feMerge)
/// element.
feMerge "http://www.w3.org/2000/svg" {};
/// Build a
/// [`<feMergeNode>`](https://developer.mozilla.org/en-US/docs/Web/SVG/Element/feMergeNode)
/// element.
feMergeNode "http://www.w3.org/2000/svg" {};
/// Build a
/// [`<feMorphology>`](https://developer.mozilla.org/en-US/docs/Web/SVG/Element/feMorphology)
/// element.
feMorphology "http://www.w3.org/2000/svg" {};
/// Build a
/// [`<feOffset>`](https://developer.mozilla.org/en-US/docs/Web/SVG/Element/feOffset)
/// element.
feOffset "http://www.w3.org/2000/svg" {};
/// Build a
/// [`<fePointLight>`](https://developer.mozilla.org/en-US/docs/Web/SVG/Element/fePointLight)
/// element.
fePointLight "http://www.w3.org/2000/svg" {};
/// Build a
/// [`<feSpecularLighting>`](https://developer.mozilla.org/en-US/docs/Web/SVG/Element/feSpecularLighting)
/// element.
feSpecularLighting "http://www.w3.org/2000/svg" {};
/// Build a
/// [`<feSpotLight>`](https://developer.mozilla.org/en-US/docs/Web/SVG/Element/feSpotLight)
/// element.
feSpotLight "http://www.w3.org/2000/svg" {};
/// Build a
/// [`<feTile>`](https://developer.mozilla.org/en-US/docs/Web/SVG/Element/feTile)
/// element.
feTile "http://www.w3.org/2000/svg" {};
/// Build a
/// [`<feTurbulence>`](https://developer.mozilla.org/en-US/docs/Web/SVG/Element/feTurbulence)
/// element.
feTurbulence "http://www.w3.org/2000/svg" {};
/// Build a
/// [`<filter>`](https://developer.mozilla.org/en-US/docs/Web/SVG/Element/filter)
/// element.
filter "http://www.w3.org/2000/svg" {};
/// Build a
/// [`<foreignObject>`](https://developer.mozilla.org/en-US/docs/Web/SVG/Element/foreignObject)
/// element.
foreignObject "http://www.w3.org/2000/svg" {};
/// Build a
/// [`<g>`](https://developer.mozilla.org/en-US/docs/Web/SVG/Element/g)
/// element.
g "http://www.w3.org/2000/svg" {};
/// Build a
/// [`<hatch>`](https://developer.mozilla.org/en-US/docs/Web/SVG/Element/hatch)
/// element.
hatch "http://www.w3.org/2000/svg" {};
/// Build a
/// [`<hatchpath>`](https://developer.mozilla.org/en-US/docs/Web/SVG/Element/hatchpath)
/// element.
hatchpath "http://www.w3.org/2000/svg" {};
// /// Build a
// /// [`<image>`](https://developer.mozilla.org/en-US/docs/Web/SVG/Element/image)
// /// element.
// image "http://www.w3.org/2000/svg" {};
/// Build a
/// [`<line>`](https://developer.mozilla.org/en-US/docs/Web/SVG/Element/line)
/// element.
line "http://www.w3.org/2000/svg" {};
/// Build a
/// [`<linearGradient>`](https://developer.mozilla.org/en-US/docs/Web/SVG/Element/linearGradient)
/// element.
linearGradient "http://www.w3.org/2000/svg" {};
/// Build a
/// [`<marker>`](https://developer.mozilla.org/en-US/docs/Web/SVG/Element/marker)
/// element.
marker "http://www.w3.org/2000/svg" {};
/// Build a
/// [`<mask>`](https://developer.mozilla.org/en-US/docs/Web/SVG/Element/mask)
/// element.
mask "http://www.w3.org/2000/svg" {};
/// Build a
/// [`<metadata>`](https://developer.mozilla.org/en-US/docs/Web/SVG/Element/metadata)
/// element.
metadata "http://www.w3.org/2000/svg" {};
/// Build a
/// [`<mpath>`](https://developer.mozilla.org/en-US/docs/Web/SVG/Element/mpath)
/// element.
mpath "http://www.w3.org/2000/svg" {};
/// Build a
/// [`<path>`](https://developer.mozilla.org/en-US/docs/Web/SVG/Element/path)
/// element.
path "http://www.w3.org/2000/svg" {};
/// Build a
/// [`<pattern>`](https://developer.mozilla.org/en-US/docs/Web/SVG/Element/pattern)
/// element.
pattern "http://www.w3.org/2000/svg" {};
/// Build a
/// [`<polygon>`](https://developer.mozilla.org/en-US/docs/Web/SVG/Element/polygon)
/// element.
polygon "http://www.w3.org/2000/svg" {};
/// Build a
/// [`<polyline>`](https://developer.mozilla.org/en-US/docs/Web/SVG/Element/polyline)
/// element.
polyline "http://www.w3.org/2000/svg" {};
/// Build a
/// [`<radialGradient>`](https://developer.mozilla.org/en-US/docs/Web/SVG/Element/radialGradient)
/// element.
radialGradient "http://www.w3.org/2000/svg" {};
/// Build a
/// [`<rect>`](https://developer.mozilla.org/en-US/docs/Web/SVG/Element/rect)
/// element.
rect "http://www.w3.org/2000/svg" {};
// /// Build a
// /// [`<script>`](https://developer.mozilla.org/en-US/docs/Web/SVG/Element/script)
// /// element.
// script "http://www.w3.org/2000/svg" {};
/// Build a
/// [`<set>`](https://developer.mozilla.org/en-US/docs/Web/SVG/Element/set)
/// element.
set "http://www.w3.org/2000/svg" {};
/// Build a
/// [`<stop>`](https://developer.mozilla.org/en-US/docs/Web/SVG/Element/stop)
/// element.
stop "http://www.w3.org/2000/svg" {};
// /// Build a
// /// [`<style>`](https://developer.mozilla.org/en-US/docs/Web/SVG/Element/style)
// /// element.
// style "http://www.w3.org/2000/svg" {};
// /// Build a
// /// [`<svg>`](https://developer.mozilla.org/en-US/docs/Web/SVG/Element/svg)
// /// element.
// svg "http://www.w3.org/2000/svg" {};
/// Build a
/// [`<switch>`](https://developer.mozilla.org/en-US/docs/Web/SVG/Element/switch)
/// element.
switch "http://www.w3.org/2000/svg" {};
/// Build a
/// [`<symbol>`](https://developer.mozilla.org/en-US/docs/Web/SVG/Element/symbol)
/// element.
symbol "http://www.w3.org/2000/svg" {};
/// Build a
/// [`<text>`](https://developer.mozilla.org/en-US/docs/Web/SVG/Element/text)
/// element.
text "http://www.w3.org/2000/svg" {};
/// Build a
/// [`<textPath>`](https://developer.mozilla.org/en-US/docs/Web/SVG/Element/textPath)
/// element.
textPath "http://www.w3.org/2000/svg" {};
// /// Build a
// /// [`<title>`](https://developer.mozilla.org/en-US/docs/Web/SVG/Element/title)
// /// element.
// title "http://www.w3.org/2000/svg" {};
/// Build a
/// [`<tspan>`](https://developer.mozilla.org/en-US/docs/Web/SVG/Element/tspan)
/// element.
tspan "http://www.w3.org/2000/svg" {};
/// Build a
/// [`<view>`](https://developer.mozilla.org/en-US/docs/Web/SVG/Element/view)
/// element.
view "http://www.w3.org/2000/svg" {};
// /// Build a
// /// [`<use>`](https://developer.mozilla.org/en-US/docs/Web/SVG/Element/use)
// /// element.
r#use ["use", "http://www.w3.org/2000/svg"] {
href: String DEFAULT,
};
}