diff -r be944660c56a -r 3d72ae0968f4 wp/wp-includes/block-editor.php --- a/wp/wp-includes/block-editor.php Wed Sep 21 18:19:35 2022 +0200 +++ b/wp/wp-includes/block-editor.php Tue Sep 27 16:37:53 2022 +0200 @@ -83,6 +83,7 @@ * @param WP_Block_Editor_Context $block_editor_context The current block editor context. */ $block_categories = apply_filters( 'block_categories_all', $block_categories, $block_editor_context ); + if ( ! empty( $block_editor_context->post ) ) { $post = $block_editor_context->post; @@ -108,7 +109,7 @@ * * @param WP_Block_Editor_Context $block_editor_context The current block editor context. * - * @return bool|array Array of block type slugs, or boolean to enable/disable all. + * @return bool|string[] Array of block type slugs, or boolean to enable/disable all. */ function get_allowed_block_types( $block_editor_context ) { $allowed_block_types = true; @@ -118,11 +119,12 @@ * * @since 5.8.0 * - * @param bool|array $allowed_block_types Array of block type slugs, or boolean to enable/disable all. + * @param bool|string[] $allowed_block_types Array of block type slugs, or boolean to enable/disable all. * Default true (all registered block types supported). * @param WP_Block_Editor_Context $block_editor_context The current block editor context. */ $allowed_block_types = apply_filters( 'allowed_block_types_all', $allowed_block_types, $block_editor_context ); + if ( ! empty( $block_editor_context->post ) ) { $post = $block_editor_context->post; @@ -132,9 +134,9 @@ * @since 5.0.0 * @deprecated 5.8.0 Use the {@see 'allowed_block_types_all'} filter instead. * - * @param bool|array $allowed_block_types Array of block type slugs, or boolean to enable/disable all. - * Default true (all registered block types supported) - * @param WP_Post $post The post resource data. + * @param bool|string[] $allowed_block_types Array of block type slugs, or boolean to enable/disable all. + * Default true (all registered block types supported) + * @param WP_Post $post The post resource data. */ $allowed_block_types = apply_filters_deprecated( 'allowed_block_types', array( $allowed_block_types, $post ), '5.8.0', 'allowed_block_types_all' ); } @@ -187,23 +189,37 @@ } } + // These styles are used if the "no theme styles" options is triggered or on + // themes without their own editor styles. + $default_editor_styles_file = ABSPATH . WPINC . '/css/dist/block-editor/default-editor-styles.css'; + if ( file_exists( $default_editor_styles_file ) ) { + $default_editor_styles = array( + array( 'css' => file_get_contents( $default_editor_styles_file ) ), + ); + } else { + $default_editor_styles = array(); + } + $editor_settings = array( - 'alignWide' => get_theme_support( 'align-wide' ), - 'allowedBlockTypes' => true, - 'allowedMimeTypes' => get_allowed_mime_types(), - 'blockCategories' => get_default_block_categories(), - 'disableCustomColors' => get_theme_support( 'disable-custom-colors' ), - 'disableCustomFontSizes' => get_theme_support( 'disable-custom-font-sizes' ), - 'disableCustomGradients' => get_theme_support( 'disable-custom-gradients' ), - 'enableCustomLineHeight' => get_theme_support( 'custom-line-height' ), - 'enableCustomSpacing' => get_theme_support( 'custom-spacing' ), - 'enableCustomUnits' => get_theme_support( 'custom-units' ), - 'isRTL' => is_rtl(), - 'imageDefaultSize' => $image_default_size, - 'imageDimensions' => $image_dimensions, - 'imageEditing' => true, - 'imageSizes' => $available_image_sizes, - 'maxUploadFileSize' => $max_upload_size, + 'alignWide' => get_theme_support( 'align-wide' ), + 'allowedBlockTypes' => true, + 'allowedMimeTypes' => get_allowed_mime_types(), + 'defaultEditorStyles' => $default_editor_styles, + 'blockCategories' => get_default_block_categories(), + 'disableCustomColors' => get_theme_support( 'disable-custom-colors' ), + 'disableCustomFontSizes' => get_theme_support( 'disable-custom-font-sizes' ), + 'disableCustomGradients' => get_theme_support( 'disable-custom-gradients' ), + 'enableCustomLineHeight' => get_theme_support( 'custom-line-height' ), + 'enableCustomSpacing' => get_theme_support( 'custom-spacing' ), + 'enableCustomUnits' => get_theme_support( 'custom-units' ), + 'isRTL' => is_rtl(), + 'imageDefaultSize' => $image_default_size, + 'imageDimensions' => $image_dimensions, + 'imageEditing' => true, + 'imageSizes' => $available_image_sizes, + 'maxUploadFileSize' => $max_upload_size, + // The following flag is required to enable the new Gallery block format on the mobile apps in 5.9. + '__unstableGalleryWithImageBlocks' => true, ); // Theme settings. @@ -244,7 +260,7 @@ * * @since 5.8.0 * - * @param array $widgets An array of excluded widget-type IDs. + * @param string[] $widgets An array of excluded widget-type IDs. */ $editor_settings['widgetTypesToHideFromLegacyWidgetBlock'] = apply_filters( 'widget_types_to_hide_from_legacy_widget_block', @@ -272,6 +288,85 @@ } /** + * Collect the block editor assets that need to be loaded into the editor's iframe. + * + * @since 6.0.0 + * @access private + * + * @global string $pagenow The filename of the current screen. + * + * @return array { + * The block editor assets. + * + * @type string|false $styles String containing the HTML for styles. + * @type string|false $scripts String containing the HTML for scripts. + * } + */ +function _wp_get_iframed_editor_assets() { + global $pagenow; + + $script_handles = array(); + $style_handles = array( + 'wp-block-editor', + 'wp-block-library', + 'wp-edit-blocks', + ); + + if ( current_theme_supports( 'wp-block-styles' ) ) { + $style_handles[] = 'wp-block-library-theme'; + } + + if ( 'widgets.php' === $pagenow || 'customize.php' === $pagenow ) { + $style_handles[] = 'wp-widgets'; + $style_handles[] = 'wp-edit-widgets'; + } + + $block_registry = WP_Block_Type_Registry::get_instance(); + + foreach ( $block_registry->get_all_registered() as $block_type ) { + if ( ! empty( $block_type->style ) ) { + $style_handles[] = $block_type->style; + } + + if ( ! empty( $block_type->editor_style ) ) { + $style_handles[] = $block_type->editor_style; + } + + if ( ! empty( $block_type->script ) ) { + $script_handles[] = $block_type->script; + } + } + + $style_handles = array_unique( $style_handles ); + $done = wp_styles()->done; + + ob_start(); + + // We do not need reset styles for the iframed editor. + wp_styles()->done = array( 'wp-reset-editor-styles' ); + wp_styles()->do_items( $style_handles ); + wp_styles()->done = $done; + + $styles = ob_get_clean(); + + $script_handles = array_unique( $script_handles ); + $done = wp_scripts()->done; + + ob_start(); + + wp_scripts()->done = array(); + wp_scripts()->do_items( $script_handles ); + wp_scripts()->done = $done; + + $scripts = ob_get_clean(); + + return array( + 'styles' => $styles, + 'scripts' => $scripts, + ); +} + +/** * Returns the contextualized block editor settings for a selected editor context. * * @since 5.8.0 @@ -291,47 +386,69 @@ $custom_settings ); - $theme_json = WP_Theme_JSON_Resolver::get_merged_data( $editor_settings ); + $global_styles = array(); + $presets = array( + array( + 'css' => 'variables', + '__unstableType' => 'presets', + 'isGlobalStyles' => true, + ), + array( + 'css' => 'presets', + '__unstableType' => 'presets', + 'isGlobalStyles' => true, + ), + ); + foreach ( $presets as $preset_style ) { + $actual_css = wp_get_global_stylesheet( array( $preset_style['css'] ) ); + if ( '' !== $actual_css ) { + $preset_style['css'] = $actual_css; + $global_styles[] = $preset_style; + } + } if ( WP_Theme_JSON_Resolver::theme_has_support() ) { - $editor_settings['styles'][] = array( - 'css' => $theme_json->get_stylesheet( 'block_styles' ), - '__unstableType' => 'globalStyles', + $block_classes = array( + 'css' => 'styles', + '__unstableType' => 'theme', + 'isGlobalStyles' => true, ); - $editor_settings['styles'][] = array( - 'css' => $theme_json->get_stylesheet( 'css_variables' ), - '__experimentalNoWrapper' => true, - '__unstableType' => 'globalStyles', - ); + $actual_css = wp_get_global_stylesheet( array( $block_classes['css'] ) ); + if ( '' !== $actual_css ) { + $block_classes['css'] = $actual_css; + $global_styles[] = $block_classes; + } } - $editor_settings['__experimentalFeatures'] = $theme_json->get_settings(); + $editor_settings['styles'] = array_merge( $global_styles, get_block_editor_theme_styles() ); + + $editor_settings['__experimentalFeatures'] = wp_get_global_settings(); // These settings may need to be updated based on data coming from theme.json sources. if ( isset( $editor_settings['__experimentalFeatures']['color']['palette'] ) ) { $colors_by_origin = $editor_settings['__experimentalFeatures']['color']['palette']; - $editor_settings['colors'] = isset( $colors_by_origin['user'] ) ? - $colors_by_origin['user'] : ( + $editor_settings['colors'] = isset( $colors_by_origin['custom'] ) ? + $colors_by_origin['custom'] : ( isset( $colors_by_origin['theme'] ) ? $colors_by_origin['theme'] : - $colors_by_origin['core'] + $colors_by_origin['default'] ); } if ( isset( $editor_settings['__experimentalFeatures']['color']['gradients'] ) ) { $gradients_by_origin = $editor_settings['__experimentalFeatures']['color']['gradients']; - $editor_settings['gradients'] = isset( $gradients_by_origin['user'] ) ? - $gradients_by_origin['user'] : ( + $editor_settings['gradients'] = isset( $gradients_by_origin['custom'] ) ? + $gradients_by_origin['custom'] : ( isset( $gradients_by_origin['theme'] ) ? $gradients_by_origin['theme'] : - $gradients_by_origin['core'] + $gradients_by_origin['default'] ); } if ( isset( $editor_settings['__experimentalFeatures']['typography']['fontSizes'] ) ) { $font_sizes_by_origin = $editor_settings['__experimentalFeatures']['typography']['fontSizes']; - $editor_settings['fontSizes'] = isset( $font_sizes_by_origin['user'] ) ? - $font_sizes_by_origin['user'] : ( + $editor_settings['fontSizes'] = isset( $font_sizes_by_origin['custom'] ) ? + $font_sizes_by_origin['custom'] : ( isset( $font_sizes_by_origin['theme'] ) ? $font_sizes_by_origin['theme'] : - $font_sizes_by_origin['core'] + $font_sizes_by_origin['default'] ); } if ( isset( $editor_settings['__experimentalFeatures']['color']['custom'] ) ) { @@ -346,19 +463,39 @@ $editor_settings['disableCustomFontSizes'] = ! $editor_settings['__experimentalFeatures']['typography']['customFontSize']; unset( $editor_settings['__experimentalFeatures']['typography']['customFontSize'] ); } - if ( isset( $editor_settings['__experimentalFeatures']['typography']['customLineHeight'] ) ) { - $editor_settings['enableCustomLineHeight'] = $editor_settings['__experimentalFeatures']['typography']['customLineHeight']; - unset( $editor_settings['__experimentalFeatures']['typography']['customLineHeight'] ); + if ( isset( $editor_settings['__experimentalFeatures']['typography']['lineHeight'] ) ) { + $editor_settings['enableCustomLineHeight'] = $editor_settings['__experimentalFeatures']['typography']['lineHeight']; + unset( $editor_settings['__experimentalFeatures']['typography']['lineHeight'] ); } if ( isset( $editor_settings['__experimentalFeatures']['spacing']['units'] ) ) { $editor_settings['enableCustomUnits'] = $editor_settings['__experimentalFeatures']['spacing']['units']; unset( $editor_settings['__experimentalFeatures']['spacing']['units'] ); } - if ( isset( $editor_settings['__experimentalFeatures']['spacing']['customPadding'] ) ) { - $editor_settings['enableCustomSpacing'] = $editor_settings['__experimentalFeatures']['spacing']['customPadding']; - unset( $editor_settings['__experimentalFeatures']['spacing']['customPadding'] ); + if ( isset( $editor_settings['__experimentalFeatures']['spacing']['padding'] ) ) { + $editor_settings['enableCustomSpacing'] = $editor_settings['__experimentalFeatures']['spacing']['padding']; + unset( $editor_settings['__experimentalFeatures']['spacing']['padding'] ); } + $editor_settings['__unstableResolvedAssets'] = _wp_get_iframed_editor_assets(); + $editor_settings['localAutosaveInterval'] = 15; + $editor_settings['__experimentalDiscussionSettings'] = array( + 'commentOrder' => get_option( 'comment_order' ), + 'commentsPerPage' => get_option( 'comments_per_page' ), + 'defaultCommentsPage' => get_option( 'default_comments_page' ), + 'pageComments' => get_option( 'page_comments' ), + 'threadComments' => get_option( 'thread_comments' ), + 'threadCommentsDepth' => get_option( 'thread_comments_depth' ), + 'defaultCommentStatus' => get_option( 'default_comment_status' ), + 'avatarURL' => get_avatar_url( + '', + array( + 'size' => 96, + 'force_default' => true, + 'default' => get_option( 'avatar_default' ), + ) + ), + ); + /** * Filters the settings to pass to the block editor for all editor type. * @@ -368,6 +505,7 @@ * @param WP_Block_Editor_Context $block_editor_context The current block editor context. */ $editor_settings = apply_filters( 'block_editor_settings_all', $editor_settings, $block_editor_context ); + if ( ! empty( $block_editor_context->post ) ) { $post = $block_editor_context->post; @@ -392,24 +530,26 @@ * * @since 5.8.0 * - * @global WP_Post $post Global post object. + * @global WP_Post $post Global post object. + * @global WP_Scripts $wp_scripts The WP_Scripts object for printing scripts. + * @global WP_Styles $wp_styles The WP_Styles object for printing styles. * - * @param array $preload_paths List of paths to preload. + * @param string[] $preload_paths List of paths to preload. * @param WP_Block_Editor_Context $block_editor_context The current block editor context. - * - * @return void */ function block_editor_rest_api_preload( array $preload_paths, $block_editor_context ) { - global $post; + global $post, $wp_scripts, $wp_styles; /** * Filters the array of REST API paths that will be used to preloaded common data for the block editor. * * @since 5.8.0 * - * @param string[] $preload_paths Array of paths to preload. + * @param string[] $preload_paths Array of paths to preload. + * @param WP_Block_Editor_Context $block_editor_context The current block editor context. */ $preload_paths = apply_filters( 'block_editor_rest_api_preload_paths', $preload_paths, $block_editor_context ); + if ( ! empty( $block_editor_context->post ) ) { $selected_post = $block_editor_context->post; @@ -432,11 +572,28 @@ } /* - * Ensure the global $post remains the same after API data is preloaded. + * Ensure the global $post, $wp_scripts, and $wp_styles remain the same after + * API data is preloaded. * Because API preloading can call the_content and other filters, plugins - * can unexpectedly modify $post. + * can unexpectedly modify the global $post or enqueue assets which are not + * intended for the block editor. */ $backup_global_post = ! empty( $post ) ? clone $post : $post; + $backup_wp_scripts = ! empty( $wp_scripts ) ? clone $wp_scripts : $wp_scripts; + $backup_wp_styles = ! empty( $wp_styles ) ? clone $wp_styles : $wp_styles; + + foreach ( $preload_paths as &$path ) { + if ( is_string( $path ) && ! str_starts_with( $path, '/' ) ) { + $path = '/' . $path; + continue; + } + + if ( is_array( $path ) && is_string( $path[0] ) && ! str_starts_with( $path[0], '/' ) ) { + $path[0] = '/' . $path[0]; + } + } + + unset( $path ); $preload_data = array_reduce( $preload_paths, @@ -444,8 +601,10 @@ array() ); - // Restore the global $post as it was before API preloading. - $post = $backup_global_post; + // Restore the global $post, $wp_scripts, and $wp_styles as they were before API preloading. + $post = $backup_global_post; + $wp_scripts = $backup_wp_scripts; + $wp_styles = $backup_wp_styles; wp_add_inline_script( 'wp-api-fetch', @@ -464,22 +623,12 @@ * * @global array $editor_styles * - * @return array An array of theme styles for the block editor. Includes default font family - * style and theme stylesheets. + * @return array An array of theme styles for the block editor. */ function get_block_editor_theme_styles() { global $editor_styles; - if ( ! WP_Theme_JSON_Resolver::theme_has_support() ) { - $styles = array( - array( - 'css' => 'body { font-family: -apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,Oxygen-Sans,Ubuntu,Cantarell,"Helvetica Neue",sans-serif }', - '__unstableType' => 'core', - ), - ); - } else { - $styles = array(); - } + $styles = array(); if ( $editor_styles && current_theme_supports( 'editor-styles' ) ) { foreach ( $editor_styles as $style ) { @@ -489,6 +638,7 @@ $styles[] = array( 'css' => wp_remote_retrieve_body( $response ), '__unstableType' => 'theme', + 'isGlobalStyles' => false, ); } } else { @@ -498,6 +648,7 @@ 'css' => file_get_contents( $file ), 'baseURL' => get_theme_file_uri( $style ), '__unstableType' => 'theme', + 'isGlobalStyles' => false, ); } }