mirror of
				https://github.com/RGBCube/serenity
				synced 2025-10-31 22:02:44 +00:00 
			
		
		
		
	LibWeb: Pass scope in ParentNode::query_selector
This commit is contained in:
		
							parent
							
								
									f3ba44a9f2
								
							
						
					
					
						commit
						4e6fb65ea3
					
				
					 1 changed files with 11 additions and 1 deletions
				
			
		|  | @ -17,19 +17,29 @@ | ||||||
| 
 | 
 | ||||||
| namespace Web::DOM { | namespace Web::DOM { | ||||||
| 
 | 
 | ||||||
|  | // https://dom.spec.whatwg.org/#dom-parentnode-queryselector
 | ||||||
| WebIDL::ExceptionOr<JS::GCPtr<Element>> ParentNode::query_selector(StringView selector_text) | WebIDL::ExceptionOr<JS::GCPtr<Element>> ParentNode::query_selector(StringView selector_text) | ||||||
| { | { | ||||||
|  |     // The querySelector(selectors) method steps are to return the first result of running scope-match a selectors string selectors against this,
 | ||||||
|  |     // if the result is not an empty list; otherwise null.
 | ||||||
|  | 
 | ||||||
|  |     // https://dom.spec.whatwg.org/#scope-match-a-selectors-string
 | ||||||
|  |     // To scope-match a selectors string selectors against a node, run these steps:
 | ||||||
|  |     // 1. Let s be the result of parse a selector selectors.
 | ||||||
|     auto maybe_selectors = parse_selector(CSS::Parser::ParsingContext(*this), selector_text); |     auto maybe_selectors = parse_selector(CSS::Parser::ParsingContext(*this), selector_text); | ||||||
|  | 
 | ||||||
|  |     // 2. If s is failure, then throw a "SyntaxError" DOMException.
 | ||||||
|     if (!maybe_selectors.has_value()) |     if (!maybe_selectors.has_value()) | ||||||
|         return WebIDL::SyntaxError::create(realm(), "Failed to parse selector"); |         return WebIDL::SyntaxError::create(realm(), "Failed to parse selector"); | ||||||
| 
 | 
 | ||||||
|     auto selectors = maybe_selectors.value(); |     auto selectors = maybe_selectors.value(); | ||||||
| 
 | 
 | ||||||
|  |     // 3. Return the result of match a selector against a tree with s and node’s root using scoping root node.
 | ||||||
|     JS::GCPtr<Element> result; |     JS::GCPtr<Element> result; | ||||||
|     // FIXME: This should be shadow-including. https://drafts.csswg.org/selectors-4/#match-a-selector-against-a-tree
 |     // FIXME: This should be shadow-including. https://drafts.csswg.org/selectors-4/#match-a-selector-against-a-tree
 | ||||||
|     for_each_in_subtree_of_type<Element>([&](auto& element) { |     for_each_in_subtree_of_type<Element>([&](auto& element) { | ||||||
|         for (auto& selector : selectors) { |         for (auto& selector : selectors) { | ||||||
|             if (SelectorEngine::matches(selector, element)) { |             if (SelectorEngine::matches(selector, element, {}, this)) { | ||||||
|                 result = &element; |                 result = &element; | ||||||
|                 return IterationDecision::Break; |                 return IterationDecision::Break; | ||||||
|             } |             } | ||||||
|  |  | ||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue
	
	 Simon Wanner
						Simon Wanner