| 
									
										
										
										
											2025-05-13 12:17:41 +01:00
										 |  |  | /*
 | 
					
						
							|  |  |  |  * Copyright (c) 2025, Sam Atkins <sam@ladybird.org> | 
					
						
							|  |  |  |  * | 
					
						
							|  |  |  |  * SPDX-License-Identifier: BSD-2-Clause | 
					
						
							|  |  |  |  */ | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #pragma once
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #include <LibWeb/CSS/CSSGroupingRule.h>
 | 
					
						
							|  |  |  | #include <LibWeb/CSS/CSSPageDescriptors.h>
 | 
					
						
							| 
									
										
										
										
											2025-05-16 11:17:19 +01:00
										 |  |  | #include <LibWeb/CSS/PageSelector.h>
 | 
					
						
							| 
									
										
										
										
											2025-05-13 12:17:41 +01:00
										 |  |  | 
 | 
					
						
							|  |  |  | 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: | 
					
						
							| 
									
										
										
										
											2025-05-13 13:05:08 +01:00
										 |  |  |     [[nodiscard]] static GC::Ref<CSSPageRule> create(JS::Realm&, PageSelectorList&&, GC::Ref<CSSPageDescriptors>, CSSRuleList&); | 
					
						
							| 
									
										
										
										
											2025-05-13 12:17:41 +01:00
										 |  |  | 
 | 
					
						
							|  |  |  |     virtual ~CSSPageRule() override = default; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     String selector_text() const; | 
					
						
							|  |  |  |     void set_selector_text(StringView); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     GC::Ref<CSSPageDescriptors> style() { return m_style; } | 
					
						
							|  |  |  |     GC::Ref<CSSPageDescriptors const> descriptors() const { return m_style; } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | private: | 
					
						
							| 
									
										
										
										
											2025-05-13 13:05:08 +01:00
										 |  |  |     CSSPageRule(JS::Realm&, PageSelectorList&&, GC::Ref<CSSPageDescriptors>, CSSRuleList&); | 
					
						
							| 
									
										
										
										
											2025-05-13 12:17:41 +01:00
										 |  |  | 
 | 
					
						
							|  |  |  |     virtual void initialize(JS::Realm&) override; | 
					
						
							|  |  |  |     virtual String serialized() const override; | 
					
						
							|  |  |  |     virtual void visit_edges(Visitor&) override; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2025-05-13 13:05:08 +01:00
										 |  |  |     PageSelectorList m_selectors; | 
					
						
							| 
									
										
										
										
											2025-05-13 12:17:41 +01:00
										 |  |  |     GC::Ref<CSSPageDescriptors> m_style; | 
					
						
							|  |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | } | 
					
						
							| 
									
										
										
										
											2025-05-13 13:05:08 +01:00
										 |  |  | 
 | 
					
						
							|  |  |  | namespace AK { | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | template<> | 
					
						
							|  |  |  | struct Formatter<Web::CSS::PageSelector> : Formatter<StringView> { | 
					
						
							|  |  |  |     ErrorOr<void> format(FormatBuilder& builder, Web::CSS::PageSelector const& selector) | 
					
						
							|  |  |  |     { | 
					
						
							|  |  |  |         return Formatter<StringView>::format(builder, selector.serialize()); | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | } |