wp/wp-includes/block-supports/border.php
changeset 19 3d72ae0968f4
parent 18 be944660c56a
child 21 48c4eec2b7e6
--- 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.