/* * Copyright (c) 2025, Sam Atkins * * SPDX-License-Identifier: BSD-2-Clause */ #pragma once #include #include #include namespace Web::CSS { // A non-spec base class for descriptor-list classes class CSSDescriptors : public CSSStyleDeclaration { WEB_NON_IDL_PLATFORM_OBJECT(CSSDescriptors, CSSStyleDeclaration); public: virtual ~CSSDescriptors() override; virtual size_t length() const override; virtual String item(size_t index) const override; virtual WebIDL::ExceptionOr set_property(FlyString const& property, StringView value, StringView priority) override; virtual WebIDL::ExceptionOr remove_property(FlyString const& property) override; virtual String get_property_value(FlyString const& property) const override; virtual StringView get_property_priority(FlyString const& property) const override; Vector const& descriptors() const { return m_descriptors; } RefPtr descriptor(DescriptorNameAndID const&) const; RefPtr descriptor_or_initial_value(DescriptorNameAndID const&) const; virtual String serialized() const override; virtual WebIDL::ExceptionOr set_css_text(StringView) override; protected: CSSDescriptors(JS::Realm&, AtRuleID, Vector); private: bool set_a_css_declaration(DescriptorNameAndID const&, NonnullRefPtr, Important); virtual void visit_edges(Visitor&) override; AtRuleID m_at_rule_id; Vector m_descriptors; }; bool is_shorthand(AtRuleID, DescriptorNameAndID const&); void for_each_expanded_longhand(AtRuleID, DescriptorNameAndID const&, RefPtr, Function)>); }