balmet.com

Unnamed repository; edit this file 'description' to name the repository.
Log | Files | Refs

spacing.php (2917B)


      1 <?php
      2 /**
      3  * Spacing block support flag.
      4  *
      5  * @package WordPress
      6  * @since 5.8.0
      7  */
      8 
      9 /**
     10  * Registers the style block attribute for block types that support it.
     11  *
     12  * @since 5.8.0
     13  * @access private
     14  *
     15  * @param WP_Block_Type $block_type Block Type.
     16  */
     17 function wp_register_spacing_support( $block_type ) {
     18 	$has_spacing_support = block_has_support( $block_type, array( 'spacing' ), false );
     19 
     20 	// Setup attributes and styles within that if needed.
     21 	if ( ! $block_type->attributes ) {
     22 		$block_type->attributes = array();
     23 	}
     24 
     25 	if ( $has_spacing_support && ! array_key_exists( 'style', $block_type->attributes ) ) {
     26 		$block_type->attributes['style'] = array(
     27 			'type' => 'object',
     28 		);
     29 	}
     30 }
     31 
     32 /**
     33  * Add CSS classes for block spacing to the incoming attributes array.
     34  * This will be applied to the block markup in the front-end.
     35  *
     36  * @since 5.8.0
     37  * @access private
     38  *
     39  * @param WP_Block_Type $block_type       Block Type.
     40  * @param array         $block_attributes Block attributes.
     41  *
     42  * @return array Block spacing CSS classes and inline styles.
     43  */
     44 function wp_apply_spacing_support( $block_type, $block_attributes ) {
     45 	$has_padding_support = wp_has_spacing_feature_support( $block_type, 'padding' );
     46 	$has_margin_support  = wp_has_spacing_feature_support( $block_type, 'margin' );
     47 	$styles              = array();
     48 
     49 	if ( $has_padding_support ) {
     50 		$padding_value = _wp_array_get( $block_attributes, array( 'style', 'spacing', 'padding' ), null );
     51 		if ( null !== $padding_value ) {
     52 			foreach ( $padding_value as $key => $value ) {
     53 				$styles[] = sprintf( 'padding-%s: %s;', $key, $value );
     54 			}
     55 		}
     56 	}
     57 
     58 	if ( $has_margin_support ) {
     59 		$margin_value = _wp_array_get( $block_attributes, array( 'style', 'spacing', 'margin' ), null );
     60 		if ( null !== $margin_value ) {
     61 			foreach ( $margin_value as $key => $value ) {
     62 				$styles[] = sprintf( 'margin-%s: %s;', $key, $value );
     63 			}
     64 		}
     65 	}
     66 
     67 	return empty( $styles ) ? array() : array( 'style' => implode( ' ', $styles ) );
     68 }
     69 
     70 /**
     71  * Checks whether the current block type supports the spacing feature requested.
     72  *
     73  * @since 5.8.0
     74  * @access private
     75  *
     76  * @param WP_Block_Type $block_type Block type to check for support.
     77  * @param string        $feature    Name of the feature to check support for.
     78  * @param mixed         $default    Fallback value for feature support, defaults to false.
     79  *
     80  * @return boolean                  Whether or not the feature is supported.
     81  */
     82 function wp_has_spacing_feature_support( $block_type, $feature, $default = false ) {
     83 	// Check if the specific feature has been opted into individually
     84 	// via nested flag under `spacing`.
     85 	return block_has_support( $block_type, array( 'spacing', $feature ), $default );
     86 }
     87 
     88 // Register the block support.
     89 WP_Block_Supports::get_instance()->register(
     90 	'spacing',
     91 	array(
     92 		'register_attribute' => 'wp_register_spacing_support',
     93 		'apply'              => 'wp_apply_spacing_support',
     94 	)
     95 );