Make WordPress Core

Changeset 27653


Ignore:
Timestamp:
03/22/2014 09:03:18 PM (11 years ago)
Author:
ocean90
Message:

Widget Customizer: Fix 'WidgetCustomizerPreview' is undefined error in IE8/9.

  • Move WidgetCustomizerPreview to wp.customize.WidgetCustomizerPreview
  • Move WidgetCustomizerPreview_exports to export_preview_data()
  • Use _wpWidgetCustomizerPreviewSettings to transfer settings to wp.customize.WidgetCustomizerPreview

see #27485.

Location:
trunk/src
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/wp-admin/js/customize-widgets.js

    r27652 r27653  
    15111511        getPreviewWidgetElement: function () {
    15121512            var control = this,
    1513                 widget_customizer_preview = self.getPreviewWindow().WidgetCustomizerPreview;
     1513                widget_customizer_preview = self.getPreviewWindow().wp.customize.WidgetCustomizerPreview;
    15141514            return widget_customizer_preview.getWidgetElement( control.params.widget_id );
    15151515        },
  • trunk/src/wp-includes/class-wp-customize-widgets.php

    r27652 r27653  
    697697    static function customize_preview_init() {
    698698        add_filter( 'sidebars_widgets', array( __CLASS__, 'preview_sidebars_widgets' ), 1 );
    699         add_action( 'wp_enqueue_scripts', array( __CLASS__, 'customize_preview_enqueue_deps' ) );
    700         add_action( 'wp_footer', array( __CLASS__, 'export_preview_data' ), 9999 );
     699        add_action( 'wp_enqueue_scripts', array( __CLASS__, 'customize_preview_enqueue' ) );
     700        add_action( 'wp_print_styles', array( __CLASS__, 'inject_preview_css' ), 1 );
     701        add_action( 'wp_footer', array( __CLASS__, 'export_preview_data' ), 20 );
    701702    }
    702703
     
    720721     * @action wp_enqueue_scripts
    721722     */
    722     static function customize_preview_enqueue_deps() {
     723    static function customize_preview_enqueue() {
    723724        wp_enqueue_script( 'customize-preview-widgets' );
    724 
    725         add_action( 'wp_print_styles', array( __CLASS__, 'inject_preview_css' ), 1 );
    726 
    727         // Why not wp_localize_script? Because we're not localizing, and it forces values into strings
    728         global $wp_scripts;
    729         $exports = array(
    730             'registered_sidebars' => array_values( $GLOBALS['wp_registered_sidebars'] ),
    731             'registered_widgets' => $GLOBALS['wp_registered_widgets'],
    732             'i18n' => array(
    733                 'widget_tooltip' => ( 'Shift-click to edit this widget.' ),
    734             ),
    735         );
    736         foreach ( $exports['registered_widgets'] as &$registered_widget ) {
    737             unset( $registered_widget['callback'] ); // may not be JSON-serializeable
    738         }
    739         $wp_scripts->add_data(
    740             'customize-preview-widgets',
    741             'data',
    742             sprintf( 'var WidgetCustomizerPreview_exports = %s;', json_encode( $exports ) )
    743         );
    744     }
     725        }
    745726
    746727    /**
     
    768749     */
    769750    static function export_preview_data() {
    770         wp_print_scripts( array( 'customize-preview-widgets' ) );
     751        // Prepare customizer settings to pass to Javascript.
     752        $settings = array(
     753            'renderedSidebars'   => array_fill_keys( array_unique( self::$rendered_sidebars ), true ),
     754            'renderedWidgets'    => array_fill_keys( array_keys( self::$rendered_widgets ), true ),
     755            'registeredSidebars' => array_values( $GLOBALS['wp_registered_sidebars'] ),
     756            'registeredWidgets'  => $GLOBALS['wp_registered_widgets'],
     757            'l10n'               => array(
     758                'widgetTooltip' => ( 'Shift-click to edit this widget.' ),
     759            ),
     760        );
     761        foreach ( $settings['registeredWidgets'] as &$registered_widget ) {
     762            unset( $registered_widget['callback'] ); // may not be JSON-serializeable
     763        }
     764
    771765        ?>
    772         <script>
    773         (function () {
    774             /*global WidgetCustomizerPreview */
    775             WidgetCustomizerPreview.rendered_sidebars = <?php echo json_encode( array_fill_keys( array_unique( self::$rendered_sidebars ), true ) ) ?>;
    776             WidgetCustomizerPreview.rendered_widgets = <?php echo json_encode( array_fill_keys( array_keys( self::$rendered_widgets ), true ) ); ?>;
    777         }());
     766        <script type="text/javascript">
     767            var _wpWidgetCustomizerPreviewSettings = <?php echo json_encode( $settings ); ?>;
    778768        </script>
    779769        <?php
  • trunk/src/wp-includes/js/customize-preview-widgets.js

    r27588 r27653  
    1 /*global jQuery, WidgetCustomizerPreview_exports */
    2 /*exported WidgetCustomizerPreview */
    3 var WidgetCustomizerPreview = (function ($) {
    4     'use strict';
     1(function( $, wp ){
    52
    6     var OldPreview, self = {
    7         rendered_sidebars: {}, // @todo Make rendered a property of the Backbone model
    8         rendered_widgets: {}, // @todo Make rendered a property of the Backbone model
    9         registered_sidebars: [], // @todo Make a Backbone collection
    10         registered_widgets: {}, // @todo Make array, Backbone collection
    11         widget_selectors: [],
     3    if ( ! wp || ! wp.customize ) { return; }
     4
     5    var api = wp.customize,
     6        OldPreview;
     7
     8    /**
     9     * wp.customize.WidgetCustomizerPreview
     10     *
     11     */
     12    api.WidgetCustomizerPreview = {
     13        renderedSidebars: {}, // @todo Make rendered a property of the Backbone model
     14        renderedWidgets: {}, // @todo Make rendered a property of the Backbone model
     15        registeredSidebars: [], // @todo Make a Backbone collection
     16        registeredWidgets: {}, // @todo Make array, Backbone collection
     17        widgetSelectors: [],
    1218        preview: null,
    13         i18n: {},
     19        l10n: {},
    1420
    1521        init: function () {
     22            var self = this;
    1623            this.buildWidgetSelectors();
    1724            this.highlightControls();
    1825
    19             self.preview.bind( 'active', function() {
    20                 self.preview.send( 'rendered-sidebars', self.rendered_sidebars ); // @todo Only send array of IDs
    21                 self.preview.send( 'rendered-widgets', self.rendered_widgets ); // @todo Only send array of IDs
     26            this.preview.bind( 'active', function() {
     27                self.preview.send( 'rendered-sidebars', self.renderedSidebars ); // @todo Only send array of IDs
     28                self.preview.send( 'rendered-widgets', self.renderedWidgets ); // @todo Only send array of IDs
    2229            } );
    2330        },
     
    2734         */
    2835        buildWidgetSelectors: function () {
    29             $.each( self.registered_sidebars, function ( i, sidebar ) {
    30                 var widget_tpl = [
     36            var self = this;
     37
     38            $.each( this.registeredSidebars, function ( i, sidebar ) {
     39                var widgetTpl = [
    3140                        sidebar.before_widget.replace('%1$s', '').replace('%2$s', ''),
    3241                        sidebar.before_title,
     
    3443                        sidebar.after_widget
    3544                    ].join(''),
    36                     empty_widget,
    37                     widget_selector,
    38                     widget_classes;
     45                    emptyWidget,
     46                    widgetSelector,
     47                    widgetClasses;
    3948
    40                 empty_widget = $(widget_tpl);
    41                 widget_selector = empty_widget.prop('tagName');
    42                 widget_classes = empty_widget.prop('className').replace(/^\s+|\s+$/g, '');
     49                emptyWidget = $(widgetTpl);
     50                widgetSelector = emptyWidget.prop('tagName');
     51                widgetClasses = emptyWidget.prop('className').replace(/^\s+|\s+$/g, '');
    4352
    44                 if ( widget_classes ) {
    45                     widget_selector += '.' + widget_classes.split(/\s+/).join('.');
     53                if ( widgetClasses ) {
     54                    widgetSelector += '.' + widgetClasses.split(/\s+/).join('.');
    4655                }
    47                 self.widget_selectors.push(widget_selector);
     56                self.widgetSelectors.push(widgetSelector);
    4857            });
    4958        },
     
    6675         */
    6776        highlightControls: function() {
     77            var selector = this.widgetSelectors.join(',');
    6878
    69             var selector = this.widget_selectors.join(',');
    70 
    71             $(selector).attr( 'title', self.i18n.widget_tooltip );
     79            $(selector).attr( 'title', this.l10n.widgetTooltip );
    7280
    7381            $(document).on( 'mouseenter', selector, function () {
     
    9098            });
    9199        }
    92 
    93100    };
    94 
    95     $.extend(self, WidgetCustomizerPreview_exports);
    96101
    97102    /**
    98103     * Capture the instance of the Preview since it is private
    99104     */
    100     OldPreview = wp.customize.Preview;
    101     wp.customize.Preview = OldPreview.extend( {
     105    OldPreview = api.Preview;
     106    api.Preview = OldPreview.extend( {
    102107        initialize: function( params, options ) {
    103             self.preview = this;
     108            api.WidgetCustomizerPreview.preview = this;
    104109            OldPreview.prototype.initialize.call( this, params, options );
    105110        }
    106111    } );
    107112
    108     // @todo on customize ready?
    109113    $(function () {
    110         self.init();
     114        var settings = window._wpWidgetCustomizerPreviewSettings;
     115        if ( ! settings ) {
     116            return;
     117        }
     118
     119        $.extend( api.WidgetCustomizerPreview, settings );
     120
     121        api.WidgetCustomizerPreview.init();
    111122    });
    112123
    113     return self;
    114 }( jQuery ));
     124})( jQuery, window.wp );
Note: See TracChangeset for help on using the changeset viewer.