--- 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,
);
}
}