mirror of
				https://github.com/RGBCube/serenity
				synced 2025-10-31 12:32:43 +00:00 
			
		
		
		
	LibWeb: Add the CSSStyleRule interface with some limited functionality
This commit is contained in:
		
							parent
							
								
									71087422f6
								
							
						
					
					
						commit
						6cda24097b
					
				
					 8 changed files with 84 additions and 1 deletions
				
			
		|  | @ -825,6 +825,8 @@ static bool should_emit_wrapper_factory(IDL::Interface const& interface) | |||
|         return false; | ||||
|     if (interface.name.ends_with("Element")) | ||||
|         return false; | ||||
|     if (interface.name.starts_with("CSS") && interface.name.ends_with("Rule")) | ||||
|         return false; | ||||
|     return true; | ||||
| } | ||||
| 
 | ||||
|  | @ -1492,6 +1494,7 @@ void generate_implementation(IDL::Interface const& interface) | |||
| #include <LibWeb/Bindings/@wrapper_class@.h> | ||||
| #include <LibWeb/Bindings/CSSRuleListWrapper.h> | ||||
| #include <LibWeb/Bindings/CSSRuleWrapper.h> | ||||
| #include <LibWeb/Bindings/CSSRuleWrapperFactory.h> | ||||
| #include <LibWeb/Bindings/CSSStyleSheetWrapper.h> | ||||
| #include <LibWeb/Bindings/CanvasRenderingContext2DWrapper.h> | ||||
| #include <LibWeb/Bindings/CommentWrapper.h> | ||||
|  | @ -2688,6 +2691,7 @@ void generate_prototype_implementation(IDL::Interface const& interface) | |||
| #include <LibWeb/Bindings/AbortSignalWrapper.h> | ||||
| #include <LibWeb/Bindings/CSSRuleListWrapper.h> | ||||
| #include <LibWeb/Bindings/CSSRuleWrapper.h> | ||||
| #include <LibWeb/Bindings/CSSRuleWrapperFactory.h> | ||||
| #include <LibWeb/Bindings/CSSStyleDeclarationWrapper.h> | ||||
| #include <LibWeb/Bindings/CSSStyleSheetWrapper.h> | ||||
| #include <LibWeb/Bindings/CanvasRenderingContext2DWrapper.h> | ||||
|  |  | |||
							
								
								
									
										22
									
								
								Userland/Libraries/LibWeb/Bindings/CSSRuleWrapperFactory.cpp
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										22
									
								
								Userland/Libraries/LibWeb/Bindings/CSSRuleWrapperFactory.cpp
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,22 @@ | |||
| /*
 | ||||
|  * Copyright (c) 2021, Andreas Kling <kling@serenityos.org> | ||||
|  * | ||||
|  * SPDX-License-Identifier: BSD-2-Clause | ||||
|  */ | ||||
| 
 | ||||
| #include <AK/TypeCasts.h> | ||||
| #include <LibWeb/Bindings/CSSRuleWrapper.h> | ||||
| #include <LibWeb/Bindings/CSSRuleWrapperFactory.h> | ||||
| #include <LibWeb/Bindings/CSSStyleRuleWrapper.h> | ||||
| #include <LibWeb/CSS/CSSStyleRule.h> | ||||
| 
 | ||||
| namespace Web::Bindings { | ||||
| 
 | ||||
| CSSRuleWrapper* wrap(JS::GlobalObject& global_object, CSS::CSSRule& rule) | ||||
| { | ||||
|     if (is<CSS::CSSStyleRule>(rule)) | ||||
|         return static_cast<CSSRuleWrapper*>(wrap_impl(global_object, verify_cast<CSS::CSSStyleRule>(rule))); | ||||
|     return static_cast<CSSRuleWrapper*>(wrap_impl(global_object, rule)); | ||||
| } | ||||
| 
 | ||||
| } | ||||
							
								
								
									
										16
									
								
								Userland/Libraries/LibWeb/Bindings/CSSRuleWrapperFactory.h
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										16
									
								
								Userland/Libraries/LibWeb/Bindings/CSSRuleWrapperFactory.h
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,16 @@ | |||
| /*
 | ||||
|  * Copyright (c) 2021, Andreas Kling <kling@serenityos.org> | ||||
|  * | ||||
|  * SPDX-License-Identifier: BSD-2-Clause | ||||
|  */ | ||||
| 
 | ||||
| #pragma once | ||||
| 
 | ||||
| #include <LibJS/Forward.h> | ||||
| #include <LibWeb/Forward.h> | ||||
| 
 | ||||
