diff options
Diffstat (limited to 'lib/src/lustre/element/html.gleam')
-rw-r--r-- | lib/src/lustre/element/html.gleam | 1197 |
1 files changed, 1197 insertions, 0 deletions
diff --git a/lib/src/lustre/element/html.gleam b/lib/src/lustre/element/html.gleam new file mode 100644 index 0000000..9eb4f5e --- /dev/null +++ b/lib/src/lustre/element/html.gleam @@ -0,0 +1,1197 @@ +// IMPORTS --------------------------------------------------------------------- + +import lustre/element.{Element, element, namespaced, text} +import lustre/attribute.{Attribute} + +// The doc comments (and order) for functions in this module are taken from the +// MDN Element reference: +// +// https://developer.mozilla.org/en-US/docs/Web/HTML/Element +// + +// HTML ELEMENTS: MAIN ROOT ---------------------------------------------------- + +/// Represents the root (top-level element) of an HTML document, so it is also +/// referred to as the root element. All other elements must be descendants of +/// this element. +/// +pub fn html( + attrs: List(Attribute(msg)), + children: List(Element(msg)), +) -> Element(msg) { + element("html", attrs, children) +} + +// HTML ELEMENTS: DOCUMENT METADATA -------------------------------------------- + +/// Specifies the base URL to use for all relative URLs in a document. There can +/// be only one such element in a document. +/// +pub fn base(attrs: List(Attribute(msg))) -> Element(msg) { + element("base", attrs, []) +} + +/// Contains machine-readable information (metadata) about the document, like its +/// title, scripts, and style sheets. +/// +pub fn head(attrs: List(Attribute(msg))) -> Element(msg) { + element("head", attrs, []) +} + +/// Specifies relationships between the current document and an external resource. +/// This element is most commonly used to link to CSS but is also used to establish +/// site icons (both "favicon" style icons and icons for the home screen and apps +/// on mobile devices) among other things. +/// +pub fn link(attrs: List(Attribute(msg))) -> Element(msg) { + element("link", attrs, []) +} + +/// Represents metadata that cannot be represented by other HTML meta-related +/// elements, like <base>, <link>, <script>, <style> and <title>. +/// +pub fn meta(attrs: List(Attribute(msg))) -> Element(msg) { + element("meta", attrs, []) +} + +/// Contains style information for a document or part of a document. It contains +/// CSS, which is applied to the contents of the document containing this element. +/// +pub fn style(attrs: List(Attribute(msg)), css: String) -> Element(msg) { + element("style", attrs, [text(css)]) +} + +/// Defines the document's title that is shown in a browser's title bar or a +/// page's tab. It only contains text; tags within the element are ignored. +/// +pub fn title(attrs: List(Attribute(msg)), content: String) -> Element(msg) { + element("title", attrs, [text(content)]) +} + +// HTML ELEMENTS: SECTIONING ROOT ----------------------------------------------- + +/// Represents the content of an HTML document. There can be only one such element +/// in a document. +/// +pub fn body( + attrs: List(Attribute(msg)), + children: List(Element(msg)), +) -> Element(msg) { + element("body", attrs, children) +} + +// HTML ELEMENTS: CONTENT SECTIONING ------------------------------------------- + +/// Indicates that the enclosed HTML provides contact information for a person or +/// people, or for an organization. +/// +pub fn address( + attrs: List(Attribute(msg)), + children: List(Element(msg)), +) -> Element(msg) { + element("address", attrs, children) +} + +/// Represents a self-contained composition in a document, page, application, or +/// site, which is intended to be independently distributable or reusable (e.g., +/// in syndication). Examples include a forum post, a magazine or newspaper article, +/// a blog entry, a product card, a user-submitted comment, an interactive widget +/// or gadget, or any other independent item of content. +/// +pub fn article( + attrs: List(Attribute(msg)), + children: List(Element(msg)), +) -> Element(msg) { + element("article", attrs, children) +} + +/// Represents a portion of a document whose content is only indirectly related +/// to the document's main content. Asides are frequently presented as sidebars +/// or call-out boxes. +/// +pub fn aside( + attrs: List(Attribute(msg)), + children: List(Element(msg)), +) -> Element(msg) { + element("aside", attrs, children) +} + +/// Represents a footer for its nearest ancestor sectioning content or sectioning +/// root element. A <footer> typically contains information about the author of +/// the section, copyright data, or links to related documents. +/// +pub fn footer( + attrs: List(Attribute(msg)), + children: List(Element(msg)), +) -> Element(msg) { + element("footer", attrs, children) +} + +/// Represents introductory content, typically a group of introductory or navigational +/// aids. It may contain some heading elements but also a logo, a search form, an +/// author name, and other elements. +/// +pub fn header( + attrs: List(Attribute(msg)), + children: List(Element(msg)), +) -> Element(msg) { + element("header", attrs, children) +} + +/// Represent six levels of section headings. <h1> is the highest section level +/// and <h6> is the lowest. +/// +pub fn h1( + attrs: List(Attribute(msg)), + children: List(Element(msg)), +) -> Element(msg) { + element("h1", attrs, children) +} + +/// Represent six levels of section headings. <h1> is the highest section level +/// and <h6> is the lowest. +/// +pub fn h2( + attrs: List(Attribute(msg)), + children: List(Element(msg)), +) -> Element(msg) { + element("h2", attrs, children) +} + +/// Represent six levels of section headings. <h1> is the highest section level +/// and <h6> is the lowest. +/// +pub fn h3( + attrs: List(Attribute(msg)), + children: List(Element(msg)), +) -> Element(msg) { + element("h3", attrs, children) +} + +/// Represent six levels of section headings. <h1> is the highest section level +/// and <h6> is the lowest. +/// +pub fn h4( + attrs: List(Attribute(msg)), + children: List(Element(msg)), +) -> Element(msg) { + element("h4", attrs, children) +} + +/// Represent six levels of section headings. <h1> is the highest section level +/// and <h6> is the lowest. +/// +pub fn h5( + attrs: List(Attribute(msg)), + children: List(Element(msg)), +) -> Element(msg) { + element("h5", attrs, children) +} + +/// Represent six levels of section headings. <h1> is the highest section level +/// and <h6> is the lowest. +/// +pub fn h6( + attrs: List(Attribute(msg)), + children: List(Element(msg)), +) -> Element(msg) { + element("h6", attrs, children) +} + +/// Represents a heading grouped with any secondary content, such as subheadings, +/// an alternative title, or a tagline. +/// +pub fn hgroup( + attrs: List(Attribute(msg)), + children: List(Element(msg)), +) -> Element(msg) { + element("hgroup", attrs, children) +} + +/// Represents the dominant content of the body of a document. The main content +/// area consists of content that is directly related to or expands upon the +/// central topic of a document, or the central functionality of an application. +/// +pub fn main( + attrs: List(Attribute(msg)), + children: List(Element(msg)), +) -> Element(msg) { + element("main", attrs, children) +} + +/// Represents a section of a page whose purpose is to provide navigation links, +/// either within the current document or to other documents. Common examples of +/// navigation sections are menus, tables of contents, and indexes. +/// +pub fn nav( + attrs: List(Attribute(msg)), + children: List(Element(msg)), +) -> Element(msg) { + element("nav", attrs, children) +} + +/// Represents a generic standalone section of a document, which doesn't have a +/// more specific semantic element to represent it. Sections should always have +/// a heading, with very few exceptions. +/// +pub fn section( + attrs: List(Attribute(msg)), + children: List(Element(msg)), +) -> Element(msg) { + element("section", attrs, children) +} + +/// Represents a part that contains a set of form controls or other content related +/// to performing a search or filtering operation. +/// +pub fn search( + attrs: List(Attribute(msg)), + children: List(Element(msg)), +) -> Element(msg) { + element("search", attrs, children) +} + +// HTML ELEMENTS: TEXT CONTENT ------------------------------------------------- + +/// Indicates that the enclosed text is an extended quotation. Usually, this is +/// rendered visually by indentation. A URL for the source of the quotation may +/// be given using the cite attribute, while a text representation of the source +/// can be given using the <cite> element. +/// +pub fn blockquote( + attrs: List(Attribute(msg)), + children: List(Element(msg)), +) -> Element(msg) { + element("blockquote", attrs, children) +} + +/// Provides the description, definition, or value for the preceding term (<dt>) +/// in a description list (<dl>). +/// +pub fn dd( + attrs: List(Attribute(msg)), + children: List(Element(msg)), +) -> Element(msg) { + element("dd", attrs, children) +} + +/// The generic container for flow content. It has no effect on the content or +/// layout until styled in some way using CSS (e.g., styling is directly applied +/// to it, or some kind of layout model like flexbox is applied to its parent +/// element). +/// +pub fn div( + attrs: List(Attribute(msg)), + children: List(Element(msg)), +) -> Element(msg) { + element("div", attrs, children) +} + +/// Represents a description list. The element encloses a list of groups of terms +/// (specified using the <dt> element) and descriptions (provided by <dd> elements). +/// Common uses for this element are to implement a glossary or to display metadata +/// (a list of key-value pairs). +/// +pub fn dl( + attrs: List(Attribute(msg)), + children: List(Element(msg)), +) -> Element(msg) { + element("dl", attrs, children) +} + +/// Specifies a term in a description or definition list, and as such must be +/// used inside a <dl> element. It is usually followed by a <dd> element; +/// however, multiple <dt> elements in a row indicate several terms that are +/// all defined by the immediate next <dd> element. +/// +pub fn dt( + attrs: List(Attribute(msg)), + children: List(Element(msg)), +) -> Element(msg) { + element("dt", attrs, children) +} + +/// Represents a caption or legend describing the rest of the contents of its +/// parent <figure> element. +/// +pub fn figcaption( + attrs: List(Attribute(msg)), + children: List(Element(msg)), +) -> Element(msg) { + element("figcaption", attrs, children) +} + +/// Represents self-contained content, potentially with an optional caption, +/// which is specified using the <figcaption> element. The figure, its caption, +/// and its contents are referenced as a single unit. +/// +pub fn figure( + attrs: List(Attribute(msg)), + children: List(Element(msg)), +) -> Element(msg) { + element("figure", attrs, children) +} + +/// Represents a thematic break between paragraph-level elements: for example, +/// a change of scene in a story, or a shift of topic within a section. +/// +pub fn hr(attrs: List(Attribute(msg))) -> Element(msg) { + element("hr", attrs, []) +} + +/// Represents an item in a list. It must be contained in a parent element: an +/// ordered list (<ol>), an unordered list (<ul>), or a menu (<menu>). In menus +/// and unordered lists, list items are usually displayed using bullet points. +/// In ordered lists, they are usually displayed with an ascending counter on +/// the left, such as a number or letter. +/// +pub fn li( + attrs: List(Attribute(msg)), + children: List(Element(msg)), +) -> Element(msg) { + element("li", attrs, children) +} + +/// A semantic alternative to <ul>, but treated by browsers (and exposed through +/// the accessibility tree) as no different than <ul>. It represents an unordered +/// list of items (which are represented by <li> elements). +/// +pub fn menu( + attrs: List(Attribute(msg)), + children: List(Element(msg)), +) -> Element(msg) { + element("menu", attrs, children) +} + +/// Represents an ordered list of items — typically rendered as a numbered list. +/// +pub fn ol( + attrs: List(Attribute(msg)), + children: List(Element(msg)), +) -> Element(msg) { + element("ol", attrs, children) +} + +/// Represents a paragraph. Paragraphs are usually represented in visual media +/// as blocks of text separated from adjacent blocks by blank lines and/or +/// first-line indentation, but HTML paragraphs can be any structural grouping +/// of related content, such as images or form fields. +/// +pub fn p( + attrs: List(Attribute(msg)), + children: List(Element(msg)), +) -> Element(msg) { + element("p", attrs, children) +} + +/// Represents preformatted text which is to be presented exactly as written in +/// the HTML file. The text is typically rendered using a non-proportional, or +/// monospaced, font. Whitespace inside this element is displayed as written. +/// +pub fn pre( + attrs: List(Attribute(msg)), + children: List(Element(msg)), +) -> Element(msg) { + element("pre", attrs, children) +} + +/// Represents an unordered list of items, typically rendered as a bulleted list. +/// +pub fn ul( + attrs: List(Attribute(msg)), + children: List(Element(msg)), +) -> Element(msg) { + element("ul", attrs, children) +} + +// HTML ELEMENTS: INLINE TEXT SEMANTICS ---------------------------------------- + +/// Together with its href attribute, creates a hyperlink to web pages, files, +/// email addresses, locations within the current page, or anything else a URL +/// can address. +/// +pub fn a( + attrs: List(Attribute(msg)), + children: List(Element(msg)), +) -> Element(msg) { + element("a", attrs, children) +} + +/// Represents an abbreviation or acronym. +/// +pub fn abbr( + attrs: List(Attribute(msg)), + children: List(Element(msg)), +) -> Element(msg) { + element("abbr", attrs, children) +} + +/// Used to draw the reader's attention to the element's contents, which are not +/// otherwise granted special importance. This was formerly known as the Boldface +/// element, and most browsers still draw the text in boldface. However, you +/// should not use <b> for styling text or granting importance. If you wish to +/// create boldface text, you should use the CSS font-weight property. If you +/// wish to indicate an element is of special importance, you should use the +/// strong element. +/// +pub fn b( + attrs: List(Attribute(msg)), + children: List(Element(msg)), +) -> Element(msg) { + element("b", attrs, children) +} + +/// Tells the browser's bidirectional algorithm to treat the text it contains in +/// isolation from its surrounding text. It's particularly useful when a website +/// dynamically inserts some text and doesn't know the directionality of the +/// text being inserted. +/// +pub fn bdi( + attrs: List(Attribute(msg)), + children: List(Element(msg)), +) -> Element(msg) { + element("bdi", attrs, children) +} + +/// Overrides the current directionality of text, so that the text within is +/// rendered in a different direction. +/// +pub fn bdo( + attrs: List(Attribute(msg)), + children: List(Element(msg)), +) -> Element(msg) { + element("bdo", attrs, children) +} + +/// Produces a line break in text (carriage-return). It is useful for writing a +/// poem or an address, where the division of lines is significant. +/// +pub fn br(attrs: List(Attribute(msg))) -> Element(msg) { + element("br", attrs, []) +} + +/// Used to mark up the title of a cited creative work. The reference may be in +/// an abbreviated form according to context-appropriate conventions related to +/// citation metadata. +/// +pub fn cite( + attrs: List(Attribute(msg)), + children: List(Element(msg)), +) -> Element(msg) { + element("cite", attrs, children) +} + +/// Displays its contents styled in a fashion intended to indicate that the text +/// is a short fragment of computer code. By default, the content text is +/// displayed using the user agent's default monospace font. +/// +pub fn code( + attrs: List(Attribute(msg)), + children: List(Element(msg)), +) -> Element(msg) { + element("code", attrs, children) +} + +/// Links a given piece of content with a machine-readable translation. If the +/// content is time- or date-related, the<time> element must be used. +/// +pub fn data( + attrs: List(Attribute(msg)), + children: List(Element(msg)), +) -> Element(msg) { + element("data", attrs, children) +} + +/// Used to indicate the term being defined within the context of a definition +/// phrase or sentence. The ancestor <p> element, the <dt>/<dd> pairing, or the +/// nearest section ancestor of the <dfn> element, is considered to be the +/// definition of the term. +/// +pub fn dfn( + attrs: List(Attribute(msg)), + children: List(Element(msg)), +) -> Element(msg) { + element("dfn", attrs, children) +} + +/// Marks text that has stress emphasis. The <em> element can be nested, with +/// each nesting level indicating a greater degree of emphasis. +/// +pub fn em( + attrs: List(Attribute(msg)), + children: List(Element(msg)), +) -> Element(msg) { + element("em", attrs, children) +} + +/// Represents a range of text that is set off from the normal text for some +/// reason, such as idiomatic text, technical terms, and taxonomical designations, +/// among others. Historically, these have been presented using italicized type, +/// which is the original source of the <i> naming of this element. +/// +pub fn i( + attrs: List(Attribute(msg)), + children: List(Element(msg)), +) -> Element(msg) { + element("i", attrs, children) +} + +/// Represents a span of inline text denoting textual user input from a keyboard, +/// voice input, or any other text entry device. By convention, the user agent +/// defaults to rendering the contents of a <kbd> element using its default +/// monospace font, although this is not mandated by the HTML standard. +/// +pub fn kbd( + attrs: List(Attribute(msg)), + children: List(Element(msg)), +) -> Element(msg) { + element("kbd", attrs, children) +} + +/// Represents text which is marked or highlighted for reference or notation +/// purposes due to the marked passage's relevance in the enclosing context. +/// +pub fn mark( + attrs: List(Attribute(msg)), + children: List(Element(msg)), +) -> Element(msg) { + element("mark", attrs, children) +} + +/// Indicates that the enclosed text is a short inline quotation. Most modern +/// browsers implement this by surrounding the text in quotation marks. This +/// element is intended for short quotations that don't require paragraph +/// breaks; for long quotations use the <blockquote> element. +/// +pub fn q( + attrs: List(Attribute(msg)), + children: List(Element(msg)), +) -> Element(msg) { + element("q", attrs, children) +} + +/// Used to provide fall-back parentheses for browsers that do not support the +/// display of ruby annotations using the <ruby> element. One <rp> element +/// should enclose each of the opening and closing parentheses that wrap the +/// <rt> element that contains the annotation's text. +/// +pub fn rp( + attrs: List(Attribute(msg)), + children: List(Element(msg)), +) -> Element(msg) { + element("rp", attrs, children) +} + +/// Specifies the ruby text component of a ruby annotation, which is used to +/// provide pronunciation, translation, or transliteration information for East +/// Asian typography. The <rt> element must always be contained within a <ruby> +/// element. +/// +pub fn rt( + attrs: List(Attribute(msg)), + children: List(Element(msg)), +) -> Element(msg) { + element("rt", attrs, children) +} + +/// Represents small annotations that are rendered above, below, or next to base +/// text, usually used for showing the pronunciation of East Asian characters. +/// It can also be used for annotating other kinds of text, but this usage is +/// less common. +/// +pub fn ruby( + attrs: List(Attribute(msg)), + children: List(Element(msg)), +) -> Element(msg) { + element("ruby", attrs, children) +} + +/// Renders text with a strikethrough, or a line through it. Use the <s> element +/// to represent things that are no longer relevant or no longer accurate. +/// However, <s> is not appropriate when indicating document edits; for that, +/// use the del and ins elements, as appropriate. +/// +pub fn s( + attrs: List(Attribute(msg)), + children: List(Element(msg)), +) -> Element(msg) { + element("s", attrs, children) +} + +/// Used to enclose inline text which represents sample (or quoted) output from +/// a computer program. Its contents are typically rendered using the browser's +/// default monospaced font (such as Courier or Lucida Console). +/// +pub fn samp( + attrs: List(Attribute(msg)), + children: List(Element(msg)), +) -> Element(msg) { + element("samp", attrs, children) +} + +/// Represents side-comments and small print, like copyright and legal text, +/// independent of its styled presentation. By default, it renders text within +/// it one font size smaller, such as from small to x-small. +/// +pub fn small( + attrs: List(Attribute(msg)), + children: List(Element(msg)), +) -> Element(msg) { + element("small", attrs, children) +} + +/// A generic inline container for phrasing content, which does not inherently +/// represent anything. It can be used to group elements for styling purposes +/// (using the class or id attributes), or because they share attribute values, +/// such as lang. It should be used only when no other semantic element is +/// appropriate. <span> is very much like a div element, but div is a block-level +/// element whereas a <span> is an inline-level element. +/// +pub fn span( + attrs: List(Attribute(msg)), + children: List(Element(msg)), +) -> Element(msg) { + element("span", attrs, children) +} + +/// Indicates that its contents have strong importance, seriousness, or urgency. +/// Browsers typically render the contents in bold type. +/// +pub fn strong( + attrs: List(Attribute(msg)), + children: List(Element(msg)), +) -> Element(msg) { + element("strong", attrs, children) +} + +/// Specifies inline text which should be displayed as subscript for solely +/// typographical reasons. Subscripts are typically rendered with a lowered +/// baseline using smaller text. +/// +pub fn sub( + attrs: List(Attribute(msg)), + children: List(Element(msg)), +) -> Element(msg) { + element("sub", attrs, children) +} + +/// Specifies inline text which is to be displayed as superscript for solely +/// typographical reasons. Superscripts are usually rendered with a raised +/// baseline using smaller text. +/// +pub fn sup( + attrs: List(Attribute(msg)), + children: List(Element(msg)), +) -> Element(msg) { + element("sup", attrs, children) +} + +/// Represents a specific period in time. It may include the datetime attribute +/// to translate dates into machine-readable format, allowing for better search +/// engine results or custom features such as reminders. +/// +pub fn time( + attrs: List(Attribute(msg)), + children: List(Element(msg)), +) -> Element(msg) { + element("time", attrs, children) +} + +/// Represents a span of inline text which should be rendered in a way that +/// indicates that it has a non-textual annotation. This is rendered by default +/// as a simple solid underline but may be altered using CSS. +/// +pub fn u( + attrs: List(Attribute(msg)), + children: List(Element(msg)), +) -> Element(msg) { + element("u", attrs, children) +} + +/// Represents the name of a variable in a mathematical expression or a +/// programming context. It's typically presented using an italicized version of +/// the current typeface, although that behavior is browser-dependent. +/// +pub fn var( + attrs: List(Attribute(msg)), + children: List(Element(msg)), +) -> Element(msg) { + element("var", attrs, children) +} + +/// Represents the name of a variable in a mathematical expression or a +/// programming context. It's typically presented using an italicized version of +/// the current typeface, although that behavior is browser-dependent. +/// +pub fn wbr(attrs: List(Attribute(msg))) -> Element(msg) { + element("wbr", attrs, []) +} + +// HTML ELEMENTS: IMAGE AND MULTIMEDIA ----------------------------------------- + +/// Represents a word break opportunity—a position within text where the browser +/// may optionally break a line, though its line-breaking rules would not +/// otherwise create a break at that location. +/// +pub fn area(attrs: List(Attribute(msg))) -> Element(msg) { + element("area", attrs, []) +} + +/// Defines an area inside an image map that has predefined clickable areas. An +/// image map allows geometric areas on an image to be associated with hyperlink. +/// +pub fn audio( + attrs: List(Attribute(msg)), + children: List(Element(msg)), +) -> Element(msg) { + element("audio", attrs, children) +} + +/// Used to embed sound content in documents. It may contain one or more audio +/// sources, represented using the src attribute or the source element: the +/// browser will choose the most suitable one. It can also be the destination +/// for streamed media, using a MediaStream. +/// +pub fn img(attrs: List(Attribute(msg))) -> Element(msg) { + element("img", attrs, []) +} + +/// Used with <area> elements to define an image map (a clickable link area). +/// +pub fn map( + attrs: List(Attribute(msg)), + children: List(Element(msg)), +) -> Element(msg) { + element("map", attrs, children) +} + +/// Used as a child of the media elements, audio and video. It lets you specify +/// timed text tracks (or time-based data), for example to automatically handle +/// subtitles. The tracks are formatted in WebVTT format (.vtt files)—Web Video +/// Text Tracks. +/// +pub fn track(attrs: List(Attribute(msg))) -> Element(msg) { + element("track", attrs, []) +} + +/// Embeds a media player which supports video playback into the document. You +/// can also use <video> for audio content, but the audio element may provide a +/// more appropriate user experience. +/// +pub fn video( + attrs: List(Attribute(msg)), + children: List(Element(msg)), +) -> Element(msg) { + element("video", attrs, children) +} + +// HTML ELEMENTS: EMBEDDED CONTENT --------------------------------------------- + +/// Embeds external content at the specified point in the document. This content +///is provided by an external application or other source of interactive content +/// such as a browser plug-in. +/// +pub fn embed(attrs: List(Attribute(msg))) -> Element(msg) { + element("embed", attrs, []) +} + +/// Represents a nested browsing context, embedding another HTML page into the +/// current one. +/// +pub fn iframe(attrs: List(Attribute(msg))) -> Element(msg) { + element("iframe", attrs, []) +} + +/// Represents an external resource, which can be treated as an image, a nested +/// browsing context, or a resource to be handled by a plugin. +/// +pub fn object(attrs: List(Attribute(msg))) -> Element(msg) { + element("object", attrs, []) +} + +/// Contains zero or more <source> elements and one <img> element to offer +/// alternative versions of an image for different display/device scenarios. +/// +pub fn picture( + attrs: List(Attribute(msg)), + children: List(Element(msg)), +) -> Element(msg) { + element("picture", attrs, children) +} + +/// Enables the embedding of another HTML page into the current one to enable +/// smoother navigation into new pages. +/// +pub fn portal(attrs: List(Attribute(msg))) -> Element(msg) { + element("portal", attrs, []) +} + +/// Specifies multiple media resources for the picture, the audio element, or +/// the video element. It is a void element, meaning that it has no content and +/// does not have a closing tag. It is commonly used to offer the same media +/// content in multiple file formats in order to provide compatibility with a +/// broad range of browsers given their differing support for image file formats +/// and media file formats. +/// +pub fn source(attrs: List(Attribute(msg))) -> Element(msg) { + element("source", attrs, []) +} + +// HTML ELEMENTS: SVG AND MATHML ----------------------------------------------- + +/// Container defining a new coordinate system and viewport. It is used as the +/// outermost element of SVG documents, but it can also be used to embed an SVG +/// fragment inside an SVG or HTML document. +/// +pub fn svg( + attrs: List(Attribute(msg)), + children: List(Element(msg)), +) -> Element(msg) { + namespaced("http://www.w3.org/2000/svg", "svg", attrs, children) +} + +/// The top-level element in MathML. Every valid MathML instance must be wrapped +/// in it. In addition, you must not nest a second <math> element in another, +/// but you can have an arbitrary number of other child elements in it. +/// +pub fn math( + attrs: List(Attribute(msg)), + children: List(Element(msg)), +) -> Element(msg) { + element("math", attrs, children) +} + +// HTML ELEMENTS: SCRIPTING ---------------------------------------------------- + +/// Container element to use with either the canvas scripting API or the WebGL +/// API to draw graphics and animations. +/// +pub fn canvas(attrs: List(Attribute(msg))) -> Element(msg) { + element("canvas", attrs, []) +} + +/// Defines a section of HTML to be inserted if a script type on the page is +/// unsupported or if scripting is currently turned off in the browser. +/// +pub fn noscript( + attrs: List(Attribute(msg)), + children: List(Element(msg)), +) -> Element(msg) { + element("noscript", attrs, children) +} + +/// 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. +/// +pub fn script(attrs: List(Attribute(msg)), js: String) -> Element(msg) { + element("script", attrs, [text(js)]) +} + +// HTML ELEMENTS: DEMARCATING EDITS --------------------------------------------- + +/// Represents a range of text that has been deleted from a document. This can +/// be used when rendering "track changes" or source code diff information, for +/// example. The <ins> element can be used for the opposite purpose: to indicate +/// text that has been added to the document. +/// +pub fn del( + attrs: List(Attribute(msg)), + children: List(Element(msg)), +) -> Element(msg) { + element.element("del", attrs, children) +} + +/// Represents a range of text that has been added to a document. You can use the +/// <del> element to similarly represent a range of text that has been deleted +/// from the document. +/// +pub fn ins( + attrs: List(Attribute(msg)), + children: List(Element(msg)), +) -> Element(msg) { + element.element("ins", attrs, children) +} + +// HTML ELEMENTS: TABLE CONTENT ------------------------------------------------ + +/// Specifies the caption (or title) of a table. +/// +pub fn caption( + attrs: List(Attribute(msg)), + children: List(Element(msg)), +) -> Element(msg) { + element.element("caption", attrs, children) +} + +/// Defines a column within a table and is used for defining common semantics on +/// all common cells. It is generally found within a <colgroup> element. +/// +pub fn col(attrs: List(Attribute(msg))) -> Element(msg) { + element.element("col", attrs, []) +} + +/// Defines a group of columns within a table. +/// +pub fn colgroup( + attrs: List(Attribute(msg)), + children: List(Element(msg)), +) -> Element(msg) { + element.element("colgroup", attrs, children) +} + +/// Represents tabular data — that is, information presented in a two-dimensional +/// table comprised of rows and columns of cells containing data. +/// +pub fn table( + attrs: List(Attribute(msg)), + children: List(Element(msg)), +) -> Element(msg) { + element.element("table", attrs, children) +} + +/// Encapsulates a set of table rows (<tr> elements), indicating that they +/// comprise the body of the table (<table>). +/// +pub fn tbody( + attrs: List(Attribute(msg)), + children: List(Element(msg)), +) -> Element(msg) { + element.element("tbody", attrs, children) +} + +/// Defines a cell of a table that contains data. It participates in the table +/// model. +/// +pub fn td( + attrs: List(Attribute(msg)), + children: List(Element(msg)), +) -> Element(msg) { + element.element("td", attrs, children) +} + +/// Defines a set of rows summarizing the columns of the table. +/// +pub fn tfoot( + attrs: List(Attribute(msg)), + children: List(Element(msg)), +) -> Element(msg) { + element.element("tfoot", attrs, children) +} + +/// Defines a cell as a header of a group of table cells. The exact nature of +/// this group is defined by the scope and headers attributes. +/// +pub fn th( + attrs: List(Attribute(msg)), + children: List(Element(msg)), +) -> Element(msg) { + element.element("th", attrs, children) +} + +/// Defines a set of rows defining the head of the columns of the table. +/// +pub fn thead( + attrs: List(Attribute(msg)), + children: List(Element(msg)), +) -> Element(msg) { + element.element("thead", attrs, children) +} + +/// Defines a row of cells in a table. The row's cells can then be established +/// using a mix of <td> (data cell) and <th> (header cell) elements. +/// +pub fn tr( + attrs: List(Attribute(msg)), + children: List(Element(msg)), +) -> Element(msg) { + element.element("tr", attrs, children) +} + +// HTML ELEMENTS: FORMS -------------------------------------------------------- + +/// An interactive element activated by a user with a mouse, keyboard, finger, +/// voice command, or other assistive technology. Once activated, it performs an +/// action, such as submitting a form or opening a dialog. +/// +pub fn button( + attrs: List(Attribute(msg)), + children: List(Element(msg)), +) -> Element(msg) { + element.element("button", attrs, children) +} + +/// Contains a set of <option> elements that represent the permissible or +/// recommended options available to choose from within other controls. +/// +pub fn datalist( + attrs: List(Attribute(msg)), + children: List(Element(msg)), +) -> Element(msg) { + element.element("datalist", attrs, children) +} + +/// Used to group several controls as well as labels (<label>) within a web form. +/// +pub fn fieldset( + attrs: List(Attribute(msg)), + children: List(Element(msg)), +) -> Element(msg) { + element.element("fieldset", attrs, children) +} + +/// Represents a document section containing interactive controls for submitting +/// information. +/// +pub fn form( + attrs: List(Attribute(msg)), + children: List(Element(msg)), +) -> Element(msg) { + element.element("form", attrs, children) +} + +/// Used to create interactive controls for web-based forms to accept data from +/// he user; a wide variety of types of input data and control widgets are +/// available, depending on the device and user agent. The <input> element is +/// one of the most powerful and complex in all of HTML due to the sheer number +/// of combinations of input types and attributes. +/// +pub fn input(attrs: List(Attribute(msg))) -> Element(msg) { + element.element("input", attrs, []) +} + +/// Represents a caption for an item in a user interface. +/// +pub fn label( + attrs: List(Attribute(msg)), + children: List(Element(msg)), +) -> Element(msg) { + element.element("label", attrs, children) +} + +/// Represents a caption for the content of its parent <fieldset>. +/// +pub fn legend( + attrs: List(Attribute(msg)), + children: List(Element(msg)), +) -> Element(msg) { + element.element("legend", attrs, children) +} + +/// Represents either a scalar value within a known range or a fractional value. +/// +pub fn meter( + attrs: List(Attribute(msg)), + children: List(Element(msg)), +) -> Element(msg) { + element.element("meter", attrs, children) +} + +/// Creates a grouping of options within a <select> element. +/// +pub fn optgroup( + attrs: List(Attribute(msg)), + children: List(Element(msg)), +) -> Element(msg) { + element.element("optgroup", attrs, children) +} + +/// Used to define an item contained in a select, an <optgroup>, or a <datalist> +/// element. As such, <option> can represent menu items in popups and other lists +/// of items in an HTML document. +/// +pub fn option(attrs: List(Attribute(msg))) -> Element(msg) { + element.element("option", attrs, []) +} + +/// Container element into which a site or app can inject the results of a +/// calculation or the outcome of a user action. +/// +pub fn output( + attrs: List(Attribute(msg)), + children: List(Element(msg)), +) -> Element(msg) { + element.element("output", attrs, children) +} + +/// Displays an indicator showing the completion progress of a task, typically +/// displayed as a progress bar. +/// +pub fn progress( + attrs: List(Attribute(msg)), + children: List(Element(msg)), +) -> Element(msg) { + element.element("progress", attrs, children) +} + +/// Represents a control that provides a menu of options. +/// +pub fn select( + attrs: List(Attribute(msg)), + children: List(Element(msg)), +) -> Element(msg) { + element.element("select", attrs, children) +} + +/// Represents a multi-line plain-text editing control, useful when you want to +/// allow users to enter a sizeable amount of free-form text, for example, a +/// comment on a review or feedback form. +/// +pub fn textarea(attrs: List(Attribute(msg))) -> Element(msg) { + element.element("textarea", attrs, []) +} + +// HTML ELEMENTS: INTERACTIVE ELEMENTS ----------------------------------------- + +/// Creates a disclosure widget in which information is visible only when the +/// widget is toggled into an "open" state. A summary or label must be provided +/// using the <summary> element. +/// +pub fn details( + attrs: List(Attribute(msg)), + children: List(Element(msg)), +) -> Element(msg) { + element.element("details", attrs, children) +} + +/// Represents a dialog box or other interactive component, such as a dismissible +/// alert, inspector, or subwindow. +/// +pub fn dialog( + attrs: List(Attribute(msg)), + children: List(Element(msg)), +) -> Element(msg) { + element.element("dialog", attrs, children) +} + +/// Specifies a summary, caption, or legend for a details element's disclosure box. +/// Clicking the <summary> element toggles the state of the parent <details> element +/// open and closed. +/// +pub fn summary( + attrs: List(Attribute(msg)), + children: List(Element(msg)), +) -> Element(msg) { + element.element("summary", attrs, children) +} + +// HTML ELEMENTS: WEB COMPONENTS ----------------------------------------------- + +/// Part of the Web Components technology suite, this element is a placeholder +/// inside a web component that you can fill with your own markup, which lets you +/// create separate DOM trees and present them together. +/// +pub fn slot(attrs: List(Attribute(msg))) -> Element(msg) { + element.element("slot", attrs, []) +} + +/// A mechanism for holding HTML that is not to be rendered immediately when a +/// page is loaded but may be instantiated subsequently during runtime using +/// JavaScript. +/// +pub fn template( + attrs: List(Attribute(msg)), + children: List(Element(msg)), +) -> Element(msg) { + element.element("template", attrs, children) +} |