diff --git a/Libraries/LibWeb/DOM/Node.h b/Libraries/LibWeb/DOM/Node.h index efa58b96726..1732b1cb48b 100644 --- a/Libraries/LibWeb/DOM/Node.h +++ b/Libraries/LibWeb/DOM/Node.h @@ -1,5 +1,5 @@ /* - * Copyright (c) 2018-2024, Andreas Kling + * Copyright (c) 2018-2025, Andreas Kling * * SPDX-License-Identifier: BSD-2-Clause */ @@ -144,6 +144,8 @@ public: virtual bool is_svg_style_element() const { return false; } virtual bool is_svg_svg_element() const { return false; } virtual bool is_svg_use_element() const { return false; } + virtual bool is_svg_a_element() const { return false; } + virtual bool is_svg_foreign_object_element() const { return false; } bool in_a_document_tree() const; @@ -158,10 +160,13 @@ public: virtual bool is_html_element() const { return false; } virtual bool is_html_html_element() const { return false; } virtual bool is_html_anchor_element() const { return false; } + virtual bool is_html_area_element() const { return false; } virtual bool is_html_base_element() const { return false; } virtual bool is_html_body_element() const { return false; } + virtual bool is_html_head_element() const { return false; } virtual bool is_html_input_element() const { return false; } virtual bool is_html_link_element() const { return false; } + virtual bool is_html_media_element() const { return false; } virtual bool is_html_progress_element() const { return false; } virtual bool is_html_script_element() const { return false; } virtual bool is_html_style_element() const { return false; } @@ -170,6 +175,7 @@ public: virtual bool is_html_table_section_element() const { return false; } virtual bool is_html_table_row_element() const { return false; } virtual bool is_html_table_cell_element() const { return false; } + virtual bool is_html_title_element() const { return false; } virtual bool is_html_br_element() const { return false; } virtual bool is_html_button_element() const { return false; } virtual bool is_html_slot_element() const { return false; } @@ -178,6 +184,8 @@ public: virtual bool is_html_form_element() const { return false; } virtual bool is_html_image_element() const { return false; } virtual bool is_html_iframe_element() const { return false; } + virtual bool is_html_frameset_element() const { return false; } + virtual bool is_html_fieldset_element() const { return false; } virtual bool is_navigable_container() const { return false; } virtual bool is_lazy_loading() const { return false; } diff --git a/Libraries/LibWeb/HTML/HTMLAreaElement.h b/Libraries/LibWeb/HTML/HTMLAreaElement.h index 0ac96cb03a9..663d4331ca5 100644 --- a/Libraries/LibWeb/HTML/HTMLAreaElement.h +++ b/Libraries/LibWeb/HTML/HTMLAreaElement.h @@ -25,6 +25,8 @@ public: private: HTMLAreaElement(DOM::Document&, DOM::QualifiedName); + virtual bool is_html_area_element() const override { return true; } + virtual void initialize(JS::Realm&) override; virtual void visit_edges(Cell::Visitor&) override; @@ -59,3 +61,8 @@ private: }; } + +namespace Web::DOM { +template<> +inline bool Node::fast_is() const { return is_html_area_element(); } +} diff --git a/Libraries/LibWeb/HTML/HTMLFieldSetElement.h b/Libraries/LibWeb/HTML/HTMLFieldSetElement.h index fa60703acf7..c6bafcb85cb 100644 --- a/Libraries/LibWeb/HTML/HTMLFieldSetElement.h +++ b/Libraries/LibWeb/HTML/HTMLFieldSetElement.h @@ -54,7 +54,14 @@ private: virtual void initialize(JS::Realm&) override; virtual void visit_edges(Cell::Visitor&) override; + virtual bool is_html_fieldset_element() const override { return true; } + GC::Ptr m_elements; }; } + +namespace Web::DOM { +template<> +inline bool Node::fast_is() const { return is_html_fieldset_element(); } +} diff --git a/Libraries/LibWeb/HTML/HTMLFrameSetElement.h b/Libraries/LibWeb/HTML/HTMLFrameSetElement.h index 62a4ef04305..14ae65f7197 100644 --- a/Libraries/LibWeb/HTML/HTMLFrameSetElement.h +++ b/Libraries/LibWeb/HTML/HTMLFrameSetElement.h @@ -24,6 +24,8 @@ public: private: HTMLFrameSetElement(DOM::Document&, DOM::QualifiedName); + virtual bool is_html_frameset_element() const override { return true; } + virtual void adjust_computed_style(CSS::ComputedProperties&) override; virtual void initialize(JS::Realm&) override; @@ -37,3 +39,8 @@ private: }; } + +namespace Web::DOM { +template<> +inline bool Node::fast_is() const { return is_html_frameset_element(); } +} diff --git a/Libraries/LibWeb/HTML/HTMLHeadElement.h b/Libraries/LibWeb/HTML/HTMLHeadElement.h index 9105033394b..632b441b009 100644 --- a/Libraries/LibWeb/HTML/HTMLHeadElement.h +++ b/Libraries/LibWeb/HTML/HTMLHeadElement.h @@ -20,7 +20,13 @@ public: private: HTMLHeadElement(DOM::Document&, DOM::QualifiedName); + virtual bool is_html_head_element() const final { return true; } virtual void initialize(JS::Realm&) override; }; } + +namespace Web::DOM { +template<> +inline bool Node::fast_is() const { return is_html_head_element(); } +} diff --git a/Libraries/LibWeb/HTML/HTMLIFrameElement.h b/Libraries/LibWeb/HTML/HTMLIFrameElement.h index 0bf82bd79be..39b13c86d4b 100644 --- a/Libraries/LibWeb/HTML/HTMLIFrameElement.h +++ b/Libraries/LibWeb/HTML/HTMLIFrameElement.h @@ -69,3 +69,8 @@ private: void run_iframe_load_event_steps(HTML::HTMLIFrameElement&); } + +namespace Web::DOM { +template<> +inline bool Node::fast_is() const { return is_html_iframe_element(); } +} diff --git a/Libraries/LibWeb/HTML/HTMLMediaElement.h b/Libraries/LibWeb/HTML/HTMLMediaElement.h index 99fbbb170ab..38dc0c444af 100644 --- a/Libraries/LibWeb/HTML/HTMLMediaElement.h +++ b/Libraries/LibWeb/HTML/HTMLMediaElement.h @@ -182,6 +182,8 @@ protected: private: friend SourceElementSelector; + virtual bool is_html_media_element() const final { return true; } + struct EntireResource { }; using ByteRange = Variant; // FIXME: This will need to include "until end" and an actual byte range. @@ -324,3 +326,8 @@ private: }; } + +namespace Web::DOM { +template<> +inline bool Node::fast_is() const { return is_html_media_element(); } +} diff --git a/Libraries/LibWeb/HTML/HTMLTitleElement.h b/Libraries/LibWeb/HTML/HTMLTitleElement.h index b99cd99aae2..ea918412e84 100644 --- a/Libraries/LibWeb/HTML/HTMLTitleElement.h +++ b/Libraries/LibWeb/HTML/HTMLTitleElement.h @@ -23,8 +23,14 @@ public: private: HTMLTitleElement(DOM::Document&, DOM::QualifiedName); + virtual bool is_html_title_element() const override { return true; } virtual void initialize(JS::Realm&) override; virtual void children_changed(ChildrenChangedMetadata const*) override; }; } + +namespace Web::DOM { +template<> +inline bool Node::fast_is() const { return is_html_title_element(); } +} diff --git a/Libraries/LibWeb/SVG/SVGAElement.h b/Libraries/LibWeb/SVG/SVGAElement.h index b33e887f643..425f6d6fe27 100644 --- a/Libraries/LibWeb/SVG/SVGAElement.h +++ b/Libraries/LibWeb/SVG/SVGAElement.h @@ -31,6 +31,8 @@ private: virtual void initialize(JS::Realm&) override; virtual void visit_edges(Cell::Visitor&) override; + virtual bool is_svg_a_element() const override { return true; } + // ^DOM::Element virtual void attribute_changed(FlyString const& name, Optional const& old_value, Optional const& value, Optional const& namespace_) override; virtual i32 default_tab_index_value() const override; @@ -39,3 +41,8 @@ private: }; } + +namespace Web::DOM { +template<> +inline bool Node::fast_is() const { return is_svg_a_element(); } +} diff --git a/Libraries/LibWeb/SVG/SVGForeignObjectElement.h b/Libraries/LibWeb/SVG/SVGForeignObjectElement.h index c0330dd7415..ce441f287b9 100644 --- a/Libraries/LibWeb/SVG/SVGForeignObjectElement.h +++ b/Libraries/LibWeb/SVG/SVGForeignObjectElement.h @@ -28,6 +28,8 @@ public: private: SVGForeignObjectElement(DOM::Document& document, DOM::QualifiedName qualified_name); + virtual bool is_svg_foreign_object_element() const override { return true; } + virtual void initialize(JS::Realm&) override; virtual void visit_edges(Cell::Visitor&) override; @@ -41,3 +43,8 @@ private: }; } + +namespace Web::DOM { +template<> +inline bool Node::fast_is() const { return is_svg_foreign_object_element(); } +}