mirror of
https://github.com/RGBCube/serenity
synced 2025-07-27 14:47:46 +00:00
LibWeb: Port Element::local_name and TagNames from Deprecated String
Which pretty much needs to be done together due to the amount of places where they are compared together. This also involves porting over StackOfOpenElements over to FlyString from DeprecatedFly string to prevent a gazillion calls to `.to_deprecated_fly_string` calls in HTMLParser.
This commit is contained in:
parent
bbfe0d3a82
commit
9303e9e76f
30 changed files with 163 additions and 158 deletions
|
@ -1361,7 +1361,7 @@ WebIDL::ExceptionOr<JS::NonnullGCPtr<Element>> Document::create_element(String c
|
|||
namespace_ = Namespace::HTML;
|
||||
|
||||
// 6. Return the result of creating an element given this, localName, namespace, null, is, and with the synchronous custom elements flag set.
|
||||
return TRY(DOM::create_element(*this, local_name, namespace_, {}, move(is_value), true));
|
||||
return TRY(DOM::create_element(*this, MUST(FlyString::from_deprecated_fly_string(local_name)), namespace_, {}, move(is_value), true));
|
||||
}
|
||||
|
||||
// https://dom.spec.whatwg.org/#dom-document-createelementns
|
||||
|
@ -1387,7 +1387,7 @@ WebIDL::ExceptionOr<JS::NonnullGCPtr<Element>> Document::create_element_ns(Optio
|
|||
}
|
||||
|
||||
// 4. Return the result of creating an element given document, localName, namespace, prefix, is, and with the synchronous custom elements flag set.
|
||||
return TRY(DOM::create_element(*this, extracted_qualified_name.local_name().to_deprecated_fly_string(), extracted_qualified_name.deprecated_namespace_(), extracted_qualified_name.deprecated_prefix(), move(is_value), true));
|
||||
return TRY(DOM::create_element(*this, extracted_qualified_name.local_name(), extracted_qualified_name.deprecated_namespace_(), extracted_qualified_name.deprecated_prefix(), move(is_value), true));
|
||||
}
|
||||
|
||||
JS::NonnullGCPtr<DocumentFragment> Document::create_document_fragment()
|
||||
|
|
|
@ -629,7 +629,7 @@ WebIDL::ExceptionOr<JS::NonnullGCPtr<ShadowRoot>> Element::attach_shadow(ShadowR
|
|||
// 3. If this’s local name is a valid custom element name, or this’s is value is not null, then:
|
||||
if (HTML::is_valid_custom_element_name(local_name()) || m_is_value.has_value()) {
|
||||
// 1. Let definition be the result of looking up a custom element definition given this’s node document, its namespace, its local name, and its is value.
|
||||
auto definition = document().lookup_custom_element_definition(namespace_(), local_name(), m_is_value);
|
||||
auto definition = document().lookup_custom_element_definition(namespace_(), local_name().to_deprecated_fly_string(), m_is_value);
|
||||
|
||||
// 2. If definition is not null and definition’s disable shadow is true, then throw a "NotSupportedError" DOMException.
|
||||
if (definition && definition->disable_shadow())
|
||||
|
@ -1825,7 +1825,7 @@ JS::ThrowCompletionOr<void> Element::upgrade_element(JS::NonnullGCPtr<HTML::Cust
|
|||
void Element::try_to_upgrade()
|
||||
{
|
||||
// 1. Let definition be the result of looking up a custom element definition given element's node document, element's namespace, element's local name, and element's is value.
|
||||
auto definition = document().lookup_custom_element_definition(namespace_(), local_name(), m_is_value);
|
||||
auto definition = document().lookup_custom_element_definition(namespace_(), local_name().to_deprecated_fly_string(), m_is_value);
|
||||
|
||||
// 2. If definition is not null, then enqueue a custom element upgrade reaction given element and definition.
|
||||
if (definition)
|
||||
|
|
|
@ -78,7 +78,8 @@ public:
|
|||
DeprecatedString const& html_uppercased_qualified_name() const { return m_html_uppercased_qualified_name; }
|
||||
|
||||
virtual FlyString node_name() const final { return MUST(FlyString::from_deprecated_fly_string(html_uppercased_qualified_name())); }
|
||||
DeprecatedFlyString local_name() const { return m_qualified_name.local_name().to_deprecated_fly_string(); }
|
||||
DeprecatedFlyString deprecated_local_name() const { return m_qualified_name.local_name().to_deprecated_fly_string(); }
|
||||
FlyString const& local_name() const { return m_qualified_name.local_name(); }
|
||||
|
||||
// NOTE: This is for the JS bindings
|
||||
DeprecatedString const& tag_name() const { return html_uppercased_qualified_name(); }
|
||||
|
|
|
@ -25,7 +25,7 @@ dictionary ScrollIntoViewOptions : ScrollOptions {
|
|||
interface Element : Node {
|
||||
readonly attribute DOMString? namespaceURI;
|
||||
[ImplementedAs=deprecated_prefix] readonly attribute DOMString? prefix;
|
||||
readonly attribute DOMString localName;
|
||||
[ImplementedAs=deprecated_local_name] readonly attribute DOMString localName;
|
||||
readonly attribute DOMString tagName;
|
||||
|
||||
[ImplementedAs=deprecated_get_attribute] DOMString? getAttribute(DOMString qualifiedName);
|
||||
|
|
|
@ -80,6 +80,7 @@
|
|||
#include <LibWeb/HTML/HTMLUnknownElement.h>
|
||||
#include <LibWeb/HTML/HTMLVideoElement.h>
|
||||
#include <LibWeb/HTML/Scripting/ExceptionReporter.h>
|
||||
#include <LibWeb/Infra/Strings.h>
|
||||
#include <LibWeb/MathML/MathMLElement.h>
|
||||
#include <LibWeb/MathML/TagNames.h>
|
||||
#include <LibWeb/Namespace.h>
|
||||
|
@ -111,139 +112,139 @@
|
|||
|
||||
namespace Web::DOM {
|
||||
|
||||
ErrorOr<FixedArray<DeprecatedFlyString>> valid_local_names_for_given_html_element_interface(StringView html_element_interface_name)
|
||||
ErrorOr<FixedArray<FlyString>> valid_local_names_for_given_html_element_interface(StringView html_element_interface_name)
|
||||
{
|
||||
if (html_element_interface_name == "HTMLAnchorElement"sv)
|
||||
return FixedArray<DeprecatedFlyString>::create({ HTML::TagNames::a });
|
||||
return FixedArray<FlyString>::create({ HTML::TagNames::a });
|
||||
if (html_element_interface_name == "HTMLAreaElement"sv)
|
||||
return FixedArray<DeprecatedFlyString>::create({ HTML::TagNames::area });
|
||||
return FixedArray<FlyString>::create({ HTML::TagNames::area });
|
||||
if (html_element_interface_name == "HTMLAudioElement"sv)
|
||||
return FixedArray<DeprecatedFlyString>::create({ HTML::TagNames::audio });
|
||||
return FixedArray<FlyString>::create({ HTML::TagNames::audio });
|
||||
if (html_element_interface_name == "HTMLBaseElement"sv)
|
||||
return FixedArray<DeprecatedFlyString>::create({ HTML::TagNames::base });
|
||||
return FixedArray<FlyString>::create({ HTML::TagNames::base });
|
||||
if (html_element_interface_name == "HTMLBodyElement"sv)
|
||||
return FixedArray<DeprecatedFlyString>::create({ HTML::TagNames::body });
|
||||
return FixedArray<FlyString>::create({ HTML::TagNames::body });
|
||||
if (html_element_interface_name == "HTMLBRElement"sv)
|
||||
return FixedArray<DeprecatedFlyString>::create({ HTML::TagNames::br });
|
||||
return FixedArray<FlyString>::create({ HTML::TagNames::br });
|
||||
if (html_element_interface_name == "HTMLButtonElement"sv)
|
||||
return FixedArray<DeprecatedFlyString>::create({ HTML::TagNames::button });
|
||||
return FixedArray<FlyString>::create({ HTML::TagNames::button });
|
||||
if (html_element_interface_name == "HTMLCanvasElement"sv)
|
||||
return FixedArray<DeprecatedFlyString>::create({ HTML::TagNames::canvas });
|
||||
return FixedArray<FlyString>::create({ HTML::TagNames::canvas });
|
||||
if (html_element_interface_name == "HTMLDataElement"sv)
|
||||
return FixedArray<DeprecatedFlyString>::create({ HTML::TagNames::data });
|
||||
return FixedArray<FlyString>::create({ HTML::TagNames::data });
|
||||
if (html_element_interface_name == "HTMLDataListElement"sv)
|
||||
return FixedArray<DeprecatedFlyString>::create({ HTML::TagNames::datalist });
|
||||
return FixedArray<FlyString>::create({ HTML::TagNames::datalist });
|
||||
if (html_element_interface_name == "HTMLDetailsElement"sv)
|
||||
return FixedArray<DeprecatedFlyString>::create({ HTML::TagNames::details });
|
||||
return FixedArray<FlyString>::create({ HTML::TagNames::details });
|
||||
if (html_element_interface_name == "HTMLDialogElement"sv)
|
||||
return FixedArray<DeprecatedFlyString>::create({ HTML::TagNames::dialog });
|
||||
return FixedArray<FlyString>::create({ HTML::TagNames::dialog });
|
||||
if (html_element_interface_name == "HTMLDirectoryElement"sv)
|
||||
return FixedArray<DeprecatedFlyString>::create({ HTML::TagNames::dir });
|
||||
return FixedArray<FlyString>::create({ HTML::TagNames::dir });
|
||||
if (html_element_interface_name == "HTMLDivElement"sv)
|
||||
return FixedArray<DeprecatedFlyString>::create({ HTML::TagNames::div });
|
||||
return FixedArray<FlyString>::create({ HTML::TagNames::div });
|
||||
if (html_element_interface_name == "HTMLDListElement"sv)
|
||||
return FixedArray<DeprecatedFlyString>::create({ HTML::TagNames::dl });
|
||||
return FixedArray<FlyString>::create({ HTML::TagNames::dl });
|
||||
if (html_element_interface_name == "HTMLEmbedElement"sv)
|
||||
return FixedArray<DeprecatedFlyString>::create({ HTML::TagNames::embed });
|
||||
return FixedArray<FlyString>::create({ HTML::TagNames::embed });
|
||||
if (html_element_interface_name == "HTMLFieldsetElement"sv)
|
||||
return FixedArray<DeprecatedFlyString>::create({ HTML::TagNames::fieldset });
|
||||
return FixedArray<FlyString>::create({ HTML::TagNames::fieldset });
|
||||
if (html_element_interface_name == "HTMLFontElement"sv)
|
||||
return FixedArray<DeprecatedFlyString>::create({ HTML::TagNames::font });
|
||||
return FixedArray<FlyString>::create({ HTML::TagNames::font });
|
||||
if (html_element_interface_name == "HTMLFormElement"sv)
|
||||
return FixedArray<DeprecatedFlyString>::create({ HTML::TagNames::form });
|
||||
return FixedArray<FlyString>::create({ HTML::TagNames::form });
|
||||
if (html_element_interface_name == "HTMLFrameElement"sv)
|
||||
return FixedArray<DeprecatedFlyString>::create({ HTML::TagNames::frame });
|
||||
return FixedArray<FlyString>::create({ HTML::TagNames::frame });
|
||||
if (html_element_interface_name == "HTMLFrameSetElement"sv)
|
||||
return FixedArray<DeprecatedFlyString>::create({ HTML::TagNames::frameset });
|
||||
return FixedArray<FlyString>::create({ HTML::TagNames::frameset });
|
||||
if (html_element_interface_name == "HTMLHeadElement"sv)
|
||||
return FixedArray<DeprecatedFlyString>::create({ HTML::TagNames::head });
|
||||
return FixedArray<FlyString>::create({ HTML::TagNames::head });
|
||||
if (html_element_interface_name == "HTMLHeadingElement"sv)
|
||||
return FixedArray<DeprecatedFlyString>::create({ HTML::TagNames::h1, HTML::TagNames::h2, HTML::TagNames::h3, HTML::TagNames::h4, HTML::TagNames::h5, HTML::TagNames::h6 });
|
||||
return FixedArray<FlyString>::create({ HTML::TagNames::h1, HTML::TagNames::h2, HTML::TagNames::h3, HTML::TagNames::h4, HTML::TagNames::h5, HTML::TagNames::h6 });
|
||||
if (html_element_interface_name == "HTMLHRElement"sv)
|
||||
return FixedArray<DeprecatedFlyString>::create({ HTML::TagNames::hr });
|
||||
return FixedArray<FlyString>::create({ HTML::TagNames::hr });
|
||||
if (html_element_interface_name == "HTMLHtmlElement"sv)
|
||||
return FixedArray<DeprecatedFlyString>::create({ HTML::TagNames::html });
|
||||
return FixedArray<FlyString>::create({ HTML::TagNames::html });
|
||||
if (html_element_interface_name == "HTMLIFrameElement"sv)
|
||||
return FixedArray<DeprecatedFlyString>::create({ HTML::TagNames::iframe });
|
||||
return FixedArray<FlyString>::create({ HTML::TagNames::iframe });
|
||||
if (html_element_interface_name == "HTMLImageElement"sv)
|
||||
return FixedArray<DeprecatedFlyString>::create({ HTML::TagNames::img });
|
||||
return FixedArray<FlyString>::create({ HTML::TagNames::img });
|
||||
if (html_element_interface_name == "HTMLInputElement"sv)
|
||||
return FixedArray<DeprecatedFlyString>::create({ HTML::TagNames::input });
|
||||
return FixedArray<FlyString>::create({ HTML::TagNames::input });
|
||||
if (html_element_interface_name == "HTMLLabelElement"sv)
|
||||
return FixedArray<DeprecatedFlyString>::create({ HTML::TagNames::label });
|
||||
return FixedArray<FlyString>::create({ HTML::TagNames::label });
|
||||
if (html_element_interface_name == "HTMLLIElement"sv)
|
||||
return FixedArray<DeprecatedFlyString>::create({ HTML::TagNames::li });
|
||||
return FixedArray<FlyString>::create({ HTML::TagNames::li });
|
||||
if (html_element_interface_name == "HTMLLinkElement"sv)
|
||||
return FixedArray<DeprecatedFlyString>::create({ HTML::TagNames::link });
|
||||
return FixedArray<FlyString>::create({ HTML::TagNames::link });
|
||||
if (html_element_interface_name == "HTMLMapElement"sv)
|
||||
return FixedArray<DeprecatedFlyString>::create({ HTML::TagNames::map });
|
||||
return FixedArray<FlyString>::create({ HTML::TagNames::map });
|
||||
if (html_element_interface_name == "HTMLMarqueeElement"sv)
|
||||
return FixedArray<DeprecatedFlyString>::create({ HTML::TagNames::marquee });
|
||||
return FixedArray<FlyString>::create({ HTML::TagNames::marquee });
|
||||
if (html_element_interface_name == "HTMLMenuElement"sv)
|
||||
return FixedArray<DeprecatedFlyString>::create({ HTML::TagNames::menu });
|
||||
return FixedArray<FlyString>::create({ HTML::TagNames::menu });
|
||||
if (html_element_interface_name == "HTMLMeterElement"sv)
|
||||
return FixedArray<DeprecatedFlyString>::create({ HTML::TagNames::meter });
|
||||
return FixedArray<FlyString>::create({ HTML::TagNames::meter });
|
||||
if (html_element_interface_name == "HTMLModElement"sv)
|
||||
return FixedArray<DeprecatedFlyString>::create({ HTML::TagNames::ins, HTML::TagNames::del });
|
||||
return FixedArray<FlyString>::create({ HTML::TagNames::ins, HTML::TagNames::del });
|
||||
if (html_element_interface_name == "HTMLObjectElement"sv)
|
||||
return FixedArray<DeprecatedFlyString>::create({ HTML::TagNames::object });
|
||||
return FixedArray<FlyString>::create({ HTML::TagNames::object });
|
||||
if (html_element_interface_name == "HTMLOutputElement"sv)
|
||||
return FixedArray<DeprecatedFlyString>::create({ HTML::TagNames::output });
|
||||
return FixedArray<FlyString>::create({ HTML::TagNames::output });
|
||||
if (html_element_interface_name == "HTMLParagraphElement"sv)
|
||||
return FixedArray<DeprecatedFlyString>::create({ HTML::TagNames::p });
|
||||
return FixedArray<FlyString>::create({ HTML::TagNames::p });
|
||||
if (html_element_interface_name == "HTMLParamElement"sv)
|
||||
return FixedArray<DeprecatedFlyString>::create({ HTML::TagNames::param });
|
||||
return FixedArray<FlyString>::create({ HTML::TagNames::param });
|
||||
if (html_element_interface_name == "HTMLPictureElement"sv)
|
||||
return FixedArray<DeprecatedFlyString>::create({ HTML::TagNames::picture });
|
||||
return FixedArray<FlyString>::create({ HTML::TagNames::picture });
|
||||
if (html_element_interface_name == "HTMLPreElement"sv)
|
||||
return FixedArray<DeprecatedFlyString>::create({ HTML::TagNames::pre, HTML::TagNames::listing, HTML::TagNames::xmp });
|
||||
return FixedArray<FlyString>::create({ HTML::TagNames::pre, HTML::TagNames::listing, HTML::TagNames::xmp });
|
||||
if (html_element_interface_name == "HTMLProgressElement"sv)
|
||||
return FixedArray<DeprecatedFlyString>::create({ HTML::TagNames::progress });
|
||||
return FixedArray<FlyString>::create({ HTML::TagNames::progress });
|
||||
if (html_element_interface_name == "HTMLQuoteElement"sv)
|
||||
return FixedArray<DeprecatedFlyString>::create({ HTML::TagNames::blockquote, HTML::TagNames::q });
|
||||
return FixedArray<FlyString>::create({ HTML::TagNames::blockquote, HTML::TagNames::q });
|
||||
if (html_element_interface_name == "HTMLScriptElement"sv)
|
||||
return FixedArray<DeprecatedFlyString>::create({ HTML::TagNames::script });
|
||||
return FixedArray<FlyString>::create({ HTML::TagNames::script });
|
||||
if (html_element_interface_name == "HTMLSelectElement"sv)
|
||||
return FixedArray<DeprecatedFlyString>::create({ HTML::TagNames::select });
|
||||
return FixedArray<FlyString>::create({ HTML::TagNames::select });
|
||||
if (html_element_interface_name == "HTMLSlotElement"sv)
|
||||
return FixedArray<DeprecatedFlyString>::create({ HTML::TagNames::slot });
|
||||
return FixedArray<FlyString>::create({ HTML::TagNames::slot });
|
||||
if (html_element_interface_name == "HTMLSourceElement"sv)
|
||||
return FixedArray<DeprecatedFlyString>::create({ HTML::TagNames::source });
|
||||
return FixedArray<FlyString>::create({ HTML::TagNames::source });
|
||||
if (html_element_interface_name == "HTMLSpanElement"sv)
|
||||
return FixedArray<DeprecatedFlyString>::create({ HTML::TagNames::span });
|
||||
return FixedArray<FlyString>::create({ HTML::TagNames::span });
|
||||
if (html_element_interface_name == "HTMLStyleElement"sv)
|
||||
return FixedArray<DeprecatedFlyString>::create({ HTML::TagNames::style });
|
||||
return FixedArray<FlyString>::create({ HTML::TagNames::style });
|
||||
if (html_element_interface_name == "HTMLTableCaptionElement"sv)
|
||||
return FixedArray<DeprecatedFlyString>::create({ HTML::TagNames::caption });
|
||||
return FixedArray<FlyString>::create({ HTML::TagNames::caption });
|
||||
if (html_element_interface_name == "HTMLTableCellElement"sv)
|
||||
return FixedArray<DeprecatedFlyString>::create({ HTML::TagNames::td, HTML::TagNames::th });
|
||||
return FixedArray<FlyString>::create({ HTML::TagNames::td, HTML::TagNames::th });
|
||||
if (html_element_interface_name == "HTMLTableColElement"sv)
|
||||
return FixedArray<DeprecatedFlyString>::create({ HTML::TagNames::colgroup, HTML::TagNames::col });
|
||||
return FixedArray<FlyString>::create({ HTML::TagNames::colgroup, HTML::TagNames::col });
|
||||
if (html_element_interface_name == "HTMLTableElement"sv)
|
||||
return FixedArray<DeprecatedFlyString>::create({ HTML::TagNames::table });
|
||||
return FixedArray<FlyString>::create({ HTML::TagNames::table });
|
||||
if (html_element_interface_name == "HTMLTableSectionElement"sv)
|
||||
return FixedArray<DeprecatedFlyString>::create({ HTML::TagNames::tbody, HTML::TagNames::thead, HTML::TagNames::tfoot });
|
||||
return FixedArray<FlyString>::create({ HTML::TagNames::tbody, HTML::TagNames::thead, HTML::TagNames::tfoot });
|
||||
if (html_element_interface_name == "HTMLTemplateElement"sv)
|
||||
return FixedArray<DeprecatedFlyString>::create({ HTML::TagNames::template_ });
|
||||
return FixedArray<FlyString>::create({ HTML::TagNames::template_ });
|
||||
if (html_element_interface_name == "HTMLTextAreaElement"sv)
|
||||
return FixedArray<DeprecatedFlyString>::create({ HTML::TagNames::textarea });
|
||||
return FixedArray<FlyString>::create({ HTML::TagNames::textarea });
|
||||
if (html_element_interface_name == "HTMLTimeElement"sv)
|
||||
return FixedArray<DeprecatedFlyString>::create({ HTML::TagNames::time });
|
||||
return FixedArray<FlyString>::create({ HTML::TagNames::time });
|
||||
if (html_element_interface_name == "HTMLTitleElement"sv)
|
||||
return FixedArray<DeprecatedFlyString>::create({ HTML::TagNames::title });
|
||||
return FixedArray<FlyString>::create({ HTML::TagNames::title });
|
||||
if (html_element_interface_name == "HTMLTrackElement"sv)
|
||||
return FixedArray<DeprecatedFlyString>::create({ HTML::TagNames::track });
|
||||
return FixedArray<FlyString>::create({ HTML::TagNames::track });
|
||||
if (html_element_interface_name == "HTMLUListElement"sv)
|
||||
return FixedArray<DeprecatedFlyString>::create({ HTML::TagNames::ul });
|
||||
return FixedArray<FlyString>::create({ HTML::TagNames::ul });
|
||||
if (html_element_interface_name == "HTMLVideoElement"sv)
|
||||
return FixedArray<DeprecatedFlyString>::create({ HTML::TagNames::video });
|
||||
return FixedArray<FlyString>::create({ HTML::TagNames::video });
|
||||
if (html_element_interface_name == "HTMLElement"sv)
|
||||
return FixedArray<DeprecatedFlyString>::create({ 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, 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 FixedArray<DeprecatedFlyString>::create({});
|
||||
return FixedArray<FlyString>::create({ 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, 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 FixedArray<FlyString>::create({});
|
||||
}
|
||||
|
||||
// https://html.spec.whatwg.org/multipage/dom.html#elements-in-the-dom%3Aelement-interface
|
||||
bool is_unknown_html_element(DeprecatedFlyString const& tag_name)
|
||||
bool is_unknown_html_element(FlyString const& tag_name)
|
||||
{
|
||||
// NOTE: This is intentionally case-sensitive.
|
||||
|
||||
|
@ -272,7 +273,7 @@ bool is_unknown_html_element(DeprecatedFlyString const& tag_name)
|
|||
// https://html.spec.whatwg.org/#elements-in-the-dom:element-interface
|
||||
static JS::NonnullGCPtr<Element> create_html_element(JS::Realm& realm, Document& document, QualifiedName qualified_name)
|
||||
{
|
||||
auto lowercase_tag_name = qualified_name.local_name().to_deprecated_fly_string().to_lowercase();
|
||||
FlyString lowercase_tag_name = MUST(Infra::to_ascii_lowercase(qualified_name.local_name()));
|
||||
|
||||
if (lowercase_tag_name == HTML::TagNames::a)
|
||||
return realm.heap().allocate<HTML::HTMLAnchorElement>(realm, document, move(qualified_name));
|
||||
|
@ -489,7 +490,7 @@ static JS::GCPtr<MathML::MathMLElement> create_mathml_element(JS::Realm& realm,
|
|||
return nullptr;
|
||||
}
|
||||
// https://dom.spec.whatwg.org/#concept-create-element
|
||||
WebIDL::ExceptionOr<JS::NonnullGCPtr<Element>> create_element(Document& document, DeprecatedFlyString local_name, DeprecatedFlyString namespace_, DeprecatedFlyString prefix, Optional<String> is_value, bool synchronous_custom_elements_flag)
|
||||
WebIDL::ExceptionOr<JS::NonnullGCPtr<Element>> create_element(Document& document, FlyString local_name, DeprecatedFlyString namespace_, DeprecatedFlyString prefix, Optional<String> is_value, bool synchronous_custom_elements_flag)
|
||||
{
|
||||
auto& realm = document.realm();
|
||||
|
||||
|
@ -503,7 +504,7 @@ WebIDL::ExceptionOr<JS::NonnullGCPtr<Element>> create_element(Document& document
|
|||
// NOTE: We collapse this into just returning an element where necessary.
|
||||
|
||||
// 4. Let definition be the result of looking up a custom element definition given document, namespace, localName, and is.
|
||||
auto definition = document.lookup_custom_element_definition(namespace_, local_name, is_value);
|
||||
auto definition = document.lookup_custom_element_definition(namespace_, local_name.to_deprecated_fly_string(), is_value);
|
||||
|
||||
// 5. If definition is non-null, and definition’s name is not equal to its local name (i.e., definition represents a customized built-in element), then:
|
||||
if (definition && definition->name() != definition->local_name()) {
|
||||
|
@ -511,7 +512,7 @@ WebIDL::ExceptionOr<JS::NonnullGCPtr<Element>> create_element(Document& document
|
|||
// 2. Set result to a new element that implements interface, with no attributes, namespace set to the HTML namespace,
|
||||
// namespace prefix set to prefix, local name set to localName, custom element state set to "undefined", custom element definition set to null,
|
||||
// is value set to is, and node document set to document.
|
||||
auto element = create_html_element(realm, document, QualifiedName { MUST(FlyString::from_deprecated_fly_string(local_name)), prefix, Namespace::HTML });
|
||||
auto element = create_html_element(realm, document, QualifiedName { local_name, prefix, Namespace::HTML });
|
||||
|
||||
// 3. If the synchronous custom elements flag is set, then run this step while catching any exceptions:
|
||||
if (synchronous_custom_elements_flag) {
|
||||
|
@ -596,7 +597,7 @@ WebIDL::ExceptionOr<JS::NonnullGCPtr<Element>> create_element(Document& document
|
|||
|
||||
// 2. Set result to a new element that implements the HTMLUnknownElement interface, with no attributes, namespace set to the HTML namespace, namespace prefix set to prefix,
|
||||
// local name set to localName, custom element state set to "failed", custom element definition set to null, is value set to null, and node document set to document.
|
||||
JS::NonnullGCPtr<Element> element = realm.heap().allocate<HTML::HTMLUnknownElement>(realm, document, QualifiedName { MUST(FlyString::from_deprecated_fly_string(local_name)), prefix, Namespace::HTML });
|
||||
JS::NonnullGCPtr<Element> element = realm.heap().allocate<HTML::HTMLUnknownElement>(realm, document, QualifiedName { local_name, prefix, Namespace::HTML });
|
||||
element->set_custom_element_state(CustomElementState::Failed);
|
||||
return element;
|
||||
}
|
||||
|
@ -607,7 +608,7 @@ WebIDL::ExceptionOr<JS::NonnullGCPtr<Element>> create_element(Document& document
|
|||
// 2. Otherwise:
|
||||
// 1. Set result to a new element that implements the HTMLElement interface, with no attributes, namespace set to the HTML namespace, namespace prefix set to prefix,
|
||||
// local name set to localName, custom element state set to "undefined", custom element definition set to null, is value set to null, and node document set to document.
|
||||
auto element = realm.heap().allocate<HTML::HTMLElement>(realm, document, QualifiedName { MUST(FlyString::from_deprecated_fly_string(local_name)), prefix, Namespace::HTML });
|
||||
auto element = realm.heap().allocate<HTML::HTMLElement>(realm, document, QualifiedName { local_name, prefix, Namespace::HTML });
|
||||
element->set_custom_element_state(CustomElementState::Undefined);
|
||||
|
||||
// 2. Enqueue a custom element upgrade reaction given result and definition.
|
||||
|
@ -621,7 +622,7 @@ WebIDL::ExceptionOr<JS::NonnullGCPtr<Element>> create_element(Document& document
|
|||
// local name set to localName, custom element state set to "uncustomized", custom element definition set to null, is value set to is,
|
||||
// and node document set to document.
|
||||
|
||||
auto qualified_name = QualifiedName { MUST(FlyString::from_deprecated_fly_string(local_name)), prefix, namespace_ };
|
||||
auto qualified_name = QualifiedName { local_name, prefix, namespace_ };
|
||||
|
||||
if (namespace_ == Namespace::HTML) {
|
||||
auto element = create_html_element(realm, document, move(qualified_name));
|
||||
|
|
|
@ -11,10 +11,10 @@
|
|||
|
||||
namespace Web::DOM {
|
||||
|
||||
ErrorOr<FixedArray<DeprecatedFlyString>> valid_local_names_for_given_html_element_interface(StringView html_element_interface_name);
|
||||
bool is_unknown_html_element(DeprecatedFlyString const& tag_name);
|
||||
ErrorOr<FixedArray<FlyString>> valid_local_names_for_given_html_element_interface(StringView html_element_interface_name);
|
||||
bool is_unknown_html_element(FlyString const& tag_name);
|
||||
|
||||
// FIXME: The spec doesn't say what the default value of synchronous_custom_elements_flag should be.
|
||||
WebIDL::ExceptionOr<JS::NonnullGCPtr<Element>> create_element(Document&, DeprecatedFlyString local_name, DeprecatedFlyString namespace_, DeprecatedFlyString prefix = {}, Optional<String> is = Optional<String> {}, bool synchronous_custom_elements_flag = false);
|
||||
WebIDL::ExceptionOr<JS::NonnullGCPtr<Element>> create_element(Document&, FlyString local_name, DeprecatedFlyString namespace_, DeprecatedFlyString prefix = {}, Optional<String> is = Optional<String> {}, bool synchronous_custom_elements_flag = false);
|
||||
|
||||
}
|
||||
|
|
|
@ -165,8 +165,10 @@ JS::NonnullGCPtr<HTMLCollection> ParentNode::get_elements_by_tag_name(Deprecated
|
|||
|
||||
// https://dom.spec.whatwg.org/#concept-getelementsbytagnamens
|
||||
// NOTE: This method is only exposed on Document and Element, but is in ParentNode to prevent code duplication.
|
||||
JS::NonnullGCPtr<HTMLCollection> ParentNode::get_elements_by_tag_name_ns(DeprecatedFlyString const& nullable_namespace, DeprecatedFlyString const& local_name)
|
||||
JS::NonnullGCPtr<HTMLCollection> ParentNode::get_elements_by_tag_name_ns(DeprecatedFlyString const& nullable_namespace, DeprecatedFlyString const& deprecated_local_name)
|
||||
{
|
||||
auto local_name = MUST(FlyString::from_deprecated_fly_string(deprecated_local_name));
|
||||
|
||||
// 1. If namespace is the empty string, set it to null.
|
||||
DeprecatedString namespace_ = nullable_namespace;
|
||||
if (namespace_.is_empty())
|
||||
|
|
|
@ -1181,7 +1181,7 @@ WebIDL::ExceptionOr<JS::NonnullGCPtr<DocumentFragment>> Range::create_contextual
|
|||
// - "body" as its local name,
|
||||
// - The HTML namespace as its namespace, and
|
||||
// - The context object's node document as its node document.
|
||||
element = TRY(DOM::create_element(node->document(), "body"sv, Namespace::HTML));
|
||||
element = TRY(DOM::create_element(node->document(), HTML::TagNames::body, Namespace::HTML));
|
||||
}
|
||||
|
||||
// 3. Let fragment node be the result of invoking the fragment parsing algorithm with fragment as markup, and element as the context element.
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue