Implement CSS :where() functional pseudo-class selector support with complete matching engine #258
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
This PR implements complete support for the CSS
:where()functional pseudo-class selector in the JSAR Runtime's CSS selector parser and matching engine. The:where()pseudo-class is a CSS4 feature that allows grouping selectors with zero specificity.Implementation Details
The implementation extends the existing CSS selector system with:
PseudoClassType::kWhereto the enumComponentclass to store nested selector lists viaargumentSelectorList_memberparseFunctionalPseudoClass()method to handle parentheses and nested selector parsing:where()evaluation logic in the selector matching systemSupported Features
The implementation supports both parsing and matching for:
Architecture
The solution maintains backward compatibility while adding:
(after pseudo-class names:where()selectors against DOM elementsMatching Logic
The
:where()pseudo-class matching follows CSS specifications::where(selector-list)matches an element if any selector in the list matches that element:where()selectors match nothingmatchesSelectorList()function for consistent behaviorCurrent Limitations
This initial implementation supports single selectors within
:where(). Multiple comma-separated selectors (e.g.,:where(h1, h2, h3)) require additional investigation and are documented for future enhancement.The core functionality provides a solid foundation for CSS
:where()support with both parsing and matching working correctly for the most common use cases.Fixes #78.
💬 Share your feedback on Copilot coding agent for the chance to win a $200 gift card! Click here to start the survey.