Make WordPress Core

Changeset 19217


Ignore:
Timestamp:
11/08/2011 06:05:59 PM (13 years ago)
Author:
azaozz
Message:

Ressurect WP_Scripts::localize() and fix public function names, fixes #11520

Location:
trunk
Files:
4 edited

Legend:

Unmodified
Added
Removed
  • trunk/wp-admin/js/wp-fullscreen.dev.js

    r18828 r19217  
    139139
    140140        // Settings can be added or changed by defining "wp_fullscreen_settings" JS object.
    141         // This can be done by defining it as PHP array and passing it to JS with:
    142         // add_script_data( 'wp-fullscreen', 'wp_fullscreen_settings', $settings_array )
     141        // This can be done by defining it as PHP associative array, json encoding it and passing it to JS with:
     142        // wp_add_script_before( 'wp-fullscreen', 'wp_fullscreen_settings = ' . $json_encoded_array . ';' );
    143143        if ( typeof(wp_fullscreen_settings) == 'object' )
    144144            $.extend( s, wp_fullscreen_settings );
  • trunk/wp-includes/class.wp-scripts.php

    r18813 r19217  
    4848    }
    4949
    50     // Deprecated since 3.3, see print_script_data()
     50    // Deprecated since 3.3, see print_extra_script()
    5151    function print_scripts_l10n( $handle, $echo = true ) {
    52         _deprecated_function( __FUNCTION__, '3.3', 'print_script_data()' );
    53         return $this->print_script_data( $handle, $echo, true );
    54     }
    55 
    56     function print_script_data( $handle, $echo = true, $_l10n = false ) {
    57         if ( $_l10n ) {
    58             list( $name, $data ) = $this->get_data( $handle, 'l10n' );
    59             $after = '';
    60 
    61             if ( is_array($data) && isset($data['l10n_print_after']) ) {
    62                 $after = $data['l10n_print_after'];
    63                 unset($data['l10n_print_after']);
    64             }
    65 
    66             $data = $this->decode_html_entities($data);
    67             $output = "var $name = " . json_encode( $data ) . "; $after\n";
    68         } else {
    69             $data = $this->get_data( $handle, 'data' );
    70 
    71             if ( empty( $data ) )
    72                 return false;
    73 
    74             foreach ( (array) $data as $name => $value ) {
    75                 $value = $this->decode_html_entities($value);
    76                 $output = "var $name = " . json_encode( $value ) . ";\n";
    77             }
    78         }
     52        _deprecated_function( __FUNCTION__, '3.3', 'print_extra_script()' );
     53        return $this->print_extra_script( $handle, $echo );
     54    }
     55
     56    function print_extra_script( $handle, $echo = true ) {
     57        if ( !$output = $this->get_data( $handle, 'data' ) )
     58            return;
    7959
    8060        if ( !$echo )
    8161            return $output;
    8262
    83         echo "<script type='text/javascript'>\n";
    84         echo "/* <![CDATA[ */\n"; // CDATA is not needed for HTML 5
    85         echo $output;
     63        echo "<script type='text/javascript'>\n"; // CDATA and type='text/javascript' is not needed for HTML 5
     64        echo "/* <![CDATA[ */\n";
     65        echo "$output\n";
    8666        echo "/* ]]> */\n";
    8767        echo "</script>\n";
     
    11595            $srce = apply_filters( 'script_loader_src', $src, $handle );
    11696            if ( $this->in_default_dir($srce) ) {
    117                 $this->print_code .= $this->print_script_data( $handle, false );
     97                $this->print_code .= $this->print_extra_script( $handle, false );
    11898                $this->concat .= "$handle,";
    11999                $this->concat_version .= "$handle$ver";
     
    125105        }
    126106
    127         $this->print_script_data( $handle );
     107        $this->print_extra_script( $handle );
    128108        if ( !preg_match('|^https?://|', $src) && ! ( $this->content_url && 0 === strpos($src, $this->content_url) ) ) {
    129109            $src = $this->base_url . $src;
     
    132112        if ( !empty($ver) )
    133113            $src = add_query_arg('ver', $ver, $src);
    134         $src = esc_url(apply_filters( 'script_loader_src', $src, $handle ));
     114
     115        $src = esc_url( apply_filters( 'script_loader_src', $src, $handle ) );
    135116
    136117        if ( $this->do_concat )
     
    143124
    144125    /**
    145      * Localizes a script (Deprecated)
    146      *
    147      * Localizes only if script has already been added
    148      *
    149      * @deprecated WP 3.3
     126     * Localizes a script
     127     *
     128     * Localizes only if the script has already been added
    150129     */
    151130    function localize( $handle, $object_name, $l10n ) {
    152         _deprecated_function( __FUNCTION__, '3.3', 'add_script_data()' );
    153         return $this->add_script_data( $handle, $object_name, $l10n );
     131        if ( is_array($l10n) && isset($l10n['l10n_print_after']) ) { // back compat, preserve the code in 'l10n_print_after' if present
     132            $after = $l10n['l10n_print_after'];
     133            unset($l10n['l10n_print_after']);
     134        }
     135
     136        foreach ( (array) $l10n as $key => $value ) {
     137            if ( !is_scalar($value) )
     138                continue;
     139
     140            $l10n[$key] = html_entity_decode( (string) $value, ENT_QUOTES, 'UTF-8');
     141        }
     142
     143        $script = "var $object_name = " . json_encode($l10n) . ';';
     144
     145        if ( !empty($after) )
     146            $script .= "\n$after";
     147
     148        return $this->add_script_data( $handle, $script );
    154149    }
    155150
     
    160155     *
    161156     * @param string $handle Script name
    162      * @param string $name Name of JS object to hold the data
    163      * @param array $args Associative array of JS object attributes
     157     * @param string $script Extra JS to add before the script
    164158     * @return bool Successful or not
    165159     */
    166     function add_script_data( $handle, $name, $args ) {
    167         if ( !$name || !is_array( $args ) )
     160    function add_script_data( $handle, $script ) {
     161        if ( !is_string( $script ) )
    168162            return false;
    169163
    170164        $data = $this->get_data( $handle, 'data' );
    171165
    172         if ( !empty( $data[$name] ) )
    173             $args = array_merge( $data[$name], $args );
    174 
    175         return $this->add_data( $handle, 'data', array( $name => $args ) );
     166        if ( !empty( $data ) )
     167            $script = "$data;\n$script";
     168
     169        return $this->add_data( $handle, 'data', $script );
    176170    }
    177171
     
    218212        }
    219213        return false;
    220     }
    221 
    222     function decode_html_entities($data) {
    223         foreach ( (array) $data as $key => $value ) {
    224             if ( is_array($value) )
    225                 $data[$key] = $this->decode_html_entities($value);
    226             elseif ( is_string($value) )
    227                 $data[$key] = html_entity_decode($value, ENT_QUOTES, 'UTF-8');
    228         }
    229         return $data;
    230214    }
    231215
  • trunk/wp-includes/functions.wp-scripts.php

    r19054 r19217  
    6565
    6666/**
    67  * Adds extra Javascript data.
    68  *
     67 * Wrapper for $wp_scripts->localize().
     68 *
     69 * Used to localizes a script.
    6970 * Works only if the script has already been added.
    70  * Accepts an associative array $data and creates JS object:
    71  * "$name" = {
     71 * Accepts an associative array $l10n and creates JS object:
     72 * "$object_name" = {
    7273 *   key: value,
    7374 *   key: value,
    7475 *   ...
    7576 * }
    76  * The $name is passed directly so it should be qualified JS variable /[a-zA-Z0-9_]+/
    77  * The $data array is JSON encoded. If called more than once for the same $handle with the same $name,
    78  * the object would contain all values. In that case if two or more keys are the same,
    79  * the last value overwrites the previous. The function is named "localize_script" because of historical reasons.
    80  *
    81  * @since r16
     77 * See http://core.trac.wordpress.org/ticket/11520 for more information.
     78 *
     79 * @since r16
     80 *
     81 * @param string $handle The script handle that was registered or used in script-loader
     82 * @param string $object_name Name for the created JS object. This is passed directly so it should be qualified JS variable /[a-zA-Z0-9_]+/
     83 * @param array $l10n Associative PHP array containing the translated strings. HTML entities will be converted and the array will be JSON encoded.
     84 * @return bool Whether the localization was added successfully.
     85 */
     86function wp_localize_script( $handle, $object_name, $l10n ) {
     87    global $wp_scripts;
     88    if ( ! is_a( $wp_scripts, 'WP_Scripts' ) ) {
     89        if ( ! did_action( 'init' ) )
     90            _doing_it_wrong( __FUNCTION__, sprintf( __( 'Scripts and styles should not be registered or enqueued until the %1$s, %2$s, or %3$s hooks.' ),
     91                '<code>wp_enqueue_scripts</code>', '<code>admin_enqueue_scripts</code>', '<code>init</code>' ), '3.3' );
     92
     93        return false;
     94    }
     95
     96    return $wp_scripts->localize( $handle, $object_name, $l10n );
     97}
     98
     99/**
     100 * Adds extra Javascript.
     101 *
     102 * Works only if the script referenced by $handle has already been added.
     103 * Accepts string $extra that will be printed as script before the main script tag.
     104 *
     105 * @since 3.3
    82106 * @see WP_Scripts::add_script_data()
    83107 */
    84 function wp_localize_script( $handle, $name, $data ) {
     108function wp_add_script_before( $handle, $script ) {
    85109    global $wp_scripts;
    86110    if ( ! is_a( $wp_scripts, 'WP_Scripts' ) ) {
     
    91115    }
    92116
    93     return $wp_scripts->add_script_data( $handle, $name, $data );
     117    return $wp_scripts->add_script_data( $handle, $script );
    94118}
    95119
  • trunk/wp-includes/script-loader.php

    r19215 r19217  
    6363
    6464    $scripts->add( 'common', "/wp-admin/js/common$suffix.js", array('jquery', 'hoverIntent', 'utils'), '20111106a', 1 );
    65     $scripts->add_script_data( 'common', 'commonL10n', array(
     65    $scripts->localize( 'common', 'commonL10n', array(
    6666        'warnDelete' => __("You are about to permanently delete the selected items.\n  'Cancel' to stop, 'OK' to delete.")
    6767    ) );
     
    7070
    7171    $scripts->add( 'quicktags', "/wp-includes/js/quicktags$suffix.js", false, '20111108', 1 );
    72     $scripts->add_script_data( 'quicktags', 'quicktagsL10n', array(
     72    $scripts->localize( 'quicktags', 'quicktagsL10n', array(
    7373        'wordLookup' => __('Enter a word to look up:'),
    7474        'dictionaryLookup' => esc_attr(__('Dictionary lookup')),
     
    9292
    9393    $scripts->add( 'wp-ajax-response', "/wp-includes/js/wp-ajax-response$suffix.js", array('jquery'), '20091119', 1 );
    94     $scripts->add_script_data( 'wp-ajax-response', 'wpAjax', array(
     94    $scripts->localize( 'wp-ajax-response', 'wpAjax', array(
    9595        'noPerm' => __('You do not have permission to do that.'),
    9696        'broken' => __('An unidentified error has occurred.')
     
    9898
    9999    $scripts->add( 'wp-pointer', "/wp-includes/js/wp-pointer$suffix.js", array( 'jquery-ui-widget', 'jquery-ui-position' ), '20111017', 1 );
    100     $scripts->add_script_data( 'wp-pointer', 'wpPointerL10n', array(
     100    $scripts->localize( 'wp-pointer', 'wpPointerL10n', array(
    101101        'close' => __('Close'),
    102102    ) );
     
    167167
    168168    $scripts->add( 'thickbox', "/wp-includes/js/thickbox/thickbox.js", array('jquery'), '3.1-20110930', 1 );
    169     $scripts->add_script_data( 'thickbox', 'thickboxL10n', array(
     169    $scripts->localize( 'thickbox', 'thickboxL10n', array(
    170170            'next' => __('Next &gt;'),
    171171            'prev' => __('&lt; Prev'),
     
    222222
    223223    $scripts->add( 'plupload-handlers', "/wp-includes/js/plupload/handlers$suffix.js", array('plupload-all', 'jquery'), '20111102');
    224     $scripts->add_script_data( 'plupload-handlers', 'pluploadL10n', $uploader_l10n );
     224    $scripts->localize( 'plupload-handlers', 'pluploadL10n', $uploader_l10n );
    225225
    226226    // keep 'swfupload' for back-compat.
     
    238238
    239239    $scripts->add( 'swfupload-handlers', "/wp-includes/js/swfupload/handlers$suffix.js", array('swfupload-all', 'jquery'), '2201-20110524');
    240     $scripts->add_script_data( 'swfupload-handlers', 'swfuploadL10n', $uploader_l10n );
     240    $scripts->localize( 'swfupload-handlers', 'swfuploadL10n', $uploader_l10n );
    241241
    242242    $scripts->add( 'comment-reply', "/wp-includes/js/comment-reply$suffix.js", false, '20090102');
     
    247247
    248248    $scripts->add( 'password-strength-meter', "/wp-admin/js/password-strength-meter$suffix.js", array('jquery'), '20101027', 1 );
    249     $scripts->add_script_data( 'password-strength-meter', 'pwsL10n', array(
     249    $scripts->localize( 'password-strength-meter', 'pwsL10n', array(
    250250        'empty' => __('Strength indicator'),
    251251        'short' => __('Very weak'),
     
    262262
    263263    $scripts->add( 'wplink', "/wp-includes/js/wplink$suffix.js", array( 'jquery', 'wpdialogs' ), '20110929', 1 );
    264     $scripts->add_script_data( 'wplink', 'wpLinkL10n', array(
     264    $scripts->localize( 'wplink', 'wpLinkL10n', array(
    265265        'title' => __('Insert/edit link'),
    266266        'update' => __('Update'),
     
    281281        $scripts->add( 'ajaxcat', "/wp-admin/js/cat$suffix.js", array( 'wp-lists' ), '20090102' );
    282282        $scripts->add_data( 'ajaxcat', 'group', 1 );
    283         $scripts->add_script_data( 'ajaxcat', 'catL10n', array(
     283        $scripts->localize( 'ajaxcat', 'catL10n', array(
    284284            'add' => esc_attr(__('Add')),
    285285            'how' => __('Separate multiple categories with commas.')
     
    289289
    290290        $scripts->add( 'admin-tags', "/wp-admin/js/tags$suffix.js", array('jquery', 'wp-ajax-response'), '20110429', 1 );
    291         $scripts->add_script_data( 'admin-tags', 'tagsl10n', array(
     291        $scripts->localize( 'admin-tags', 'tagsl10n', array(
    292292            'noPerm' => __('You do not have permission to do that.'),
    293293            'broken' => __('An unidentified error has occurred.')
     
    297297
    298298        $scripts->add( 'admin-comments', "/wp-admin/js/edit-comments$suffix.js", array('wp-lists', 'quicktags', 'jquery-query'), '20111026', 1 );
    299         $scripts->add_script_data( 'admin-comments', 'adminCommentsL10n', array(
     299        $scripts->localize( 'admin-comments', 'adminCommentsL10n', array(
    300300            'hotkeys_highlight_first' => isset($_GET['hotkeys_highlight_first']),
    301301            'hotkeys_highlight_last' => isset($_GET['hotkeys_highlight_last']),
     
    309309
    310310        $scripts->add( 'post', "/wp-admin/js/post$suffix.js", array('suggest', 'wp-lists', 'postbox'), '20110524', 1 );
    311         $scripts->add_script_data( 'post', 'postL10n', array(
     311        $scripts->localize( 'post', 'postL10n', array(
    312312            'ok' => __('OK'),
    313313            'cancel' => __('Cancel'),
     
    334334        $scripts->add( 'comment', "/wp-admin/js/comment$suffix.js", array('jquery'), '20110429' );
    335335        $scripts->add_data( 'comment', 'group', 1 );
    336         $scripts->add_script_data( 'comment', 'commentL10n', array(
     336        $scripts->localize( 'comment', 'commentL10n', array(
    337337            'submittedOn' => __('Submitted on:')
    338338        ) );
     
    347347
    348348        $scripts->add( 'inline-edit-post', "/wp-admin/js/inline-edit-post$suffix.js", array( 'jquery', 'suggest' ), '20111107', 1 );
    349         $scripts->add_script_data( 'inline-edit-post', 'inlineEditL10n', array(
     349        $scripts->localize( 'inline-edit-post', 'inlineEditL10n', array(
    350350            'error' => __('Error while saving the changes.'),
    351351            'ntdeltitle' => __('Remove From Bulk Edit'),
     
    354354
    355355        $scripts->add( 'inline-edit-tax', "/wp-admin/js/inline-edit-tax$suffix.js", array( 'jquery' ), '20110609', 1 );
    356         $scripts->add_script_data( 'inline-edit-tax', 'inlineEditL10n', array(
     356        $scripts->localize( 'inline-edit-tax', 'inlineEditL10n', array(
    357357            'error' => __('Error while saving the changes.')
    358358        ) );
    359359
    360360        $scripts->add( 'plugin-install', "/wp-admin/js/plugin-install$suffix.js", array( 'jquery', 'thickbox' ), '20110113', 1 );
    361         $scripts->add_script_data( 'plugin-install', 'plugininstallL10n', array(
     361        $scripts->localize( 'plugin-install', 'plugininstallL10n', array(
    362362            'plugin_information' => __('Plugin Information:'),
    363363            'ays' => __('Are you sure you want to install this plugin?')
     
    375375
    376376        $scripts->add( 'image-edit', "/wp-admin/js/image-edit$suffix.js", array('jquery', 'json2', 'imgareaselect'), '20110927', 1 );
    377         $scripts->add_script_data( 'image-edit', 'imageEditL10n', array(
     377        $scripts->localize( 'image-edit', 'imageEditL10n', array(
    378378            'error' => __( 'Could not load the preview image. Please reload the page and try again.' )
    379379        ));
    380380
    381381        $scripts->add( 'set-post-thumbnail', "/wp-admin/js/set-post-thumbnail$suffix.js", array( 'jquery' ), '20100518', 1 );
    382         $scripts->add_script_data( 'set-post-thumbnail', 'setPostThumbnailL10n', array(
     382        $scripts->localize( 'set-post-thumbnail', 'setPostThumbnailL10n', array(
    383383            'setThumbnail' => __( 'Use as featured image' ),
    384384            'saving' => __( 'Saving...' ),
     
    389389        // Navigation Menus
    390390        $scripts->add( 'nav-menu', "/wp-admin/js/nav-menu$suffix.js", array('jquery-ui-sortable'), '20110524' );
    391         $scripts->add_script_data( 'nav-menu', 'navMenuL10n', array(
     391        $scripts->localize( 'nav-menu', 'navMenuL10n', array(
    392392            'noResultsFound' => _x('No results found.', 'search results'),
    393393            'warnDeleteMenu' => __( "You are about to permanently delete this menu. \n 'Cancel' to stop, 'OK' to delete." ),
Note: See TracChangeset for help on using the changeset viewer.