File "colors.php"

Full path: /home/kosmetik/public_html/wp-includes/block-supports/colors.php
File size: 4.96 B
MIME-type: text/x-php
Charset: utf-8

Download   Open   Edit   Advanced Editor   Back

<?php

function wp_register_colors_support($block_type)
{
    $color_support = false;
    if (property_exists($block_type, 'supports')) {
        $color_support = _wp_array_get($block_type->supports, array('color'), false);
    }
    $has_text_colors_support = true === $color_support || is_array($color_support) && _wp_array_get($color_support, array('text'), true);
    $has_background_colors_support = true === $color_support || is_array($color_support) && _wp_array_get($color_support, array('background'), true);
    $has_gradients_support = _wp_array_get($color_support, array('gradients'), false);
    if (!$block_type->attributes) {
        $block_type->attributes = array();
    }
    if ($has_text_colors_support && !array_key_exists('style', $block_type->attributes)) {
        $block_type->attributes['style'] = array('type' => 'object');
    }
    if ($has_background_colors_support && !array_key_exists('backgroundColor', $block_type->attributes)) {
        $block_type->attributes['backgroundColor'] = array('type' => 'string');
    }
    if ($has_text_colors_support && !array_key_exists('textColor', $block_type->attributes)) {
        $block_type->attributes['textColor'] = array('type' => 'string');
    }
    if ($has_gradients_support && !array_key_exists('gradient', $block_type->attributes)) {
        $block_type->attributes['gradient'] = array('type' => 'string');
    }
}
function wp_apply_colors_support($block_type, $block_attributes)
{
    $color_support = _wp_array_get($block_type->supports, array('color'), false);
    $has_text_colors_support = true === $color_support || is_array($color_support) && _wp_array_get($color_support, array('text'), true);
    $has_background_colors_support = true === $color_support || is_array($color_support) && _wp_array_get($color_support, array('background'), true);
    $has_link_colors_support = _wp_array_get($color_support, array('link'), false);
    $has_gradients_support = _wp_array_get($color_support, array('gradients'), false);
    $classes = array();
    $styles = array();
    if ($has_text_colors_support) {
        $has_named_text_color = array_key_exists('textColor', $block_attributes);
        $has_custom_text_color = isset($block_attributes['style']['color']['text']);
        if ($has_custom_text_color || $has_named_text_color) {
            $classes[] = 'has-text-color';
        }
        if ($has_named_text_color) {
            $classes[] = sprintf('has-%s-color', $block_attributes['textColor']);
        } elseif ($has_custom_text_color) {
            $styles[] = sprintf('color: %s;', $block_attributes['style']['color']['text']);
        }
    }
    if ($has_link_colors_support) {
        $has_link_color = isset($block_attributes['style']['color']['link']);
        if ($has_link_color) {
            $classes[] = 'has-link-color';
            if (strpos($block_attributes['style']['color']['link'], 'var:preset|color|') !== false) {
                $index_to_splice = strrpos($block_attributes['style']['color']['link'], '|') + 1;
                $link_color_name = substr($block_attributes['style']['color']['link'], $index_to_splice);
                $styles[] = sprintf('--wp--style--color--link: var(--wp--preset--color--%s);', $link_color_name);
            } else {
                $styles[] = sprintf('--wp--style--color--link: %s;', $block_attributes['style']['color']['link']);
            }
        }
    }
    if ($has_background_colors_support) {
        $has_named_background_color = array_key_exists('backgroundColor', $block_attributes);
        $has_custom_background_color = isset($block_attributes['style']['color']['background']);
        if ($has_custom_background_color || $has_named_background_color) {
            $classes[] = 'has-background';
        }
        if ($has_named_background_color) {
            $classes[] = sprintf('has-%s-background-color', $block_attributes['backgroundColor']);
        } elseif ($has_custom_background_color) {
            $styles[] = sprintf('background-color: %s;', $block_attributes['style']['color']['background']);
        }
    }
    if ($has_gradients_support) {
        $has_named_gradient = array_key_exists('gradient', $block_attributes);
        $has_custom_gradient = isset($block_attributes['style']['color']['gradient']);
        if ($has_named_gradient || $has_custom_gradient) {
            $classes[] = 'has-background';
        }
        if ($has_named_gradient) {
            $classes[] = sprintf('has-%s-gradient-background', $block_attributes['gradient']);
        } elseif ($has_custom_gradient) {
            $styles[] = sprintf('background: %s;', $block_attributes['style']['color']['gradient']);
        }
    }
    $attributes = array();
    if (!empty($classes)) {
        $attributes['class'] = implode(' ', $classes);
    }
    if (!empty($styles)) {
        $attributes['style'] = implode(' ', $styles);
    }
    return $attributes;
}
WP_Block_Supports::get_instance()->register('colors', array('register_attribute' => 'wp_register_colors_support', 'apply' => 'wp_apply_colors_support'));