From db2d98de0ffb6bc69e1a07d1ebf48a3d152438c9 Mon Sep 17 00:00:00 2001 From: madhusudhand Date: Wed, 21 Jun 2023 19:28:18 +0800 Subject: [PATCH] Backport changes from gutenberg#46896 for 6.3 --- src/wp-includes/block-supports/shadow.php | 84 +++++++++++++++++++ src/wp-includes/kses.php | 1 + .../style-engine/class-wp-style-engine.php | 11 +++ src/wp-settings.php | 1 + 4 files changed, 97 insertions(+) create mode 100644 src/wp-includes/block-supports/shadow.php diff --git a/src/wp-includes/block-supports/shadow.php b/src/wp-includes/block-supports/shadow.php new file mode 100644 index 0000000000000..b6b6692ef98f6 --- /dev/null +++ b/src/wp-includes/block-supports/shadow.php @@ -0,0 +1,84 @@ +attributes ) { + $block_type->attributes = array(); + } + + if ( $has_shadow_support && ! array_key_exists( 'style', $block_type->attributes ) ) { + $block_type->attributes['style'] = array( + 'type' => 'object', + ); + } + + if ( $has_shadow_support && ! array_key_exists( 'shadow', $block_type->attributes ) ) { + $block_type->attributes['shadow'] = array( + 'type' => 'string', + ); + } +} + +/** + * Add CSS classes and inline styles for shadow features to the incoming attributes array. + * This will be applied to the block markup in + * the front-end. + * + * @since 6.3.0 + * @access private + * + * @param WP_Block_Type $block_type Block type. + * @param array $block_attributes Block attributes. + * + * @return array Shadow CSS classes and inline styles. + */ +function wp_apply_shadow_support( $block_type, $block_attributes ) { + $has_shadow_support = block_has_support( $block_type, array( 'shadow' ), false ); + + if ( ! $has_shadow_support ) { + return array(); + } + + $shadow_block_styles = array(); + + $preset_shadow = array_key_exists( 'shadow', $block_attributes ) ? "var:preset|shadow|{$block_attributes['shadow']}" : null; + $custom_shadow = isset( $block_attributes['style']['shadow'] ) ? $block_attributes['style']['shadow'] : null; + $shadow_block_styles['shadow'] = $preset_shadow ? $preset_shadow : $custom_shadow; + + $attributes = array(); + $styles = wp_style_engine_get_styles( $shadow_block_styles ); + + if ( ! empty( $styles['css'] ) ) { + $attributes['style'] = $styles['css']; + } + + return $attributes; +} + +// Register the block support. +WP_Block_Supports::get_instance()->register( + 'shadow', + array( + 'register_attribute' => 'wp_register_shadow_support', + 'apply' => 'wp_apply_shadow_support', + ) +); \ No newline at end of file diff --git a/src/wp-includes/kses.php b/src/wp-includes/kses.php index cafc64b1d13d8..c2acf99b69c19 100644 --- a/src/wp-includes/kses.php +++ b/src/wp-includes/kses.php @@ -2447,6 +2447,7 @@ function safecss_filter_attr( $css, $deprecated = '' ) { 'bottom', 'left', 'z-index', + 'box-shadow', 'aspect-ratio', // Custom CSS properties. diff --git a/src/wp-includes/style-engine/class-wp-style-engine.php b/src/wp-includes/style-engine/class-wp-style-engine.php index de8d00467e744..e38db29657340 100644 --- a/src/wp-includes/style-engine/class-wp-style-engine.php +++ b/src/wp-includes/style-engine/class-wp-style-engine.php @@ -147,6 +147,17 @@ final class WP_Style_Engine { ), ), ), + 'shadow' => array( + 'shadow' => array( + 'property_keys' => array( + 'default' => 'box-shadow', + ), + 'path' => array( 'shadow' ), + 'css_vars' => array( + 'shadow' => '--wp--preset--shadow--$slug', + ), + ), + ), 'dimensions' => array( 'minHeight' => array( 'property_keys' => array( diff --git a/src/wp-settings.php b/src/wp-settings.php index 6a7e8098723fe..2e8e55284ef6d 100644 --- a/src/wp-settings.php +++ b/src/wp-settings.php @@ -331,6 +331,7 @@ require ABSPATH . WPINC . '/block-supports/custom-classname.php'; require ABSPATH . WPINC . '/block-supports/dimensions.php'; require ABSPATH . WPINC . '/block-supports/duotone.php'; +require ABSPATH . WPINC . '/block-supports/shadow.php'; require ABSPATH . WPINC . '/block-supports/elements.php'; require ABSPATH . WPINC . '/block-supports/generated-classname.php'; require ABSPATH . WPINC . '/block-supports/layout.php';