From a3a5af3fd19a1f13b0747d7dbb671cc8b4b70a24 Mon Sep 17 00:00:00 2001 From: Sam Atkins Date: Fri, 29 Sep 2023 16:48:54 +0100 Subject: [PATCH] LibWeb: Implement `length` and `item()` for ResolvedCSSStyleDeclaration --- .../LibWeb/CSS/ResolvedCSSStyleDeclaration.cpp | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/Userland/Libraries/LibWeb/CSS/ResolvedCSSStyleDeclaration.cpp b/Userland/Libraries/LibWeb/CSS/ResolvedCSSStyleDeclaration.cpp index 7c172d1855..ed8f47e272 100644 --- a/Userland/Libraries/LibWeb/CSS/ResolvedCSSStyleDeclaration.cpp +++ b/Userland/Libraries/LibWeb/CSS/ResolvedCSSStyleDeclaration.cpp @@ -61,15 +61,23 @@ void ResolvedCSSStyleDeclaration::visit_edges(Cell::Visitor& visitor) visitor.visit(m_element.ptr()); } +// https://drafts.csswg.org/cssom/#dom-cssstyledeclaration-length size_t ResolvedCSSStyleDeclaration::length() const { - return 0; + // The length attribute must return the number of CSS declarations in the declarations. + // FIXME: Include the number of custom properties. + return to_underlying(last_longhand_property_id) - to_underlying(first_longhand_property_id) + 1; } +// https://drafts.csswg.org/cssom/#dom-cssstyledeclaration-item String ResolvedCSSStyleDeclaration::item(size_t index) const { - (void)index; - return {}; + // The item(index) method must return the property name of the CSS declaration at position index. + // FIXME: Return custom properties if index > last_longhand_property_id. + if (index > length()) + return {}; + auto property_id = static_cast(index + to_underlying(first_longhand_property_id)); + return MUST(String::from_utf8(string_from_property_id(property_id))); } static NonnullRefPtr style_value_for_background_property(Layout::NodeWithStyle const& layout_node, Function(BackgroundLayerData const&)> callback, Function()> default_value)