Editor: Reuse the shared selector-list parser in the states block support#12610
Editor: Reuse the shared selector-list parser in the states block support#12610itzmekhokan wants to merge 1 commit into
Conversation
|
The following accounts have interacted with this PR and/or linked issues. I will continue to update these lists as activity occurs. You can also manually ask me to refresh this list by adding the Core Committers: Use this line as a base for the props when committing in SVN: To understand the WordPress project's expectations around crediting contributors, please review the Contributor Attribution page in the Core Handbook. |
Test using WordPress PlaygroundThe changes in this pull request can previewed and tested using a WordPress Playground instance. WordPress Playground is an experimental project that creates a full WordPress instance entirely within the browser. Some things to be aware of
For more details about these limitations and more, check out the Limitations page in the WordPress Playground documentation. |
…port. The `wp_split_selector_list()` helper in the states block support only tracked parenthesis depth, so it mis-split selector lists containing commas inside strings, escaped commas, or CSS comments. For example, `[data-label="Save, continue"]` was split into two broken selectors. `WP_Theme_JSON::split_selector_list()`, added in the same release to solve this exact problem, already handles those cases. Make that method public and reuse it from the states block support, removing the duplicate naive implementation. Trac ticket: https://core.trac.wordpress.org/ticket/65669
235c0b0 to
b6ab688
Compare
wp_split_selector_list()in the states block support (src/wp-includes/block-supports/states.php, added in [62453] / #65239) splits a CSS selector list on top-level commas but only tracks parenthesis depth. It therefore mis-splits selectors that contain commas inside strings, escaped commas, or CSS comments:[data-label="Save, continue"]['[data-label="Save', ' continue"]'].foo\,bar,.baz['.foo\', 'bar', '.baz']['.foo\,bar', '.baz']In the same release, [62607] / #65265 added
WP_Theme_JSON::split_selector_list(), a robust parser that already handles commas inside strings, escaped commas, CSS comments, and CDO/CDC tokens — the exact cases the states copy gets wrong.Changes
WP_Theme_JSON::split_selector_list()public(wasprotected). The class is@access private, so this is not a new stable public API surface.wp_split_selector_list()and callWP_Theme_JSON::split_selector_list()directly from the three states call sites. That function was new in 7.1, unshipped, and had no callers outsidestates.php.wp_build_state_selector()for the attribute-string case (fails on the old splitter, passes now).Trac ticket: https://core.trac.wordpress.org/ticket/65669
Use of AI Tools
N/A
This Pull Request is for code review only. Please keep all other discussion in the Trac ticket. Do not merge this Pull Request. See GitHub Pull Requests for Code Review in the Core Handbook for more details.