WordPress PHP Cross Reference Blogging Systems

Source: /wp-includes/script-loader.php - 1338 lines - 64131 bytes - Summary - Text - Print

Description: WordPress scripts and styles default loader. Several constants are used to manage the loading, concatenating and compression of scripts and CSS: define('SCRIPT_DEBUG', true); loads the development (non-minified) versions of all scripts and CSS, and disables compression and concatenation, define('CONCATENATE_SCRIPTS', false); disables compression and concatenation of scripts and CSS, define('COMPRESS_SCRIPTS', false); disables compression of scripts, define('COMPRESS_CSS', false); disables compression of CSS, define('ENFORCE_GZIP', true); forces gzip for compression (default is deflate).

   1  <?php
   2  /**
   3   * WordPress scripts and styles default loader.
   4   *
   5   * Several constants are used to manage the loading, concatenating and compression of scripts and CSS:
   6   * define('SCRIPT_DEBUG', true); loads the development (non-minified) versions of all scripts and CSS, and disables compression and concatenation,
   7   * define('CONCATENATE_SCRIPTS', false); disables compression and concatenation of scripts and CSS,
   8   * define('COMPRESS_SCRIPTS', false); disables compression of scripts,
   9   * define('COMPRESS_CSS', false); disables compression of CSS,
  10   * define('ENFORCE_GZIP', true); forces gzip for compression (default is deflate).
  11   *
  12   * The globals $concatenate_scripts, $compress_scripts and $compress_css can be set by plugins
  13   * to temporarily override the above settings. Also a compression test is run once and the result is saved
  14   * as option 'can_compress_scripts' (0/1). The test will run again if that option is deleted.
  15   *
  16   * @package WordPress
  17   */
  18  
  19  /** WordPress Dependencies Class */
  20  require ( ABSPATH . WPINC . '/class.wp-dependencies.php' );
  21  
  22  /** WordPress Scripts Class */
  23  require ( ABSPATH . WPINC . '/class.wp-scripts.php' );
  24  
  25  /** WordPress Scripts Functions */
  26  require ( ABSPATH . WPINC . '/functions.wp-scripts.php' );
  27  
  28  /** WordPress Styles Class */
  29  require ( ABSPATH . WPINC . '/class.wp-styles.php' );
  30  
  31  /** WordPress Styles Functions */
  32  require ( ABSPATH . WPINC . '/functions.wp-styles.php' );
  33  
  34  /**
  35   * Register all WordPress scripts.
  36   *
  37   * Localizes some of them.
  38   * args order: `$scripts->add( 'handle', 'url', 'dependencies', 'query-string', 1 );`
  39   * when last arg === 1 queues the script for the footer
  40   *
  41   * @since 2.6.0
  42   *
  43   * @param WP_Scripts $scripts WP_Scripts object.
  44   */
  45  function wp_default_scripts( &$scripts ) {
  46      include ( ABSPATH . WPINC . '/version.php' ); // include an unmodified $wp_version
  47  
  48      $develop_src = false !== strpos( $wp_version, '-src' );
  49  
  50      if ( ! defined( 'SCRIPT_DEBUG' ) ) {
  51          define( 'SCRIPT_DEBUG', $develop_src );
  52      }
  53  
  54      if ( ! $guessurl = site_url() ) {
  55          $guessed_url = true;
  56          $guessurl = wp_guess_url();
  57      }
  58  
  59      $scripts->base_url = $guessurl;
  60      $scripts->content_url = defined('WP_CONTENT_URL')? WP_CONTENT_URL : '';
  61      $scripts->default_version = get_bloginfo( 'version' );
  62      $scripts->default_dirs = array('/wp-admin/js/', '/wp-includes/js/');
  63  
  64      $suffix = SCRIPT_DEBUG ? '' : '.min';
  65      $dev_suffix = $develop_src ? '' : '.min';
  66  
  67      $scripts->add( 'utils', "/wp-includes/js/utils$suffix.js" );
  68      did_action( 'init' ) && $scripts->localize( 'utils', 'userSettings', array(
  69          'url' => (string) SITECOOKIEPATH,
  70          'uid' => (string) get_current_user_id(),
  71          'time' => (string) time(),
  72          'secure' => (string) ( 'https' === parse_url( site_url(), PHP_URL_SCHEME ) ),
  73      ) );
  74  
  75      $scripts->add( 'common', "/wp-admin/js/common$suffix.js", array('jquery', 'hoverIntent', 'utils'), false, 1 );
  76      did_action( 'init' ) && $scripts->localize( 'common', 'commonL10n', array(
  77          'warnDelete' => __( "You are about to permanently delete these items.\n  'Cancel' to stop, 'OK' to delete." ),
  78          'dismiss'    => __( 'Dismiss this notice.' ),
  79      ) );
  80  
  81      $scripts->add( 'wp-a11y', "/wp-includes/js/wp-a11y$suffix.js", array( 'jquery' ), false, 1 );
  82  
  83      $scripts->add( 'sack', "/wp-includes/js/tw-sack$suffix.js", array(), '1.6.1', 1 );
  84  
  85      $scripts->add( 'quicktags', "/wp-includes/js/quicktags$suffix.js", array(), false, 1 );
  86      did_action( 'init' ) && $scripts->localize( 'quicktags', 'quicktagsL10n', array(
  87          'closeAllOpenTags'      => __( 'Close all open tags' ),
  88          'closeTags'             => __( 'close tags' ),
  89          'enterURL'              => __( 'Enter the URL' ),
  90          'enterImageURL'         => __( 'Enter the URL of the image' ),
  91          'enterImageDescription' => __( 'Enter a description of the image' ),
  92          'textdirection'         => __( 'text direction' ),
  93          'toggleTextdirection'   => __( 'Toggle Editor Text Direction' ),
  94          'dfw'                   => __( 'Distraction-free writing mode' ),
  95          'strong'          => __( 'Bold' ),
  96          'strongClose'     => __( 'Close bold tag' ),
  97          'em'              => __( 'Italic' ),
  98          'emClose'         => __( 'Close italic tag' ),
  99          'link'            => __( 'Insert link' ),
 100          'blockquote'      => __( 'Blockquote' ),
 101          'blockquoteClose' => __( 'Close blockquote tag' ),
 102          'del'             => __( 'Deleted text (strikethrough)' ),
 103          'delClose'        => __( 'Close deleted text tag' ),
 104          'ins'             => __( 'Inserted text' ),
 105          'insClose'        => __( 'Close inserted text tag' ),
 106          'image'           => __( 'Insert image' ),
 107          'ul'              => __( 'Bulleted list' ),
 108          'ulClose'         => __( 'Close bulleted list tag' ),
 109          'ol'              => __( 'Numbered list' ),
 110          'olClose'         => __( 'Close numbered list tag' ),
 111          'li'              => __( 'List item' ),
 112          'liClose'         => __( 'Close list item tag' ),
 113          'code'            => __( 'Code' ),
 114          'codeClose'       => __( 'Close code tag' ),
 115          'more'            => __( 'Insert Read More tag' ),
 116      ) );
 117  
 118      $scripts->add( 'colorpicker', "/wp-includes/js/colorpicker$suffix.js", array('prototype'), '3517m' );
 119  
 120      $scripts->add( 'editor', "/wp-admin/js/editor$suffix.js", array('utils','jquery'), false, 1 );
 121  
 122      // Back-compat for old DFW. To-do: remove at the end of 2016.
 123      $scripts->add( 'wp-fullscreen-stub', "/wp-admin/js/wp-fullscreen-stub$suffix.js", array(), false, 1 );
 124  
 125      $scripts->add( 'wp-ajax-response', "/wp-includes/js/wp-ajax-response$suffix.js", array('jquery'), false, 1 );
 126      did_action( 'init' ) && $scripts->localize( 'wp-ajax-response', 'wpAjax', array(
 127          'noPerm' => __('Sorry, you are not allowed to do that.'),
 128          'broken' => __('An unidentified error has occurred.')
 129      ) );
 130  
 131      $scripts->add( 'wp-pointer', "/wp-includes/js/wp-pointer$suffix.js", array( 'jquery-ui-widget', 'jquery-ui-position' ), '20111129a', 1 );
 132      did_action( 'init' ) && $scripts->localize( 'wp-pointer', 'wpPointerL10n', array(
 133          'dismiss' => __('Dismiss'),
 134      ) );
 135  
 136      $scripts->add( 'autosave', "/wp-includes/js/autosave$suffix.js", array('heartbeat'), false, 1 );
 137  
 138      $scripts->add( 'heartbeat', "/wp-includes/js/heartbeat$suffix.js", array('jquery'), false, 1 );
 139      did_action( 'init' ) && $scripts->localize( 'heartbeat', 'heartbeatSettings',
 140          /**
 141           * Filters the Heartbeat settings.
 142           *
 143           * @since 3.6.0
 144           *
 145           * @param array $settings Heartbeat settings array.
 146           */
 147          apply_filters( 'heartbeat_settings', array() )
 148      );
 149  
 150      $scripts->add( 'wp-auth-check', "/wp-includes/js/wp-auth-check$suffix.js", array('heartbeat'), false, 1 );
 151      did_action( 'init' ) && $scripts->localize( 'wp-auth-check', 'authcheckL10n', array(
 152          'beforeunload' => __('Your session has expired. You can log in again from this page or go to the login page.'),
 153  
 154          /**
 155           * Filters the authentication check interval.
 156           *
 157           * @since 3.6.0
 158           *
 159           * @param int $interval The interval in which to check a user's authentication.
 160           *                      Default 3 minutes in seconds, or 180.
 161           */
 162          'interval' => apply_filters( 'wp_auth_check_interval', 3 * MINUTE_IN_SECONDS ),
 163      ) );
 164  
 165      $scripts->add( 'wp-lists', "/wp-includes/js/wp-lists$suffix.js", array( 'wp-ajax-response', 'jquery-color' ), false, 1 );
 166  
 167      // WordPress no longer uses or bundles Prototype or script.aculo.us. These are now pulled from an external source.
 168      $scripts->add( 'prototype', 'https://ajax.googleapis.com/ajax/libs/prototype/1.7.1.0/prototype.js', array(), '1.7.1');
 169      $scripts->add( 'scriptaculous-root', 'https://ajax.googleapis.com/ajax/libs/scriptaculous/1.9.0/scriptaculous.js', array('prototype'), '1.9.0');
 170      $scripts->add( 'scriptaculous-builder', 'https://ajax.googleapis.com/ajax/libs/scriptaculous/1.9.0/builder.js', array('scriptaculous-root'), '1.9.0');
 171      $scripts->add( 'scriptaculous-dragdrop', 'https://ajax.googleapis.com/ajax/libs/scriptaculous/1.9.0/dragdrop.js', array('scriptaculous-builder', 'scriptaculous-effects'), '1.9.0');
 172      $scripts->add( 'scriptaculous-effects', 'https://ajax.googleapis.com/ajax/libs/scriptaculous/1.9.0/effects.js', array('scriptaculous-root'), '1.9.0');
 173      $scripts->add( 'scriptaculous-slider', 'https://ajax.googleapis.com/ajax/libs/scriptaculous/1.9.0/slider.js', array('scriptaculous-effects'), '1.9.0');
 174      $scripts->add( 'scriptaculous-sound', 'https://ajax.googleapis.com/ajax/libs/scriptaculous/1.9.0/sound.js', array( 'scriptaculous-root' ), '1.9.0' );
 175      $scripts->add( 'scriptaculous-controls', 'https://ajax.googleapis.com/ajax/libs/scriptaculous/1.9.0/controls.js', array('scriptaculous-root'), '1.9.0');
 176      $scripts->add( 'scriptaculous', false, array('scriptaculous-dragdrop', 'scriptaculous-slider', 'scriptaculous-controls') );
 177  
 178      // not used in core, replaced by Jcrop.js
 179      $scripts->add( 'cropper', '/wp-includes/js/crop/cropper.js', array('scriptaculous-dragdrop') );
 180  
 181      // jQuery
 182      $scripts->add( 'jquery', false, array( 'jquery-core', 'jquery-migrate' ), '1.12.4' );
 183      $scripts->add( 'jquery-core', '/wp-includes/js/jquery/jquery.js', array(), '1.12.4' );
 184      $scripts->add( 'jquery-migrate', "/wp-includes/js/jquery/jquery-migrate$suffix.js", array(), '1.4.1' );
 185  
 186      // full jQuery UI
 187      $scripts->add( 'jquery-ui-core', "/wp-includes/js/jquery/ui/core$dev_suffix.js", array('jquery'), '1.11.4', 1 );
 188      $scripts->add( 'jquery-effects-core', "/wp-includes/js/jquery/ui/effect$dev_suffix.js", array('jquery'), '1.11.4', 1 );
 189  
 190      $scripts->add( 'jquery-effects-blind', "/wp-includes/js/jquery/ui/effect-blind$dev_suffix.js", array('jquery-effects-core'), '1.11.4', 1 );
 191      $scripts->add( 'jquery-effects-bounce', "/wp-includes/js/jquery/ui/effect-bounce$dev_suffix.js", array('jquery-effects-core'), '1.11.4', 1 );
 192      $scripts->add( 'jquery-effects-clip', "/wp-includes/js/jquery/ui/effect-clip$dev_suffix.js", array('jquery-effects-core'), '1.11.4', 1 );
 193      $scripts->add( 'jquery-effects-drop', "/wp-includes/js/jquery/ui/effect-drop$dev_suffix.js", array('jquery-effects-core'), '1.11.4', 1 );
 194      $scripts->add( 'jquery-effects-explode', "/wp-includes/js/jquery/ui/effect-explode$dev_suffix.js", array('jquery-effects-core'), '1.11.4', 1 );
 195      $scripts->add( 'jquery-effects-fade', "/wp-includes/js/jquery/ui/effect-fade$dev_suffix.js", array('jquery-effects-core'), '1.11.4', 1 );
 196      $scripts->add( 'jquery-effects-fold', "/wp-includes/js/jquery/ui/effect-fold$dev_suffix.js", array('jquery-effects-core'), '1.11.4', 1 );
 197      $scripts->add( 'jquery-effects-highlight', "/wp-includes/js/jquery/ui/effect-highlight$dev_suffix.js", array('jquery-effects-core'), '1.11.4', 1 );
 198      $scripts->add( 'jquery-effects-puff', "/wp-includes/js/jquery/ui/effect-puff$dev_suffix.js", array('jquery-effects-core', 'jquery-effects-scale'), '1.11.4', 1 );
 199      $scripts->add( 'jquery-effects-pulsate', "/wp-includes/js/jquery/ui/effect-pulsate$dev_suffix.js", array('jquery-effects-core'), '1.11.4', 1 );
 200      $scripts->add( 'jquery-effects-scale', "/wp-includes/js/jquery/ui/effect-scale$dev_suffix.js", array('jquery-effects-core', 'jquery-effects-size'), '1.11.4', 1 );
 201      $scripts->add( 'jquery-effects-shake', "/wp-includes/js/jquery/ui/effect-shake$dev_suffix.js", array('jquery-effects-core'), '1.11.4', 1 );
 202      $scripts->add( 'jquery-effects-size', "/wp-includes/js/jquery/ui/effect-size$dev_suffix.js", array('jquery-effects-core'), '1.11.4', 1 );
 203      $scripts->add( 'jquery-effects-slide', "/wp-includes/js/jquery/ui/effect-slide$dev_suffix.js", array('jquery-effects-core'), '1.11.4', 1 );
 204      $scripts->add( 'jquery-effects-transfer', "/wp-includes/js/jquery/ui/effect-transfer$dev_suffix.js", array('jquery-effects-core'), '1.11.4', 1 );
 205  
 206      $scripts->add( 'jquery-ui-accordion', "/wp-includes/js/jquery/ui/accordion$dev_suffix.js", array('jquery-ui-core', 'jquery-ui-widget'), '1.11.4', 1 );
 207      $scripts->add( 'jquery-ui-autocomplete', "/wp-includes/js/jquery/ui/autocomplete$dev_suffix.js", array( 'jquery-ui-menu', 'wp-a11y' ), '1.11.4', 1 );
 208      $scripts->add( 'jquery-ui-button', "/wp-includes/js/jquery/ui/button$dev_suffix.js", array('jquery-ui-core', 'jquery-ui-widget'), '1.11.4', 1 );
 209      $scripts->add( 'jquery-ui-datepicker', "/wp-includes/js/jquery/ui/datepicker$dev_suffix.js", array('jquery-ui-core'), '1.11.4', 1 );
 210      $scripts->add( 'jquery-ui-dialog', "/wp-includes/js/jquery/ui/dialog$dev_suffix.js", array('jquery-ui-resizable', 'jquery-ui-draggable', 'jquery-ui-button', 'jquery-ui-position'), '1.11.4', 1 );
 211      $scripts->add( 'jquery-ui-draggable', "/wp-includes/js/jquery/ui/draggable$dev_suffix.js", array('jquery-ui-mouse'), '1.11.4', 1 );
 212      $scripts->add( 'jquery-ui-droppable', "/wp-includes/js/jquery/ui/droppable$dev_suffix.js", array('jquery-ui-draggable'), '1.11.4', 1 );
 213      $scripts->add( 'jquery-ui-menu', "/wp-includes/js/jquery/ui/menu$dev_suffix.js", array( 'jquery-ui-core', 'jquery-ui-widget', 'jquery-ui-position' ), '1.11.4', 1 );
 214      $scripts->add( 'jquery-ui-mouse', "/wp-includes/js/jquery/ui/mouse$dev_suffix.js", array( 'jquery-ui-core', 'jquery-ui-widget' ), '1.11.4', 1 );
 215      $scripts->add( 'jquery-ui-position', "/wp-includes/js/jquery/ui/position$dev_suffix.js", array('jquery'), '1.11.4', 1 );
 216      $scripts->add( 'jquery-ui-progressbar', "/wp-includes/js/jquery/ui/progressbar$dev_suffix.js", array('jquery-ui-core', 'jquery-ui-widget'), '1.11.4', 1 );
 217      $scripts->add( 'jquery-ui-resizable', "/wp-includes/js/jquery/ui/resizable$dev_suffix.js", array('jquery-ui-mouse'), '1.11.4', 1 );
 218      $scripts->add( 'jquery-ui-selectable', "/wp-includes/js/jquery/ui/selectable$dev_suffix.js", array('jquery-ui-mouse'), '1.11.4', 1 );
 219      $scripts->add( 'jquery-ui-selectmenu', "/wp-includes/js/jquery/ui/selectmenu$dev_suffix.js", array('jquery-ui-menu'), '1.11.4', 1 );
 220      $scripts->add( 'jquery-ui-slider', "/wp-includes/js/jquery/ui/slider$dev_suffix.js", array('jquery-ui-mouse'), '1.11.4', 1 );
 221      $scripts->add( 'jquery-ui-sortable', "/wp-includes/js/jquery/ui/sortable$dev_suffix.js", array('jquery-ui-mouse'), '1.11.4', 1 );
 222      $scripts->add( 'jquery-ui-spinner', "/wp-includes/js/jquery/ui/spinner$dev_suffix.js", array( 'jquery-ui-button' ), '1.11.4', 1 );
 223      $scripts->add( 'jquery-ui-tabs', "/wp-includes/js/jquery/ui/tabs$dev_suffix.js", array('jquery-ui-core', 'jquery-ui-widget'), '1.11.4', 1 );
 224      $scripts->add( 'jquery-ui-tooltip', "/wp-includes/js/jquery/ui/tooltip$dev_suffix.js", array( 'jquery-ui-core', 'jquery-ui-widget', 'jquery-ui-position' ), '1.11.4', 1 );
 225      $scripts->add( 'jquery-ui-widget', "/wp-includes/js/jquery/ui/widget$dev_suffix.js", array('jquery'), '1.11.4', 1 );
 226  
 227      // Strings for 'jquery-ui-autocomplete' live region messages
 228      did_action( 'init' ) && $scripts->localize( 'jquery-ui-autocomplete', 'uiAutocompleteL10n', array(
 229          'noResults' => __( 'No search results.' ),
 230          /* translators: Number of results found when using jQuery UI Autocomplete */
 231          'oneResult' => __( '1 result found. Use up and down arrow keys to navigate.' ),
 232          /* translators: %d: Number of results found when using jQuery UI Autocomplete */
 233          'manyResults' => __( '%d results found. Use up and down arrow keys to navigate.' ),
 234      ) );
 235  
 236      // deprecated, not used in core, most functionality is included in jQuery 1.3
 237      $scripts->add( 'jquery-form', "/wp-includes/js/jquery/jquery.form$suffix.js", array('jquery'), '3.37.0', 1 );
 238  
 239      // jQuery plugins
 240      $scripts->add( 'jquery-color', "/wp-includes/js/jquery/jquery.color.min.js", array('jquery'), '2.1.1', 1 );
 241      $scripts->add( 'suggest', "/wp-includes/js/jquery/suggest$suffix.js", array('jquery'), '1.1-20110113', 1 );
 242      $scripts->add( 'schedule', '/wp-includes/js/jquery/jquery.schedule.js', array('jquery'), '20m', 1 );
 243      $scripts->add( 'jquery-query', "/wp-includes/js/jquery/jquery.query.js", array('jquery'), '2.1.7', 1 );
 244      $scripts->add( 'jquery-serialize-object', "/wp-includes/js/jquery/jquery.serialize-object.js", array('jquery'), '0.2', 1 );
 245      $scripts->add( 'jquery-hotkeys', "/wp-includes/js/jquery/jquery.hotkeys$suffix.js", array('jquery'), '0.0.2m', 1 );
 246      $scripts->add( 'jquery-table-hotkeys', "/wp-includes/js/jquery/jquery.table-hotkeys$suffix.js", array('jquery', 'jquery-hotkeys'), false, 1 );
 247      $scripts->add( 'jquery-touch-punch', "/wp-includes/js/jquery/jquery.ui.touch-punch.js", array('jquery-ui-widget', 'jquery-ui-mouse'), '0.2.2', 1 );
 248  
 249      // Masonry v2 depended on jQuery. v3 does not. The older jquery-masonry handle is a shiv.
 250      // It sets jQuery as a dependency, as the theme may have been implicitly loading it this way.
 251      $scripts->add( 'imagesloaded', "/wp-includes/js/imagesloaded.min.js", array(), '3.2.0', 1 );
 252      $scripts->add( 'masonry', "/wp-includes/js/masonry.min.js", array( 'imagesloaded' ), '3.3.2', 1 );
 253      $scripts->add( 'jquery-masonry', "/wp-includes/js/jquery/jquery.masonry$dev_suffix.js", array( 'jquery', 'masonry' ), '3.1.2b', 1 );
 254  
 255      $scripts->add( 'thickbox', "/wp-includes/js/thickbox/thickbox.js", array('jquery'), '3.1-20121105', 1 );
 256      did_action( 'init' ) && $scripts->localize( 'thickbox', 'thickboxL10n', array(
 257          'next' => __('Next &gt;'),
 258          'prev' => __('&lt; Prev'),
 259          'image' => __('Image'),
 260          'of' => __('of'),
 261          'close' => __('Close'),
 262          'noiframes' => __('This feature requires inline frames. You have iframes disabled or your browser does not support them.'),
 263          'loadingAnimation' => includes_url('js/thickbox/loadingAnimation.gif'),
 264      ) );
 265  
 266      $scripts->add( 'jcrop', "/wp-includes/js/jcrop/jquery.Jcrop.min.js", array('jquery'), '0.9.12');
 267  
 268      $scripts->add( 'swfobject', "/wp-includes/js/swfobject.js", array(), '2.2-20120417');
 269  
 270      // error message for both plupload and swfupload
 271      $uploader_l10n = array(
 272          'queue_limit_exceeded' => __('You have attempted to queue too many files.'),
 273          'file_exceeds_size_limit' => __('%s exceeds the maximum upload size for this site.'),
 274          'zero_byte_file' => __('This file is empty. Please try another.'),
 275          'invalid_filetype' => __('This file type is not allowed. Please try another.'),
 276          'not_an_image' => __('This file is not an image. Please try another.'),
 277          'image_memory_exceeded' => __('Memory exceeded. Please try another smaller file.'),
 278          'image_dimensions_exceeded' => __('This is larger than the maximum size. Please try another.'),
 279          'default_error' => __('An error occurred in the upload. Please try again later.'),
 280          'missing_upload_url' => __('There was a configuration error. Please contact the server administrator.'),
 281          'upload_limit_exceeded' => __('You may only upload 1 file.'),
 282          'http_error' => __('HTTP error.'),
 283          'upload_failed' => __('Upload failed.'),
 284          'big_upload_failed' => __('Please try uploading this file with the %1$sbrowser uploader%2$s.'),
 285          'big_upload_queued' => __('%s exceeds the maximum upload size for the multi-file uploader when used in your browser.'),
 286          'io_error' => __('IO error.'),
 287          'security_error' => __('Security error.'),
 288          'file_cancelled' => __('File canceled.'),
 289          'upload_stopped' => __('Upload stopped.'),
 290          'dismiss' => __('Dismiss'),
 291          'crunching' => __('Crunching&hellip;'),
 292          'deleted' => __('moved to the trash.'),
 293          'error_uploading' => __('&#8220;%s&#8221; has failed to upload.')
 294      );
 295  
 296      $scripts->add( 'plupload', '/wp-includes/js/plupload/plupload.full.min.js', array(), '2.1.8' );
 297      // Back compat handles:
 298      foreach ( array( 'all', 'html5', 'flash', 'silverlight', 'html4' ) as $handle ) {
 299          $scripts->add( "plupload-$handle", false, array( 'plupload' ), '2.1.1' );
 300      }
 301  
 302      $scripts->add( 'plupload-handlers', "/wp-includes/js/plupload/handlers$suffix.js", array( 'plupload', 'jquery' ) );
 303      did_action( 'init' ) && $scripts->localize( 'plupload-handlers', 'pluploadL10n', $uploader_l10n );
 304  
 305      $scripts->add( 'wp-plupload', "/wp-includes/js/plupload/wp-plupload$suffix.js", array( 'plupload', 'jquery', 'json2', 'media-models' ), false, 1 );
 306      did_action( 'init' ) && $scripts->localize( 'wp-plupload', 'pluploadL10n', $uploader_l10n );
 307  
 308      // keep 'swfupload' for back-compat.
 309      $scripts->add( 'swfupload', '/wp-includes/js/swfupload/swfupload.js', array(), '2201-20110113');
 310      $scripts->add( 'swfupload-swfobject', '/wp-includes/js/swfupload/plugins/swfupload.swfobject.js', array('swfupload', 'swfobject'), '2201a');
 311      $scripts->add( 'swfupload-queue', '/wp-includes/js/swfupload/plugins/swfupload.queue.js', array('swfupload'), '2201');
 312      $scripts->add( 'swfupload-speed', '/wp-includes/js/swfupload/plugins/swfupload.speed.js', array('swfupload'), '2201');
 313      $scripts->add( 'swfupload-all', false, array('swfupload', 'swfupload-swfobject', 'swfupload-queue'), '2201');
 314      $scripts->add( 'swfupload-handlers', "/wp-includes/js/swfupload/handlers$suffix.js", array('swfupload-all', 'jquery'), '2201-20110524');
 315      did_action( 'init' ) && $scripts->localize( 'swfupload-handlers', 'swfuploadL10n', $uploader_l10n );
 316  
 317      $scripts->add( 'comment-reply', "/wp-includes/js/comment-reply$suffix.js", array(), false, 1 );
 318  
 319      $scripts->add( 'json2', "/wp-includes/js/json2$suffix.js", array(), '2015-05-03' );
 320      did_action( 'init' ) && $scripts->add_data( 'json2', 'conditional', 'lt IE 8' );
 321  
 322      $scripts->add( 'underscore', "/wp-includes/js/underscore$dev_suffix.js", array(), '1.8.3', 1 );
 323      $scripts->add( 'backbone', "/wp-includes/js/backbone$dev_suffix.js", array( 'underscore','jquery' ), '1.2.3', 1 );
 324  
 325      $scripts->add( 'wp-util', "/wp-includes/js/wp-util$suffix.js", array('underscore', 'jquery'), false, 1 );
 326      did_action( 'init' ) && $scripts->localize( 'wp-util', '_wpUtilSettings', array(
 327          'ajax' => array(
 328              'url' => admin_url( 'admin-ajax.php', 'relative' ),
 329          ),
 330      ) );
 331  
 332      $scripts->add( 'wp-backbone', "/wp-includes/js/wp-backbone$suffix.js", array('backbone', 'wp-util'), false, 1 );
 333  
 334      $scripts->add( 'revisions', "/wp-admin/js/revisions$suffix.js", array( 'wp-backbone', 'jquery-ui-slider', 'hoverIntent' ), false, 1 );
 335  
 336      $scripts->add( 'imgareaselect', "/wp-includes/js/imgareaselect/jquery.imgareaselect$suffix.js", array('jquery'), false, 1 );
 337  
 338      $scripts->add( 'mediaelement', "/wp-includes/js/mediaelement/mediaelement-and-player.min.js", array('jquery'), '2.22.0', 1 );
 339      did_action( 'init' ) && $scripts->localize( 'mediaelement', 'mejsL10n', array(
 340          'language' => get_bloginfo( 'language' ),
 341          'strings'  => array(
 342              'Close'                   => __( 'Close' ),
 343              'Fullscreen'              => __( 'Fullscreen' ),
 344              'Turn off Fullscreen'     => __( 'Turn off Fullscreen' ),
 345              'Go Fullscreen'           => __( 'Go Fullscreen' ),
 346              'Download File'           => __( 'Download File' ),
 347              'Download Video'          => __( 'Download Video' ),
 348              'Play'                    => __( 'Play' ),
 349              'Pause'                   => __( 'Pause' ),
 350              'Captions/Subtitles'      => __( 'Captions/Subtitles' ),
 351              'None'                    => __( 'None', 'no captions/subtitles' ),
 352              'Time Slider'             => __( 'Time Slider' ),
 353              /* translators: %1: number of seconds (30 by default) */
 354              'Skip back %1 seconds'    => __( 'Skip back %1 seconds' ),
 355              'Video Player'            => __( 'Video Player' ),
 356              'Audio Player'            => __( 'Audio Player' ),
 357              'Volume Slider'           => __( 'Volume Slider' ),
 358              'Mute Toggle'             => __( 'Mute Toggle' ),
 359              'Unmute'                  => __( 'Unmute' ),
 360              'Mute'                    => __( 'Mute' ),
 361              'Use Up/Down Arrow keys to increase or decrease volume.' => __( 'Use Up/Down Arrow keys to increase or decrease volume.' ),
 362              'Use Left/Right Arrow keys to advance one second, Up/Down arrows to advance ten seconds.' => __( 'Use Left/Right Arrow keys to advance one second, Up/Down arrows to advance ten seconds.' ),
 363          ),
 364      ) );
 365  
 366  
 367      $scripts->add( 'wp-mediaelement', "/wp-includes/js/mediaelement/wp-mediaelement$suffix.js", array('mediaelement'), false, 1 );
 368      $mejs_settings = array(
 369          'pluginPath' => includes_url( 'js/mediaelement/', 'relative' ),
 370      );
 371      did_action( 'init' ) && $scripts->localize( 'mediaelement', '_wpmejsSettings',
 372          /**
 373           * Filters the MediaElement configuration settings.
 374           *
 375           * @since 4.4.0
 376           *
 377           * @param array $mejs_settings MediaElement settings array.
 378           */
 379          apply_filters( 'mejs_settings', $mejs_settings )
 380      );
 381  
 382      $scripts->add( 'froogaloop',  "/wp-includes/js/mediaelement/froogaloop.min.js", array(), '2.0' );
 383      $scripts->add( 'wp-playlist', "/wp-includes/js/mediaelement/wp-playlist$suffix.js", array( 'wp-util', 'backbone', 'mediaelement' ), false, 1 );
 384  
 385      $scripts->add( 'zxcvbn-async', "/wp-includes/js/zxcvbn-async$suffix.js", array(), '1.0' );
 386      did_action( 'init' ) && $scripts->localize( 'zxcvbn-async', '_zxcvbnSettings', array(
 387          'src' => empty( $guessed_url ) ? includes_url( '/js/zxcvbn.min.js' ) : $scripts->base_url . '/wp-includes/js/zxcvbn.min.js',
 388      ) );
 389  
 390      $scripts->add( 'password-strength-meter', "/wp-admin/js/password-strength-meter$suffix.js", array( 'jquery', 'zxcvbn-async' ), false, 1 );
 391      did_action( 'init' ) && $scripts->localize( 'password-strength-meter', 'pwsL10n', array(
 392          'unknown'  => _x( 'Password strength unknown', 'password strength' ),
 393          'short'    => _x( 'Very weak', 'password strength' ),
 394          'bad'      => _x( 'Weak', 'password strength' ),
 395          'good'     => _x( 'Medium', 'password strength' ),
 396          'strong'   => _x( 'Strong', 'password strength' ),
 397          'mismatch' => _x( 'Mismatch', 'password mismatch' ),
 398      ) );
 399  
 400      $scripts->add( 'user-profile', "/wp-admin/js/user-profile$suffix.js", array( 'jquery', 'password-strength-meter', 'wp-util' ), false, 1 );
 401      did_action( 'init' ) && $scripts->localize( 'user-profile', 'userProfileL10n', array(
 402          'warn'     => __( 'Your new password has not been saved.' ),
 403          'warnWeak' => __( 'Confirm use of weak password.' ),
 404          'show'     => __( 'Show' ),
 405          'hide'     => __( 'Hide' ),
 406          'cancel'   => __( 'Cancel' ),
 407          'ariaShow' => esc_attr__( 'Show password' ),
 408          'ariaHide' => esc_attr__( 'Hide password' ),
 409      ) );
 410  
 411      $scripts->add( 'language-chooser', "/wp-admin/js/language-chooser$suffix.js", array( 'jquery' ), false, 1 );
 412  
 413      $scripts->add( 'user-suggest', "/wp-admin/js/user-suggest$suffix.js", array( 'jquery-ui-autocomplete' ), false, 1 );
 414  
 415      $scripts->add( 'admin-bar', "/wp-includes/js/admin-bar$suffix.js", array(), false, 1 );
 416  
 417      $scripts->add( 'wplink', "/wp-includes/js/wplink$suffix.js", array( 'jquery', 'wp-a11y' ), false, 1 );
 418      did_action( 'init' ) && $scripts->localize( 'wplink', 'wpLinkL10n', array(
 419          'title' => __('Insert/edit link'),
 420          'update' => __('Update'),
 421          'save' => __('Add Link'),
 422          'noTitle' => __('(no title)'),
 423          'noMatchesFound' => __('No results found.'),
 424          'linkSelected' => __( 'Link selected.' ),
 425          'linkInserted' => __( 'Link inserted.' ),
 426      ) );
 427  
 428      $scripts->add( 'wpdialogs', "/wp-includes/js/wpdialog$suffix.js", array( 'jquery-ui-dialog' ), false, 1 );
 429  
 430      $scripts->add( 'word-count', "/wp-admin/js/word-count$suffix.js", array(), false, 1 );
 431      did_action( 'init' ) && $scripts->localize( 'word-count', 'wordCountL10n', array(
 432          /*
 433           * translators: If your word count is based on single characters (e.g. East Asian characters),
 434           * enter 'characters_excluding_spaces' or 'characters_including_spaces'. Otherwise, enter 'words'.
 435           * Do not translate into your own language.
 436           */
 437          'type' => _x( 'words', 'Word count type. Do not translate!' ),
 438          'shortcodes' => ! empty( $GLOBALS['shortcode_tags'] ) ? array_keys( $GLOBALS['shortcode_tags'] ) : array()
 439      ) );
 440  
 441      $scripts->add( 'media-upload', "/wp-admin/js/media-upload$suffix.js", array( 'thickbox', 'shortcode' ), false, 1 );
 442  
 443      $scripts->add( 'hoverIntent', "/wp-includes/js/hoverIntent$suffix.js", array('jquery'), '1.8.1', 1 );
 444  
 445      $scripts->add( 'customize-base',     "/wp-includes/js/customize-base$suffix.js",     array( 'jquery', 'json2', 'underscore' ), false, 1 );
 446      $scripts->add( 'customize-loader',   "/wp-includes/js/customize-loader$suffix.js",   array( 'customize-base' ), false, 1 );
 447      $scripts->add( 'customize-preview',  "/wp-includes/js/customize-preview$suffix.js",  array( 'customize-base' ), false, 1 );
 448      $scripts->add( 'customize-models',   "/wp-includes/js/customize-models.js", array( 'underscore', 'backbone' ), false, 1 );
 449      $scripts->add( 'customize-views',    "/wp-includes/js/customize-views.js",  array( 'jquery', 'underscore', 'imgareaselect', 'customize-models', 'media-editor', 'media-views' ), false, 1 );
 450      $scripts->add( 'customize-controls', "/wp-admin/js/customize-controls$suffix.js", array( 'customize-base', 'wp-a11y' ), false, 1 );
 451      did_action( 'init' ) && $scripts->localize( 'customize-controls', '_wpCustomizeControlsL10n', array(
 452          'activate'           => __( 'Save &amp; Activate' ),
 453          'save'               => __( 'Save &amp; Publish' ),
 454          'saveAlert'          => __( 'The changes you made will be lost if you navigate away from this page.' ),
 455          'saved'              => __( 'Saved' ),
 456          'cancel'             => __( 'Cancel' ),
 457          'close'              => __( 'Close' ),
 458          'cheatin'            => __( 'Cheatin&#8217; uh?' ),
 459          'notAllowed'         => __( 'Sorry, you are not allowed to customize this site.' ),
 460          'previewIframeTitle' => __( 'Site Preview' ),
 461          'loginIframeTitle'   => __( 'Session expired' ),
 462          'collapseSidebar'    => __( 'Collapse Sidebar' ),
 463          'expandSidebar'      => __( 'Expand Sidebar' ),
 464          'untitledBlogName'   => __( '(Untitled)' ),
 465          // Used for overriding the file types allowed in plupload.
 466          'allowedFiles'       => __( 'Allowed Files' ),
 467      ) );
 468      $scripts->add( 'customize-selective-refresh', "/wp-includes/js/customize-selective-refresh$suffix.js", array( 'jquery', 'wp-util', 'customize-preview' ), false, 1 );
 469  
 470      $scripts->add( 'customize-widgets', "/wp-admin/js/customize-widgets$suffix.js", array( 'jquery', 'jquery-ui-sortable', 'jquery-ui-droppable', 'wp-backbone', 'customize-controls' ), false, 1 );
 471      $scripts->add( 'customize-preview-widgets', "/wp-includes/js/customize-preview-widgets$suffix.js", array( 'jquery', 'wp-util', 'customize-preview', 'customize-selective-refresh' ), false, 1 );
 472  
 473      $scripts->add( 'customize-nav-menus', "/wp-admin/js/customize-nav-menus$suffix.js", array( 'jquery', 'wp-backbone', 'customize-controls', 'accordion', 'nav-menu' ), false, 1 );
 474      $scripts->add( 'customize-preview-nav-menus', "/wp-includes/js/customize-preview-nav-menus$suffix.js", array( 'jquery', 'wp-util', 'customize-preview', 'customize-selective-refresh' ), false, 1 );
 475  
 476      $scripts->add( 'accordion', "/wp-admin/js/accordion$suffix.js", array( 'jquery' ), false, 1 );
 477  
 478      $scripts->add( 'shortcode', "/wp-includes/js/shortcode$suffix.js", array( 'underscore' ), false, 1 );
 479      $scripts->add( 'media-models', "/wp-includes/js/media-models$suffix.js", array( 'wp-backbone' ), false, 1 );
 480      did_action( 'init' ) && $scripts->localize( 'media-models', '_wpMediaModelsL10n', array(
 481          'settings' => array(
 482              'ajaxurl' => admin_url( 'admin-ajax.php', 'relative' ),
 483              'post' => array( 'id' => 0 ),
 484          ),
 485      ) );
 486  
 487      $scripts->add( 'wp-embed', "/wp-includes/js/wp-embed$suffix.js" );
 488  
 489      // To enqueue media-views or media-editor, call wp_enqueue_media().
 490      // Both rely on numerous settings, styles, and templates to operate correctly.
 491      $scripts->add( 'media-views',  "/wp-includes/js/media-views$suffix.js",  array( 'utils', 'media-models', 'wp-plupload', 'jquery-ui-sortable', 'wp-mediaelement' ), false, 1 );
 492      $scripts->add( 'media-editor', "/wp-includes/js/media-editor$suffix.js", array( 'shortcode', 'media-views' ), false, 1 );
 493      $scripts->add( 'media-audiovideo', "/wp-includes/js/media-audiovideo$suffix.js", array( 'media-editor' ), false, 1 );
 494      $scripts->add( 'mce-view', "/wp-includes/js/mce-view$suffix.js", array( 'shortcode', 'jquery', 'media-views', 'media-audiovideo' ), false, 1 );
 495  
 496      if ( is_admin() ) {
 497          $scripts->add( 'admin-tags', "/wp-admin/js/tags$suffix.js", array( 'jquery', 'wp-ajax-response' ), false, 1 );
 498          did_action( 'init' ) && $scripts->localize( 'admin-tags', 'tagsl10n', array(
 499              'noPerm' => __('Sorry, you are not allowed to do that.'),
 500              'broken' => __('An unidentified error has occurred.')
 501          ));
 502  
 503          $scripts->add( 'admin-comments', "/wp-admin/js/edit-comments$suffix.js", array('wp-lists', 'quicktags', 'jquery-query'), false, 1 );
 504          did_action( 'init' ) && $scripts->localize( 'admin-comments', 'adminCommentsL10n', array(
 505              'hotkeys_highlight_first' => isset($_GET['hotkeys_highlight_first']),
 506              'hotkeys_highlight_last' => isset($_GET['hotkeys_highlight_last']),
 507              'replyApprove' => __( 'Approve and Reply' ),
 508              'reply' => __( 'Reply' ),
 509              'warnQuickEdit' => __( "Are you sure you want to edit this comment?\nThe changes you made will be lost." ),
 510              'warnCommentChanges' => __( "Are you sure you want to do this?\nThe comment changes you made will be lost." ),
 511              'docTitleComments' => __( 'Comments' ),
 512              /* translators: %s: comments count */
 513              'docTitleCommentsCount' => __( 'Comments (%s)' ),
 514          ) );
 515  
 516          $scripts->add( 'xfn', "/wp-admin/js/xfn$suffix.js", array('jquery'), false, 1 );
 517  
 518          $scripts->add( 'postbox', "/wp-admin/js/postbox$suffix.js", array('jquery-ui-sortable'), false, 1 );
 519          did_action( 'init' ) && $scripts->localize( 'postbox', 'postBoxL10n', array(
 520              'postBoxEmptyString' => __( 'Drag boxes here' ),
 521          ) );
 522  
 523          $scripts->add( 'tags-box', "/wp-admin/js/tags-box$suffix.js", array( 'jquery', 'suggest' ), false, 1 );
 524          did_action( 'init' ) && $scripts->localize( 'tags-box', 'tagsBoxL10n', array(
 525              'tagDelimiter' => _x( ',', 'tag delimiter' ),
 526          ) );
 527  
 528          $scripts->add( 'post', "/wp-admin/js/post$suffix.js", array( 'suggest', 'wp-lists', 'postbox', 'tags-box', 'underscore', 'word-count', 'wp-a11y' ), false, 1 );
 529          did_action( 'init' ) && $scripts->localize( 'post', 'postL10n', array(
 530              'ok' => __('OK'),
 531              'cancel' => __('Cancel'),
 532              'publishOn' => __('Publish on:'),
 533              'publishOnFuture' =>  __('Schedule for:'),
 534              'publishOnPast' => __('Published on:'),
 535              /* translators: 1: month, 2: day, 3: year, 4: hour, 5: minute */
 536              'dateFormat' => __('%1$s %2$s, %3$s @ %4$s:%5$s'),
 537              'showcomm' => __('Show more comments'),
 538              'endcomm' => __('No more comments found.'),
 539              'publish' => __('Publish'),
 540              'schedule' => __('Schedule'),
 541              'update' => __('Update'),
 542              'savePending' => __('Save as Pending'),
 543              'saveDraft' => __('Save Draft'),
 544              'private' => __('Private'),
 545              'public' => __('Public'),
 546              'publicSticky' => __('Public, Sticky'),
 547              'password' => __('Password Protected'),
 548              'privatelyPublished' => __('Privately Published'),
 549              'published' => __('Published'),
 550              'saveAlert' => __('The changes you made will be lost if you navigate away from this page.'),
 551              'savingText' => __('Saving Draft&#8230;'),
 552              'permalinkSaved' => __( 'Permalink saved' ),
 553          ) );
 554  
 555          $scripts->add( 'press-this', "/wp-admin/js/press-this$suffix.js", array( 'jquery', 'tags-box' ), false, 1 );
 556          did_action( 'init' ) && $scripts->localize( 'press-this', 'pressThisL10n', array(
 557              'newPost' => __( 'Title' ),
 558              'serverError' => __( 'Connection lost or the server is busy. Please try again later.' ),
 559              'saveAlert' => __( 'The changes you made will be lost if you navigate away from this page.' ),
 560              /* translators: %d: nth embed found in a post */
 561              'suggestedEmbedAlt' => __( 'Suggested embed #%d' ),
 562              /* translators: %d: nth image found in a post */
 563              'suggestedImgAlt' => __( 'Suggested image #%d' ),
 564          ) );
 565  
 566          $scripts->add( 'editor-expand', "/wp-admin/js/editor-expand$suffix.js", array( 'jquery', 'underscore' ), false, 1 );
 567  
 568          $scripts->add( 'link', "/wp-admin/js/link$suffix.js", array( 'wp-lists', 'postbox' ), false, 1 );
 569  
 570          $scripts->add( 'comment', "/wp-admin/js/comment$suffix.js", array( 'jquery', 'postbox' ) );
 571          $scripts->add_data( 'comment', 'group', 1 );
 572          did_action( 'init' ) && $scripts->localize( 'comment', 'commentL10n', array(
 573              'submittedOn' => __( 'Submitted on:' ),
 574              /* translators: 1: month, 2: day, 3: year, 4: hour, 5: minute */
 575              'dateFormat' => __( '%1$s %2$s, %3$s @ %4$s:%5$s' )
 576          ) );
 577  
 578          $scripts->add( 'admin-gallery', "/wp-admin/js/gallery$suffix.js", array( 'jquery-ui-sortable' ) );
 579  
 580          $scripts->add( 'admin-widgets', "/wp-admin/js/widgets$suffix.js", array( 'jquery-ui-sortable', 'jquery-ui-draggable', 'jquery-ui-droppable' ), false, 1 );
 581  
 582          $scripts->add( 'theme', "/wp-admin/js/theme$suffix.js", array( 'wp-backbone', 'wp-a11y' ), false, 1 );
 583  
 584          $scripts->add( 'inline-edit-post', "/wp-admin/js/inline-edit-post$suffix.js", array( 'jquery', 'suggest', 'wp-a11y' ), false, 1 );
 585          did_action( 'init' ) && $scripts->localize( 'inline-edit-post', 'inlineEditL10n', array(
 586              'error'      => __( 'Error while saving the changes.' ),
 587              'ntdeltitle' => __( 'Remove From Bulk Edit' ),
 588              'notitle'    => __( '(no title)' ),
 589              'comma'      => trim( _x( ',', 'tag delimiter' ) ),
 590              'saved'      => __( 'Changes saved.' ),
 591          ) );
 592  
 593          $scripts->add( 'inline-edit-tax', "/wp-admin/js/inline-edit-tax$suffix.js", array( 'jquery', 'wp-a11y' ), false, 1 );
 594          did_action( 'init' ) && $scripts->localize( 'inline-edit-tax', 'inlineEditL10n', array(
 595              'error' => __( 'Error while saving the changes.' ),
 596              'saved' => __( 'Changes saved.' ),
 597          ) );
 598  
 599          $scripts->add( 'plugin-install', "/wp-admin/js/plugin-install$suffix.js", array( 'jquery', 'jquery-ui-core', 'thickbox' ), false, 1 );
 600          did_action( 'init' ) && $scripts->localize( 'plugin-install', 'plugininstallL10n', array(
 601              'plugin_information' => __( 'Plugin:' ),
 602              'plugin_modal_label' => __( 'Plugin details' ),
 603              'ays' => __('Are you sure you want to install this plugin?')
 604          ) );
 605  
 606          $scripts->add( 'updates', "/wp-admin/js/updates$suffix.js", array( 'jquery', 'wp-util', 'wp-a11y' ) );
 607          did_action( 'init' ) && $scripts->localize( 'updates', '_wpUpdatesSettings', array(
 608              'ajax_nonce' => wp_create_nonce( 'updates' ),
 609              'l10n'       => array(
 610                  /* translators: %s: Search string */
 611                  'searchResults'              => __( 'Search results for &#8220;%s&#8221;' ),
 612                  'searchResultsLabel'         => __( 'Search Results' ),
 613                  'noPlugins'                  => __( 'You do not appear to have any plugins available at this time.' ),
 614                  'noItemsSelected'            => __( 'Please select at least one item to perform this action on.' ),
 615                  'updating'                   => __( 'Updating...' ), // No ellipsis.
 616                  'updated'                    => __( 'Updated!' ),
 617                  'update'                     => __( 'Update' ),
 618                  'updateNow'                  => __( 'Update Now' ),
 619                  /* translators: %s: Plugin name and version */
 620                  'updateNowLabel'             => __( 'Update %s now' ),
 621                  'updateFailedShort'          => __( 'Update Failed!' ),
 622                  /* translators: %s: Error string for a failed update */
 623                  'updateFailed'               => __( 'Update Failed: %s' ),
 624                  /* translators: %s: Plugin name and version */
 625                  'updatingLabel'              => __( 'Updating %s...' ), // No ellipsis.
 626                  /* translators: %s: Plugin name and version */
 627                  'updatedLabel'               => __( '%s updated!' ),
 628                  /* translators: %s: Plugin name and version */
 629                  'updateFailedLabel'          => __( '%s update failed' ),
 630                  /* translators: JavaScript accessible string */
 631                  'updatingMsg'                => __( 'Updating... please wait.' ), // No ellipsis.
 632                  /* translators: JavaScript accessible string */
 633                  'updatedMsg'                 => __( 'Update completed successfully.' ),
 634                  /* translators: JavaScript accessible string */
 635                  'updateCancel'               => __( 'Update canceled.' ),
 636                  'beforeunload'               => __( 'Updates may not complete if you navigate away from this page.' ),
 637                  'installNow'                 => __( 'Install Now' ),
 638                  /* translators: %s: Plugin name */
 639                  'installNowLabel'            => __( 'Install %s now' ),
 640                  'installing'                 => __( 'Installing...' ),
 641                  'installed'                  => __( 'Installed!' ),
 642                  'installFailedShort'         => __( 'Install Failed!' ),
 643                  /* translators: %s: Error string for a failed installation */
 644                  'installFailed'              => __( 'Installation failed: %s' ),
 645                  /* translators: %s: Plugin name and version */
 646                  'pluginInstallingLabel'      => _x( 'Installing %s...', 'plugin' ), // no ellipsis
 647                  /* translators: %s: Theme name and version */
 648                  'themeInstallingLabel'       => _x( 'Installing %s...', 'theme' ), // no ellipsis
 649                  /* translators: %s: Plugin name and version */
 650                  'pluginInstalledLabel'       => _x( '%s installed!', 'plugin' ),
 651                  /* translators: %s: Theme name and version */
 652                  'themeInstalledLabel'        => _x( '%s installed!', 'theme' ),
 653                  /* translators: %s: Plugin name and version */
 654                  'pluginInstallFailedLabel'   => _x( '%s installation failed', 'plugin' ),
 655                  /* translators: %s: Theme name and version */
 656                  'themeInstallFailedLabel'    => _x( '%s installation failed', 'theme' ),
 657                  'installingMsg'              => __( 'Installing... please wait.' ),
 658                  'installedMsg'               => __( 'Installation completed successfully.' ),
 659                  /* translators: %s: Activation URL */
 660                  'importerInstalledMsg'       => __( 'Importer installed successfully. <a href="%s">Run importer</a>' ),
 661                  /* translators: %s: Theme name */
 662                  'aysDelete'                  => __( 'Are you sure you want to delete %s?' ),
 663                  /* translators: %s: Plugin name */
 664                  'aysDeleteUninstall'         => __( 'Are you sure you want to delete %s and its data?' ),
 665                  'aysBulkDelete'              => __( 'Are you sure you want to delete the selected plugins and their data?' ),
 666                  'aysBulkDeleteThemes'        => __( 'Caution: These themes may be active on other sites in the network. Are you sure you want to proceed?' ),
 667                  'deleting'                   => __( 'Deleting...' ),
 668                  /* translators: %s: Error string for a failed deletion */
 669                  'deleteFailed'               => __( 'Deletion failed: %s' ),
 670                  'deleted'                    => __( 'Deleted!' ),
 671                  'livePreview'                => __( 'Live Preview' ),
 672                  'activatePlugin'             => is_network_admin() ? __( 'Network Activate' ) : __( 'Activate' ),
 673                  'activateTheme'              => is_network_admin() ? __( 'Network Enable' ) : __( 'Activate' ),
 674                  /* translators: %s: Plugin name */
 675                  'activatePluginLabel'        => is_network_admin() ? _x( 'Network Activate %s', 'plugin' ) : _x( 'Activate %s', 'plugin' ),
 676                  /* translators: %s: Theme name */
 677                  'activateThemeLabel'         => is_network_admin() ? _x( 'Network Activate %s', 'theme' ) : _x( 'Activate %s', 'theme' ),
 678                  'activateImporter'           => __( 'Run Importer' ),
 679                  /* translators: %s: Importer name */
 680                  'activateImporterLabel'      => __( 'Run %s' ),
 681                  'unknownError'               => __( 'An unknown error occurred' ),
 682                  'connectionError'            => __( 'Connection lost or the server is busy. Please try again later.' ),
 683                  'nonceError'                 => __( 'An error has occurred. Please reload the page and try again.' ),
 684                  'pluginsFound'               => __( 'Number of plugins found: %d' ),
 685                  'noPluginsFound'             => __( 'No plugins found. Try a different search.' ),
 686              ),
 687          ) );
 688  
 689          $scripts->add( 'farbtastic', '/wp-admin/js/farbtastic.js', array('jquery'), '1.2' );
 690  
 691          $scripts->add( 'iris', '/wp-admin/js/iris.min.js', array( 'jquery-ui-draggable', 'jquery-ui-slider', 'jquery-touch-punch' ), '1.0.7', 1 );
 692          $scripts->add( 'wp-color-picker', "/wp-admin/js/color-picker$suffix.js", array( 'iris' ), false, 1 );
 693          did_action( 'init' ) && $scripts->localize( 'wp-color-picker', 'wpColorPickerL10n', array(
 694              'clear' => __( 'Clear' ),
 695              'defaultString' => __( 'Default' ),
 696              'pick' => __( 'Select Color' ),
 697              'current' => __( 'Current Color' ),
 698          ) );
 699  
 700          $scripts->add( 'dashboard', "/wp-admin/js/dashboard$suffix.js", array( 'jquery', 'admin-comments', 'postbox' ), false, 1 );
 701  
 702          $scripts->add( 'list-revisions', "/wp-includes/js/wp-list-revisions$suffix.js" );
 703  
 704          $scripts->add( 'media-grid', "/wp-includes/js/media-grid$suffix.js", array( 'media-editor' ), false, 1 );
 705          $scripts->add( 'media', "/wp-admin/js/media$suffix.js", array( 'jquery' ), false, 1 );
 706          did_action( 'init' ) && $scripts->localize( 'media', 'attachMediaBoxL10n', array(
 707              'error' => __( 'An error has occurred. Please reload the page and try again.' ),
 708          ));
 709  
 710          $scripts->add( 'image-edit', "/wp-admin/js/image-edit$suffix.js", array('jquery', 'json2', 'imgareaselect'), false, 1 );
 711          did_action( 'init' ) && $scripts->localize( 'image-edit', 'imageEditL10n', array(
 712              'error' => __( 'Could not load the preview image. Please reload the page and try again.' )
 713          ));
 714  
 715          $scripts->add( 'set-post-thumbnail', "/wp-admin/js/set-post-thumbnail$suffix.js", array( 'jquery' ), false, 1 );
 716          did_action( 'init' ) && $scripts->localize( 'set-post-thumbnail', 'setPostThumbnailL10n', array(
 717              'setThumbnail' => __( 'Use as featured image' ),
 718              'saving' => __( 'Saving...' ), // no ellipsis
 719              'error' => __( 'Could not set that as the thumbnail image. Try a different attachment.' ),
 720              'done' => __( 'Done' )
 721          ) );
 722  
 723          // Navigation Menus
 724          $scripts->add( 'nav-menu', "/wp-admin/js/nav-menu$suffix.js", array( 'jquery-ui-sortable', 'jquery-ui-draggable', 'jquery-ui-droppable', 'wp-lists', 'postbox', 'json2' ) );
 725          did_action( 'init' ) && $scripts->localize( 'nav-menu', 'navMenuL10n', array(
 726              'noResultsFound' => __( 'No results found.' ),
 727              'warnDeleteMenu' => __( "You are about to permanently delete this menu. \n 'Cancel' to stop, 'OK' to delete." ),
 728              'saveAlert' => __( 'The changes you made will be lost if you navigate away from this page.' ),
 729              'untitled' => _x( '(no label)', 'missing menu item navigation label' )
 730          ) );
 731  
 732          $scripts->add( 'custom-header', "/wp-admin/js/custom-header.js", array( 'jquery-masonry' ), false, 1 );
 733          $scripts->add( 'custom-background', "/wp-admin/js/custom-background$suffix.js", array( 'wp-color-picker', 'media-views' ), false, 1 );
 734          $scripts->add( 'media-gallery', "/wp-admin/js/media-gallery$suffix.js", array('jquery'), false, 1 );
 735  
 736          $scripts->add( 'svg-painter', '/wp-admin/js/svg-painter.js', array( 'jquery' ), false, 1 );
 737      }
 738  }
 739  
 740  /**
 741   * Assign default styles to $styles object.
 742   *
 743   * Nothing is returned, because the $styles parameter is passed by reference.
 744   * Meaning that whatever object is passed will be updated without having to
 745   * reassign the variable that was passed back to the same value. This saves
 746   * memory.
 747   *
 748   * Adding default styles is not the only task, it also assigns the base_url
 749   * property, the default version, and text direction for the object.
 750   *
 751   * @since 2.6.0
 752   *
 753   * @param WP_Styles $styles
 754   */
 755  function wp_default_styles( &$styles ) {
 756      include ( ABSPATH . WPINC . '/version.php' ); // include an unmodified $wp_version
 757  
 758      if ( ! defined( 'SCRIPT_DEBUG' ) )
 759          define( 'SCRIPT_DEBUG', false !== strpos( $wp_version, '-src' ) );
 760  
 761      if ( ! $guessurl = site_url() )
 762          $guessurl = wp_guess_url();
 763  
 764      $styles->base_url = $guessurl;
 765      $styles->content_url = defined('WP_CONTENT_URL')? WP_CONTENT_URL : '';
 766      $styles->default_version = get_bloginfo( 'version' );
 767      $styles->text_direction = function_exists( 'is_rtl' ) && is_rtl() ? 'rtl' : 'ltr';
 768      $styles->default_dirs = array('/wp-admin/', '/wp-includes/css/');
 769  
 770      // Open Sans is no longer used by core, but may be relied upon by themes and plugins.
 771      $open_sans_font_url = '';
 772  
 773      /* translators: If there are characters in your language that are not supported
 774       * by Open Sans, translate this to 'off'. Do not translate into your own language.
 775       */
 776      if ( 'off' !== _x( 'on', 'Open Sans font: on or off' ) ) {
 777          $subsets = 'latin,latin-ext';
 778  
 779          /* translators: To add an additional Open Sans character subset specific to your language,
 780           * translate this to 'greek', 'cyrillic' or 'vietnamese'. Do not translate into your own language.
 781           */
 782          $subset = _x( 'no-subset', 'Open Sans font: add new subset (greek, cyrillic, vietnamese)' );
 783  
 784          if ( 'cyrillic' == $subset ) {
 785              $subsets .= ',cyrillic,cyrillic-ext';
 786          } elseif ( 'greek' == $subset ) {
 787              $subsets .= ',greek,greek-ext';
 788          } elseif ( 'vietnamese' == $subset ) {
 789              $subsets .= ',vietnamese';
 790          }
 791  
 792          // Hotlink Open Sans, for now
 793          $open_sans_font_url = "https://fonts.googleapis.com/css?family=Open+Sans:300italic,400italic,600italic,300,400,600&subset=$subsets";
 794      }
 795  
 796      // Register a stylesheet for the selected admin color scheme.
 797      $styles->add( 'colors', true, array( 'wp-admin', 'buttons' ) );
 798  
 799      $suffix = SCRIPT_DEBUG ? '' : '.min';
 800  
 801      // Admin CSS
 802      $styles->add( 'common',              "/wp-admin/css/common$suffix.css" );
 803      $styles->add( 'forms',               "/wp-admin/css/forms$suffix.css" );
 804      $styles->add( 'admin-menu',          "/wp-admin/css/admin-menu$suffix.css" );
 805      $styles->add( 'dashboard',           "/wp-admin/css/dashboard$suffix.css" );
 806      $styles->add( 'list-tables',         "/wp-admin/css/list-tables$suffix.css" );
 807      $styles->add( 'edit',                "/wp-admin/css/edit$suffix.css" );
 808      $styles->add( 'revisions',           "/wp-admin/css/revisions$suffix.css" );
 809      $styles->add( 'media',               "/wp-admin/css/media$suffix.css" );
 810      $styles->add( 'themes',              "/wp-admin/css/themes$suffix.css" );
 811      $styles->add( 'about',               "/wp-admin/css/about$suffix.css" );
 812      $styles->add( 'nav-menus',           "/wp-admin/css/nav-menus$suffix.css" );
 813      $styles->add( 'widgets',             "/wp-admin/css/widgets$suffix.css" );
 814      $styles->add( 'site-icon',           "/wp-admin/css/site-icon$suffix.css" );
 815      $styles->add( 'l10n',                "/wp-admin/css/l10n$suffix.css" );
 816  
 817      $styles->add( 'wp-admin', false, array( 'dashicons', 'common', 'forms', 'admin-menu', 'dashboard', 'list-tables', 'edit', 'revisions', 'media', 'themes', 'about', 'nav-menus', 'widgets', 'site-icon', 'l10n' ) );
 818  
 819      $styles->add( 'login',               "/wp-admin/css/login$suffix.css", array( 'dashicons', 'buttons', 'forms', 'l10n' ) );
 820      $styles->add( 'install',             "/wp-admin/css/install$suffix.css", array( 'buttons' ) );
 821      $styles->add( 'wp-color-picker',     "/wp-admin/css/color-picker$suffix.css" );
 822      $styles->add( 'customize-controls',  "/wp-admin/css/customize-controls$suffix.css", array( 'wp-admin', 'colors', 'ie', 'imgareaselect' ) );
 823      $styles->add( 'customize-widgets',   "/wp-admin/css/customize-widgets$suffix.css", array( 'wp-admin', 'colors' ) );
 824      $styles->add( 'customize-nav-menus', "/wp-admin/css/customize-nav-menus$suffix.css", array( 'wp-admin', 'colors' ) );
 825      $styles->add( 'press-this',          "/wp-admin/css/press-this$suffix.css", array( 'buttons' ) );
 826  
 827      $styles->add( 'ie', "/wp-admin/css/ie$suffix.css" );
 828      $styles->add_data( 'ie', 'conditional', 'lte IE 7' );
 829  
 830      // Common dependencies
 831      $styles->add( 'buttons',   "/wp-includes/css/buttons$suffix.css" );
 832      $styles->add( 'dashicons', "/wp-includes/css/dashicons$suffix.css" );
 833  
 834      // Includes CSS
 835      $styles->add( 'admin-bar',            "/wp-includes/css/admin-bar$suffix.css", array( 'dashicons' ) );
 836      $styles->add( 'wp-auth-check',        "/wp-includes/css/wp-auth-check$suffix.css", array( 'dashicons' ) );
 837      $styles->add( 'editor-buttons',       "/wp-includes/css/editor$suffix.css", array( 'dashicons' ) );
 838      $styles->add( 'media-views',          "/wp-includes/css/media-views$suffix.css", array( 'buttons', 'dashicons', 'wp-mediaelement' ) );
 839      $styles->add( 'wp-pointer',           "/wp-includes/css/wp-pointer$suffix.css", array( 'dashicons' ) );
 840      $styles->add( 'customize-preview',    "/wp-includes/css/customize-preview$suffix.css" );
 841      $styles->add( 'wp-embed-template-ie', "/wp-includes/css/wp-embed-template-ie$suffix.css" );
 842      $styles->add_data( 'wp-embed-template-ie', 'conditional', 'lte IE 8' );
 843  
 844      // External libraries and friends
 845      $styles->add( 'imgareaselect',       '/wp-includes/js/imgareaselect/imgareaselect.css', array(), '0.9.8' );
 846      $styles->add( 'wp-jquery-ui-dialog', "/wp-includes/css/jquery-ui-dialog$suffix.css", array( 'dashicons' ) );
 847      $styles->add( 'mediaelement',        "/wp-includes/js/mediaelement/mediaelementplayer.min.css", array(), '2.22.0' );
 848      $styles->add( 'wp-mediaelement',     "/wp-includes/js/mediaelement/wp-mediaelement$suffix.css", array( 'mediaelement' ) );
 849      $styles->add( 'thickbox',            '/wp-includes/js/thickbox/thickbox.css', array( 'dashicons' ) );
 850  
 851      // Deprecated CSS
 852      $styles->add( 'deprecated-media', "/wp-admin/css/deprecated-media$suffix.css" );
 853      $styles->add( 'farbtastic',       "/wp-admin/css/farbtastic$suffix.css", array(), '1.3u1' );
 854      $styles->add( 'jcrop',            "/wp-includes/js/jcrop/jquery.Jcrop.min.css", array(), '0.9.12' );
 855      $styles->add( 'colors-fresh', false, array( 'wp-admin', 'buttons' ) ); // Old handle.
 856      $styles->add( 'open-sans', $open_sans_font_url ); // No longer used in core as of 4.6
 857  
 858      // RTL CSS
 859      $rtl_styles = array(
 860          // wp-admin
 861          'common', 'forms', 'admin-menu', 'dashboard', 'list-tables', 'edit', 'revisions', 'media', 'themes', 'about', 'nav-menus',
 862          'widgets', 'site-icon', 'l10n', 'install', 'wp-color-picker', 'customize-controls', 'customize-widgets', 'customize-nav-menus',
 863          'ie', 'login', 'press-this',
 864          // wp-includes
 865          'buttons', 'admin-bar', 'wp-auth-check', 'editor-buttons', 'media-views', 'wp-pointer',
 866          'wp-jquery-ui-dialog',
 867          // deprecated
 868          'deprecated-media', 'farbtastic',
 869      );
 870  
 871      foreach ( $rtl_styles as $rtl_style ) {
 872          $styles->add_data( $rtl_style, 'rtl', 'replace' );
 873          if ( $suffix ) {
 874              $styles->add_data( $rtl_style, 'suffix', $suffix );
 875          }
 876      }
 877  }
 878  
 879  /**
 880   * Reorder JavaScript scripts array to place prototype before jQuery.
 881   *
 882   * @since 2.3.1
 883   *
 884   * @param array $js_array JavaScript scripts array
 885   * @return array Reordered array, if needed.
 886   */
 887  function wp_prototype_before_jquery( $js_array ) {
 888      if ( false === $prototype = array_search( 'prototype', $js_array, true ) )
 889          return $js_array;
 890  
 891      if ( false === $jquery = array_search( 'jquery', $js_array, true ) )
 892          return $js_array;
 893  
 894      if ( $prototype < $jquery )
 895          return $js_array;
 896  
 897      unset($js_array[$prototype]);
 898  
 899      array_splice( $js_array, $jquery, 0, 'prototype' );
 900  
 901      return $js_array;
 902  }
 903  
 904  /**
 905   * Load localized data on print rather than initialization.
 906   *
 907   * These localizations require information that may not be loaded even by init.
 908   *
 909   * @since 2.5.0
 910   */
 911  function wp_just_in_time_script_localization() {
 912  
 913      wp_localize_script( 'autosave', 'autosaveL10n', array(
 914          'autosaveInterval' => AUTOSAVE_INTERVAL,
 915          'blog_id' => get_current_blog_id(),
 916      ) );
 917  }
 918  
 919  /**
 920   * Localizes the jQuery UI datepicker.
 921   *
 922   * @since 4.6.0
 923   *
 924   * @link http://api.jqueryui.com/datepicker/#options
 925   *
 926   * @global WP_Locale $wp_locale The WordPress date and time locale object.
 927   */
 928  function wp_localize_jquery_ui_datepicker() {
 929      global $wp_locale;
 930  
 931      if ( ! wp_script_is( 'jquery-ui-datepicker', 'enqueued' ) ) {
 932          return;
 933      }
 934  
 935      // Convert the PHP date format into jQuery UI's format.
 936      $datepicker_date_format = str_replace(
 937          array(
 938              'd', 'j', 'l', 'z', // Day.
 939              'F', 'M', 'n', 'm', // Month.
 940              'Y', 'y'            // Year.
 941          ),
 942          array(
 943              'dd', 'd', 'DD', 'o',
 944              'MM', 'M', 'm', 'mm',
 945              'yy', 'y'
 946          ),
 947          get_option( 'date_format' )
 948      );
 949  
 950      $datepicker_defaults = wp_json_encode( array(
 951          'closeText'       => __( 'Close' ),
 952          'currentText'     => __( 'Today' ),
 953          'monthNames'      => array_values( $wp_locale->month ),
 954          'monthNamesShort' => array_values( $wp_locale->month_abbrev ),
 955          'nextText'        => __( 'Next' ),
 956          'prevText'        => __( 'Previous' ),
 957          'dayNames'        => array_values( $wp_locale->weekday ),
 958          'dayNamesShort'   => array_values( $wp_locale->weekday_abbrev ),
 959          'dayNamesMin'     => array_values( $wp_locale->weekday_initial ),
 960          'dateFormat'      => $datepicker_date_format,
 961          'firstDay'        => absint( get_option( 'start_of_week' ) ),
 962          'isRTL'           => $wp_locale->is_rtl(),
 963      ) );
 964  
 965      wp_add_inline_script( 'jquery-ui-datepicker', "jQuery(document).ready(function(jQuery){jQuery.datepicker.setDefaults({$datepicker_defaults});});" );
 966  }
 967  
 968  /**
 969   * Administration Screen CSS for changing the styles.
 970   *
 971   * If installing the 'wp-admin/' directory will be replaced with './'.
 972   *
 973   * The $_wp_admin_css_colors global manages the Administration Screens CSS
 974   * stylesheet that is loaded. The option that is set is 'admin_color' and is the
 975   * color and key for the array. The value for the color key is an object with
 976   * a 'url' parameter that has the URL path to the CSS file.
 977   *
 978   * The query from $src parameter will be appended to the URL that is given from
 979   * the $_wp_admin_css_colors array value URL.
 980   *
 981   * @since 2.6.0
 982   * @global array $_wp_admin_css_colors
 983   *
 984   * @param string $src    Source URL.
 985   * @param string $handle Either 'colors' or 'colors-rtl'.
 986   * @return string|false URL path to CSS stylesheet for Administration Screens.
 987   */
 988  function wp_style_loader_src( $src, $handle ) {
 989      global $_wp_admin_css_colors;
 990  
 991      if ( wp_installing() )
 992          return preg_replace( '#^wp-admin/#', './', $src );
 993  
 994      if ( 'colors' == $handle ) {
 995          $color = get_user_option('admin_color');
 996  
 997          if ( empty($color) || !isset($_wp_admin_css_colors[$color]) )
 998              $color = 'fresh';
 999  
1000          $color = $_wp_admin_css_colors[$color];
1001          $url = $color->url;
1002  
1003          if ( ! $url ) {
1004              return false;
1005          }
1006  
1007          $parsed = parse_url( $src );
1008          if ( isset($parsed['query']) && $parsed['query'] ) {
1009              wp_parse_str( $parsed['query'], $qv );
1010              $url = add_query_arg( $qv, $url );
1011          }
1012  
1013          return $url;
1014      }
1015  
1016      return $src;
1017  }
1018  
1019  /**
1020   * Prints the script queue in the HTML head on admin pages.
1021   *
1022   * Postpones the scripts that were queued for the footer.
1023   * print_footer_scripts() is called in the footer to print these scripts.
1024   *
1025   * @since 2.8.0
1026   *
1027   * @see wp_print_scripts()
1028   *
1029   * @global bool $concatenate_scripts
1030   *
1031   * @return array
1032   */
1033  function print_head_scripts() {
1034      global $concatenate_scripts;
1035  
1036      if ( ! did_action('wp_print_scripts') ) {
1037          /** This action is documented in wp-includes/functions.wp-scripts.php */
1038          do_action( 'wp_print_scripts' );
1039      }
1040  
1041      $wp_scripts = wp_scripts();
1042  
1043      script_concat_settings();
1044      $wp_scripts->do_concat = $concatenate_scripts;
1045      $wp_scripts->do_head_items();
1046  
1047      /**
1048       * Filters whether to print the head scripts.
1049       *
1050       * @since 2.8.0
1051       *
1052       * @param bool $print Whether to print the head scripts. Default true.
1053       */
1054      if ( apply_filters( 'print_head_scripts', true ) ) {
1055          _print_scripts();
1056      }
1057  
1058      $wp_scripts->reset();
1059      return $wp_scripts->done;
1060  }
1061  
1062  /**
1063   * Prints the scripts that were queued for the footer or too late for the HTML head.
1064   *
1065   * @since 2.8.0
1066   *
1067   * @global WP_Scripts $wp_scripts
1068   * @global bool       $concatenate_scripts
1069   *
1070   * @return array
1071   */
1072  function print_footer_scripts() {
1073      global $wp_scripts, $concatenate_scripts;
1074  
1075      if ( ! ( $wp_scripts instanceof WP_Scripts ) ) {
1076          return array(); // No need to run if not instantiated.
1077      }
1078      script_concat_settings();
1079      $wp_scripts->do_concat = $concatenate_scripts;
1080      $wp_scripts->do_footer_items();
1081  
1082      /**
1083       * Filters whether to print the footer scripts.
1084       *
1085       * @since 2.8.0
1086       *
1087       * @param bool $print Whether to print the footer scripts. Default true.
1088       */
1089      if ( apply_filters( 'print_footer_scripts', true ) ) {
1090          _print_scripts();
1091      }
1092  
1093      $wp_scripts->reset();
1094      return $wp_scripts->done;
1095  }
1096  
1097  /**
1098   * Print scripts (internal use only)
1099   *
1100   * @ignore
1101   *
1102   * @global WP_Scripts $wp_scripts
1103   * @global bool       $compress_scripts
1104   */
1105  function _print_scripts() {
1106      global $wp_scripts, $compress_scripts;
1107  
1108      $zip = $compress_scripts ? 1 : 0;
1109      if ( $zip && defined('ENFORCE_GZIP') && ENFORCE_GZIP )
1110          $zip = 'gzip';
1111  
1112      if ( $concat = trim( $wp_scripts->concat, ', ' ) ) {
1113  
1114          if ( !empty($wp_scripts->print_code) ) {
1115              echo "\n<script type='text/javascript'>\n";
1116              echo "/* <![CDATA[ */\n"; // not needed in HTML 5
1117              echo $wp_scripts->print_code;
1118              echo "/* ]]> */\n";
1119              echo "</script>\n";
1120          }
1121  
1122          $concat = str_split( $concat, 128 );
1123          $concat = 'load%5B%5D=' . implode( '&load%5B%5D=', $concat );
1124  
1125          $src = $wp_scripts->base_url . "/wp-admin/load-scripts.php?c={$zip}&" . $concat . '&ver=' . $wp_scripts->default_version;
1126          echo "<script type='text/javascript' src='" . esc_attr($src) . "'></script>\n";
1127      }
1128  
1129      if ( !empty($wp_scripts->print_html) )
1130          echo $wp_scripts->print_html;
1131  }
1132  
1133  /**
1134   * Prints the script queue in the HTML head on the front end.
1135   *
1136   * Postpones the scripts that were queued for the footer.
1137   * wp_print_footer_scripts() is called in the footer to print these scripts.
1138   *
1139   * @since 2.8.0
1140   *
1141   * @global WP_Scripts $wp_scripts
1142   *
1143   * @return array
1144   */
1145  function wp_print_head_scripts() {
1146      if ( ! did_action('wp_print_scripts') ) {
1147          /** This action is documented in wp-includes/functions.wp-scripts.php */
1148          do_action( 'wp_print_scripts' );
1149      }
1150  
1151      global $wp_scripts;
1152  
1153      if ( ! ( $wp_scripts instanceof WP_Scripts ) ) {
1154          return array(); // no need to run if nothing is queued
1155      }
1156      return print_head_scripts();
1157  }
1158  
1159  /**
1160   * Private, for use in *_footer_scripts hooks
1161   *
1162   * @since 3.3.0
1163   */
1164  function _wp_footer_scripts() {
1165      print_late_styles();
1166      print_footer_scripts();
1167  }
1168  
1169  /**
1170   * Hooks to print the scripts and styles in the footer.
1171   *
1172   * @since 2.8.0
1173   */
1174  function wp_print_footer_scripts() {
1175      /**
1176       * Fires when footer scripts are printed.
1177       *
1178       * @since 2.8.0
1179       */
1180      do_action( 'wp_print_footer_scripts' );
1181  }
1182  
1183  /**
1184   * Wrapper for do_action('wp_enqueue_scripts')
1185   *
1186   * Allows plugins to queue scripts for the front end using wp_enqueue_script().
1187   * Runs first in wp_head() where all is_home(), is_page(), etc. functions are available.
1188   *
1189   * @since 2.8.0
1190   */
1191  function wp_enqueue_scripts() {
1192      /**
1193       * Fires when scripts and styles are enqueued.
1194       *
1195       * @since 2.8.0
1196       */
1197      do_action( 'wp_enqueue_scripts' );
1198  }
1199  
1200  /**
1201   * Prints the styles queue in the HTML head on admin pages.
1202   *
1203   * @since 2.8.0
1204   *
1205   * @global bool $concatenate_scripts
1206   *
1207   * @return array
1208   */
1209  function print_admin_styles() {
1210      global $concatenate_scripts;
1211  
1212      $wp_styles = wp_styles();
1213  
1214      script_concat_settings();
1215      $wp_styles->do_concat = $concatenate_scripts;
1216      $wp_styles->do_items(false);
1217  
1218      /**
1219       * Filters whether to print the admin styles.
1220       *
1221       * @since 2.8.0
1222       *
1223       * @param bool $print Whether to print the admin styles. Default true.
1224       */
1225      if ( apply_filters( 'print_admin_styles', true ) ) {
1226          _print_styles();
1227      }
1228  
1229      $wp_styles->reset();
1230      return $wp_styles->done;
1231  }
1232  
1233  /**
1234   * Prints the styles that were queued too late for the HTML head.
1235   *
1236   * @since 3.3.0
1237   *
1238   * @global WP_Styles $wp_styles
1239   * @global bool      $concatenate_scripts
1240   *
1241   * @return array|void
1242   */
1243  function print_late_styles() {
1244      global $wp_styles, $concatenate_scripts;
1245  
1246      if ( ! ( $wp_styles instanceof WP_Styles ) ) {
1247          return;
1248      }
1249  
1250      script_concat_settings();
1251      $wp_styles->do_concat = $concatenate_scripts;
1252      $wp_styles->do_footer_items();
1253  
1254      /**
1255       * Filters whether to print the styles queued too late for the HTML head.
1256       *
1257       * @since 3.3.0
1258       *
1259       * @param bool $print Whether to print the 'late' styles. Default true.
1260       */
1261      if ( apply_filters( 'print_late_styles', true ) ) {
1262          _print_styles();
1263      }
1264  
1265      $wp_styles->reset();
1266      return $wp_styles->done;
1267  }
1268  
1269  /**
1270   * Print styles (internal use only)
1271   *
1272   * @ignore
1273   * @since 3.3.0
1274   *
1275   * @global bool $compress_css
1276   */
1277  function _print_styles() {
1278      global $compress_css;
1279  
1280      $wp_styles = wp_styles();
1281  
1282      $zip = $compress_css ? 1 : 0;
1283      if ( $zip && defined('ENFORCE_GZIP') && ENFORCE_GZIP )
1284          $zip = 'gzip';
1285  
1286      if ( $concat = trim( $wp_styles->concat, ', ' ) ) {
1287          $dir = $wp_styles->text_direction;
1288          $ver = $wp_styles->default_version;
1289  
1290          $concat = str_split( $concat, 128 );
1291          $concat = 'load%5B%5D=' . implode( '&load%5B%5D=', $concat );
1292  
1293          $href = $wp_styles->base_url . "/wp-admin/load-styles.php?c={$zip}&dir={$dir}&" . $concat . '&ver=' . $ver;
1294          echo "<link rel='stylesheet' href='" . esc_attr($href) . "' type='text/css' media='all' />\n";
1295  
1296          if ( !empty($wp_styles->print_code) ) {
1297              echo "<style type='text/css'>\n";
1298              echo $wp_styles->print_code;
1299              echo "\n</style>\n";
1300          }
1301      }
1302  
1303      if ( !empty($wp_styles->print_html) )
1304          echo $wp_styles->print_html;
1305  }
1306  
1307  /**
1308   * Determine the concatenation and compression settings for scripts and styles.
1309   *
1310   * @since 2.8.0
1311   *
1312   * @global bool $concatenate_scripts
1313   * @global bool $compress_scripts
1314   * @global bool $compress_css
1315   */
1316  function script_concat_settings() {
1317      global $concatenate_scripts, $compress_scripts, $compress_css;
1318  
1319      $compressed_output = ( ini_get('zlib.output_compression') || 'ob_gzhandler' == ini_get('output_handler') );
1320  
1321      if ( ! isset($concatenate_scripts) ) {
1322          $concatenate_scripts = defined('CONCATENATE_SCRIPTS') ? CONCATENATE_SCRIPTS : true;
1323          if ( ( ! is_admin() && ! did_action( 'login_init' ) ) || ( defined('SCRIPT_DEBUG') && SCRIPT_DEBUG ) )
1324              $concatenate_scripts = false;
1325      }
1326  
1327      if ( ! isset($compress_scripts) ) {
1328          $compress_scripts = defined('COMPRESS_SCRIPTS') ? COMPRESS_SCRIPTS : true;
1329          if ( $compress_scripts && ( ! get_site_option('can_compress_scripts') || $compressed_output ) )
1330              $compress_scripts = false;
1331      }
1332  
1333      if ( ! isset($compress_css) ) {
1334          $compress_css = defined('COMPRESS_CSS') ? COMPRESS_CSS : true;
1335          if ( $compress_css && ( ! get_site_option('can_compress_scripts') || $compressed_output ) )
1336              $compress_css = false;
1337      }
1338  }

title

Description

title

Description

title

Description

title

title

Body