| 
									
										
										
										
											2021-02-21 13:45:26 +02:00
										 |  |  | /*
 | 
					
						
							|  |  |  |  * Copyright (c) 2021, the SerenityOS developers. | 
					
						
							| 
									
										
										
										
											2022-08-07 15:46:44 +02:00
										 |  |  |  * Copyright (c) 2022, Andreas Kling <kling@serenityos.org> | 
					
						
							| 
									
										
										
										
											2021-02-21 13:45:26 +02:00
										 |  |  |  * | 
					
						
							| 
									
										
										
										
											2021-04-22 01:24:48 -07:00
										 |  |  |  * SPDX-License-Identifier: BSD-2-Clause | 
					
						
							| 
									
										
										
										
											2021-02-21 13:45:26 +02:00
										 |  |  |  */ | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #pragma once
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-12-04 18:02:33 +00:00
										 |  |  | #include <AK/DeprecatedString.h>
 | 
					
						
							| 
									
										
										
										
											2022-08-07 15:46:44 +02:00
										 |  |  | #include <LibJS/Heap/GCPtr.h>
 | 
					
						
							|  |  |  | #include <LibWeb/Bindings/PlatformObject.h>
 | 
					
						
							| 
									
										
										
										
											2021-03-13 20:11:33 +01:00
										 |  |  | #include <LibWeb/CSS/CSSStyleDeclaration.h>
 | 
					
						
							| 
									
										
										
										
											2021-02-21 13:45:26 +02:00
										 |  |  | #include <LibWeb/CSS/Selector.h>
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | namespace Web::CSS { | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-08-07 15:46:44 +02:00
										 |  |  | class CSSRule : public Bindings::PlatformObject { | 
					
						
							| 
									
										
										
										
											2022-09-24 16:34:04 -06:00
										 |  |  |     WEB_PLATFORM_OBJECT(CSSRule, Bindings::PlatformObject); | 
					
						
							| 
									
										
										
										
											2021-09-29 19:41:46 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-08-07 15:46:44 +02:00
										 |  |  | public: | 
					
						
							| 
									
										
										
										
											2022-03-14 13:21:51 -06:00
										 |  |  |     virtual ~CSSRule() = default; | 
					
						
							| 
									
										
										
										
											2021-02-21 13:45:26 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-04-11 21:04:47 +02:00
										 |  |  |     // https://drafts.csswg.org/cssom/#dom-cssrule-type
 | 
					
						
							|  |  |  |     enum class Type : u16 { | 
					
						
							|  |  |  |         Style = 1, | 
					
						
							|  |  |  |         Import = 3, | 
					
						
							|  |  |  |         Media = 4, | 
					
						
							|  |  |  |         FontFace = 5, | 
					
						
							|  |  |  |         Supports = 12, | 
					
						
							| 
									
										
										
										
											2021-02-21 13:45:26 +02:00
										 |  |  |     }; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     virtual Type type() const = 0; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-12-04 18:02:33 +00:00
										 |  |  |     DeprecatedString css_text() const; | 
					
						
							| 
									
										
										
										
											2021-10-01 19:57:45 +02:00
										 |  |  |     void set_css_text(StringView); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-08-07 15:46:44 +02:00
										 |  |  |     CSSRule* parent_rule() { return m_parent_rule.ptr(); } | 
					
						
							| 
									
										
										
										
											2022-04-22 19:56:22 +01:00
										 |  |  |     void set_parent_rule(CSSRule*); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-08-07 15:46:44 +02:00
										 |  |  |     CSSStyleSheet* parent_style_sheet() { return m_parent_style_sheet.ptr(); } | 
					
						
							| 
									
										
										
										
											2022-04-22 19:56:22 +01:00
										 |  |  |     virtual void set_parent_style_sheet(CSSStyleSheet*); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-03-18 21:50:52 +01:00
										 |  |  |     template<typename T> | 
					
						
							|  |  |  |     bool fast_is() const = delete; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-10-01 19:57:45 +02:00
										 |  |  | protected: | 
					
						
							| 
									
										
										
										
											2022-09-24 16:34:04 -06:00
										 |  |  |     explicit CSSRule(JS::Realm&); | 
					
						
							| 
									
										
										
										
											2022-08-07 15:46:44 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-12-04 18:02:33 +00:00
										 |  |  |     virtual DeprecatedString serialized() const = 0; | 
					
						
							| 
									
										
										
										
											2022-04-22 19:56:22 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-08-07 15:46:44 +02:00
										 |  |  |     virtual void visit_edges(Cell::Visitor&) override; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     JS::GCPtr<CSSRule> m_parent_rule; | 
					
						
							|  |  |  |     JS::GCPtr<CSSStyleSheet> m_parent_style_sheet; | 
					
						
							| 
									
										
										
										
											2021-02-21 13:45:26 +02:00
										 |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | } |