/* * Copyright (c) 2025, Sam Atkins * * SPDX-License-Identifier: BSD-2-Clause */ #pragma once #include #include #include namespace Web::CSS { // https://drafts.csswg.org/css-page-3/#at-ruledef-page class CSSPageRule final : public CSSGroupingRule { WEB_PLATFORM_OBJECT(CSSPageRule, CSSGroupingRule); GC_DECLARE_ALLOCATOR(CSSPageRule); public: [[nodiscard]] static GC::Ref create(JS::Realm&, PageSelectorList&&, GC::Ref, CSSRuleList&); virtual ~CSSPageRule() override = default; String selector_text() const; void set_selector_text(StringView); GC::Ref style() { return m_style; } GC::Ref descriptors() const { return m_style; } private: CSSPageRule(JS::Realm&, PageSelectorList&&, GC::Ref, CSSRuleList&); virtual void initialize(JS::Realm&) override; virtual String serialized() const override; virtual void visit_edges(Visitor&) override; PageSelectorList m_selectors; GC::Ref m_style; }; } namespace AK { template<> struct Formatter : Formatter { ErrorOr format(FormatBuilder& builder, Web::CSS::PageSelector const& selector) { return Formatter::format(builder, selector.serialize()); } }; }