Make WordPress Core

Changeset 56047


Ignore:
Timestamp:
06/27/2023 12:21:12 AM (3 years ago)
Author:
isabel_brison
Message:

Editor: add iframe around post editor.

Adds an iframe around the post editor only if all registered blocks are v3 or higher.

Props ellatrix, mukesh27, costdev, oandregal, ramonopoly.
Fixes #58626.

Location:
trunk/src/wp-includes
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/wp-includes/block-editor.php

    r56030 r56047  
    288288 * @access private
    289289 *
    290  * @global string $pagenow The filename of the current screen.
     290 * @global string     $pagenow    The filename of the current screen.
     291 * @global WP_Styles  $wp_styles  The WP_Styles current instance.
     292 * @global WP_Scripts $wp_scripts The WP_Scripts current instance.
    291293 *
    292294 * @return array {
     
    298300 */
    299301function _wp_get_iframed_editor_assets() {
    300         global $pagenow, $editor_styles;
    301 
    302         $script_handles = array(
    303                 'wp-polyfill',
    304         );
    305         $style_handles  = array(
    306                 'wp-edit-blocks',
    307         );
    308 
    309         if (
    310                 current_theme_supports( 'wp-block-styles' ) &&
    311                 ( ! is_array( $editor_styles ) || count( $editor_styles ) === 0 )
    312         ) {
    313                 $style_handles[] = 'wp-block-library-theme';
    314         }
    315 
    316         if ( 'widgets.php' === $pagenow || 'customize.php' === $pagenow ) {
    317                 $style_handles[] = 'wp-widgets';
    318                 $style_handles[] = 'wp-edit-widgets';
    319         }
     302        global $wp_styles, $wp_scripts, $pagenow;
     303
     304        // Keep track of the styles and scripts instance to restore later.
     305        $current_wp_styles  = $wp_styles;
     306        $current_wp_scripts = $wp_scripts;
     307
     308        // Create new instances to collect the assets.
     309        $wp_styles  = new WP_Styles();
     310        $wp_scripts = new WP_Scripts();
     311
     312        /*
     313         * Register all currently registered styles and scripts. The actions that
     314         * follow enqueue assets, but don't necessarily register them.
     315         */
     316        $wp_styles->registered  = $current_wp_styles->registered;
     317        $wp_scripts->registered = $current_wp_scripts->registered;
     318
     319        /*
     320         * We generally do not need reset styles for the iframed editor.
     321         * However, if it's a classic theme, margins will be added to every block,
     322         * which is reset specifically for list items, so classic themes rely on
     323         * these reset styles.
     324         */
     325        $wp_styles->done =
     326                wp_theme_has_theme_json() ? array( 'wp-reset-editor-styles' ) : array();
     327
     328        wp_enqueue_script( 'wp-polyfill' );
     329        // Enqueue the `editorStyle` handles for all core block, and dependencies.
     330        wp_enqueue_style( 'wp-edit-blocks' );
     331
     332        if ( 'site-editor.php' === $pagenow ) {
     333                wp_enqueue_style( 'wp-edit-site' );
     334        }
     335
     336        if ( current_theme_supports( 'wp-block-styles' ) ) {
     337                wp_enqueue_style( 'wp-block-library-theme' );
     338        }
     339
     340        /*
     341         * We don't want to load EDITOR scripts in the iframe, only enqueue
     342         * front-end assets for the content.
     343         */
     344        add_filter( 'should_load_block_editor_scripts_and_styles', '__return_false' );
     345        do_action( 'enqueue_block_assets' );
     346        remove_filter( 'should_load_block_editor_scripts_and_styles', '__return_false' );
    320347
    321348        $block_registry = WP_Block_Type_Registry::get_instance();
    322349
     350        /*
     351         * Additionally, do enqueue `editorStyle` assets for all blocks, which
     352         * contains editor-only styling for blocks (editor content).
     353         */
    323354        foreach ( $block_registry->get_all_registered() as $block_type ) {
    324                 $style_handles = array_merge(
    325                         $style_handles,
    326                         $block_type->style_handles,
    327                         $block_type->editor_style_handles
    328                 );
    329 
    330                 $script_handles = array_merge(
    331                         $script_handles,
    332                         $block_type->script_handles
    333                 );
    334         }
    335 
    336         $style_handles = array_unique( $style_handles );
    337         $done          = wp_styles()->done;
     355                if ( isset( $block_type->editor_style_handles ) && is_array( $block_type->editor_style_handles ) ) {
     356                        foreach ( $block_type->editor_style_handles as $style_handle ) {
     357                                wp_enqueue_style( $style_handle );
     358                        }
     359                }
     360        }
    338361
    339362        ob_start();
    340 
    341         // We do not need reset styles for the iframed editor.
    342         wp_styles()->done = array( 'wp-reset-editor-styles' );
    343         wp_styles()->do_items( $style_handles );
    344         wp_styles()->done = $done;
    345 
     363        wp_print_styles();
    346364        $styles = ob_get_clean();
    347365
    348         $script_handles = array_unique( $script_handles );
    349         $done           = wp_scripts()->done;
    350 
    351366        ob_start();
    352 
    353         wp_scripts()->done = array();
    354         wp_scripts()->do_items( $script_handles );
    355         wp_scripts()->done = $done;
    356 
     367        wp_print_head_scripts();
     368        wp_print_footer_scripts();
    357369        $scripts = ob_get_clean();
     370
     371        // Restore the original instances.
     372        $wp_styles  = $current_wp_styles;
     373        $wp_scripts = $current_wp_scripts;
    358374
    359375        return array(
  • trunk/src/wp-includes/script-loader.php

    r56008 r56047  
    16301630                'wp-block-editor-content',
    16311631                "/wp-includes/css/dist/block-editor/content$suffix.css",
    1632                 array()
     1632                array( 'wp-components' )
    16331633        );
    16341634
Note: See TracChangeset for help on using the changeset viewer.