Making WordPress.org

Changeset 11678


Ignore:
Timestamp:
03/21/2022 06:54:45 PM (4 years ago)
Author:
ryelle
Message:

Pattern Directory: Sync with git WordPress/pattern-directory@2f1460e4c0b840e390da60ef6b789dcb6bf26360

File:
1 edited

Legend:

Unmodified
Added
Removed
  • sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-patterns/includes/inline-styles.php

    r11652 r11678  
    135135remove_filter( 'render_block', 'gutenberg_render_elements_support', 10, 2 );
    136136add_filter( 'render_block', __NAMESPACE__ . '\render_elements_support_styles', 10, 2 );
     137
     138/**
     139 * Render out the duotone stylesheet and SVG.
     140 *
     141 * See `wp_render_duotone_support`, `gutenberg_render_duotone_support`.
     142 * Copied from https://github.com/WordPress/gutenberg/blob/a9b29acd0a058644ef28523c00fbe633272d6c0c/lib/block-supports/duotone.php#L419.
     143 *
     144 * @param  string $block_content Rendered block content.
     145 * @param  array  $block         Block object.
     146 * @return string                Filtered block content.
     147 */
     148function render_duotone_support_styles( $block_content, $block ) {
     149    $block_type = WP_Block_Type_Registry::get_instance()->get_registered( $block['blockName'] );
     150
     151    $duotone_support = false;
     152    if ( $block_type && property_exists( $block_type, 'supports' ) ) {
     153        $duotone_support = _wp_array_get( $block_type->supports, array( 'color', '__experimentalDuotone' ), false );
     154    }
     155
     156    $has_duotone_attribute = isset( $block['attrs']['style']['color']['duotone'] );
     157
     158    if (
     159        ! $duotone_support ||
     160        ! $has_duotone_attribute
     161    ) {
     162        return $block_content;
     163    }
     164
     165    $filter_preset   = array(
     166        'slug'   => wp_unique_id( sanitize_key( implode( '-', $block['attrs']['style']['color']['duotone'] ) . '-' ) ),
     167        'colors' => $block['attrs']['style']['color']['duotone'],
     168    );
     169    $filter_property = gutenberg_get_duotone_filter_property( $filter_preset );
     170    $filter_id       = gutenberg_get_duotone_filter_id( $filter_preset );
     171    $filter_svg      = gutenberg_get_duotone_filter_svg( $filter_preset );
     172
     173    $scope     = '.' . $filter_id;
     174    $selectors = explode( ',', $duotone_support );
     175    $scoped    = array();
     176    foreach ( $selectors as $sel ) {
     177        $scoped[] = $scope . ' ' . trim( $sel );
     178    }
     179    $selector = implode( ', ', $scoped );
     180
     181    // !important is needed because these styles render before global styles,
     182    // and they should be overriding the duotone filters set by global styles.
     183    $filter_style = defined( 'SCRIPT_DEBUG' ) && SCRIPT_DEBUG
     184        ? $selector . " {\n\tfilter: " . $filter_property . " !important;\n}\n"
     185        : $selector . '{filter:' . $filter_property . ' !important;}';
     186
     187    // Like the layout hook, this assumes the hook only applies to blocks with a single wrapper.
     188    $content = preg_replace(
     189        '/' . preg_quote( 'class="', '/' ) . '/',
     190        'class="' . $filter_id . ' ',
     191        $block_content,
     192        1
     193    );
     194
     195    // Output the style first, to fix the Safari bug.
     196    // See https://github.com/WordPress/gutenberg/blob/a9b29acd0a058644ef28523c00fbe633272d6c0c/lib/block-supports/duotone.php#L467.
     197    return '<style>' . $filter_style . '</style>' . $filter_svg . $content;
     198}
     199// Remove WordPress core filter to avoid rendering duplicate support elements.
     200remove_filter( 'render_block', 'wp_render_duotone_support', 10, 2 );
     201remove_filter( 'render_block', 'gutenberg_render_duotone_support', 10, 2 );
     202add_filter( 'render_block', __NAMESPACE__ . '\render_duotone_support_styles', 10, 2 );
Note: See TracChangeset for help on using the changeset viewer.