diff --git a/Meta/gn/secondary/Userland/Libraries/LibWeb/SVG/BUILD.gn b/Meta/gn/secondary/Userland/Libraries/LibWeb/SVG/BUILD.gn index 96da1c8ef9c..3b5a79c6281 100644 --- a/Meta/gn/secondary/Userland/Libraries/LibWeb/SVG/BUILD.gn +++ b/Meta/gn/secondary/Userland/Libraries/LibWeb/SVG/BUILD.gn @@ -25,6 +25,7 @@ source_set("SVG") { "SVGLineElement.cpp", "SVGLinearGradientElement.cpp", "SVGMaskElement.cpp", + "SVGMetadataElement.cpp", "SVGPathElement.cpp", "SVGPolygonElement.cpp", "SVGPolylineElement.cpp", diff --git a/Meta/gn/secondary/Userland/Libraries/LibWeb/idl_files.gni b/Meta/gn/secondary/Userland/Libraries/LibWeb/idl_files.gni index a609573c978..b9d16f02edb 100644 --- a/Meta/gn/secondary/Userland/Libraries/LibWeb/idl_files.gni +++ b/Meta/gn/secondary/Userland/Libraries/LibWeb/idl_files.gni @@ -289,6 +289,7 @@ standard_idl_files = [ "//Userland/Libraries/LibWeb/SVG/SVGLinearGradientElement.idl", "//Userland/Libraries/LibWeb/SVG/SVGLineElement.idl", "//Userland/Libraries/LibWeb/SVG/SVGMaskElement.idl", + "//Userland/Libraries/LibWeb/SVG/SVGMetadataElement.idl", "//Userland/Libraries/LibWeb/SVG/SVGPathElement.idl", "//Userland/Libraries/LibWeb/SVG/SVGPolygonElement.idl", "//Userland/Libraries/LibWeb/SVG/SVGPolylineElement.idl", diff --git a/Tests/LibWeb/Text/expected/all-window-properties.txt b/Tests/LibWeb/Text/expected/all-window-properties.txt index 834b2f2bf3e..b339bf562f7 100644 --- a/Tests/LibWeb/Text/expected/all-window-properties.txt +++ b/Tests/LibWeb/Text/expected/all-window-properties.txt @@ -287,6 +287,7 @@ SVGLineElement SVGLinearGradientElement SVGMaskElement SVGMatrix +SVGMetadataElement SVGPathElement SVGPoint SVGPolygonElement diff --git a/Userland/Libraries/LibWeb/CMakeLists.txt b/Userland/Libraries/LibWeb/CMakeLists.txt index 06de725ed6a..8427ee3846b 100644 --- a/Userland/Libraries/LibWeb/CMakeLists.txt +++ b/Userland/Libraries/LibWeb/CMakeLists.txt @@ -654,6 +654,7 @@ set(SOURCES SVG/SVGLineElement.cpp SVG/SVGLinearGradientElement.cpp SVG/SVGMaskElement.cpp + SVG/SVGMetadataElement.cpp SVG/SVGPolygonElement.cpp SVG/SVGPolylineElement.cpp SVG/SVGRectElement.cpp diff --git a/Userland/Libraries/LibWeb/DOM/ElementFactory.cpp b/Userland/Libraries/LibWeb/DOM/ElementFactory.cpp index aed7fd79a66..68510812e6d 100644 --- a/Userland/Libraries/LibWeb/DOM/ElementFactory.cpp +++ b/Userland/Libraries/LibWeb/DOM/ElementFactory.cpp @@ -95,6 +95,7 @@ #include #include #include +#include #include #include #include @@ -453,6 +454,8 @@ static JS::GCPtr create_svg_element(JS::Realm& realm, Document& return realm.heap().allocate(realm, document, move(qualified_name)); if (local_name == SVG::TagNames::mask) return realm.heap().allocate(realm, document, move(qualified_name)); + if (local_name == SVG::TagNames::metadata) + return realm.heap().allocate(realm, document, move(qualified_name)); if (local_name == SVG::TagNames::path) return realm.heap().allocate(realm, document, move(qualified_name)); if (local_name == SVG::TagNames::polygon) diff --git a/Userland/Libraries/LibWeb/Forward.h b/Userland/Libraries/LibWeb/Forward.h index 28e8e461c16..6c5eed5d65d 100644 --- a/Userland/Libraries/LibWeb/Forward.h +++ b/Userland/Libraries/LibWeb/Forward.h @@ -682,6 +682,7 @@ class SVGGraphicsElement; class SVGLength; class SVGLineElement; class SVGMaskElement; +class SVGMetadataElement; class SVGPathElement; class SVGPolygonElement; class SVGPolylineElement; diff --git a/Userland/Libraries/LibWeb/SVG/SVGMetadataElement.cpp b/Userland/Libraries/LibWeb/SVG/SVGMetadataElement.cpp new file mode 100644 index 00000000000..e9127f78f7a --- /dev/null +++ b/Userland/Libraries/LibWeb/SVG/SVGMetadataElement.cpp @@ -0,0 +1,33 @@ +/* + * Copyright (c) 2024, Jamie Mansfield + * + * SPDX-License-Identifier: BSD-2-Clause + */ + +#include +#include +#include +#include +#include + +namespace Web::SVG { + +JS_DEFINE_ALLOCATOR(SVGMetadataElement); + +SVGMetadataElement::SVGMetadataElement(DOM::Document& document, DOM::QualifiedName qualified_name) + : SVGElement(document, move(qualified_name)) +{ +} + +void SVGMetadataElement::initialize(JS::Realm& realm) +{ + Base::initialize(realm); + WEB_SET_PROTOTYPE_FOR_INTERFACE(SVGMetadataElement); +} + +JS::GCPtr SVGMetadataElement::create_layout_node(NonnullRefPtr) +{ + return nullptr; +} + +} diff --git a/Userland/Libraries/LibWeb/SVG/SVGMetadataElement.h b/Userland/Libraries/LibWeb/SVG/SVGMetadataElement.h new file mode 100644 index 00000000000..76ff35e3104 --- /dev/null +++ b/Userland/Libraries/LibWeb/SVG/SVGMetadataElement.h @@ -0,0 +1,26 @@ +/* + * Copyright (c) 2024, Jamie Mansfield + * + * SPDX-License-Identifier: BSD-2-Clause + */ + +#pragma once + +#include + +namespace Web::SVG { + +// https://svgwg.org/svg2-draft/struct.html#InterfaceSVGMetadataElement +class SVGMetadataElement final : public SVGElement { + WEB_PLATFORM_OBJECT(SVGMetadataElement, SVGElement); + JS_DECLARE_ALLOCATOR(SVGMetadataElement); + +private: + SVGMetadataElement(DOM::Document&, DOM::QualifiedName); + + virtual void initialize(JS::Realm&) override; + + virtual JS::GCPtr create_layout_node(NonnullRefPtr) override; +}; + +} diff --git a/Userland/Libraries/LibWeb/SVG/SVGMetadataElement.idl b/Userland/Libraries/LibWeb/SVG/SVGMetadataElement.idl new file mode 100644 index 00000000000..3561a65af02 --- /dev/null +++ b/Userland/Libraries/LibWeb/SVG/SVGMetadataElement.idl @@ -0,0 +1,6 @@ +#import + +// https://svgwg.org/svg2-draft/struct.html#InterfaceSVGMetadataElement +[Exposed=Window] +interface SVGMetadataElement : SVGElement { +}; diff --git a/Userland/Libraries/LibWeb/SVG/TagNames.h b/Userland/Libraries/LibWeb/SVG/TagNames.h index 1d0c0f8309f..fdf1655fefa 100644 --- a/Userland/Libraries/LibWeb/SVG/TagNames.h +++ b/Userland/Libraries/LibWeb/SVG/TagNames.h @@ -34,6 +34,7 @@ namespace Web::SVG::TagNames { __ENUMERATE_SVG_TAG(foreignObject) \ __ENUMERATE_SVG_TAG(linearGradient) \ __ENUMERATE_SVG_TAG(mask) \ + __ENUMERATE_SVG_TAG(metadata) \ __ENUMERATE_SVG_TAG(radialGradient) \ __ENUMERATE_SVG_TAG(script) \ __ENUMERATE_SVG_TAG(stop) \ diff --git a/Userland/Libraries/LibWeb/idl_files.cmake b/Userland/Libraries/LibWeb/idl_files.cmake index ef5b3b1174e..45066447a93 100644 --- a/Userland/Libraries/LibWeb/idl_files.cmake +++ b/Userland/Libraries/LibWeb/idl_files.cmake @@ -278,6 +278,7 @@ libweb_js_bindings(SVG/SVGLength) libweb_js_bindings(SVG/SVGLineElement) libweb_js_bindings(SVG/SVGLinearGradientElement) libweb_js_bindings(SVG/SVGMaskElement) +libweb_js_bindings(SVG/SVGMetadataElement) libweb_js_bindings(SVG/SVGPathElement) libweb_js_bindings(SVG/SVGPolygonElement) libweb_js_bindings(SVG/SVGPolylineElement)