Make WordPress Core

Changeset 43738


Ignore:
Timestamp:
10/17/2018 03:28:33 PM (8 years ago)
Author:
atimmer
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.
Fixes #45065.

Location:
branches/5.0
Files:
5 edited

Legend:

Unmodified
Added
Removed
  • branches/5.0/src/wp-includes/class-wp-editor.php

    r43482 r43738  
    310310                        if ( is_admin() ) {
    311311                                add_action( 'admin_print_footer_scripts', array( __CLASS__, 'editor_js' ), 50 );
     312                                add_action( 'admin_print_footer_scripts', array( __CLASS__, 'force_uncompressed_tinymce' ), 1 );
    312313                                add_action( 'admin_print_footer_scripts', array( __CLASS__, 'enqueue_scripts' ), 1 );
    313314                        } else {
    314315                                add_action( 'wp_print_footer_scripts', array( __CLASS__, 'editor_js' ), 50 );
     316                                add_action( 'wp_print_footer_scripts', array( __CLASS__, 'force_uncompressed_tinymce' ), 1 );
    315317                                add_action( 'wp_print_footer_scripts', array( __CLASS__, 'enqueue_scripts' ), 1 );
    316318                        }
     
    744746         *
    745747         * @static
    746          * 
     748         *
    747749         * @param bool $default_scripts Optional. Whether default scripts should be enqueued. Default false.
    748750         */
     
    806808
    807809                if ( is_admin() ) {
     810                        add_action( 'admin_print_footer_scripts', array( __CLASS__, 'force_uncompressed_tinymce' ), 1 );
    808811                        add_action( 'admin_print_footer_scripts', array( __CLASS__, 'print_default_editor_scripts' ), 45 );
    809812                } else {
     813                        add_action( 'wp_print_footer_scripts', array( __CLASS__, 'force_uncompressed_tinymce' ), 1 );
    810814                        add_action( 'wp_print_footer_scripts', array( __CLASS__, 'print_default_editor_scripts' ), 45 );
    811815                }
     
    13741378
    13751379        /**
     1380         * Force uncompressed TinyMCE when a custom theme has been defined.
     1381         *
     1382         * The compressed TinyMCE file cannot deal with custom themes, so this makes
     1383         * sure that we use the uncompressed TinyMCE file if a theme is defined.
     1384         * Even if we are on a production environment.
     1385         */
     1386        public static function force_uncompressed_tinymce() {
     1387                $has_custom_theme = false;
     1388                foreach ( self::$mce_settings as $init ) {
     1389                        if ( ! empty( $init['theme_url'] ) ) {
     1390                                $has_custom_theme = true;
     1391                                break;
     1392                        }
     1393                }
     1394
     1395                if ( ! $has_custom_theme ) {
     1396                        return;
     1397                }
     1398
     1399                $wp_scripts = wp_scripts();
     1400
     1401                $wp_scripts->remove( 'wp-tinymce' );
     1402                wp_register_tinymce_scripts( $wp_scripts, true );
     1403        }
     1404
     1405        /**
    13761406         * Print (output) the main TinyMCE scripts.
    13771407         *
     
    13841414         */
    13851415        public static function print_tinymce_scripts() {
    1386                 global $tinymce_version, $concatenate_scripts, $compress_scripts;
     1416                global $concatenate_scripts;
    13871417
    13881418                if ( self::$tinymce_scripts_printed ) {
     
    13941424                if ( ! isset( $concatenate_scripts ) ) {
    13951425                        script_concat_settings();
    1396                 }
    1397 
    1398                 $suffix = SCRIPT_DEBUG ? '' : '.min';
    1399                 $version = 'ver=' . $tinymce_version;
    1400                 $baseurl = self::get_baseurl();
    1401 
    1402                 $has_custom_theme = false;
    1403                 foreach ( self::$mce_settings as $init ) {
    1404                         if ( ! empty( $init['theme_url'] ) ) {
    1405                                 $has_custom_theme = true;
    1406                                 break;
    1407                         }
    1408                 }
    1409 
    1410                 $compressed = $compress_scripts && $concatenate_scripts && isset( $_SERVER['HTTP_ACCEPT_ENCODING'] )
    1411                         && false !== stripos( $_SERVER['HTTP_ACCEPT_ENCODING'], 'gzip' ) && ! $has_custom_theme;
    1412 
    1413                 // Load tinymce.js when running from /src, else load wp-tinymce.js.gz (production) or tinymce.min.js (SCRIPT_DEBUG)
    1414                 $mce_suffix = false !== strpos( get_bloginfo( 'version' ), '-src' ) ? '' : '.min';
    1415 
    1416                 if ( $compressed ) {
    1417                         echo "<script type='text/javascript' src='{$baseurl}/wp-tinymce.php?c=1&amp;$version'></script>\n";
    1418                 } else {
    1419                         echo "<script type='text/javascript' src='{$baseurl}/tinymce{$mce_suffix}.js?$version'></script>\n";
    1420                         echo "<script type='text/javascript' src='{$baseurl}/plugins/compat3x/plugin{$suffix}.js?$version'></script>\n";
    14211426                }
    14221427
  • branches/5.0/src/wp-includes/default-filters.php

    r43732 r43738  
    492492// Script Loader
    493493add_action( 'wp_default_scripts', 'wp_default_scripts' );
     494add_action( 'wp_default_scripts', 'wp_default_packages' );
     495
    494496add_action( 'wp_enqueue_scripts', 'wp_localize_jquery_ui_datepicker', 1000 );
    495497add_action( 'admin_enqueue_scripts', 'wp_localize_jquery_ui_datepicker', 1000 );
  • branches/5.0/src/wp-includes/script-loader.php

    r43723 r43738  
    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;
    4646        $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( 'suffix' => $suffix, 'dev_suffix' => $dev_suffix );
     583        }
     584
     585        if ( $type === 'dev' ) {
     586                return $suffixes['dev_suffix'];
     587        }
     588
     589        return $suffixes['suffix'];
     590}
     591
     592/**
    528593 * Register all WordPress scripts.
    529594 *
     
    537602 */
    538603function 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         }
     604        $suffix = wp_scripts_get_suffix();
     605        $dev_suffix = wp_scripts_get_suffix( 'dev' );
    546606
    547607        if ( ! $guessurl = site_url() ) {
     
    555615        $scripts->default_dirs = array('/wp-admin/js/', '/wp-includes/js/');
    556616
    557         $suffix = SCRIPT_DEBUG ? '' : '.min';
    558         $dev_suffix = $develop_src ? '' : '.min';
    559617
    560618        $scripts->add( 'utils', "/wp-includes/js/utils$suffix.js" );
     
    613671        $scripts->add( 'colorpicker', "/wp-includes/js/colorpicker$suffix.js", array('prototype'), '3517m' );
    614672
    615         $scripts->add( 'editor', "/wp-admin/js/editor$suffix.js", array('utils','jquery'), false, 1 );
     673        $scripts->add( 'editor', "/wp-admin/js/editor$suffix.js", array('wp-tinymce','utils','jquery'), false, 1 );
    616674
    617675        // Back-compat for old DFW. To-do: remove at the end of 2016.
     
    11291187        $scripts->add( 'wp-api', "/wp-includes/js/wp-api$suffix.js", array( 'jquery', 'backbone', 'underscore', 'wp-api-request' ), false, 1 );
    11301188
    1131         wp_default_packages_vendor( $scripts, $dev_suffix );
    1132         wp_default_packages_scripts( $scripts, $suffix );
    1133         if ( did_action( 'init' ) ) {
    1134                 wp_default_packages_inline_scripts( $scripts );
    1135         }
    1136 
    11371189        if ( is_admin() ) {
    11381190                $scripts->add( 'admin-tags', "/wp-admin/js/tags$suffix.js", array( 'jquery', 'wp-ajax-response' ), false, 1 );
  • branches/5.0/tests/phpunit/tests/dependencies/scripts.php

    r41994 r43738  
    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' );
  • branches/5.0/tools/webpack/media.js

    r43719 r43738  
    1212
    1313module.exports = function( env = { environment: 'production', watch: false } ) {
    14         const mode = env.environment;
    1514
    1615        const mediaConfig = {
    17                 mode,
     16                mode: "production",
    1817                cache: true,
    1918                entry: mediaEntries,
Note: See TracChangeset for help on using the changeset viewer.