Changeset 11678
- Timestamp:
- 03/21/2022 06:54:45 PM (4 years ago)
- 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 135 135 remove_filter( 'render_block', 'gutenberg_render_elements_support', 10, 2 ); 136 136 add_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 */ 148 function 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. 200 remove_filter( 'render_block', 'wp_render_duotone_support', 10, 2 ); 201 remove_filter( 'render_block', 'gutenberg_render_duotone_support', 10, 2 ); 202 add_filter( 'render_block', __NAMESPACE__ . '\render_duotone_support_styles', 10, 2 );
Note: See TracChangeset
for help on using the changeset viewer.