WordPress.org

Make WordPress Core

Changeset 43738


Ignore:
Timestamp:
10/17/2018 03:28:33 PM (11 months 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.