diff --git a/wp-admin/load-styles.php b/wp-admin/load-styles.php index be781e299b..e5e20232a8 100644 --- a/wp-admin/load-styles.php +++ b/wp-admin/load-styles.php @@ -125,7 +125,10 @@ foreach( $load as $handle ) { $content .= get_file($rtl_path) . "\n"; } - $out .= str_replace( '../images/', 'images/', $content ); + if ( strpos( $style->src, '/wp-includes/css/' ) === 0 ) + $out .= str_replace( '../images/', '../wp-includes/images/', $content ); + else + $out .= str_replace( '../images/', 'images/', $content ); } header('Content-Type: text/css'); diff --git a/wp-includes/class.wp-scripts.php b/wp-includes/class.wp-scripts.php index 1cd4150da1..0648ce512c 100644 --- a/wp-includes/class.wp-scripts.php +++ b/wp-includes/class.wp-scripts.php @@ -47,35 +47,42 @@ class WP_Scripts extends WP_Dependencies { return $this->do_items( $handles, $group ); } + // Deprecated since 3.3, see print_script_data() function print_scripts_l10n( $handle, $echo = true ) { - if ( empty($this->registered[$handle]->extra['l10n']) || empty($this->registered[$handle]->extra['l10n'][0]) || !is_array($this->registered[$handle]->extra['l10n'][1]) ) + _deprecated_function( __FUNCTION__, '3.3', 'print_script_data()' ); + return $this->print_script_data( $handle, $echo, true ); + } + + function print_script_data( $handle, $echo = true, $_l10n = false ) { + if ( empty($this->registered[$handle]->extra['data']) ) return false; - $object_name = $this->registered[$handle]->extra['l10n'][0]; + if ( $_l10n ) { + $name = $this->registered[$handle]->extra['l10n'][0]; + $data = $this->registered[$handle]->extra['l10n'][1]; + $after = ''; - $data = "var $object_name = {\n"; - $eol = ''; - foreach ( $this->registered[$handle]->extra['l10n'][1] as $var => $val ) { - if ( 'l10n_print_after' == $var ) { - $after = $val; - continue; + if ( is_array($data) && isset($data['l10n_print_after']) ) { + $after = $data['l10n_print_after']; + unset($data['l10n_print_after']); } - $data .= "$eol\t$var: \"" . esc_js( $val ) . '"'; - $eol = ",\n"; - } - $data .= "\n};\n"; - $data .= isset($after) ? "$after\n" : ''; - - if ( $echo ) { - echo "\n"; - return true; + $output = "var $name = " . json_encode($data) . "; $after\n"; } else { - return $data; + foreach ( (array) $this->registered[$handle]->extra['data'] as $name => $data ) { + $output = "var $name = " . json_encode($data) . ";\n"; + } } + + if ( !$echo ) + return $output; + + echo "\n"; + + return true; } function do_item( $handle, $group = false ) { @@ -103,7 +110,7 @@ class WP_Scripts extends WP_Dependencies { if ( $this->do_concat ) { $srce = apply_filters( 'script_loader_src', $src, $handle ); if ( $this->in_default_dir($srce) ) { - $this->print_code .= $this->print_scripts_l10n( $handle, false ); + $this->print_code .= $this->print_script_data( $handle, false ); $this->concat .= "$handle,"; $this->concat_version .= "$handle$ver"; return true; @@ -113,7 +120,7 @@ class WP_Scripts extends WP_Dependencies { } } - $this->print_scripts_l10n( $handle ); + $this->print_script_data( $handle ); if ( !preg_match('|^https?://|', $src) && ! ( $this->content_url && 0 === strpos($src, $this->content_url) ) ) { $src = $this->base_url . $src; } @@ -131,19 +138,36 @@ class WP_Scripts extends WP_Dependencies { } /** - * Localizes a script + * Localizes a script (Deprecated) * * Localizes only if script has already been added * - * @param string $handle Script name - * @param string $object_name Name of JS object to hold l10n info - * @param array $l10n Array of JS var name => localized string - * @return bool Successful localization + * @since + * @deprecated WP 3.3 */ function localize( $handle, $object_name, $l10n ) { - if ( !$object_name || !$l10n ) + _deprecated_function( __FUNCTION__, '3.3', 'add_script_data()' ); + return $this->add_script_data( $handle, $object_name, $l10n ); + } + + /** + * Add extra Javascript + * + * Only if script has already been added. + * + * @param string $handle Script name + * @param string $name Name of JS object to hold the data + * @param array $data Associative array of JS name => value + * @return bool Successful or not + */ + function add_script_data( $handle, $name, $data ) { + if ( !$name || !is_array($data) ) return false; - return $this->add_data( $handle, 'l10n', array( $object_name, $l10n ) ); + + if ( !empty( $this->registered[$handle]->extra['data'][$name] ) ) + $data = array_merge( $data, (array) $this->registered[$handle]->extra['data'][$name] ); + + return $this->add_data( $handle, 'data', array( $name => $data ) ); } function set_group( $handle, $recursion, $group = false ) { diff --git a/wp-includes/class.wp-styles.php b/wp-includes/class.wp-styles.php index db53fd6e3e..88dff8119c 100644 --- a/wp-includes/class.wp-styles.php +++ b/wp-includes/class.wp-styles.php @@ -25,6 +25,7 @@ class WP_Styles extends WP_Dependencies { var $concat_version = ''; var $do_concat = false; var $print_html = ''; + var $print_code = ''; var $default_dirs; function __construct() { @@ -35,44 +36,49 @@ class WP_Styles extends WP_Dependencies { if ( !parent::do_item($handle) ) return false; - if ( null === $this->registered[$handle]->ver ) + $obj = $this->registered[$handle]; + if ( null === $obj->ver ) $ver = ''; else - $ver = $this->registered[$handle]->ver ? $this->registered[$handle]->ver : $this->default_version; + $ver = $obj->ver ? $obj->ver : $this->default_version; if ( isset($this->args[$handle]) ) $ver = $ver ? $ver . '&' . $this->args[$handle] : $this->args[$handle]; if ( $this->do_concat ) { - if ( $this->in_default_dir($this->registered[$handle]->src) && !isset($this->registered[$handle]->extra['conditional']) && !isset($this->registered[$handle]->extra['alt']) ) { + if ( $this->in_default_dir($obj->src) && !isset($obj->extra['conditional']) && !isset($obj->extra['alt']) ) { $this->concat .= "$handle,"; $this->concat_version .= "$handle$ver"; + + if ( !empty($this->registered[$handle]->extra['data']) ) + $this->print_code .= $this->registered[$handle]->extra['data']; + return true; } } - if ( isset($this->registered[$handle]->args) ) - $media = esc_attr( $this->registered[$handle]->args ); + if ( isset($obj->args) ) + $media = esc_attr( $obj->args ); else $media = 'all'; - $href = $this->_css_href( $this->registered[$handle]->src, $ver, $handle ); - $rel = isset($this->registered[$handle]->extra['alt']) && $this->registered[$handle]->extra['alt'] ? 'alternate stylesheet' : 'stylesheet'; - $title = isset($this->registered[$handle]->extra['title']) ? "title='" . esc_attr( $this->registered[$handle]->extra['title'] ) . "'" : ''; + $href = $this->_css_href( $obj->src, $ver, $handle ); + $rel = isset($obj->extra['alt']) && $obj->extra['alt'] ? 'alternate stylesheet' : 'stylesheet'; + $title = isset($obj->extra['title']) ? "title='" . esc_attr( $obj->extra['title'] ) . "'" : ''; $end_cond = $tag = ''; - if ( isset($this->registered[$handle]->extra['conditional']) && $this->registered[$handle]->extra['conditional'] ) { - $tag .= "\n"; } $tag .= apply_filters( 'style_loader_tag', "\n", $handle ); - if ( 'rtl' === $this->text_direction && isset($this->registered[$handle]->extra['rtl']) && $this->registered[$handle]->extra['rtl'] ) { - if ( is_bool( $this->registered[$handle]->extra['rtl'] ) ) { - $suffix = isset( $this->registered[$handle]->extra['suffix'] ) ? $this->registered[$handle]->extra['suffix'] : ''; - $rtl_href = str_replace( "{$suffix}.css", "-rtl{$suffix}.css", $this->_css_href( $this->registered[$handle]->src , $ver, "$handle-rtl" )); + if ( 'rtl' === $this->text_direction && isset($obj->extra['rtl']) && $obj->extra['rtl'] ) { + if ( is_bool( $obj->extra['rtl'] ) ) { + $suffix = isset( $obj->extra['suffix'] ) ? $obj->extra['suffix'] : ''; + $rtl_href = str_replace( "{$suffix}.css", "-rtl{$suffix}.css", $this->_css_href( $obj->src , $ver, "$handle-rtl" )); } else { - $rtl_href = $this->_css_href( $this->registered[$handle]->extra['rtl'], $ver, "$handle-rtl" ); + $rtl_href = $this->_css_href( $obj->extra['rtl'], $ver, "$handle-rtl" ); } $tag .= apply_filters( 'style_loader_tag', "\n", $handle ); @@ -80,16 +86,39 @@ class WP_Styles extends WP_Dependencies { $tag .= $end_cond; - if ( $this->do_concat ) + if ( $this->do_concat ) { $this->print_html .= $tag; - else + $this->print_html .= $this->print_inline_style( $handle, false ); + } else { echo $tag; + $this->print_inline_style( $handle ); + } - // Could do something with $this->registered[$handle]->extra here to print out extra CSS rules -// echo "\n"; + return true; + } + + function add_inline_style( $handle, $data ) { + if ( !$data ) + return false; + + if ( !empty( $this->registered[$handle]->extra['data'] ) ) + $data .= "\n" . $this->registered[$handle]->extra['data']; + + return $this->add_data( $handle, 'data', $data ); + } + + function print_inline_style( $handle, $echo = true ) { + if ( empty($this->registered[$handle]->extra['data']) ) + return false; + + $output = $this->registered[$handle]->extra['data']; + + if ( !$echo ) + return $output; + + echo "\n"; return true; } diff --git a/wp-includes/deprecated.php b/wp-includes/deprecated.php index 1464b68743..9c59dd8b7c 100644 --- a/wp-includes/deprecated.php +++ b/wp-includes/deprecated.php @@ -2615,3 +2615,18 @@ function wp_timezone_supported() { return true; } + +/** + * Localizes a script. + * + * Localizes only if script has already been added. + * + * @since r16 + * @deprecated WP 3.3 + * @see wp_add_script_data() + */ +function wp_localize_script( $handle, $object_name, $l10n ) { + _deprecated_function( __FUNCTION__, '3.3', 'wp_add_script_data()' ); + return wp_add_script_data( $handle, $object_name, $l10n ); +} + diff --git a/wp-includes/functions.wp-scripts.php b/wp-includes/functions.wp-scripts.php index af2055d37b..6add0416e7 100644 --- a/wp-includes/functions.wp-scripts.php +++ b/wp-includes/functions.wp-scripts.php @@ -26,7 +26,7 @@ function wp_print_scripts( $handles = false ) { global $wp_scripts; if ( !is_a($wp_scripts, 'WP_Scripts') ) { if ( !$handles ) - return array(); // No need to instantiate if nothing's there. + return array(); // No need to instantiate if nothing is there. else $wp_scripts = new WP_Scripts(); } @@ -35,7 +35,7 @@ function wp_print_scripts( $handles = false ) { } /** - * Register new JavaScript file. + * Register new Javascript file. * * @since r16 * @param string $handle Script name @@ -56,19 +56,29 @@ function wp_register_script( $handle, $src, $deps = array(), $ver = false, $in_f } /** - * Localizes a script. + * Adds extra Javascript. * - * Localizes only if script has already been added. - * - * @since r16 - * @see WP_Scripts::localize() + * Works only if the script has already been added. + * Accepts an associative array $data and creates JS object: + * "$name" = { + * key: value, + * key: value, + * ... + * } + * The $name is passed directly so it should be qualified JS variable /[a-zA-Z0-9_]+/ + * The $data array is JSON encoded. If called more than once for the same $handle, with the same $name, + * the object would contain all values. In that case if two or more keys are the same, + * the first value is kept and subsequent values are ignored. + * + * @since 3.3 + * @see WP_Scripts::add_script_data() */ -function wp_localize_script( $handle, $object_name, $l10n ) { +function wp_add_script_data( $handle, $name, $data ) { global $wp_scripts; if ( !is_a($wp_scripts, 'WP_Scripts') ) return false; - return $wp_scripts->localize( $handle, $object_name, $l10n ); + return $wp_scripts->add_script_data( $handle, $name, $data ); } /** diff --git a/wp-includes/functions.wp-styles.php b/wp-includes/functions.wp-styles.php index 630a112de5..c5ae3c96c1 100644 --- a/wp-includes/functions.wp-styles.php +++ b/wp-includes/functions.wp-styles.php @@ -25,7 +25,7 @@ function wp_print_styles( $handles = false ) { global $wp_styles; if ( !is_a($wp_styles, 'WP_Styles') ) { if ( !$handles ) - return array(); // No need to instantiate if nothing's there. + return array(); // No need to instantiate if nothing is there. else $wp_styles = new WP_Styles(); } @@ -33,6 +33,23 @@ function wp_print_styles( $handles = false ) { return $wp_styles->do_items( $handles ); } +/** + * Adds extra CSS. + * + * Works only if the stylesheet has already been added. + * Accepts a string $data containing the CSS. + * + * @since 3.3 + * @see WP_Scripts::add_inline_style() + */ +function wp_add_inline_style( $handle, $data ) { + global $wp_styles; + if ( !is_a($wp_styles, 'WP_Styles') ) + return false; + + return $wp_styles->add_inline_style( $handle, $data ); +} + /** * Register CSS style file. * diff --git a/wp-includes/js/l10n.dev.js b/wp-includes/js/l10n.dev.js deleted file mode 100644 index 96fca671ec..0000000000 --- a/wp-includes/js/l10n.dev.js +++ /dev/null @@ -1,23 +0,0 @@ -//Used to ensure that Entities used in L10N strings are correct -function convertEntities(o) { - var c, v; - c = function(s) { - if (/&[^;]+;/.test(s)) { - var e = document.createElement("div"); - e.innerHTML = s; - return !e.firstChild ? s : e.firstChild.nodeValue; - } - return s; - } - - if ( typeof o === 'string' ) { - return c(o); - } else if ( typeof o === 'object' ) { - for (v in o) { - if ( typeof o[v] === 'string' ) { - o[v] = c(o[v]); - } - } - } - return o; -} \ No newline at end of file diff --git a/wp-includes/js/l10n.js b/wp-includes/js/l10n.js deleted file mode 100644 index db2e814757..0000000000 --- a/wp-includes/js/l10n.js +++ /dev/null @@ -1 +0,0 @@ -function convertEntities(b){var d,a;d=function(c){if(/&[^;]+;/.test(c)){var f=document.createElement("div");f.innerHTML=c;return !f.firstChild?c:f.firstChild.nodeValue}return c};if(typeof b==="string"){return d(b)}else{if(typeof b==="object"){for(a in b){if(typeof b[a]==="string"){b[a]=d(b[a])}}}}return b}; \ No newline at end of file diff --git a/wp-includes/script-loader.php b/wp-includes/script-loader.php index fe20ed295b..1c9426c1e9 100644 --- a/wp-includes/script-loader.php +++ b/wp-includes/script-loader.php @@ -58,17 +58,12 @@ function wp_default_scripts( &$scripts ) { $suffix = defined('SCRIPT_DEBUG') && SCRIPT_DEBUG ? '.dev' : ''; - // Always ensure that we have the convertEntities function - $scripts->add( 'l10n', "/wp-includes/js/l10n$suffix.js", false, '20101110' ); - $scripts->enqueue( 'l10n' ); - $scripts->add( 'utils', "/wp-admin/js/utils$suffix.js", false, '20101110' ); $scripts->add( 'common', "/wp-admin/js/common$suffix.js", array('jquery', 'hoverIntent', 'utils'), '20110711' ); $scripts->add_data( 'common', 'group', 1 ); - $scripts->localize( 'common', 'commonL10n', array( - 'warnDelete' => __("You are about to permanently delete the selected items.\n 'Cancel' to stop, 'OK' to delete."), - 'l10n_print_after' => 'try{convertEntities(commonL10n);}catch(e){};' + $scripts->add_script_data( 'common', 'commonL10n', array( + 'warnDelete' => __("You are about to permanently delete the selected items.\n 'Cancel' to stop, 'OK' to delete.") ) ); $scripts->add( 'sack', "/wp-includes/js/tw-sack$suffix.js", false, '1.6.1' ); @@ -76,7 +71,7 @@ function wp_default_scripts( &$scripts ) { $scripts->add( 'quicktags', "/wp-includes/js/quicktags$suffix.js", false, '20110502' ); $scripts->add_data( 'quicktags', 'group', 1 ); - $scripts->localize( 'quicktags', 'quicktagsL10n', array( + $scripts->add_script_data( 'quicktags', 'quicktagsL10n', array( 'quickLinks' => __('(Quick Links)'), 'wordLookup' => __('Enter a word to look up:'), 'dictionaryLookup' => esc_attr(__('Dictionary lookup')), @@ -87,8 +82,7 @@ function wp_default_scripts( &$scripts ) { 'enterImageURL' => __('Enter the URL of the image'), 'enterImageDescription' => __('Enter a description of the image'), 'fullscreen' => __('fullscreen'), - 'toggleFullscreen' => esc_attr( __('Toggle fullscreen mode') ), - 'l10n_print_after' => 'try{convertEntities(quicktagsL10n);}catch(e){};' + 'toggleFullscreen' => esc_attr( __('Toggle fullscreen mode') ) ) ); $scripts->add( 'colorpicker', "/wp-includes/js/colorpicker$suffix.js", array('prototype'), '3517m' ); @@ -103,10 +97,9 @@ function wp_default_scripts( &$scripts ) { $scripts->add( 'wp-ajax-response', "/wp-includes/js/wp-ajax-response$suffix.js", array('jquery'), '20091119' ); $scripts->add_data( 'wp-ajax-response', 'group', 1 ); - $scripts->localize( 'wp-ajax-response', 'wpAjax', array( + $scripts->add_script_data( 'wp-ajax-response', 'wpAjax', array( 'noPerm' => __('You do not have permission to do that.'), - 'broken' => __('An unidentified error has occurred.'), - 'l10n_print_after' => 'try{convertEntities(wpAjax);}catch(e){};' + 'broken' => __('An unidentified error has occurred.') ) ); $scripts->add( 'autosave', "/wp-includes/js/autosave$suffix.js", array('schedule', 'wp-ajax-response'), '20110524' ); @@ -192,7 +185,7 @@ function wp_default_scripts( &$scripts ) { $scripts->add( 'thickbox', "/wp-includes/js/thickbox/thickbox.js", array('jquery'), '3.1-20110528'); $scripts->add_data( 'thickbox', 'group', 1 ); - $scripts->localize( 'thickbox', 'thickboxL10n', array( + $scripts->add_script_data( 'thickbox', 'thickboxL10n', array( 'next' => __('Next >'), 'prev' => __('< Prev'), 'image' => __('Image'), @@ -200,8 +193,7 @@ function wp_default_scripts( &$scripts ) { 'close' => __('Close'), 'noiframes' => __('This feature requires inline frames. You have iframes disabled or your browser does not support them.'), 'loadingAnimation' => includes_url('js/thickbox/loadingAnimation.gif'), - 'closeImage' => includes_url('js/thickbox/tb-close.png'), - 'l10n_print_after' => 'try{convertEntities(thickboxL10n);}catch(e){};' + 'closeImage' => includes_url('js/thickbox/tb-close.png') ) ); $scripts->add( 'jcrop', "/wp-includes/js/jcrop/jquery.Jcrop$suffix.js", array('jquery'), '0.9.8-20110113'); @@ -225,7 +217,7 @@ function wp_default_scripts( &$scripts ) { if ( empty($max_upload_size) ) $max_upload_size = __('not configured'); // these error messages came from the sample swfupload js, they might need changing. - $scripts->localize( 'swfupload-handlers', 'swfuploadL10n', array( + $scripts->add_script_data( 'swfupload-handlers', 'swfuploadL10n', array( 'queue_limit_exceeded' => __('You have attempted to queue too many files.'), 'file_exceeds_size_limit' => __('This file exceeds the maximum upload size for this site.'), 'zero_byte_file' => __('This file is empty. Please try another.'), @@ -242,8 +234,7 @@ function wp_default_scripts( &$scripts ) { 'dismiss' => __('Dismiss'), 'crunching' => __('Crunching…'), 'deleted' => __('moved to the trash.'), - 'error_uploading' => __('“%s” has failed to upload due to an error'), - 'l10n_print_after' => 'try{convertEntities(swfuploadL10n);}catch(e){};', + 'error_uploading' => __('“%s” has failed to upload due to an error') ) ); $scripts->add( 'comment-reply', "/wp-includes/js/comment-reply$suffix.js", false, '20090102'); @@ -255,15 +246,14 @@ function wp_default_scripts( &$scripts ) { $scripts->add( 'password-strength-meter', "/wp-admin/js/password-strength-meter$suffix.js", array('jquery'), '20101027' ); $scripts->add_data( 'password-strength-meter', 'group', 1 ); - $scripts->localize( 'password-strength-meter', 'pwsL10n', array( + $scripts->add_script_data( 'password-strength-meter', 'pwsL10n', array( 'empty' => __('Strength indicator'), 'short' => __('Very weak'), 'bad' => __('Weak'), /* translators: password strength */ 'good' => _x('Medium', 'password strength'), 'strong' => __('Strong'), - 'mismatch' => __('Mismatch'), - 'l10n_print_after' => 'try{convertEntities(pwsL10n);}catch(e){};' + 'mismatch' => __('Mismatch') ) ); $scripts->add( 'user-profile', "/wp-admin/js/user-profile$suffix.js", array( 'jquery', 'password-strength-meter' ), '20110628' ); @@ -274,13 +264,12 @@ function wp_default_scripts( &$scripts ) { $scripts->add( 'wplink', "/wp-includes/js/tinymce/plugins/wplink/js/wplink$suffix.js", array( 'jquery', 'wpdialogs' ), '20110528' ); $scripts->add_data( 'wplink', 'group', 1 ); - $scripts->localize( 'wplink', 'wpLinkL10n', array( + $scripts->add_script_data( 'wplink', 'wpLinkL10n', array( 'title' => __('Insert/edit link'), 'update' => __('Update'), 'save' => __('Add Link'), 'noTitle' => __('(no title)'), - 'noMatchesFound' => __('No matches found.'), - 'l10n_print_after' => 'try{convertEntities(wpLinkL10n);}catch(e){};', + 'noMatchesFound' => __('No matches found.') ) ); $scripts->add( 'wpdialogs', "/wp-includes/js/tinymce/plugins/wpdialogs/js/wpdialog$suffix.js", array( 'jquery-ui-dialog' ), '20110528' ); @@ -292,10 +281,9 @@ function wp_default_scripts( &$scripts ) { if ( is_admin() ) { $scripts->add( 'ajaxcat', "/wp-admin/js/cat$suffix.js", array( 'wp-lists' ), '20090102' ); $scripts->add_data( 'ajaxcat', 'group', 1 ); - $scripts->localize( 'ajaxcat', 'catL10n', array( + $scripts->add_script_data( 'ajaxcat', 'catL10n', array( 'add' => esc_attr(__('Add')), - 'how' => __('Separate multiple categories with commas.'), - 'l10n_print_after' => 'try{convertEntities(catL10n);}catch(e){};' + 'how' => __('Separate multiple categories with commas.') ) ); $scripts->add( 'admin-categories', "/wp-admin/js/categories$suffix.js", array('wp-lists'), '20091201' ); @@ -303,10 +291,9 @@ function wp_default_scripts( &$scripts ) { $scripts->add( 'admin-tags', "/wp-admin/js/tags$suffix.js", array('jquery', 'wp-ajax-response'), '20110429' ); $scripts->add_data( 'admin-tags', 'group', 1 ); - $scripts->localize( 'admin-tags', 'tagsl10n', array( + $scripts->add_script_data( 'admin-tags', 'tagsl10n', array( 'noPerm' => __('You do not have permission to do that.'), - 'broken' => __('An unidentified error has occurred.'), - 'l10n_print_after' => 'try{convertEntities(tagsl10n);}catch(e){};' + 'broken' => __('An unidentified error has occurred.') )); $scripts->add( 'admin-custom-fields', "/wp-admin/js/custom-fields$suffix.js", array('wp-lists'), '20110429' ); @@ -314,7 +301,7 @@ function wp_default_scripts( &$scripts ) { $scripts->add( 'admin-comments', "/wp-admin/js/edit-comments$suffix.js", array('wp-lists', 'jquery-ui-resizable', 'quicktags', 'jquery-query'), '20110602' ); $scripts->add_data( 'admin-comments', 'group', 1 ); - $scripts->localize( 'admin-comments', 'adminCommentsL10n', array( + $scripts->add_script_data( 'admin-comments', 'adminCommentsL10n', array( 'hotkeys_highlight_first' => isset($_GET['hotkeys_highlight_first']), 'hotkeys_highlight_last' => isset($_GET['hotkeys_highlight_last']), 'replyApprove' => __( 'Approve and Reply' ), @@ -329,7 +316,7 @@ function wp_default_scripts( &$scripts ) { $scripts->add( 'post', "/wp-admin/js/post$suffix.js", array('suggest', 'wp-lists', 'postbox'), '20110524' ); $scripts->add_data( 'post', 'group', 1 ); - $scripts->localize( 'post', 'postL10n', array( + $scripts->add_script_data( 'post', 'postL10n', array( 'tagsUsed' => __('Tags used on this post:'), 'add' => esc_attr(__('Add')), 'addTag' => esc_attr(__('Add new Tag')), @@ -352,8 +339,7 @@ function wp_default_scripts( &$scripts ) { 'publicSticky' => __('Public, Sticky'), 'password' => __('Password Protected'), 'privatelyPublished' => __('Privately Published'), - 'published' => __('Published'), - 'l10n_print_after' => 'try{convertEntities(postL10n);}catch(e){};' + 'published' => __('Published') ) ); $scripts->add( 'link', "/wp-admin/js/link$suffix.js", array('wp-lists', 'postbox'), '20110524' ); @@ -361,11 +347,10 @@ function wp_default_scripts( &$scripts ) { $scripts->add( 'comment', "/wp-admin/js/comment$suffix.js", array('jquery'), '20110429' ); $scripts->add_data( 'comment', 'group', 1 ); - $scripts->localize( 'comment', 'commentL10n', array( + $scripts->add_script_data( 'comment', 'commentL10n', array( 'cancel' => __('Cancel'), 'edit' => __('Edit'), - 'submittedOn' => __('Submitted on:'), - 'l10n_print_after' => 'try{convertEntities(commentL10n);}catch(e){};' + 'submittedOn' => __('Submitted on:') ) ); $scripts->add( 'admin-gallery', "/wp-admin/js/gallery$suffix.js", array( 'jquery-ui-sortable' ), '20110414' ); @@ -387,26 +372,23 @@ function wp_default_scripts( &$scripts ) { $scripts->add( 'inline-edit-post', "/wp-admin/js/inline-edit-post$suffix.js", array( 'jquery', 'suggest' ), '20110609' ); $scripts->add_data( 'inline-edit-post', 'group', 1 ); - $scripts->localize( 'inline-edit-post', 'inlineEditL10n', array( + $scripts->add_script_data( 'inline-edit-post', 'inlineEditL10n', array( 'error' => __('Error while saving the changes.'), 'ntdeltitle' => __('Remove From Bulk Edit'), - 'notitle' => __('(no title)'), - 'l10n_print_after' => 'try{convertEntities(inlineEditL10n);}catch(e){};' + 'notitle' => __('(no title)') ) ); $scripts->add( 'inline-edit-tax', "/wp-admin/js/inline-edit-tax$suffix.js", array( 'jquery' ), '20110609' ); $scripts->add_data( 'inline-edit-tax', 'group', 1 ); - $scripts->localize( 'inline-edit-tax', 'inlineEditL10n', array( - 'error' => __('Error while saving the changes.'), - 'l10n_print_after' => 'try{convertEntities(inlineEditL10n);}catch(e){};' + $scripts->add_script_data( 'inline-edit-tax', 'inlineEditL10n', array( + 'error' => __('Error while saving the changes.') ) ); $scripts->add( 'plugin-install', "/wp-admin/js/plugin-install$suffix.js", array( 'jquery', 'thickbox' ), '20110113' ); $scripts->add_data( 'plugin-install', 'group', 1 ); - $scripts->localize( 'plugin-install', 'plugininstallL10n', array( + $scripts->add_script_data( 'plugin-install', 'plugininstallL10n', array( 'plugin_information' => __('Plugin Information:'), - 'ays' => __('Are you sure you want to install this plugin?'), - 'l10n_print_after' => 'try{convertEntities(plugininstallL10n);}catch(e){};' + 'ays' => __('Are you sure you want to install this plugin?') ) ); $scripts->add( 'farbtastic', '/wp-admin/js/farbtastic.js', array('jquery'), '1.2' ); @@ -427,21 +409,19 @@ function wp_default_scripts( &$scripts ) { $scripts->add( 'set-post-thumbnail', "/wp-admin/js/set-post-thumbnail$suffix.js", array( 'jquery' ), '20100518' ); $scripts->add_data( 'set-post-thumbnail', 'group', 1 ); - $scripts->localize( 'set-post-thumbnail', 'setPostThumbnailL10n', array( + $scripts->add_script_data( 'set-post-thumbnail', 'setPostThumbnailL10n', array( 'setThumbnail' => __( 'Use as featured image' ), 'saving' => __( 'Saving...' ), 'error' => __( 'Could not set that as the thumbnail image. Try a different attachment.' ), - 'done' => __( 'Done' ), - 'l10n_print_after' => 'try{convertEntities(setPostThumbnailL10n);}catch(e){};' + 'done' => __( 'Done' ) ) ); // Navigation Menus $scripts->add( 'nav-menu', "/wp-admin/js/nav-menu$suffix.js", array('jquery-ui-sortable'), '20110524' ); - $scripts->localize( 'nav-menu', 'navMenuL10n', array( + $scripts->add_script_data( 'nav-menu', 'navMenuL10n', array( 'noResultsFound' => _x('No results found.', 'search results'), 'warnDeleteMenu' => __( "You are about to permanently delete this menu. \n 'Cancel' to stop, 'OK' to delete." ), - 'saveAlert' => __('The changes you made will be lost if you navigate away from this page.'), - 'l10n_print_after' => 'try{convertEntities(navMenuL10n);}catch(e){};' + 'saveAlert' => __('The changes you made will be lost if you navigate away from this page.') ) ); $scripts->add( 'custom-background', "/wp-admin/js/custom-background$suffix.js", array('farbtastic'), '20110511' ); @@ -474,7 +454,7 @@ function wp_default_styles( &$styles ) { $styles->content_url = defined('WP_CONTENT_URL')? WP_CONTENT_URL : ''; $styles->default_version = get_bloginfo( 'version' ); $styles->text_direction = function_exists( 'is_rtl' ) && is_rtl() ? 'rtl' : 'ltr'; - $styles->default_dirs = array('/wp-admin/', '/wp-includes/'); + $styles->default_dirs = array('/wp-admin/', '/wp-includes/css/'); $suffix = defined('SCRIPT_DEBUG') && SCRIPT_DEBUG ? '.dev' : ''; @@ -558,11 +538,10 @@ function wp_prototype_before_jquery( $js_array ) { */ function wp_just_in_time_script_localization() { - wp_localize_script( 'autosave', 'autosaveL10n', array( + wp_add_script_data( 'autosave', 'autosaveL10n', array( 'autosaveInterval' => AUTOSAVE_INTERVAL, 'savingText' => __('Saving Draft…'), - 'saveAlert' => __('The changes you made will be lost if you navigate away from this page.'), - 'l10n_print_after' => 'try{convertEntities(autosaveL10n);}catch(e){};' + 'saveAlert' => __('The changes you made will be lost if you navigate away from this page.') ) ); } @@ -635,7 +614,6 @@ function print_head_scripts() { $wp_scripts = new WP_Scripts(); script_concat_settings(); - $wp_scripts->do_items( 'l10n' ); $wp_scripts->do_concat = $concatenate_scripts; $wp_scripts->do_head_items(); @@ -647,16 +625,13 @@ function print_head_scripts() { } /** - * Prints the scripts that were queued for the footer on admin pages. + * Prints the scripts that were queued for the footer or too late for the HTML head. * * @since 2.8 */ function print_footer_scripts() { global $wp_scripts, $concatenate_scripts; - if ( ! did_action('wp_print_footer_scripts') ) - do_action('wp_print_footer_scripts'); - if ( !is_a($wp_scripts, 'WP_Scripts') ) return array(); // No need to run if not instantiated. @@ -671,6 +646,9 @@ function print_footer_scripts() { return $wp_scripts->done; } +/** + * @internal use + */ function _print_scripts() { global $wp_scripts, $compress_scripts; @@ -681,8 +659,8 @@ function _print_scripts() { if ( !empty($wp_scripts->concat) ) { if ( !empty($wp_scripts->print_code) ) { - echo "\n"; @@ -718,13 +696,17 @@ function wp_print_head_scripts() { } /** - * Prints the scripts that were queued for the footer on the front end. + * Hooks to print the scripts and styles in the footer. * * @since 2.8 */ function wp_print_footer_scripts() { print_late_styles(); print_footer_scripts(); + + if ( !is_admin() ) + do_action('wp_print_footer_scripts'); + return true; } @@ -740,6 +722,11 @@ function wp_enqueue_scripts() { do_action('wp_enqueue_scripts'); } +/** + * Prints the styles queue in the HTML head on admin pages. + * + * @since 2.8 + */ function print_admin_styles() { global $wp_styles, $concatenate_scripts, $compress_css; @@ -761,6 +748,11 @@ function print_admin_styles() { return $wp_styles->done; } +/** + * Prints the styles that were queued too late for the HTML head. + * + * @since 3.3 + */ function print_late_styles() { global $wp_styles, $concatenate_scripts; @@ -777,6 +769,9 @@ function print_late_styles() { return $wp_styles->done; } +/** + * @internal use + */ function _print_styles() { global $wp_styles, $compress_css; @@ -789,12 +784,23 @@ function _print_styles() { $ver = md5("$wp_styles->concat_version{$dir}"); $href = $wp_styles->base_url . "/wp-admin/load-styles.php?c={$zip}&dir={$dir}&load=" . trim($wp_styles->concat, ', ') . "&ver=$ver"; echo "\n"; + + if ( !empty($wp_styles->print_code) ) { + echo "\n"; + } } if ( !empty($wp_styles->print_html) ) echo $wp_styles->print_html; } +/** + * Determine the concatenation and compression settings for scripts and styles. + * + * @since 2.8 + */ function script_concat_settings() { global $concatenate_scripts, $compress_scripts, $compress_css;