eme_json The theme json resolver. * @return WP_Theme_JSON The $theme_json with resolved variables. */ public static function resolve_variables( $theme_json ) { $settings = $theme_json->get_settings(); $styles = $theme_json->get_raw_data()['styles']; $preset_vars = static::compute_preset_vars( $settings, static::VALID_ORIGINS ); $theme_vars = static::compute_theme_vars( $settings ); $vars = array_reduce( array_merge( $preset_vars, $theme_vars ), function ( $carry, $item ) { $name = $item['name']; $carry[ "var({$name})" ] = $item['value']; return $carry; }, array() ); $theme_json->theme_json['styles'] = self::convert_variables_to_value( $styles, $vars ); return $theme_json; } /** * Generates a selector for a block style variation. * * @since 6.5.0 * * @param string $variation_name Name of the block style variation. * @param string $block_selector CSS selector for the block. * @return string Block selector with block style variation selector added to it. */ protected static function get_block_style_variation_selector( $variation_name, $block_selector ) { $variation_class = ".is-style-$variation_name"; if ( ! $block_selector ) { return $variation_class; } $limit = 1; $selector_parts = static::split_selector_list( $block_selector ); $result = array(); /* * Append the variation class to each selector's ancestor: the first * run of characters before any combinator (whitespace) or pseudo-class * (`:`). Only the first match is replaced. * * Examples ("custom" variation): * - `.wp-block` => `.wp-block.is-style-custom` * - `.wp-block .inner` => `.wp-block.is-style-custom .inner` * - `.wp-block:where(.a .b)` => `.wp-block.is-style-custom:where(.a .b)` * - `:where(.outer .inner)` => `:where(.outer.is-style-custom .inner)` */ foreach ( $selector_parts as $part ) { $result[] = preg_replace_callback( '/[^\s:]+/', function ( $matches ) use ( $variation_class ) { return $matches[0] . $variation_class; }, $part, $limit ); } return implode( ', ', $result ); } /** * Applies a block style variation class to a feature selector. * * Feature selectors can target a different element than the block's root * selector. For example, the Button block's root selector targets the inner * link, while its dimensions width selector targets the outer wrapper. Apply * the variation class directly to the selector that will receive the * declarations instead of deriving it by subtracting the root selector from * the feature selector. * * @since 7.0.0 * * @param array $style_variation Style variation metadata. * @param string $feature_selector CSS selector for the feature. * @return string Feature selector with block style variation selector added. */ protected static function get_block_style_variation_feature_selector( $style_variation, $feature_selector ) { $variation_path = $style_variation['path'] ?? array(); $variation_name = $style_variation['name'] ?? ( is_array( $variation_path ) ? end( $variation_path ) : null ); if ( ! $variation_name ) { return $style_variation['selector'] ?? $feature_selector; } $variation_class = ".is-style-$variation_name"; $selector_parts = static::split_selector_list( $feature_selector ); $selector_parts = array_map( static function ( $selector ) use ( $variation_class ) { $prefix = $variation_class . ' '; if ( str_starts_with( $selector, $prefix ) ) { return substr( $selector, strlen( $prefix ) ); } return $selector; }, $selector_parts ); return static::get_block_style_variation_selector( $variation_name, implode( ', ', $selector_parts ) ); } /** * Collects valid block style variations keyed by block type. * * @since 6.6.0 * @since 6.8.0 Added the `$blocks_metadata` parameter. * * @param array $blocks_metadata Optional. List of metadata per block. Default is the metadata for all blocks. * @return array Valid block style variations by block type. */ protected static function get_valid_block_style_variations( $blocks_metadata = array() ) { $valid_variations = array(); $blocks_metadata = empty( $blocks_metadata ) ? static::get_blocks_metadata() : $blocks_metadata; foreach ( $blocks_metadata as $block_name => $block_meta ) { if ( ! isset( $block_meta['styleVariations'] ) ) { continue; } $valid_variations[ $block_name ] = array_keys( $block_meta['styleVariations'] ); } return $valid_variations; } /** * Extracts the block name from the block metadata path. * * @since 7.1.0 * * @param array $block_metadata Block metadata. * @return string|null The block name or null if not found. */ private static function get_block_name_from_metadata_path( $block_metadata ) { return $block_metadata['path'][2] ?? null; } } Usai Tabrak 2 Pengendara di Jalan S Parman, Sopir Angkot Nyerah ke Kantor Polisi —