ladybird/Libraries/LibWeb/CSS/StylePropertyMapReadOnly.h
Sam Atkins 2f02ccc5c1 LibWeb/CSS: Take PropertyNameAndID in in style-only CSSSD methods
StylePropertyMap only ever works with style properties - never
descriptors. Switching `has_property()` and `get_property_style_value()`
to taking PropertyNameAndID skips some duplicate work.
2025-10-02 13:46:04 +01:00

47 lines
1.7 KiB
C++
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

/*
* Copyright (c) 2025, Sam Atkins <sam@ladybird.org>
*
* SPDX-License-Identifier: BSD-2-Clause
*/
#pragma once
#include <LibWeb/Bindings/PlatformObject.h>
#include <LibWeb/CSS/StyleValues/StyleValue.h>
#include <LibWeb/DOM/AbstractElement.h>
#include <LibWeb/WebIDL/Types.h>
namespace Web::CSS {
// https://drafts.css-houdini.org/css-typed-om-1/#stylepropertymapreadonly
class StylePropertyMapReadOnly : public Bindings::PlatformObject {
WEB_PLATFORM_OBJECT(StylePropertyMapReadOnly, Bindings::PlatformObject);
GC_DECLARE_ALLOCATOR(StylePropertyMapReadOnly);
public:
[[nodiscard]] static GC::Ref<StylePropertyMapReadOnly> create_computed_style(JS::Realm&, DOM::AbstractElement);
virtual ~StylePropertyMapReadOnly() override;
WebIDL::ExceptionOr<Variant<GC::Ref<CSSStyleValue>, Empty>> get(String property);
WebIDL::ExceptionOr<Vector<GC::Ref<CSSStyleValue>>> get_all(String property);
WebIDL::ExceptionOr<bool> has(String property);
WebIDL::UnsignedLong size() const;
protected:
using Source = Variant<DOM::AbstractElement, GC::Ref<CSSStyleDeclaration>>;
explicit StylePropertyMapReadOnly(JS::Realm&, Source);
virtual void initialize(JS::Realm&) override;
virtual void visit_edges(Cell::Visitor&) override;
static RefPtr<StyleValue const> get_style_value(Source&, PropertyNameAndID const& property);
// https://drafts.css-houdini.org/css-typed-om-1/#dom-stylepropertymapreadonly-declarations-slot
// A StylePropertyMapReadOnly object has a [[declarations]] internal slot, which is a map reflecting the CSS
// declaration blocks declarations.
// NB: We just directly refer to our source, at least for now.
Source m_declarations;
};
}