From 130e13e39ee782c0813d9433859196c097436d6d Mon Sep 17 00:00:00 2001 From: audrasjb Date: Mon, 19 Sep 2022 20:56:10 +0000 Subject: [PATCH] Editor: Backport block supports filter callback, registrations and tests to 6.1. This changeset backports the following changes: - Implement [https://github.com/WordPress/gutenberg/pull/42880 gutenberg#42880]: Backport script loader: enqueue stored block supports styles - Allow a way to bypass `SCRIPT_DEBUG` in tests. See [https://github.com/WordPress/wordpress-develop/pull/3259#issuecomment-1250403735 comment] and the related [https://github.com/WordPress/gutenberg/pull/44248 Gutenberg pull request] Props ramonopoly, gziolo, bernhard-reiter, audrasjb, costdev. See #56467. Built from https://develop.svn.wordpress.org/trunk@54214 git-svn-id: http://core.svn.wordpress.org/trunk@53773 1a063a9b-81f0-0310-95a4-ce76da25c4cd --- wp-includes/default-filters.php | 4 ++ wp-includes/script-loader.php | 69 +++++++++++++++++++++++++++++++++ wp-includes/version.php | 2 +- 3 files changed, 74 insertions(+), 1 deletion(-) diff --git a/wp-includes/default-filters.php b/wp-includes/default-filters.php index 54868163cd..a7436c22b3 100644 --- a/wp-includes/default-filters.php +++ b/wp-includes/default-filters.php @@ -575,6 +575,10 @@ add_action( 'admin_head', 'wp_check_widget_editor_deps' ); add_action( 'wp_enqueue_scripts', 'wp_enqueue_global_styles' ); add_action( 'wp_footer', 'wp_enqueue_global_styles', 1 ); +// Block supports, and other styles parsed and stored in the Style Engine. +add_action( 'wp_enqueue_scripts', 'wp_enqueue_stored_styles' ); +add_action( 'wp_footer', 'wp_enqueue_stored_styles', 1 ); + // SVG filters like duotone have to be loaded at the beginning of the body in both admin and the front-end. add_action( 'wp_body_open', 'wp_global_styles_render_svg_filters' ); add_action( 'in_admin_header', 'wp_global_styles_render_svg_filters' ); diff --git a/wp-includes/script-loader.php b/wp-includes/script-loader.php index 4fdaec4c7d..6fff91ffed 100644 --- a/wp-includes/script-loader.php +++ b/wp-includes/script-loader.php @@ -2966,6 +2966,75 @@ function wp_enqueue_block_support_styles( $style, $priority = 10 ) { ); } +/** + * Fetches, processes and compiles stored core styles, then combines and renders them to the page. + * Styles are stored via the style engine API. + * + * @link https://developer.wordpress.org/block-editor/reference-guides/packages/packages-style-engine/ + * + * @since 6.1.0 + * + * @param array $options { + * Optional. An array of options to pass to wp_style_engine_get_stylesheet_from_context(). Default empty array. + * + * @type bool $optimize Whether to optimize the CSS output, e.g., combine rules. Default is `false`. + * @type bool $prettify Whether to add new lines and indents to output. Default is the test of whether the global constant `SCRIPT_DEBUG` is defined. + * } + * + * @return void + */ +function wp_enqueue_stored_styles( $options = array() ) { + $is_block_theme = wp_is_block_theme(); + $is_classic_theme = ! $is_block_theme; + + /* + * For block themes, this function prints stored styles in the header. + * For classic themes, in the footer. + */ + if ( + ( $is_block_theme && doing_action( 'wp_footer' ) ) || + ( $is_classic_theme && doing_action( 'wp_enqueue_scripts' ) ) + ) { + return; + } + + $core_styles_keys = array( 'block-supports' ); + $compiled_core_stylesheet = ''; + $style_tag_id = 'core'; + // Adds comment if code is prettified to identify core styles sections in debugging. + $should_prettify = isset( $options['prettify'] ) ? true === $options['prettify'] : defined( 'SCRIPT_DEBUG' ) && SCRIPT_DEBUG; + foreach ( $core_styles_keys as $style_key ) { + if ( $should_prettify ) { + $compiled_core_stylesheet .= "/**\n * Core styles: $style_key\n */\n"; + } + // Chains core store ids to signify what the styles contain. + $style_tag_id .= '-' . $style_key; + $compiled_core_stylesheet .= wp_style_engine_get_stylesheet_from_context( $style_key, $options ); + } + + // Combines Core styles. + if ( ! empty( $compiled_core_stylesheet ) ) { + wp_register_style( $style_tag_id, false, array(), true, true ); + wp_add_inline_style( $style_tag_id, $compiled_core_stylesheet ); + wp_enqueue_style( $style_tag_id ); + } + + // Prints out any other stores registered by themes or otherwise. + $additional_stores = WP_Style_Engine_CSS_Rules_Store::get_stores(); + foreach ( array_keys( $additional_stores ) as $store_name ) { + if ( in_array( $store_name, $core_styles_keys, true ) ) { + continue; + } + $styles = wp_style_engine_get_stylesheet_from_context( $store_name, $options ); + if ( ! empty( $styles ) ) { + $key = "wp-style-engine-$store_name"; + wp_register_style( $key, false, array(), true, true ); + wp_add_inline_style( $key, $styles ); + wp_enqueue_style( $key ); + } + } +} + /** * Enqueues a stylesheet for a specific block. * diff --git a/wp-includes/version.php b/wp-includes/version.php index fab44a26d4..1f7e77a5a0 100644 --- a/wp-includes/version.php +++ b/wp-includes/version.php @@ -16,7 +16,7 @@ * * @global string $wp_version */ -$wp_version = '6.1-alpha-54213'; +$wp_version = '6.1-alpha-54214'; /** * Holds the WordPress DB revision, increments when changes are made to the WordPress DB schema.