wordpress update 6.6.2
This commit is contained in:
@@ -1439,9 +1439,16 @@ class WP_Theme_JSON {
|
||||
protected function process_blocks_custom_css( $css, $selector ) {
|
||||
$processed_css = '';
|
||||
|
||||
if ( empty( $css ) ) {
|
||||
return $processed_css;
|
||||
}
|
||||
|
||||
// Split CSS nested rules.
|
||||
$parts = explode( '&', $css );
|
||||
foreach ( $parts as $part ) {
|
||||
if ( empty( $part ) ) {
|
||||
continue;
|
||||
}
|
||||
$is_root_css = ( ! str_contains( $part, '{' ) );
|
||||
if ( $is_root_css ) {
|
||||
// If the part doesn't contain braces, it applies to the root level.
|
||||
@@ -1454,11 +1461,25 @@ class WP_Theme_JSON {
|
||||
}
|
||||
$nested_selector = $part[0];
|
||||
$css_value = $part[1];
|
||||
$part_selector = str_starts_with( $nested_selector, ' ' )
|
||||
|
||||
/*
|
||||
* Handle pseudo elements such as ::before, ::after etc. Regex will also
|
||||
* capture any leading combinator such as >, +, or ~, as well as spaces.
|
||||
* This allows pseudo elements as descendants e.g. `.parent ::before`.
|
||||
*/
|
||||
$matches = array();
|
||||
$has_pseudo_element = preg_match( '/([>+~\s]*::[a-zA-Z-]+)/', $nested_selector, $matches );
|
||||
$pseudo_part = $has_pseudo_element ? $matches[1] : '';
|
||||
$nested_selector = $has_pseudo_element ? str_replace( $pseudo_part, '', $nested_selector ) : $nested_selector;
|
||||
|
||||
// Finalize selector and re-append pseudo element if required.
|
||||
$part_selector = str_starts_with( $nested_selector, ' ' )
|
||||
? static::scope_selector( $selector, $nested_selector )
|
||||
: static::append_to_selector( $selector, $nested_selector );
|
||||
$final_selector = ":root :where($part_selector)";
|
||||
$processed_css .= $final_selector . '{' . trim( $css_value ) . '}';}
|
||||
$final_selector = ":root :where($part_selector)$pseudo_part";
|
||||
|
||||
$processed_css .= $final_selector . '{' . trim( $css_value ) . '}';
|
||||
}
|
||||
}
|
||||
return $processed_css;
|
||||
}
|
||||
@@ -1681,7 +1702,7 @@ class WP_Theme_JSON {
|
||||
$spacing_rule['selector']
|
||||
);
|
||||
} else {
|
||||
$format = static::ROOT_BLOCK_SELECTOR === $selector ? '.%2$s %3$s' : '%1$s-%2$s %3$s';
|
||||
$format = static::ROOT_BLOCK_SELECTOR === $selector ? ':root :where(.%2$s)%3$s' : ':root :where(%1$s-%2$s)%3$s';
|
||||
$layout_selector = sprintf(
|
||||
$format,
|
||||
$selector,
|
||||
@@ -2880,6 +2901,9 @@ class WP_Theme_JSON {
|
||||
}
|
||||
|
||||
/*
|
||||
* Root selector (body) styles should not be wrapped in `:root where()` to keep
|
||||
* specificity at (0,0,1) and maintain backwards compatibility.
|
||||
*
|
||||
* Top-level element styles using element-only specificity selectors should
|
||||
* not get wrapped in `:root :where()` to maintain backwards compatibility.
|
||||
*
|
||||
@@ -2887,11 +2911,13 @@ class WP_Theme_JSON {
|
||||
* still need to be wrapped in `:root :where` to cap specificity for nested
|
||||
* variations etc. Pseudo selectors won't match the ELEMENTS selector exactly.
|
||||
*/
|
||||
$element_only_selector = $current_element &&
|
||||
$element_only_selector = $is_root_selector || (
|
||||
$current_element &&
|
||||
isset( static::ELEMENTS[ $current_element ] ) &&
|
||||
// buttons, captions etc. still need `:root :where()` as they are class based selectors.
|
||||
! isset( static::__EXPERIMENTAL_ELEMENT_CLASS_NAMES[ $current_element ] ) &&
|
||||
static::ELEMENTS[ $current_element ] === $selector;
|
||||
static::ELEMENTS[ $current_element ] === $selector
|
||||
);
|
||||
|
||||
// 2. Generate and append the rules that use the general selector.
|
||||
$general_selector = $element_only_selector ? $selector : ":root :where($selector)";
|
||||
|
||||
Reference in New Issue
Block a user