mirror of
https://github.com/RGBCube/serenity
synced 2025-07-25 22:07:35 +00:00
LibWeb: Add HTML elements to factories, add missing tags and attributes
This is mostly to get the grunt work of the way. This is split up into multiple commits to hopefully make it more manageable to review. Note that these are not full implementations, and the bindings mostly get the low hanging fruit. Also implements some attributes that I kept out because they had dashes in them. Therefore, this closes #2905.
This commit is contained in:
parent
be5a62d5d7
commit
5724ac8e72
13 changed files with 656 additions and 54 deletions
|
@ -45,8 +45,13 @@ void initialize()
|
|||
ENUMERATE_HTML_ATTRIBUTES
|
||||
#undef __ENUMERATE_HTML_ATTRIBUTE
|
||||
|
||||
// NOTE: Special case for the class attribute since it's a C++ keyword.
|
||||
// NOTE: Special case for the class and for attributes since they're C++ keywords.
|
||||
class_ = "class";
|
||||
for_ = "for";
|
||||
|
||||
// NOTE: Special cases for attributes with dashes in them.
|
||||
accept_charset = "accept-charset";
|
||||
http_equiv = "http-equiv";
|
||||
|
||||
s_initialized = true;
|
||||
}
|
||||
|
|
|
@ -37,28 +37,40 @@ void initialize();
|
|||
#define ENUMERATE_HTML_ATTRIBUTES \
|
||||
__ENUMERATE_HTML_ATTRIBUTE(abbr) \
|
||||
__ENUMERATE_HTML_ATTRIBUTE(accept) \
|
||||
__ENUMERATE_HTML_ATTRIBUTE(accept_charset) \
|
||||
__ENUMERATE_HTML_ATTRIBUTE(action) \
|
||||
__ENUMERATE_HTML_ATTRIBUTE(align) \
|
||||
__ENUMERATE_HTML_ATTRIBUTE(allow) \
|
||||
__ENUMERATE_HTML_ATTRIBUTE(alt) \
|
||||
__ENUMERATE_HTML_ATTRIBUTE(async) \
|
||||
__ENUMERATE_HTML_ATTRIBUTE(behaviour) \
|
||||
__ENUMERATE_HTML_ATTRIBUTE(bgcolor) \
|
||||
__ENUMERATE_HTML_ATTRIBUTE(cite) \
|
||||
__ENUMERATE_HTML_ATTRIBUTE(class_) \
|
||||
__ENUMERATE_HTML_ATTRIBUTE(cols) \
|
||||
__ENUMERATE_HTML_ATTRIBUTE(colspan) \
|
||||
__ENUMERATE_HTML_ATTRIBUTE(content) \
|
||||
__ENUMERATE_HTML_ATTRIBUTE(contenteditable) \
|
||||
__ENUMERATE_HTML_ATTRIBUTE(data) \
|
||||
__ENUMERATE_HTML_ATTRIBUTE(datetime) \
|
||||
__ENUMERATE_HTML_ATTRIBUTE(download) \
|
||||
__ENUMERATE_HTML_ATTRIBUTE(defer) \
|
||||
__ENUMERATE_HTML_ATTRIBUTE(direction) \
|
||||
__ENUMERATE_HTML_ATTRIBUTE(dirname) \
|
||||
__ENUMERATE_HTML_ATTRIBUTE(for_) \
|
||||
__ENUMERATE_HTML_ATTRIBUTE(frameborder) \
|
||||
__ENUMERATE_HTML_ATTRIBUTE(headers) \
|
||||
__ENUMERATE_HTML_ATTRIBUTE(height) \
|
||||
__ENUMERATE_HTML_ATTRIBUTE(href) \
|
||||
__ENUMERATE_HTML_ATTRIBUTE(hreflang) \
|
||||
__ENUMERATE_HTML_ATTRIBUTE(http_equiv) \
|
||||
__ENUMERATE_HTML_ATTRIBUTE(id) \
|
||||
__ENUMERATE_HTML_ATTRIBUTE(imagesizes) \
|
||||
__ENUMERATE_HTML_ATTRIBUTE(imagesrcset) \
|
||||
__ENUMERATE_HTML_ATTRIBUTE(integrity) \
|
||||
__ENUMERATE_HTML_ATTRIBUTE(label) \
|
||||
__ENUMERATE_HTML_ATTRIBUTE(lang) \
|
||||
__ENUMERATE_HTML_ATTRIBUTE(longdesc) \
|
||||
__ENUMERATE_HTML_ATTRIBUTE(max) \
|
||||
__ENUMERATE_HTML_ATTRIBUTE(media) \
|
||||
__ENUMERATE_HTML_ATTRIBUTE(method) \
|
||||
|
@ -67,11 +79,15 @@ void initialize();
|
|||
__ENUMERATE_HTML_ATTRIBUTE(pattern) \
|
||||
__ENUMERATE_HTML_ATTRIBUTE(ping) \
|
||||
__ENUMERATE_HTML_ATTRIBUTE(placeholder) \
|
||||
__ENUMERATE_HTML_ATTRIBUTE(poster) \
|
||||
__ENUMERATE_HTML_ATTRIBUTE(rel) \
|
||||
__ENUMERATE_HTML_ATTRIBUTE(rows) \
|
||||
__ENUMERATE_HTML_ATTRIBUTE(scrolling) \
|
||||
__ENUMERATE_HTML_ATTRIBUTE(size) \
|
||||
__ENUMERATE_HTML_ATTRIBUTE(sizes) \
|
||||
__ENUMERATE_HTML_ATTRIBUTE(src) \
|
||||
__ENUMERATE_HTML_ATTRIBUTE(srcdoc) \
|
||||
__ENUMERATE_HTML_ATTRIBUTE(srclang) \
|
||||
__ENUMERATE_HTML_ATTRIBUTE(srcset) \
|
||||
__ENUMERATE_HTML_ATTRIBUTE(step) \
|
||||
__ENUMERATE_HTML_ATTRIBUTE(style) \
|
||||
|
@ -80,7 +96,8 @@ void initialize();
|
|||
__ENUMERATE_HTML_ATTRIBUTE(type) \
|
||||
__ENUMERATE_HTML_ATTRIBUTE(usemap) \
|
||||
__ENUMERATE_HTML_ATTRIBUTE(value) \
|
||||
__ENUMERATE_HTML_ATTRIBUTE(width)
|
||||
__ENUMERATE_HTML_ATTRIBUTE(width) \
|
||||
__ENUMERATE_HTML_ATTRIBUTE(wrap)
|
||||
|
||||
#define __ENUMERATE_HTML_ATTRIBUTE(name) extern FlyString name;
|
||||
ENUMERATE_HTML_ATTRIBUTES
|
||||
|
|
|
@ -1,5 +1,6 @@
|
|||
/*
|
||||
* Copyright (c) 2018-2020, Andreas Kling <kling@serenityos.org>
|
||||
* Copyright (c) 2020, Luke Wilde <luke.wilde@live.co.uk>
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
|
@ -26,12 +27,26 @@
|
|||
|
||||
#include <LibWeb/DOM/ElementFactory.h>
|
||||
#include <LibWeb/HTML/HTMLAnchorElement.h>
|
||||
#include <LibWeb/HTML/HTMLBRElement.h>
|
||||
#include <LibWeb/HTML/HTMLAreaElement.h>
|
||||
#include <LibWeb/HTML/HTMLAudioElement.h>
|
||||
#include <LibWeb/HTML/HTMLBaseElement.h>
|
||||
#include <LibWeb/HTML/HTMLBlinkElement.h>
|
||||
#include <LibWeb/HTML/HTMLBodyElement.h>
|
||||
#include <LibWeb/HTML/HTMLBRElement.h>
|
||||
#include <LibWeb/HTML/HTMLButtonElement.h>
|
||||
#include <LibWeb/HTML/HTMLCanvasElement.h>
|
||||
#include <LibWeb/HTML/HTMLDataElement.h>
|
||||
#include <LibWeb/HTML/HTMLDataListElement.h>
|
||||
#include <LibWeb/HTML/HTMLDetailsElement.h>
|
||||
#include <LibWeb/HTML/HTMLDialogElement.h>
|
||||
#include <LibWeb/HTML/HTMLDivElement.h>
|
||||
#include <LibWeb/HTML/HTMLDListElement.h>
|
||||
#include <LibWeb/HTML/HTMLEmbedElement.h>
|
||||
#include <LibWeb/HTML/HTMLFieldSetElement.h>
|
||||
#include <LibWeb/HTML/HTMLFontElement.h>
|
||||
#include <LibWeb/HTML/HTMLFormElement.h>
|
||||
#include <LibWeb/HTML/HTMLFrameElement.h>
|
||||
#include <LibWeb/HTML/HTMLFrameSetElement.h>
|
||||
#include <LibWeb/HTML/HTMLHRElement.h>
|
||||
#include <LibWeb/HTML/HTMLHeadElement.h>
|
||||
#include <LibWeb/HTML/HTMLHeadingElement.h>
|
||||
|
@ -39,14 +54,47 @@
|
|||
#include <LibWeb/HTML/HTMLIFrameElement.h>
|
||||
#include <LibWeb/HTML/HTMLImageElement.h>
|
||||
#include <LibWeb/HTML/HTMLInputElement.h>
|
||||
#include <LibWeb/HTML/HTMLLabelElement.h>
|
||||
#include <LibWeb/HTML/HTMLLegendElement.h>
|
||||
#include <LibWeb/HTML/HTMLLIElement.h>
|
||||
#include <LibWeb/HTML/HTMLLinkElement.h>
|
||||
#include <LibWeb/HTML/HTMLMapElement.h>
|
||||
#include <LibWeb/HTML/HTMLMarqueeElement.h>
|
||||
#include <LibWeb/HTML/HTMLMenuElement.h>
|
||||
#include <LibWeb/HTML/HTMLMetaElement.h>
|
||||
#include <LibWeb/HTML/HTMLMeterElement.h>
|
||||
#include <LibWeb/HTML/HTMLModElement.h>
|
||||
#include <LibWeb/HTML/HTMLObjectElement.h>
|
||||
#include <LibWeb/HTML/HTMLOListElement.h>
|
||||
#include <LibWeb/HTML/HTMLOptGroupElement.h>
|
||||
#include <LibWeb/HTML/HTMLOptionElement.h>
|
||||
#include <LibWeb/HTML/HTMLOutputElement.h>
|
||||
#include <LibWeb/HTML/HTMLParagraphElement.h>
|
||||
#include <LibWeb/HTML/HTMLParamElement.h>
|
||||
#include <LibWeb/HTML/HTMLPictureElement.h>
|
||||
#include <LibWeb/HTML/HTMLPreElement.h>
|
||||
#include <LibWeb/HTML/HTMLProgressElement.h>
|
||||
#include <LibWeb/HTML/HTMLQuoteElement.h>
|
||||
#include <LibWeb/HTML/HTMLScriptElement.h>
|
||||
#include <LibWeb/HTML/HTMLSelectElement.h>
|
||||
#include <LibWeb/HTML/HTMLSlotElement.h>
|
||||
#include <LibWeb/HTML/HTMLSourceElement.h>
|
||||
#include <LibWeb/HTML/HTMLSpanElement.h>
|
||||
#include <LibWeb/HTML/HTMLStyleElement.h>
|
||||
#include <LibWeb/HTML/HTMLTableCaptionElement.h>
|
||||
#include <LibWeb/HTML/HTMLTableCellElement.h>
|
||||
#include <LibWeb/HTML/HTMLTableColElement.h>
|
||||
#include <LibWeb/HTML/HTMLTableElement.h>
|
||||
#include <LibWeb/HTML/HTMLTableRowElement.h>
|
||||
#include <LibWeb/HTML/HTMLTableSectionElement.h>
|
||||
#include <LibWeb/HTML/HTMLTextAreaElement.h>
|
||||
#include <LibWeb/HTML/HTMLTemplateElement.h>
|
||||
#include <LibWeb/HTML/HTMLTimeElement.h>
|
||||
#include <LibWeb/HTML/HTMLTrackElement.h>
|
||||
#include <LibWeb/HTML/HTMLTitleElement.h>
|
||||
#include <LibWeb/HTML/HTMLUListElement.h>
|
||||
#include <LibWeb/HTML/HTMLUnknownElement.h>
|
||||
#include <LibWeb/HTML/HTMLVideoElement.h>
|
||||
#include <LibWeb/SVG/SVGPathElement.h>
|
||||
#include <LibWeb/SVG/SVGSVGElement.h>
|
||||
#include <LibWeb/SVG/TagNames.h>
|
||||
|
@ -58,53 +106,155 @@ NonnullRefPtr<Element> create_element(Document& document, const FlyString& tag_n
|
|||
auto lowercase_tag_name = tag_name.to_lowercase();
|
||||
if (lowercase_tag_name == HTML::TagNames::a)
|
||||
return adopt(*new HTML::HTMLAnchorElement(document, lowercase_tag_name));
|
||||
if (lowercase_tag_name == HTML::TagNames::html)
|
||||
return adopt(*new HTML::HTMLHtmlElement(document, lowercase_tag_name));
|
||||
if (lowercase_tag_name == HTML::TagNames::head)
|
||||
return adopt(*new HTML::HTMLHeadElement(document, lowercase_tag_name));
|
||||
if (lowercase_tag_name == HTML::TagNames::body)
|
||||
return adopt(*new HTML::HTMLBodyElement(document, lowercase_tag_name));
|
||||
if (lowercase_tag_name == HTML::TagNames::font)
|
||||
return adopt(*new HTML::HTMLFontElement(document, lowercase_tag_name));
|
||||
if (lowercase_tag_name == HTML::TagNames::hr)
|
||||
return adopt(*new HTML::HTMLHRElement(document, lowercase_tag_name));
|
||||
if (lowercase_tag_name == HTML::TagNames::style)
|
||||
return adopt(*new HTML::HTMLStyleElement(document, lowercase_tag_name));
|
||||
if (lowercase_tag_name == HTML::TagNames::title)
|
||||
return adopt(*new HTML::HTMLTitleElement(document, lowercase_tag_name));
|
||||
if (lowercase_tag_name == HTML::TagNames::link)
|
||||
return adopt(*new HTML::HTMLLinkElement(document, lowercase_tag_name));
|
||||
if (lowercase_tag_name == HTML::TagNames::img)
|
||||
return adopt(*new HTML::HTMLImageElement(document, lowercase_tag_name));
|
||||
if (lowercase_tag_name == HTML::TagNames::area)
|
||||
return adopt(*new HTML::HTMLAreaElement(document, lowercase_tag_name));
|
||||
if (lowercase_tag_name == HTML::TagNames::audio)
|
||||
return adopt(*new HTML::HTMLAudioElement(document, lowercase_tag_name));
|
||||
if (lowercase_tag_name == HTML::TagNames::base)
|
||||
return adopt(*new HTML::HTMLBaseElement(document, lowercase_tag_name));
|
||||
if (lowercase_tag_name == HTML::TagNames::blink)
|
||||
return adopt(*new HTML::HTMLBlinkElement(document, lowercase_tag_name));
|
||||
if (lowercase_tag_name == HTML::TagNames::form)
|
||||
return adopt(*new HTML::HTMLFormElement(document, lowercase_tag_name));
|
||||
if (lowercase_tag_name == HTML::TagNames::input)
|
||||
return adopt(*new HTML::HTMLInputElement(document, lowercase_tag_name));
|
||||
if (lowercase_tag_name == HTML::TagNames::body)
|
||||
return adopt(*new HTML::HTMLBodyElement(document, lowercase_tag_name));
|
||||
if (lowercase_tag_name == HTML::TagNames::br)
|
||||
return adopt(*new HTML::HTMLBRElement(document, lowercase_tag_name));
|
||||
if (lowercase_tag_name == HTML::TagNames::button)
|
||||
return adopt(*new HTML::HTMLButtonElement(document, lowercase_tag_name));
|
||||
if (lowercase_tag_name == HTML::TagNames::canvas)
|
||||
return adopt(*new HTML::HTMLCanvasElement(document, lowercase_tag_name));
|
||||
if (lowercase_tag_name == HTML::TagNames::data)
|
||||
return adopt(*new HTML::HTMLDataElement(document, lowercase_tag_name));
|
||||
if (lowercase_tag_name == HTML::TagNames::datalist)
|
||||
return adopt(*new HTML::HTMLDataListElement(document, lowercase_tag_name));
|
||||
if (lowercase_tag_name == HTML::TagNames::details)
|
||||
return adopt(*new HTML::HTMLDetailsElement(document, lowercase_tag_name));
|
||||
if (lowercase_tag_name == HTML::TagNames::dialog)
|
||||
return adopt(*new HTML::HTMLDialogElement(document, lowercase_tag_name));
|
||||
if (lowercase_tag_name == HTML::TagNames::div)
|
||||
return adopt(*new HTML::HTMLDivElement(document, lowercase_tag_name));
|
||||
if (lowercase_tag_name == HTML::TagNames::dl)
|
||||
return adopt(*new HTML::HTMLDListElement(document, lowercase_tag_name));
|
||||
if (lowercase_tag_name == HTML::TagNames::embed)
|
||||
return adopt(*new HTML::HTMLEmbedElement(document, lowercase_tag_name));
|
||||
if (lowercase_tag_name == HTML::TagNames::fieldset)
|
||||
return adopt(*new HTML::HTMLFieldSetElement(document, lowercase_tag_name));
|
||||
if (lowercase_tag_name == HTML::TagNames::font)
|
||||
return adopt(*new HTML::HTMLFontElement(document, lowercase_tag_name));
|
||||
if (lowercase_tag_name == HTML::TagNames::form)
|
||||
return adopt(*new HTML::HTMLFormElement(document, lowercase_tag_name));
|
||||
if (lowercase_tag_name == HTML::TagNames::frame)
|
||||
return adopt(*new HTML::HTMLFrameElement(document, lowercase_tag_name));
|
||||
if (lowercase_tag_name == HTML::TagNames::frameset)
|
||||
return adopt(*new HTML::HTMLFrameSetElement(document, lowercase_tag_name));
|
||||
if (lowercase_tag_name == HTML::TagNames::head)
|
||||
return adopt(*new HTML::HTMLHeadElement(document, lowercase_tag_name));
|
||||
if (lowercase_tag_name.is_one_of(HTML::TagNames::h1, HTML::TagNames::h2, HTML::TagNames::h3, HTML::TagNames::h4, HTML::TagNames::h5, HTML::TagNames::h6))
|
||||
return adopt(*new HTML::HTMLHeadingElement(document, lowercase_tag_name));
|
||||
if (lowercase_tag_name == HTML::TagNames::hr)
|
||||
return adopt(*new HTML::HTMLHRElement(document, lowercase_tag_name));
|
||||
if (lowercase_tag_name == HTML::TagNames::html)
|
||||
return adopt(*new HTML::HTMLHtmlElement(document, lowercase_tag_name));
|
||||
if (lowercase_tag_name == HTML::TagNames::iframe)
|
||||
return adopt(*new HTML::HTMLIFrameElement(document, lowercase_tag_name));
|
||||
if (lowercase_tag_name == HTML::TagNames::img)
|
||||
return adopt(*new HTML::HTMLImageElement(document, lowercase_tag_name));
|
||||
if (lowercase_tag_name == HTML::TagNames::input)
|
||||
return adopt(*new HTML::HTMLInputElement(document, lowercase_tag_name));
|
||||
if (lowercase_tag_name == HTML::TagNames::label)
|
||||
return adopt(*new HTML::HTMLLabelElement(document, lowercase_tag_name));
|
||||
if (lowercase_tag_name == HTML::TagNames::legend)
|
||||
return adopt(*new HTML::HTMLLegendElement(document, lowercase_tag_name));
|
||||
if (lowercase_tag_name == HTML::TagNames::li)
|
||||
return adopt(*new HTML::HTMLLIElement(document, lowercase_tag_name));
|
||||
if (lowercase_tag_name == HTML::TagNames::link)
|
||||
return adopt(*new HTML::HTMLLinkElement(document, lowercase_tag_name));
|
||||
if (lowercase_tag_name == HTML::TagNames::map)
|
||||
return adopt(*new HTML::HTMLMapElement(document, lowercase_tag_name));
|
||||
if (lowercase_tag_name == HTML::TagNames::marquee)
|
||||
return adopt(*new HTML::HTMLMarqueeElement(document, lowercase_tag_name));
|
||||
if (lowercase_tag_name == HTML::TagNames::menu)
|
||||
return adopt(*new HTML::HTMLMenuElement(document, lowercase_tag_name));
|
||||
if (lowercase_tag_name == HTML::TagNames::meta)
|
||||
return adopt(*new HTML::HTMLMetaElement(document, lowercase_tag_name));
|
||||
if (lowercase_tag_name == HTML::TagNames::meter)
|
||||
return adopt(*new HTML::HTMLMeterElement(document, lowercase_tag_name));
|
||||
if (lowercase_tag_name.is_one_of(HTML::TagNames::ins, HTML::TagNames::del))
|
||||
return adopt(*new HTML::HTMLModElement(document, lowercase_tag_name));
|
||||
if (lowercase_tag_name == HTML::TagNames::object)
|
||||
return adopt(*new HTML::HTMLObjectElement(document, lowercase_tag_name));
|
||||
if (lowercase_tag_name == HTML::TagNames::ol)
|
||||
return adopt(*new HTML::HTMLOListElement(document, lowercase_tag_name));
|
||||
if (lowercase_tag_name == HTML::TagNames::optgroup)
|
||||
return adopt(*new HTML::HTMLOptGroupElement(document, lowercase_tag_name));
|
||||
if (lowercase_tag_name == HTML::TagNames::option)
|
||||
return adopt(*new HTML::HTMLOptionElement(document, lowercase_tag_name));
|
||||
if (lowercase_tag_name == HTML::TagNames::output)
|
||||
return adopt(*new HTML::HTMLOutputElement(document, lowercase_tag_name));
|
||||
if (lowercase_tag_name == HTML::TagNames::p)
|
||||
return adopt(*new HTML::HTMLParagraphElement(document, lowercase_tag_name));
|
||||
if (lowercase_tag_name == HTML::TagNames::param)
|
||||
return adopt(*new HTML::HTMLParamElement(document, lowercase_tag_name));
|
||||
if (lowercase_tag_name == HTML::TagNames::picture)
|
||||
return adopt(*new HTML::HTMLPictureElement(document, lowercase_tag_name));
|
||||
// NOTE: The obsolete elements "listing" and "xmp" are explicitly mapped to HTMLPreElement in the specification.
|
||||
if (lowercase_tag_name.is_one_of(HTML::TagNames::pre, HTML::TagNames::listing, HTML::TagNames::xmp))
|
||||
return adopt(*new HTML::HTMLPreElement(document, lowercase_tag_name));
|
||||
if (lowercase_tag_name == HTML::TagNames::progress)
|
||||
return adopt(*new HTML::HTMLProgressElement(document, lowercase_tag_name));
|
||||
if (lowercase_tag_name.is_one_of(HTML::TagNames::blockquote, HTML::TagNames::q))
|
||||
return adopt(*new HTML::HTMLQuoteElement(document, lowercase_tag_name));
|
||||
if (lowercase_tag_name == HTML::TagNames::script)
|
||||
return adopt(*new HTML::HTMLScriptElement(document, lowercase_tag_name));
|
||||
if (lowercase_tag_name == HTML::TagNames::select)
|
||||
return adopt(*new HTML::HTMLSelectElement(document, lowercase_tag_name));
|
||||
if (lowercase_tag_name == HTML::TagNames::slot)
|
||||
return adopt(*new HTML::HTMLSlotElement(document, lowercase_tag_name));
|
||||
if (lowercase_tag_name == HTML::TagNames::source)
|
||||
return adopt(*new HTML::HTMLSourceElement(document, lowercase_tag_name));
|
||||
if (lowercase_tag_name == HTML::TagNames::span)
|
||||
return adopt(*new HTML::HTMLSpanElement(document, lowercase_tag_name));
|
||||
if (lowercase_tag_name == HTML::TagNames::style)
|
||||
return adopt(*new HTML::HTMLStyleElement(document, lowercase_tag_name));
|
||||
if (lowercase_tag_name == HTML::TagNames::caption)
|
||||
return adopt(*new HTML::HTMLTableCaptionElement(document, lowercase_tag_name));
|
||||
if (lowercase_tag_name.is_one_of(Web::HTML::TagNames::td, Web::HTML::TagNames::th))
|
||||
return adopt(*new HTML::HTMLTableCellElement(document, lowercase_tag_name));
|
||||
if (lowercase_tag_name.is_one_of(HTML::TagNames::colgroup, HTML::TagNames::col))
|
||||
return adopt(*new HTML::HTMLTableColElement(document, lowercase_tag_name));
|
||||
if (lowercase_tag_name == HTML::TagNames::table)
|
||||
return adopt(*new HTML::HTMLTableElement(document, lowercase_tag_name));
|
||||
if (lowercase_tag_name == HTML::TagNames::tr)
|
||||
return adopt(*new HTML::HTMLTableRowElement(document, lowercase_tag_name));
|
||||
if (lowercase_tag_name == HTML::TagNames::td || lowercase_tag_name == HTML::TagNames::th)
|
||||
return adopt(*new HTML::HTMLTableCellElement(document, lowercase_tag_name));
|
||||
if (lowercase_tag_name.is_one_of(HTML::TagNames::h1, HTML::TagNames::h2, HTML::TagNames::h3, HTML::TagNames::h4, HTML::TagNames::h5, HTML::TagNames::h6))
|
||||
return adopt(*new HTML::HTMLHeadingElement(document, lowercase_tag_name));
|
||||
if (lowercase_tag_name == HTML::TagNames::script)
|
||||
return adopt(*new HTML::HTMLScriptElement(document, lowercase_tag_name));
|
||||
if (lowercase_tag_name == HTML::TagNames::canvas)
|
||||
return adopt(*new HTML::HTMLCanvasElement(document, lowercase_tag_name));
|
||||
if (lowercase_tag_name == HTML::TagNames::object)
|
||||
return adopt(*new HTML::HTMLObjectElement(document, lowercase_tag_name));
|
||||
if (lowercase_tag_name.is_one_of(HTML::TagNames::tbody, HTML::TagNames::thead, HTML::TagNames::tfoot))
|
||||
return adopt(*new HTML::HTMLTableSectionElement(document, lowercase_tag_name));
|
||||
if (lowercase_tag_name == HTML::TagNames::template_)
|
||||
return adopt(*new HTML::HTMLTemplateElement(document, lowercase_tag_name));
|
||||
if (lowercase_tag_name == HTML::TagNames::textarea)
|
||||
return adopt(*new HTML::HTMLTextAreaElement(document, lowercase_tag_name));
|
||||
if (lowercase_tag_name == HTML::TagNames::time)
|
||||
return adopt(*new HTML::HTMLTimeElement(document, lowercase_tag_name));
|
||||
if (lowercase_tag_name == HTML::TagNames::title)
|
||||
return adopt(*new HTML::HTMLTitleElement(document, lowercase_tag_name));
|
||||
if (lowercase_tag_name == HTML::TagNames::track)
|
||||
return adopt(*new HTML::HTMLTrackElement(document, lowercase_tag_name));
|
||||
if (lowercase_tag_name == HTML::TagNames::ul)
|
||||
return adopt(*new HTML::HTMLUListElement(document, lowercase_tag_name));
|
||||
if (lowercase_tag_name == HTML::TagNames::video)
|
||||
return adopt(*new HTML::HTMLVideoElement(document, lowercase_tag_name));
|
||||
if (lowercase_tag_name.is_one_of(
|
||||
HTML::TagNames::article, HTML::TagNames::section, HTML::TagNames::nav, HTML::TagNames::aside, HTML::TagNames::hgroup, HTML::TagNames::header, HTML::TagNames::footer, HTML::TagNames::address, HTML::TagNames::dt, HTML::TagNames::dd, HTML::TagNames::figure, HTML::TagNames::figcaption, HTML::TagNames::main, HTML::TagNames::em, HTML::TagNames::strong, HTML::TagNames::small, HTML::TagNames::s, HTML::TagNames::cite, HTML::TagNames::dfn, HTML::TagNames::abbr, HTML::TagNames::ruby, HTML::TagNames::rt, HTML::TagNames::rp, HTML::TagNames::code, HTML::TagNames::var, HTML::TagNames::samp, HTML::TagNames::kbd, HTML::TagNames::sub, HTML::TagNames::sup, HTML::TagNames::i, HTML::TagNames::b, HTML::TagNames::u, HTML::TagNames::mark, HTML::TagNames::bdi, HTML::TagNames::bdo, HTML::TagNames::wbr, HTML::TagNames::summary, HTML::TagNames::noscript,
|
||||
// Obsolete
|
||||
HTML::TagNames::acronym, HTML::TagNames::basefont, HTML::TagNames::big, HTML::TagNames::center, HTML::TagNames::nobr, HTML::TagNames::noembed, HTML::TagNames::noframes, HTML::TagNames::plaintext, HTML::TagNames::rb, HTML::TagNames::rtc, HTML::TagNames::strike, HTML::TagNames::tt)
|
||||
)
|
||||
return adopt(*new HTML::HTMLElement(document, lowercase_tag_name));
|
||||
if (lowercase_tag_name == SVG::TagNames::svg)
|
||||
return adopt(*new SVG::SVGSVGElement(document, lowercase_tag_name));
|
||||
if (lowercase_tag_name == SVG::TagNames::path)
|
||||
return adopt(*new SVG::SVGPathElement(document, lowercase_tag_name));
|
||||
return adopt(*new Element(document, lowercase_tag_name));
|
||||
|
||||
// FIXME: If name is a valid custom element name, then return HTMLElement.
|
||||
|
||||
return adopt(*new HTML::HTMLUnknownElement(document, lowercase_tag_name));
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -95,6 +95,7 @@ public:
|
|||
String child_text_content() const;
|
||||
|
||||
virtual bool is_html_element() const { return false; }
|
||||
virtual bool is_unknown_html_element() const { return false; }
|
||||
|
||||
const Node* root() const;
|
||||
bool is_connected() const;
|
||||
|
|
|
@ -36,14 +36,19 @@ void initialize();
|
|||
|
||||
#define ENUMERATE_HTML_TAGS \
|
||||
__ENUMERATE_HTML_TAG(a) \
|
||||
__ENUMERATE_HTML_TAG(abbr) \
|
||||
__ENUMERATE_HTML_TAG(acronym) \
|
||||
__ENUMERATE_HTML_TAG(address) \
|
||||
__ENUMERATE_HTML_TAG(applet) \
|
||||
__ENUMERATE_HTML_TAG(area) \
|
||||
__ENUMERATE_HTML_TAG(article) \
|
||||
__ENUMERATE_HTML_TAG(aside) \
|
||||
__ENUMERATE_HTML_TAG(audio) \
|
||||
__ENUMERATE_HTML_TAG(b) \
|
||||
__ENUMERATE_HTML_TAG(base) \
|
||||
__ENUMERATE_HTML_TAG(basefont) \
|
||||
__ENUMERATE_HTML_TAG(bdi) \
|
||||
__ENUMERATE_HTML_TAG(bdo) \
|
||||
__ENUMERATE_HTML_TAG(bgsound) \
|
||||
__ENUMERATE_HTML_TAG(big) \
|
||||
__ENUMERATE_HTML_TAG(blink) \
|
||||
|
@ -54,11 +59,16 @@ void initialize();
|
|||
__ENUMERATE_HTML_TAG(canvas) \
|
||||
__ENUMERATE_HTML_TAG(caption) \
|
||||
__ENUMERATE_HTML_TAG(center) \
|
||||
__ENUMERATE_HTML_TAG(cite) \
|
||||
__ENUMERATE_HTML_TAG(code) \
|
||||
__ENUMERATE_HTML_TAG(col) \
|
||||
__ENUMERATE_HTML_TAG(colgroup) \
|
||||
__ENUMERATE_HTML_TAG(data) \
|
||||
__ENUMERATE_HTML_TAG(datalist) \
|
||||
__ENUMERATE_HTML_TAG(dd) \
|
||||
__ENUMERATE_HTML_TAG(del) \
|
||||
__ENUMERATE_HTML_TAG(details) \
|
||||
__ENUMERATE_HTML_TAG(dfn) \
|
||||
__ENUMERATE_HTML_TAG(dialog) \
|
||||
__ENUMERATE_HTML_TAG(dir) \
|
||||
__ENUMERATE_HTML_TAG(div) \
|
||||
|
@ -90,15 +100,22 @@ void initialize();
|
|||
__ENUMERATE_HTML_TAG(image) \
|
||||
__ENUMERATE_HTML_TAG(img) \
|
||||
__ENUMERATE_HTML_TAG(input) \
|
||||
__ENUMERATE_HTML_TAG(ins) \
|
||||
__ENUMERATE_HTML_TAG(kbd) \
|
||||
__ENUMERATE_HTML_TAG(keygen) \
|
||||
__ENUMERATE_HTML_TAG(label) \
|
||||
__ENUMERATE_HTML_TAG(legend) \
|
||||
__ENUMERATE_HTML_TAG(li) \
|
||||
__ENUMERATE_HTML_TAG(link) \
|
||||
__ENUMERATE_HTML_TAG(listing) \
|
||||
__ENUMERATE_HTML_TAG(main) \
|
||||
__ENUMERATE_HTML_TAG(map) \
|
||||
__ENUMERATE_HTML_TAG(mark) \
|
||||
__ENUMERATE_HTML_TAG(marquee) \
|
||||
__ENUMERATE_HTML_TAG(math) \
|
||||
__ENUMERATE_HTML_TAG(menu) \
|
||||
__ENUMERATE_HTML_TAG(meta) \
|
||||
__ENUMERATE_HTML_TAG(meter) \
|
||||
__ENUMERATE_HTML_TAG(nav) \
|
||||
__ENUMERATE_HTML_TAG(nobr) \
|
||||
__ENUMERATE_HTML_TAG(noembed) \
|
||||
|
@ -108,26 +125,34 @@ void initialize();
|
|||
__ENUMERATE_HTML_TAG(ol) \
|
||||
__ENUMERATE_HTML_TAG(optgroup) \
|
||||
__ENUMERATE_HTML_TAG(option) \
|
||||
__ENUMERATE_HTML_TAG(output) \
|
||||
__ENUMERATE_HTML_TAG(p) \
|
||||
__ENUMERATE_HTML_TAG(param) \
|
||||
__ENUMERATE_HTML_TAG(picture) \
|
||||
__ENUMERATE_HTML_TAG(path) \
|
||||
__ENUMERATE_HTML_TAG(plaintext) \
|
||||
__ENUMERATE_HTML_TAG(pre) \
|
||||
__ENUMERATE_HTML_TAG(progress) \
|
||||
__ENUMERATE_HTML_TAG(q) \
|
||||
__ENUMERATE_HTML_TAG(ruby) \
|
||||
__ENUMERATE_HTML_TAG(rb) \
|
||||
__ENUMERATE_HTML_TAG(rp) \
|
||||
__ENUMERATE_HTML_TAG(rt) \
|
||||
__ENUMERATE_HTML_TAG(rtc) \
|
||||
__ENUMERATE_HTML_TAG(s) \
|
||||
__ENUMERATE_HTML_TAG(samp) \
|
||||
__ENUMERATE_HTML_TAG(script) \
|
||||
__ENUMERATE_HTML_TAG(section) \
|
||||
__ENUMERATE_HTML_TAG(select) \
|
||||
__ENUMERATE_HTML_TAG(slot) \
|
||||
__ENUMERATE_HTML_TAG(small) \
|
||||
__ENUMERATE_HTML_TAG(source) \
|
||||
__ENUMERATE_HTML_TAG(span) \
|
||||
__ENUMERATE_HTML_TAG(strike) \
|
||||
__ENUMERATE_HTML_TAG(strong) \
|
||||
__ENUMERATE_HTML_TAG(style) \
|
||||
__ENUMERATE_HTML_TAG(sub) \
|
||||
__ENUMERATE_HTML_TAG(sup) \
|
||||
__ENUMERATE_HTML_TAG(summary) \
|
||||
__ENUMERATE_HTML_TAG(svg) \
|
||||
__ENUMERATE_HTML_TAG(table) \
|
||||
|
@ -138,12 +163,15 @@ void initialize();
|
|||
__ENUMERATE_HTML_TAG(tfoot) \
|
||||
__ENUMERATE_HTML_TAG(th) \
|
||||
__ENUMERATE_HTML_TAG(thead) \
|
||||
__ENUMERATE_HTML_TAG(time) \
|
||||
__ENUMERATE_HTML_TAG(title) \
|
||||
__ENUMERATE_HTML_TAG(tr) \
|
||||
__ENUMERATE_HTML_TAG(track) \
|
||||
__ENUMERATE_HTML_TAG(tt) \
|
||||
__ENUMERATE_HTML_TAG(u) \
|
||||
__ENUMERATE_HTML_TAG(ul) \
|
||||
__ENUMERATE_HTML_TAG(var) \
|
||||
__ENUMERATE_HTML_TAG(video) \
|
||||
__ENUMERATE_HTML_TAG(wbr) \
|
||||
__ENUMERATE_HTML_TAG(xmp)
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue