balmet.com

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

colors.php (5540B)


      1 <?php
      2 /**
      3  * Colors block support flag.
      4  *
      5  * @package WordPress
      6  * @since 5.6.0
      7  */
      8 
      9 /**
     10  * Registers the style and colors block attributes for block types that support it.
     11  *
     12  * @since 5.6.0
     13  * @access private
     14  *
     15  * @param WP_Block_Type $block_type Block Type.
     16  */
     17 function wp_register_colors_support( $block_type ) {
     18 	$color_support = false;
     19 	if ( property_exists( $block_type, 'supports' ) ) {
     20 		$color_support = _wp_array_get( $block_type->supports, array( 'color' ), false );
     21 	}
     22 	$has_text_colors_support       = true === $color_support || ( is_array( $color_support ) && _wp_array_get( $color_support, array( 'text' ), true ) );
     23 	$has_background_colors_support = true === $color_support || ( is_array( $color_support ) && _wp_array_get( $color_support, array( 'background' ), true ) );
     24 	$has_gradients_support         = _wp_array_get( $color_support, array( 'gradients' ), false );
     25 	$has_link_colors_support       = _wp_array_get( $color_support, array( 'link' ), false );
     26 	$has_color_support             = $has_text_colors_support ||
     27 		$has_background_colors_support ||
     28 		$has_gradients_support ||
     29 		$has_link_colors_support;
     30 
     31 	if ( ! $block_type->attributes ) {
     32 		$block_type->attributes = array();
     33 	}
     34 
     35 	if ( $has_color_support && ! array_key_exists( 'style', $block_type->attributes ) ) {
     36 		$block_type->attributes['style'] = array(
     37 			'type' => 'object',
     38 		);
     39 	}
     40 
     41 	if ( $has_background_colors_support && ! array_key_exists( 'backgroundColor', $block_type->attributes ) ) {
     42 		$block_type->attributes['backgroundColor'] = array(
     43 			'type' => 'string',
     44 		);
     45 	}
     46 
     47 	if ( $has_text_colors_support && ! array_key_exists( 'textColor', $block_type->attributes ) ) {
     48 		$block_type->attributes['textColor'] = array(
     49 			'type' => 'string',
     50 		);
     51 	}
     52 
     53 	if ( $has_gradients_support && ! array_key_exists( 'gradient', $block_type->attributes ) ) {
     54 		$block_type->attributes['gradient'] = array(
     55 			'type' => 'string',
     56 		);
     57 	}
     58 }
     59 
     60 
     61 /**
     62  * Add CSS classes and inline styles for colors to the incoming attributes array.
     63  * This will be applied to the block markup in the front-end.
     64  *
     65  * @since 5.6.0
     66  * @access private
     67  *
     68  * @param  WP_Block_Type $block_type       Block type.
     69  * @param  array         $block_attributes Block attributes.
     70  *
     71  * @return array Colors CSS classes and inline styles.
     72  */
     73 function wp_apply_colors_support( $block_type, $block_attributes ) {
     74 	$color_support = _wp_array_get( $block_type->supports, array( 'color' ), false );
     75 
     76 	if (
     77 		is_array( $color_support ) &&
     78 		array_key_exists( '__experimentalSkipSerialization', $color_support ) &&
     79 		$color_support['__experimentalSkipSerialization']
     80 	) {
     81 		return array();
     82 	}
     83 
     84 	$has_text_colors_support       = true === $color_support || ( is_array( $color_support ) && _wp_array_get( $color_support, array( 'text' ), true ) );
     85 	$has_background_colors_support = true === $color_support || ( is_array( $color_support ) && _wp_array_get( $color_support, array( 'background' ), true ) );
     86 	$has_gradients_support         = _wp_array_get( $color_support, array( 'gradients' ), false );
     87 	$classes                       = array();
     88 	$styles                        = array();
     89 
     90 	// Text colors.
     91 	// Check support for text colors.
     92 	if ( $has_text_colors_support ) {
     93 		$has_named_text_color  = array_key_exists( 'textColor', $block_attributes );
     94 		$has_custom_text_color = isset( $block_attributes['style']['color']['text'] );
     95 
     96 		// Apply required generic class.
     97 		if ( $has_custom_text_color || $has_named_text_color ) {
     98 			$classes[] = 'has-text-color';
     99 		}
    100 		// Apply color class or inline style.
    101 		if ( $has_named_text_color ) {
    102 			$classes[] = sprintf( 'has-%s-color', $block_attributes['textColor'] );
    103 		} elseif ( $has_custom_text_color ) {
    104 			$styles[] = sprintf( 'color: %s;', $block_attributes['style']['color']['text'] );
    105 		}
    106 	}
    107 
    108 	// Background colors.
    109 	if ( $has_background_colors_support ) {
    110 		$has_named_background_color  = array_key_exists( 'backgroundColor', $block_attributes );
    111 		$has_custom_background_color = isset( $block_attributes['style']['color']['background'] );
    112 
    113 		// Apply required background class.
    114 		if ( $has_custom_background_color || $has_named_background_color ) {
    115 			$classes[] = 'has-background';
    116 		}
    117 		// Apply background color classes or styles.
    118 		if ( $has_named_background_color ) {
    119 			$classes[] = sprintf( 'has-%s-background-color', $block_attributes['backgroundColor'] );
    120 		} elseif ( $has_custom_background_color ) {
    121 			$styles[] = sprintf( 'background-color: %s;', $block_attributes['style']['color']['background'] );
    122 		}
    123 	}
    124 
    125 	// Gradients.
    126 	if ( $has_gradients_support ) {
    127 		$has_named_gradient  = array_key_exists( 'gradient', $block_attributes );
    128 		$has_custom_gradient = isset( $block_attributes['style']['color']['gradient'] );
    129 
    130 		if ( $has_named_gradient || $has_custom_gradient ) {
    131 			$classes[] = 'has-background';
    132 		}
    133 		// Apply required background class.
    134 		if ( $has_named_gradient ) {
    135 			$classes[] = sprintf( 'has-%s-gradient-background', $block_attributes['gradient'] );
    136 		} elseif ( $has_custom_gradient ) {
    137 			$styles[] = sprintf( 'background: %s;', $block_attributes['style']['color']['gradient'] );
    138 		}
    139 	}
    140 
    141 	$attributes = array();
    142 	if ( ! empty( $classes ) ) {
    143 		$attributes['class'] = implode( ' ', $classes );
    144 	}
    145 	if ( ! empty( $styles ) ) {
    146 		$attributes['style'] = implode( ' ', $styles );
    147 	}
    148 
    149 	return $attributes;
    150 }
    151 
    152 // Register the block support.
    153 WP_Block_Supports::get_instance()->register(
    154 	'colors',
    155 	array(
    156 		'register_attribute' => 'wp_register_colors_support',
    157 		'apply'              => 'wp_apply_colors_support',
    158 	)
    159 );