Make WordPress Core

Changeset 44115 for trunk


Ignore:
Timestamp:
12/13/2018 05:26:09 PM (8 years ago)
Author:
desrosj
Message:

Script loader: Adjust JS packages registration.

Adjusts the packages registration after [43723]:

Combine the different registration functions into one wp_default_packages function. To reach this goal move the prefix logic into a function so it can be called from different locations. Use a static variable there to prevent duplicate inclusion of version.php.

Call this function from the wp_default_scripts action by registering it as a default filter.

Combine some of the logic in _WP_Editors::print_tinymce_scripts into wp_register_tinymce_scripts. The logic to force an uncompressed TinyMCE script file stays in _WP_Editors::force_uncompressed_tinymce because that logic is very specific to the classic editor.

The script handle wp-tinymce is now a dependency of the editor script handle. In combination with the previous item, this makes the classic editor work.

Adjust the syntax of the script paths to be more consistent with other WordPress code.

Always use "production" mode for the media files to prevent people from inadvertently committing development files.

Props pento, omarreiss, atimmer.

Merges [43738] into trunk.

Fixes #45065.

Location:
trunk
Files:
6 edited

Legend:

Unmodified
Added
Removed
  • trunk

  • trunk/src/wp-includes/class-wp-editor.php

    r43571 r44115  
    318318                        if ( is_admin() ) {
    319319                                add_action( 'admin_print_footer_scripts', array( __CLASS__, 'editor_js' ), 50 );
     320                                add_action( 'admin_print_footer_scripts', array( __CLASS__, 'force_uncompressed_tinymce' ), 1 );
    320321                                add_action( 'admin_print_footer_scripts', array( __CLASS__, 'enqueue_scripts' ), 1 );
    321322                        } else {
    322323                                add_action( 'wp_print_footer_scripts', array( __CLASS__, 'editor_js' ), 50 );
     324                                add_action( 'wp_print_footer_scripts', array( __CLASS__, 'force_uncompressed_tinymce' ), 1 );
    323325                                add_action( 'wp_print_footer_scripts', array( __CLASS__, 'enqueue_scripts' ), 1 );
    324326                        }
    … …  
    756758
    757759        /**
     760         *
     761         * @static
     762         *
    758763         * @param bool $default_scripts Optional. Whether default scripts should be enqueued. Default false.
    759764         */
    … …  
    820825
    821826                if ( is_admin() ) {
     827                        add_action( 'admin_print_footer_scripts', array( __CLASS__, 'force_uncompressed_tinymce' ), 1 );
    822828                        add_action( 'admin_print_footer_scripts', array( __CLASS__, 'print_default_editor_scripts' ), 45 );
    823829                } else {
     830                        add_action( 'wp_print_footer_scripts', array( __CLASS__, 'force_uncompressed_tinymce' ), 1 );
    824831                        add_action( 'wp_print_footer_scripts', array( __CLASS__, 'print_default_editor_scripts' ), 45 );
    825832                }
    … …  
    13891396
    13901397        /**
     1398         * Force uncompressed TinyMCE when a custom theme has been defined.
     1399         *
     1400         * The compressed TinyMCE file cannot deal with custom themes, so this makes
     1401         * sure that we use the uncompressed TinyMCE file if a theme is defined.
     1402         * Even if we are on a production environment.
     1403         */
     1404        public static function force_uncompressed_tinymce() {
     1405                $has_custom_theme = false;
     1406                foreach ( self::$mce_settings as $init ) {
     1407                        if ( ! empty( $init['theme_url'] ) ) {
     1408                                $has_custom_theme = true;
     1409                                break;
     1410                        }
     1411                }
     1412
     1413                if ( ! $has_custom_theme ) {
     1414                        return;
     1415                }
     1416
     1417                $wp_scripts = wp_scripts();
     1418
     1419                $wp_scripts->remove( 'wp-tinymce' );
     1420                wp_register_tinymce_scripts( $wp_scripts, true );
     1421        }
     1422
     1423        /**
    13911424         * Print (output) the main TinyMCE scripts.
    13921425         *
    … …  
    13981431         */
    13991432        public static function print_tinymce_scripts() {
    1400                 global $tinymce_version, $concatenate_scripts, $compress_scripts;
     1433                global $concatenate_scripts;
    14011434
    14021435                if ( self::$tinymce_scripts_printed ) {
    … …  
    14091442                        script_concat_settings();
    14101443                }
    1411 
    1412                 $suffix  = SCRIPT_DEBUG ? '' : '.min';
    1413                 $version = 'ver=' . $tinymce_version;
    1414                 $baseurl = self::get_baseurl();
    1415 
    1416                 $has_custom_theme = false;
    1417                 foreach ( self::$mce_settings as $init ) {
    1418                         if ( ! empty( $init['theme_url'] ) ) {
    1419                                 $has_custom_theme = true;
    1420                                 break;
    1421                         }
    1422                 }
    1423 
    1424                 $compressed = $compress_scripts && $concatenate_scripts && isset( $_SERVER['HTTP_ACCEPT_ENCODING'] )
    1425                         && false !== stripos( $_SERVER['HTTP_ACCEPT_ENCODING'], 'gzip' ) && ! $has_custom_theme;
    1426 
    1427                 // Load tinymce.js when running from /src, else load wp-tinymce.js.gz (production) or tinymce.min.js (SCRIPT_DEBUG)
    1428                 $mce_suffix = false !== strpos( get_bloginfo( 'version' ), '-src' ) ? '' : '.min';
    1429 
    1430                 if ( $compressed ) {
    1431                         echo "<script type='text/javascript' src='{$baseurl}/wp-tinymce.php?c=1&amp;$version'></script>\n";
    1432                 } else {
    1433                         echo "<script type='text/javascript' src='{$baseurl}/tinymce{$mce_suffix}.js?$version'></script>\n";
    1434                         echo "<script type='text/javascript' src='{$baseurl}/plugins/compat3x/plugin{$suffix}.js?$version'></script>\n";
    1435                 }
    1436 
    1437                 echo "<script type='text/javascript'>\n" . self::wp_mce_translation() . "</script>\n";
    14381444        }
    14391445
  • trunk/src/wp-includes/default-filters.php

    r43982 r44115  
    503503// Script Loader
    504504add_action( 'wp_default_scripts', 'wp_default_scripts' );
     505add_action( 'wp_default_scripts', 'wp_default_packages' );
     506
    505507add_action( 'wp_enqueue_scripts', 'wp_localize_jquery_ui_datepicker', 1000 );
    506508add_action( 'admin_enqueue_scripts', 'wp_localize_jquery_ui_datepicker', 1000 );
  • trunk/src/wp-includes/script-loader.php

    r44114 r44115  
    4242 * @param WP_Scripts $scripts WP_Scripts object.
    4343 */
    44 function wp_register_tinymce_scripts( &$scripts ) {
     44function wp_register_tinymce_scripts( &$scripts, $force_uncompressed = false ) {
    4545        global $tinymce_version, $concatenate_scripts, $compress_scripts;
    46         $suffix     = SCRIPT_DEBUG ? '' : '.min';
     46        $suffix = SCRIPT_DEBUG ? '' : '.min';
     47
     48        script_concat_settings();
     49
    4750        $compressed = $compress_scripts && $concatenate_scripts && isset( $_SERVER['HTTP_ACCEPT_ENCODING'] )
    48                                   && false !== stripos( $_SERVER['HTTP_ACCEPT_ENCODING'], 'gzip' );
     51                                  && false !== stripos( $_SERVER['HTTP_ACCEPT_ENCODING'], 'gzip' ) && ! $force_uncompressed;
     52
    4953        // Load tinymce.js when running from /src, otherwise load wp-tinymce.js.gz (in production) or
    5054        // tinymce.min.js (when SCRIPT_DEBUG is true).
    … …  
    5357                $scripts->add( 'wp-tinymce', includes_url( 'js/tinymce/' ) . 'wp-tinymce.php', array(), $tinymce_version );
    5458        } else {
    55                 $scripts->add( 'wp-tinymce-root', includes_url( 'js/tinymce/' ) . "tinymce{$mce_suffix}.js", array(), $tinymce_version );
    56                 $scripts->add( 'wp-tinymce', includes_url( 'js/tinymce/' ) . "plugins/compat3x/plugin{$suffix}.js", array( 'wp-tinymce-root' ), $tinymce_version );
    57         }
    58 
    59         $scripts->add( 'wp-tinymce-lists', includes_url( 'js/tinymce/plugins/lists/index' . $suffix . '.js', array( 'wp-tinymce' ), $tinymce_version ) );
     59                $scripts->add( 'wp-tinymce-root', includes_url( 'js/tinymce/' ) . "tinymce$mce_suffix.js", array(), $tinymce_version );
     60                $scripts->add( 'wp-tinymce', includes_url( 'js/tinymce/' ) . "plugins/compat3x/plugin$suffix.js", array( 'wp-tinymce-root' ), $tinymce_version );
     61        }
     62
     63        $scripts->add( 'wp-tinymce-lists', includes_url( "js/tinymce/plugins/lists/plugin$suffix.js", array( 'wp-tinymce' ), $tinymce_version ) );
    6064}
    6165
    … …  
    7074 * @param WP_Scripts $scripts WP_Scripts object.
    7175 */
    72 function wp_default_packages_vendor( &$scripts, $dev_suffix ) {
     76function wp_default_packages_vendor( &$scripts ) {
    7377        wp_register_tinymce_scripts( $scripts );
     78
     79        $dev_suffix = wp_scripts_get_suffix( 'dev' );
    7480
    7581        $vendor_scripts = array(
    … …  
    9197                }
    9298
    93                 $path = '/js/dist/vendor/' . $handle . $dev_suffix . '.js';
     99                $path = "/js/dist/vendor/$handle$dev_suffix.js";
    94100
    95101                $scripts->add( $handle, $path, $dependencies, false, 1 );
    … …  
    125131 * @return string Conditional polyfill inline script.
    126132 */
    127 function wp_get_script_polyfill( $scripts, $tests ) {
     133function wp_get_script_polyfill( &$scripts, $tests ) {
    128134        $polyfill = '';
    129135        foreach ( $tests as $test => $handle ) {
    … …  
    148154
    149155/**
    150  * Register all the WordPress packages scripts that are in the standardized
     156 * Registers all the WordPress packages scripts that are in the standardized
    151157 * `js/dist/` location.
    152158 *
    … …  
    156162 *
    157163 * @param WP_Scripts $scripts WP_Scripts object.
    158  * @param string     $suffix  The suffix to use before `.js`.
    159  */
    160 function wp_default_packages_scripts( &$scripts, $suffix ) {
     164 */
     165function wp_default_packages_scripts( &$scripts ) {
     166        $suffix = wp_scripts_get_suffix();
     167
    161168        $packages_dependencies = array(
    162169                'api-fetch'                          => array( 'wp-polyfill', 'wp-hooks', 'wp-i18n' ),
    … …  
    331338        foreach ( $packages_dependencies as $package => $dependencies ) {
    332339                $handle = 'wp-' . $package;
    333                 $path   = '/js/dist/' . $package . $suffix . '.js';
     340                $path   = "/js/dist/$package$suffix.js";
    334341
    335342                $scripts->add( $handle, $path, $dependencies, false, 1 );
    … …  
    423430        );
    424431
     432        /* This filter is documented in wp-includes/class-wp-editor.php */
    425433        $tinymce_settings = apply_filters(
    426434                'tiny_mce_before_init',
    … …  
    429437                                ',',
    430438                                array_unique(
     439                                        /* This filter is documented in wp-includes/class-wp-editor.php */
    431440                                        apply_filters(
    432441                                                'tiny_mce_plugins',
    … …  
    457466                                ',',
    458467                                array_merge(
     468                                        /* This filter is documented in wp-includes/class-wp-editor.php */
    459469                                        apply_filters(
    460470                                                'mce_buttons',
    … …  
    482492                        'toolbar2'         => implode(
    483493                                ',',
     494                                /* This filter is documented in wp-includes/class-wp-editor.php */
    484495                                apply_filters(
    485496                                        'mce_buttons_2',
    … …  
    500511                                )
    501512                        ),
     513                        /* This filter is documented in wp-includes/class-wp-editor.php */
    502514                        'toolbar3'         => implode( ',', apply_filters( 'mce_buttons_3', array(), 'editor' ) ),
     515                        /* This filter is documented in wp-includes/class-wp-editor.php */
    503516                        'toolbar4'         => implode( ',', apply_filters( 'mce_buttons_4', array(), 'editor' ) ),
     517                        /* This filter is documented in wp-includes/class-wp-editor.php */
    504518                        'external_plugins' => apply_filters( 'mce_external_plugins', array() ),
    505519                ),
    … …  
    526540
    527541/**
     542 * Registers all the WordPress packages scripts.
     543 *
     544 * @since 5.0.0
     545 *
     546 * @param WP_Scripts $scripts WP_Scripts object.
     547 */
     548function wp_default_packages( &$scripts ) {
     549        wp_default_packages_vendor( $scripts );
     550        wp_register_tinymce_scripts( $scripts );
     551        wp_default_packages_scripts( $scripts );
     552
     553        if ( did_action( 'init' ) ) {
     554                wp_default_packages_inline_scripts( $scripts );
     555        }
     556}
     557
     558/**
     559 * Returns the suffix that can be used for the scripts.
     560 *
     561 * There are two suffix types, the normal one and the dev suffix.
     562 *
     563 * @since 5.0.0
     564 *
     565 * @param string $type The type of suffix to retrieve.
     566 * @return string The script suffix.
     567 */
     568function wp_scripts_get_suffix( $type = '' ) {
     569        static $suffixes;
     570
     571        if ( $suffixes === null ) {
     572                include( ABSPATH . WPINC . '/version.php' ); // include an unmodified $wp_version
     573
     574                $develop_src = false !== strpos( $wp_version, '-src' );
     575
     576                if ( ! defined( 'SCRIPT_DEBUG' ) ) {
     577                        define( 'SCRIPT_DEBUG', $develop_src );
     578                }
     579                $suffix     = SCRIPT_DEBUG ? '' : '.min';
     580                $dev_suffix = $develop_src ? '' : '.min';
     581
     582                $suffixes = array(
     583                        'suffix'     => $suffix,
     584                        'dev_suffix' => $dev_suffix,
     585                );
     586        }
     587
     588        if ( $type === 'dev' ) {
     589                return $suffixes['dev_suffix'];
     590        }
     591
     592        return $suffixes['suffix'];
     593}
     594
     595/**
    528596 * Register all WordPress scripts.
    529597 *
    … …  
    537605 */
    538606function wp_default_scripts( &$scripts ) {
    539         include( ABSPATH . WPINC . '/version.php' ); // include an unmodified $wp_version
    540 
    541         $develop_src = false !== strpos( $wp_version, '-src' );
    542 
    543         if ( ! defined( 'SCRIPT_DEBUG' ) ) {
    544                 define( 'SCRIPT_DEBUG', $develop_src );
    545         }
     607        $suffix     = wp_scripts_get_suffix();
     608        $dev_suffix = wp_scripts_get_suffix( 'dev' );
    546609
    547610        if ( ! $guessurl = site_url() ) {
    … …  
    554617        $scripts->default_version = get_bloginfo( 'version' );
    555618        $scripts->default_dirs    = array( '/wp-admin/js/', '/wp-includes/js/' );
    556 
    557         $suffix     = SCRIPT_DEBUG ? '' : '.min';
    558         $dev_suffix = $develop_src ? '' : '.min';
    559619
    560620        $scripts->add( 'utils', "/wp-includes/js/utils$suffix.js" );
    … …  
    625685        $scripts->add( 'colorpicker', "/wp-includes/js/colorpicker$suffix.js", array( 'prototype' ), '3517m' );
    626686
    627         $scripts->add( 'editor', "/wp-admin/js/editor$suffix.js", array( 'utils', 'jquery' ), false, 1 );
     687        $scripts->add( 'editor', "/wp-admin/js/editor$suffix.js", array( 'wp-tinymce', 'utils', 'jquery' ), false, 1 );
    628688
    629689        // Back-compat for old DFW. To-do: remove at the end of 2016.
    … …  
    12111271        $scripts->add( 'wp-api', "/wp-includes/js/wp-api$suffix.js", array( 'jquery', 'backbone', 'underscore', 'wp-api-request' ), false, 1 );
    12121272
    1213         wp_default_packages_vendor( $scripts, $dev_suffix );
    1214         wp_default_packages_scripts( $scripts, $suffix );
    1215         if ( did_action( 'init' ) ) {
    1216                 wp_default_packages_inline_scripts( $scripts );
    1217         }
    1218 
    12191273        if ( is_admin() ) {
    12201274                $scripts->add( 'admin-tags', "/wp-admin/js/tags$suffix.js", array( 'jquery', 'wp-ajax-response' ), false, 1 );
  • trunk/tests/phpunit/tests/dependencies/scripts.php

    r43565 r44115  
    1111                $this->old_wp_scripts = isset( $GLOBALS['wp_scripts'] ) ? $GLOBALS['wp_scripts'] : null;
    1212                remove_action( 'wp_default_scripts', 'wp_default_scripts' );
     13                remove_action( 'wp_default_scripts', 'wp_default_packages' );
    1314                $GLOBALS['wp_scripts']                  = new WP_Scripts();
    1415                $GLOBALS['wp_scripts']->default_version = get_bloginfo( 'version' );
  • trunk/tools/webpack/media.js

    r44112 r44115  
    1919
    2020module.exports = function( env = { environment: 'production', watch: false } ) {
    21         const mode = env.environment;
    2221
    2322        const mediaConfig = {
    24                 mode,
     23                mode: "production",
    2524                cache: true,
    2625                entry: Object.assign( admin_files, include_files ),
Note: See TracChangeset for help on using the changeset viewer.