--- a/wp/wp-includes/block-supports/border.php Wed Sep 21 18:19:35 2022 +0200
+++ b/wp/wp-includes/block-supports/border.php Tue Sep 27 16:37:53 2022 +0200
@@ -47,11 +47,10 @@
*
* @param WP_Block_Type $block_type Block type.
* @param array $block_attributes Block attributes.
- *
* @return array Border CSS classes and inline styles.
*/
function wp_apply_border_support( $block_type, $block_attributes ) {
- if ( wp_skip_border_serialization( $block_type ) ) {
+ if ( wp_should_skip_block_supports_serialization( $block_type, 'border' ) ) {
return array();
}
@@ -61,16 +60,33 @@
// Border radius.
if (
wp_has_border_feature_support( $block_type, 'radius' ) &&
- isset( $block_attributes['style']['border']['radius'] )
+ isset( $block_attributes['style']['border']['radius'] ) &&
+ ! wp_should_skip_block_supports_serialization( $block_type, '__experimentalBorder', 'radius' )
) {
- $border_radius = (int) $block_attributes['style']['border']['radius'];
- $styles[] = sprintf( 'border-radius: %dpx;', $border_radius );
+ $border_radius = $block_attributes['style']['border']['radius'];
+
+ if ( is_array( $border_radius ) ) {
+ // We have individual border radius corner values.
+ foreach ( $border_radius as $key => $radius ) {
+ // Convert CamelCase corner name to kebab-case.
+ $corner = strtolower( preg_replace( '/(?<!^)[A-Z]/', '-$0', $key ) );
+ $styles[] = sprintf( 'border-%s-radius: %s;', $corner, $radius );
+ }
+ } else {
+ // This check handles original unitless implementation.
+ if ( is_numeric( $border_radius ) ) {
+ $border_radius .= 'px';
+ }
+
+ $styles[] = sprintf( 'border-radius: %s;', $border_radius );
+ }
}
// Border style.
if (
wp_has_border_feature_support( $block_type, 'style' ) &&
- isset( $block_attributes['style']['border']['style'] )
+ isset( $block_attributes['style']['border']['style'] ) &&
+ ! wp_should_skip_block_supports_serialization( $block_type, '__experimentalBorder', 'style' )
) {
$border_style = $block_attributes['style']['border']['style'];
$styles[] = sprintf( 'border-style: %s;', $border_style );
@@ -79,14 +95,24 @@
// Border width.
if (
wp_has_border_feature_support( $block_type, 'width' ) &&
- isset( $block_attributes['style']['border']['width'] )
+ isset( $block_attributes['style']['border']['width'] ) &&
+ ! wp_should_skip_block_supports_serialization( $block_type, '__experimentalBorder', 'width' )
) {
- $border_width = intval( $block_attributes['style']['border']['width'] );
- $styles[] = sprintf( 'border-width: %dpx;', $border_width );
+ $border_width = $block_attributes['style']['border']['width'];
+
+ // This check handles original unitless implementation.
+ if ( is_numeric( $border_width ) ) {
+ $border_width .= 'px';
+ }
+
+ $styles[] = sprintf( 'border-width: %s;', $border_width );
}
// Border color.
- if ( wp_has_border_feature_support( $block_type, 'color' ) ) {
+ if (
+ wp_has_border_feature_support( $block_type, 'color' ) &&
+ ! wp_should_skip_block_supports_serialization( $block_type, '__experimentalBorder', 'color' )
+ ) {
$has_named_border_color = array_key_exists( 'borderColor', $block_attributes );
$has_custom_border_color = isset( $block_attributes['style']['border']['color'] );
@@ -117,25 +143,6 @@
}
/**
- * Checks whether serialization of the current block's border properties should
- * occur.
- *
- * @since 5.8.0
- * @access private
- *
- * @param WP_Block_Type $block_type Block type.
- *
- * @return boolean
- */
-function wp_skip_border_serialization( $block_type ) {
- $border_support = _wp_array_get( $block_type->supports, array( '__experimentalBorder' ), false );
-
- return is_array( $border_support ) &&
- array_key_exists( '__experimentalSkipSerialization', $border_support ) &&
- $border_support['__experimentalSkipSerialization'];
-}
-
-/**
* Checks whether the current block type supports the border feature requested.
*
* If the `__experimentalBorder` support flag is a boolean `true` all border
@@ -146,24 +153,23 @@
* @since 5.8.0
* @access private
*
- * @param WP_Block_Type $block_type Block type to check for support.
- * @param string $feature Name of the feature to check support for.
- * @param mixed $default Fallback value for feature support, defaults to false.
- *
- * @return boolean Whether or not the feature is supported.
+ * @param WP_Block_Type $block_type Block type to check for support.
+ * @param string $feature Name of the feature to check support for.
+ * @param mixed $default_value Fallback value for feature support, defaults to false.
+ * @return bool Whether the feature is supported.
*/
-function wp_has_border_feature_support( $block_type, $feature, $default = false ) {
+function wp_has_border_feature_support( $block_type, $feature, $default_value = false ) {
// Check if all border support features have been opted into via `"__experimentalBorder": true`.
if (
property_exists( $block_type, 'supports' ) &&
- ( true === _wp_array_get( $block_type->supports, array( '__experimentalBorder' ), $default ) )
+ ( true === _wp_array_get( $block_type->supports, array( '__experimentalBorder' ), $default_value ) )
) {
return true;
}
// Check if the specific feature has been opted into individually
// via nested flag under `__experimentalBorder`.
- return block_has_support( $block_type, array( '__experimentalBorder', $feature ), $default );
+ return block_has_support( $block_type, array( '__experimentalBorder', $feature ), $default_value );
}
// Register the block support.