| namespace Web::Bindings { | ||||
| 
 | ||||
| CSSRuleWrapper* wrap(JS::GlobalObject&, CSS::CSSRule&); | ||||
| 
 | ||||
| } | ||||
|  | @ -1,4 +1,5 @@ | |||
| set(SOURCES | ||||
|     Bindings/CSSRuleWrapperFactory.cpp | ||||
|     Bindings/CSSStyleDeclarationWrapperCustom.cpp | ||||
|     Bindings/EventListenerWrapper.cpp | ||||
|     Bindings/EventTargetWrapperFactory.cpp | ||||
|  | @ -343,6 +344,7 @@ endfunction() | |||
| libweb_js_wrapper(CSS/CSSRule) | ||||
| libweb_js_wrapper(CSS/CSSRuleList) | ||||
| libweb_js_wrapper(CSS/CSSStyleDeclaration) | ||||
| libweb_js_wrapper(CSS/CSSStyleRule) | ||||
| libweb_js_wrapper(CSS/CSSStyleSheet) | ||||
| libweb_js_wrapper(CSS/MediaQueryList) | ||||
| libweb_js_wrapper(CSS/Screen) | ||||
|  |  | |||
|  | @ -18,4 +18,29 @@ CSSStyleRule::~CSSStyleRule() | |||
| { | ||||
| } | ||||
| 
 | ||||
| // https://drafts.csswg.org/cssom/#dom-cssstylerule-selectortext
 | ||||
| String CSSStyleRule::selector_text() const | ||||
| { | ||||
|     TODO(); | ||||
| } | ||||
| 
 | ||||
| // https://drafts.csswg.org/cssom/#dom-cssstylerule-selectortext
 | ||||
| void CSSStyleRule::set_selector_text(StringView selector_text) | ||||
| { | ||||
|     // FIXME: 1. Run the parse a group of selectors algorithm on the given value.
 | ||||
| 
 | ||||
|     // FIXME: 2. If the algorithm returns a non-null value replace the associated group of selectors with the returned value.
 | ||||
| 
 | ||||
|     // FIXME: 3. Otherwise, if the algorithm returns a null value, do nothing.
 | ||||
| 
 | ||||
|     (void)selector_text; | ||||
|     TODO(); | ||||
| } | ||||
| 
 | ||||
| // https://drafts.csswg.org/cssom/#dom-cssstylerule-style
 | ||||
| CSSStyleDeclaration* CSSStyleRule::style() | ||||
| { | ||||
|     return m_declaration; | ||||
| } | ||||
| 
 | ||||
| } | ||||
|  |  | |||
|  | @ -20,6 +20,8 @@ class CSSStyleRule : public CSSRule { | |||
|     AK_MAKE_NONMOVABLE(CSSStyleRule); | ||||
| 
 | ||||
| public: | ||||
|     using WrapperType = Bindings::CSSStyleRuleWrapper; | ||||
| 
 | ||||
|     static NonnullRefPtr<CSSStyleRule> create(NonnullRefPtrVector<Selector>&& selectors, NonnullRefPtr<CSSStyleDeclaration>&& declaration) | ||||
|     { | ||||
|         return adopt_ref(*new CSSStyleRule(move(selectors), move(declaration))); | ||||
|  | @ -33,6 +35,11 @@ public: | |||
|     virtual StringView class_name() const { return "CSSStyleRule"; }; | ||||
|     virtual Type type() const { return Type::Style; }; | ||||
| 
 | ||||
|     String selector_text() const; | ||||
|     void set_selector_text(StringView); | ||||
| 
 | ||||
|     CSSStyleDeclaration* style(); | ||||
| 
 | ||||
| private: | ||||
|     CSSStyleRule(NonnullRefPtrVector<Selector>&&, NonnullRefPtr<CSSStyleDeclaration>&&); | ||||
| 
 | ||||
|  |  | |||
							
								
								
									
										6
									
								
								Userland/Libraries/LibWeb/CSS/CSSStyleRule.idl
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										6
									
								
								Userland/Libraries/LibWeb/CSS/CSSStyleRule.idl
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,6 @@ | |||
| interface CSSStyleRule { | ||||
| 
 | ||||
|     attribute CSSOMString selectorText; | ||||
|     [SameObject, PutForwards=cssText] readonly attribute CSSStyleDeclaration style; | ||||
| 
 | ||||
| }; | ||||
|  | @ -262,9 +262,10 @@ class URLSearchParamsIterator; | |||
| namespace Web::Bindings { | ||||
| class AbortControllerWrapper; | ||||
| class AbortSignalWrapper; | ||||
| class CSSRuleWrapper; | ||||
| class CSSRuleListWrapper; | ||||
| class CSSRuleWrapper; | ||||
| class CSSStyleDeclarationWrapper; | ||||
| class CSSStyleRuleWrapper; | ||||
| class CSSStyleSheetWrapper; | ||||
| class CanvasRenderingContext2DWrapper; | ||||
| class CharacterDataWrapper; | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue
	
	 Andreas Kling
						Andreas Kling