diff --git a/wp-admin/js/customize-widgets.js b/wp-admin/js/customize-widgets.js
index e8f1e8c532..1d7579f521 100644
--- a/wp-admin/js/customize-widgets.js
+++ b/wp-admin/js/customize-widgets.js
@@ -529,7 +529,7 @@
this.container.find( '.widget-top' ).on( 'click', function( e ) {
e.preventDefault();
var sidebarWidgetsControl = self.getSidebarWidgetsControl();
- if ( sidebarWidgetsControl.is_reordering ) {
+ if ( sidebarWidgetsControl.isReordering ) {
return;
}
self.toggleForm();
@@ -606,14 +606,14 @@
$sidebarItems.each( function() {
var li = $( this ),
sidebarId,
- sidebar_model;
+ sidebar;
sidebarId = li.data( 'id' );
- sidebar_model = api.Widgets.registeredSidebars.get( sidebarId );
+ sidebar = api.Widgets.registeredSidebars.get( sidebarId );
- li.toggle( sidebar_model.get( 'is_rendered' ) );
+ li.toggle( sidebar.get( 'is_rendered' ) );
- if ( li.hasClass( 'selected' ) && ! sidebar_model.get( 'is_rendered' ) ) {
+ if ( li.hasClass( 'selected' ) && ! sidebar.get( 'is_rendered' ) ) {
selectSidebarItem( selfSidebarItem );
}
} );
@@ -725,7 +725,7 @@
$saveBtn.removeClass( 'button-primary' ).addClass( 'button-secondary' );
$saveBtn.on( 'click', function( e ) {
e.preventDefault();
- self.updateWidget( { disable_form: true } );
+ self.updateWidget( { disable_form: true } ); // @todo disable_form is unused?
} );
updateWidgetDebounced = _.debounce( function() {
@@ -736,7 +736,7 @@
this.container.find( '.widget-content' ).on( 'keydown', 'input', function( e ) {
if ( 13 === e.which ) { // Enter
e.preventDefault();
- self.updateWidget( { ignore_active_element: true } );
+ self.updateWidget( { ignoreActiveElement: true } );
}
} );
@@ -763,9 +763,10 @@
} );
// Update widget control to indicate whether it is currently rendered
- api.Widgets.Previewer.bind( 'rendered-widgets', function( rendered_widgets ) {
- var is_rendered = !! rendered_widgets[self.params.widget_id];
- self.container.toggleClass( 'widget-rendered', is_rendered );
+ api.Widgets.Previewer.bind( 'rendered-widgets', function( renderedWidgets ) {
+ var isRendered = !! renderedWidgets[self.params.widget_id];
+
+ self.container.toggleClass( 'widget-rendered', isRendered );
} );
formSyncHandler = api.Widgets.formSyncHandlers[ this.params.widget_id_base ];
@@ -800,20 +801,22 @@
}
self.container.slideUp( function() {
- var sidebars_widgets_control = api.Widgets.getSidebarWidgetControlContainingWidget( self.params.widget_id ),
- sidebar_widget_ids,
- i;
+ var sidebarsWidgetsControl = api.Widgets.getSidebarWidgetControlContainingWidget( self.params.widget_id ),
+ sidebarWidgetIds, i;
- if ( ! sidebars_widgets_control ) {
+ if ( ! sidebarsWidgetsControl ) {
return;
}
- sidebar_widget_ids = sidebars_widgets_control.setting().slice();
- i = _.indexOf( sidebar_widget_ids, self.params.widget_id );
+
+ sidebarWidgetIds = sidebarsWidgetsControl.setting().slice();
+ i = _.indexOf( sidebarWidgetIds, self.params.widget_id );
if ( -1 === i ) {
return;
}
- sidebar_widget_ids.splice( i, 1 );
- sidebars_widgets_control.setting( sidebar_widget_ids );
+
+ sidebarWidgetIds.splice( i, 1 );
+ sidebarsWidgetsControl.setting( sidebarWidgetIds );
+
$adjacentFocusTarget.focus(); // keyboard accessibility
} );
} );
@@ -913,7 +916,7 @@
* @param {object} [args]
* @param {Object|null} [args.instance=null] When the model changes, the instance is sent here; otherwise, the inputs from the form are used
* @param {Function|null} [args.complete=null] Function which is called when the request finishes. Context is bound to the control. First argument is any error. Following arguments are for success.
- * @param {Boolean} [args.ignore_active_element=false] Whether or not updating a field will be deferred if focus is still on the element.
+ * @param {Boolean} [args.ignoreActiveElement=false] Whether or not updating a field will be deferred if focus is still on the element.
*/
updateWidget: function( args ) {
var self = this, instanceOverride, completeCallback, $widgetRoot, $widgetContent,
@@ -922,7 +925,7 @@
args = $.extend( {
instance: null,
complete: null,
- ignore_active_element: false
+ ignoreActiveElement: false
}, args );
instanceOverride = args.instance;
@@ -1016,7 +1019,7 @@
sanitizedState = $sanitizedInput.prop( property );
$input.data( 'sanitized', sanitizedState );
- canUpdateState = ( submittedState !== sanitizedState && ( args.ignore_active_element || ! $input.is( document.activeElement ) ) );
+ canUpdateState = ( submittedState !== sanitizedState && ( args.ignoreActiveElement || ! $input.is( document.activeElement ) ) );
if ( canUpdateState ) {
$input.prop( property, sanitizedState );
}
@@ -1055,7 +1058,7 @@
}
if ( completeCallback ) {
- completeCallback.call( self, null, { no_change: ! isChanged, ajax_finished: true } );
+ completeCallback.call( self, null, { noChange: ! isChanged, ajaxFinished: true } );
}
} else {
// General error message
@@ -1301,124 +1304,121 @@
* Set up the control
*/
ready: function() {
- var control = this;
- control.control_section = control.container.closest( '.control-section' );
- control.section_content = control.container.closest( '.accordion-section-content' );
- control._setupModel();
- control._setupSortable();
- control._setupAddition();
- control._applyCardinalOrderClassNames();
+ this.$controlSection = this.container.closest( '.control-section' );
+ this.$sectionContent = this.container.closest( '.accordion-section-content' );
+
+ this._setupModel();
+ this._setupSortable();
+ this._setupAddition();
+ this._applyCardinalOrderClassNames();
},
/**
* Update ordering of widget control forms when the setting is updated
*/
_setupModel: function() {
- var control = this,
- registered_sidebar = api.Widgets.registeredSidebars.get( control.params.sidebar_id );
+ var self = this,
+ registeredSidebar = api.Widgets.registeredSidebars.get( this.params.sidebar_id );
- control.setting.bind( function( new_widget_ids, old_widget_ids ) {
- var widget_form_controls,
- sidebar_widgets_add_control,
- final_control_containers,
- removed_widget_ids = _( old_widget_ids ).difference( new_widget_ids );
+ this.setting.bind( function( newWidgetIds, oldWidgetIds ) {
+ var widgetFormControls, $sidebarWidgetsAddControl, finalControlContainers, removedWidgetIds;
- // Filter out any persistent widget_ids for widgets which have been deactivated
- new_widget_ids = _( new_widget_ids ).filter( function( new_widget_id ) {
- var parsed_widget_id = parse_widget_id( new_widget_id );
- return !! api.Widgets.availableWidgets.findWhere( { id_base: parsed_widget_id.id_base } );
+ removedWidgetIds = _( oldWidgetIds ).difference( newWidgetIds );
+
+ // Filter out any persistent widget IDs for widgets which have been deactivated
+ newWidgetIds = _( newWidgetIds ).filter( function( newWidgetId ) {
+ var parsedWidgetId = parseWidgetId( newWidgetId );
+
+ return !! api.Widgets.availableWidgets.findWhere( { id_base: parsedWidgetId.id_base } );
} );
- widget_form_controls = _( new_widget_ids ).map( function( widget_id ) {
- var widget_form_control = api.Widgets.getWidgetFormControlForWidget( widget_id );
- if ( ! widget_form_control ) {
- widget_form_control = control.addWidget( widget_id );
+ widgetFormControls = _( newWidgetIds ).map( function( widgetId ) {
+ var widgetFormControl = api.Widgets.getWidgetFormControlForWidget( widgetId );
+
+ if ( ! widgetFormControl ) {
+ widgetFormControl = self.addWidget( widgetId );
}
- return widget_form_control;
+
+ return widgetFormControl;
} );
// Sort widget controls to their new positions
- widget_form_controls.sort( function( a, b ) {
- var a_index = _.indexOf( new_widget_ids, a.params.widget_id ),
- b_index = _.indexOf( new_widget_ids, b.params.widget_id );
- if ( a_index === b_index ) {
+ widgetFormControls.sort( function( a, b ) {
+ var aIndex = _.indexOf( newWidgetIds, a.params.widget_id ),
+ bIndex = _.indexOf( newWidgetIds, b.params.widget_id );
+
+ if ( aIndex === bIndex ) {
return 0;
}
- return a_index < b_index ? -1 : 1;
- } );
- sidebar_widgets_add_control = control.section_content.find( '.customize-control-sidebar_widgets' );
+ return aIndex < bIndex ? -1 : 1;
+ } );
// Append the controls to put them in the right order
- final_control_containers = _( widget_form_controls ).map( function( widget_form_controls ) {
- return widget_form_controls.container[0];
+ finalControlContainers = _( widgetFormControls ).map( function( widgetFormControls ) {
+ return widgetFormControls.container[0];
} );
+ $sidebarWidgetsAddControl = self.$sectionContent.find( '.customize-control-sidebar_widgets' );
+ $sidebarWidgetsAddControl.before( finalControlContainers );
+
// Re-sort widget form controls (including widgets form other sidebars newly moved here)
- sidebar_widgets_add_control.before( final_control_containers );
- control._applyCardinalOrderClassNames();
+ self._applyCardinalOrderClassNames();
// If the widget was dragged into the sidebar, make sure the sidebar_id param is updated
- _( widget_form_controls ).each( function( widget_form_control ) {
- widget_form_control.params.sidebar_id = control.params.sidebar_id;
+ _( widgetFormControls ).each( function( widgetFormControl ) {
+ widgetFormControl.params.sidebar_id = self.params.sidebar_id;
} );
// Cleanup after widget removal
- _( removed_widget_ids ).each( function( removed_widget_id ) {
+ _( removedWidgetIds ).each( function( removedWidgetId ) {
// Using setTimeout so that when moving a widget to another sidebar, the other sidebars_widgets settings get a chance to update
setTimeout( function() {
- var is_present_in_another_sidebar = false,
- removed_control,
- was_dragged_to_another_sidebar,
- inactive_widgets,
- removed_id_base,
- widget;
+ var removedControl, wasDraggedToAnotherSidebar, inactiveWidgets, removedIdBase,
+ widget, isPresentInAnotherSidebar = false;
// Check if the widget is in another sidebar
- api.each( function( other_setting ) {
- if ( other_setting.id === control.setting.id || 0 !== other_setting.id.indexOf( 'sidebars_widgets[' ) || other_setting.id === 'sidebars_widgets[wp_inactive_widgets]' ) {
+ api.each( function( otherSetting ) {
+ if ( otherSetting.id === self.setting.id || 0 !== otherSetting.id.indexOf( 'sidebars_widgets[' ) || otherSetting.id === 'sidebars_widgets[wp_inactiveWidgets]' ) {
return;
}
- var other_sidebar_widgets = other_setting(), i;
- i = _.indexOf( other_sidebar_widgets, removed_widget_id );
+ var otherSidebarWidgets = otherSetting(), i;
+
+ i = _.indexOf( otherSidebarWidgets, removedWidgetId );
if ( -1 !== i ) {
- is_present_in_another_sidebar = true;
+ isPresentInAnotherSidebar = true;
}
} );
// If the widget is present in another sidebar, abort!
- if ( is_present_in_another_sidebar ) {
+ if ( isPresentInAnotherSidebar ) {
return;
}
- removed_control = api.Widgets.getWidgetFormControlForWidget( removed_widget_id );
+ removedControl = api.Widgets.getWidgetFormControlForWidget( removedWidgetId );
// Detect if widget control was dragged to another sidebar
- was_dragged_to_another_sidebar = (
- removed_control &&
- $.contains( document, removed_control.container[0] ) &&
- ! $.contains( control.section_content[0], removed_control.container[0] )
- );
+ wasDraggedToAnotherSidebar = removedControl && $.contains( document, removedControl.container[0] ) && ! $.contains( self.$sectionContent[0], removedControl.container[0] );
// Delete any widget form controls for removed widgets
- if ( removed_control && ! was_dragged_to_another_sidebar ) {
- api.control.remove( removed_control.id );
- removed_control.container.remove();
+ if ( removedControl && ! wasDraggedToAnotherSidebar ) {
+ api.control.remove( removedControl.id );
+ removedControl.container.remove();
}
// Move widget to inactive widgets sidebar (move it to trash) if has been previously saved
// This prevents the inactive widgets sidebar from overflowing with throwaway widgets
- if ( api.Widgets.savedWidgetIds[removed_widget_id] ) {
- inactive_widgets = api.value( 'sidebars_widgets[wp_inactive_widgets]' )().slice();
- inactive_widgets.push( removed_widget_id );
- api.value( 'sidebars_widgets[wp_inactive_widgets]' )( _( inactive_widgets ).unique() );
+ if ( api.Widgets.savedWidgetIds[removedWidgetId] ) {
+ inactiveWidgets = api.value( 'sidebars_widgets[wp_inactiveWidgets]' )().slice();
+ inactiveWidgets.push( removedWidgetId );
+ api.value( 'sidebars_widgets[wp_inactiveWidgets]' )( _( inactiveWidgets ).unique() );
}
// Make old single widget available for adding again
- removed_id_base = parse_widget_id( removed_widget_id ).id_base;
- widget = api.Widgets.availableWidgets.findWhere( { id_base: removed_id_base } );
+ removedIdBase = parseWidgetId( removedWidgetId ).id_base;
+ widget = api.Widgets.availableWidgets.findWhere( { id_base: removedIdBase } );
if ( widget && ! widget.get( 'is_multi' ) ) {
widget.set( 'is_disabled', false );
}
@@ -1428,26 +1428,30 @@
} );
// Update the model with whether or not the sidebar is rendered
- api.Widgets.Previewer.bind( 'rendered-sidebars', function( rendered_sidebars ) {
- var is_rendered = !! rendered_sidebars[control.params.sidebar_id];
- registered_sidebar.set( 'is_rendered', is_rendered );
+ api.Widgets.Previewer.bind( 'rendered-sidebars', function( renderedSidebars ) {
+ var isRendered = !! renderedSidebars[self.params.sidebar_id];
+
+ registeredSidebar.set( 'is_rendered', isRendered );
} );
// Show the sidebar section when it becomes visible
- registered_sidebar.on( 'change:is_rendered', function( ) {
- var section_selector = '#accordion-section-sidebar-widgets-' + this.get( 'id' ), section;
- section = $( section_selector );
+ registeredSidebar.on( 'change:is_rendered', function( ) {
+ var sectionSelector = '#accordion-section-sidebar-widgets-' + this.get( 'id' ), $section;
+
+ $section = $( sectionSelector );
if ( this.get( 'is_rendered' ) ) {
- section.stop().slideDown( function() {
+ $section.stop().slideDown( function() {
$( this ).css( 'height', 'auto' ); // so that the .accordion-section-content won't overflow
} );
+
} else {
// Make sure that hidden sections get closed first
- if ( section.hasClass( 'open' ) ) {
+ if ( $section.hasClass( 'open' ) ) {
// it would be nice if accordionSwitch() in accordion.js was public
- section.find( '.accordion-section-title' ).trigger( 'click' );
+ $section.find( '.accordion-section-title' ).trigger( 'click' );
}
- section.stop().slideUp();
+
+ $section.stop().slideUp();
}
} );
},
@@ -1456,23 +1460,26 @@
* Allow widgets in sidebar to be re-ordered, and for the order to be previewed
*/
_setupSortable: function() {
- var control = this;
- control.is_reordering = false;
+ var self = this;
+
+ this.isReordering = false;
/**
* Update widget order setting when controls are re-ordered
*/
- control.section_content.sortable( {
+ this.$sectionContent.sortable( {
items: '> .customize-control-widget_form',
handle: '.widget-top',
axis: 'y',
connectWith: '.accordion-section-content:has(.customize-control-sidebar_widgets)',
update: function() {
- var widget_container_ids = control.section_content.sortable( 'toArray' ), widget_ids;
- widget_ids = $.map( widget_container_ids, function( widget_container_id ) {
- return $( '#' + widget_container_id ).find( ':input[name=widget-id]' ).val();
+ var widgetContainerIds = self.$sectionContent.sortable( 'toArray' ), widgetIds;
+
+ widgetIds = $.map( widgetContainerIds, function( widgetContainerId ) {
+ return $( '#' + widgetContainerId ).find( ':input[name=widget-id]' ).val();
} );
- control.setting( widget_ids );
+
+ self.setting( widgetIds );
}
} );
@@ -1480,27 +1487,27 @@
* Expand other customizer sidebar section when dragging a control widget over it,
* allowing the control to be dropped into another section
*/
- control.control_section.find( '.accordion-section-title' ).droppable( {
+ this.$controlSection.find( '.accordion-section-title' ).droppable({
accept: '.customize-control-widget_form',
over: function() {
- if ( ! control.control_section.hasClass( 'open' ) ) {
- control.control_section.addClass( 'open' );
- control.section_content.toggle( false ).slideToggle( 150, function() {
- control.section_content.sortable( 'refreshPositions' );
+ if ( ! self.$controlSection.hasClass( 'open' ) ) {
+ self.$controlSection.addClass( 'open' );
+ self.$sectionContent.toggle( false ).slideToggle( 150, function() {
+ self.$sectionContent.sortable( 'refreshPositions' );
} );
}
}
- } );
+ });
/**
* Keyboard-accessible reordering
*/
- control.container.find( '.reorder-toggle' ).on( 'click keydown', function( event ) {
+ this.container.find( '.reorder-toggle' ).on( 'click keydown', function( event ) {
if ( event.type === 'keydown' && ! ( event.which === 13 || event.which === 32 ) ) { // Enter or Spacebar
return;
}
- control.toggleReordering( ! control.is_reordering );
+ self.toggleReordering( ! self.isReordering );
} );
},
@@ -1508,20 +1515,19 @@
* Set up UI for adding a new widget
*/
_setupAddition: function() {
- var control = this;
+ var self = this;
- control.container.find( '.add-new-widget' ).on( 'click keydown', function( event ) {
+ this.container.find( '.add-new-widget' ).on( 'click keydown', function( event ) {
if ( event.type === 'keydown' && ! ( event.which === 13 || event.which === 32 ) ) { // Enter or Spacebar
return;
}
- if ( control.section_content.hasClass( 'reordering' ) ) {
+ if ( self.$sectionContent.hasClass( 'reordering' ) ) {
return;
}
- // @todo Use an control.is_adding state
if ( ! $( 'body' ).hasClass( 'adding-widget' ) ) {
- api.Widgets.availableWidgetsPanel.open( control );
+ api.Widgets.availableWidgetsPanel.open( self );
} else {
api.Widgets.availableWidgetsPanel.close();
}
@@ -1532,16 +1538,16 @@
* Add classes to the widget_form controls to assist with styling
*/
_applyCardinalOrderClassNames: function() {
- var control = this;
- control.section_content.find( '.customize-control-widget_form' )
+ this.$sectionContent.find( '.customize-control-widget_form' )
.removeClass( 'first-widget' )
.removeClass( 'last-widget' )
.find( '.move-widget-down, .move-widget-up' ).prop( 'tabIndex', 0 );
- control.section_content.find( '.customize-control-widget_form:first' )
+ this.$sectionContent.find( '.customize-control-widget_form:first' )
.addClass( 'first-widget' )
.find( '.move-widget-up' ).prop( 'tabIndex', -1 );
- control.section_content.find( '.customize-control-widget_form:last' )
+
+ this.$sectionContent.find( '.customize-control-widget_form:last' )
.addClass( 'last-widget' )
.find( '.move-widget-down' ).prop( 'tabIndex', -1 );
},
@@ -1554,21 +1560,21 @@
/**
* Enable/disable the reordering UI
*
- * @param {Boolean} toggle to enable/disable reordering
+ * @param {Boolean} showOrHide to enable/disable reordering
*/
- toggleReordering: function( toggle ) {
- var control = this;
- toggle = Boolean( toggle );
- if ( toggle === control.section_content.hasClass( 'reordering' ) ) {
+ toggleReordering: function( showOrHide ) {
+ showOrHide = Boolean( showOrHide );
+
+ if ( showOrHide === this.$sectionContent.hasClass( 'reordering' ) ) {
return;
}
- control.is_reordering = toggle;
- control.section_content.toggleClass( 'reordering', toggle );
+ this.isReordering = showOrHide;
+ this.$sectionContent.toggleClass( 'reordering', showOrHide );
- if ( toggle ) {
- _( control.getWidgetFormControls() ).each( function( form_control ) {
- form_control.collapseForm();
+ if ( showOrHide ) {
+ _( this.getWidgetFormControls() ).each( function( formControl ) {
+ formControl.collapseForm();
} );
}
},
@@ -1577,178 +1583,171 @@
* @return {wp.customize.controlConstructor.widget_form[]}
*/
getWidgetFormControls: function() {
- var control = this, form_controls;
+ var formControls;
- form_controls = _( control.setting() ).map( function( widget_id ) {
- var setting_id = widgetIdToSettingId( widget_id ),
- form_control = api.control( setting_id );
+ formControls = _( this.setting() ).map( function( widgetId ) {
+ var settingId = widgetIdToSettingId( widgetId ),
+ formControl = api.control( settingId );
- if ( ! form_control ) {
- throw new Error( 'Unable to find widget_form control for ' + widget_id );
+ if ( ! formControl ) {
+ return;
}
- return form_control;
+
+ return formControl;
} );
- return form_controls;
+
+ return formControls;
},
/**
- * @param {string} widget_id or an id_base for adding a previously non-existing widget
+ * @param {string} widgetId or an id_base for adding a previously non-existing widget
* @returns {object} widget_form control instance
*/
- addWidget: function( widget_id ) {
- var control = this,
- control_html,
- widget_el,
- customize_control_type = 'widget_form',
- customize_control,
- parsed_widget_id = parse_widget_id( widget_id ),
- widget_number = parsed_widget_id.number,
- widget_id_base = parsed_widget_id.id_base,
- widget = api.Widgets.availableWidgets.findWhere( {id_base: widget_id_base} ),
- setting_id,
- is_existing_widget,
- Constructor,
- widget_form_control,
- sidebar_widgets,
- setting_args;
+ addWidget: function( widgetId ) {
+ var self = this, controlHtml, $widget, controlType = 'widget_form', $control, controlConstructor,
+ parsedWidgetId = parseWidgetId( widgetId ),
+ widgetNumber = parsedWidgetId.number,
+ widgetIdBase = parsedWidgetId.id_base,
+ widget = api.Widgets.availableWidgets.findWhere( {id_base: widgetIdBase} ),
+ settingId, isExistingWidget, widgetFormControl, sidebarWidgets, settingArgs;
if ( ! widget ) {
- throw new Error( 'Widget unexpectedly not found.' );
+ return;
}
- if ( widget_number && ! widget.get( 'is_multi' ) ) {
- throw new Error( 'Did not expect a widget number to be supplied for a non-multi widget' );
+
+ if ( widgetNumber && ! widget.get( 'is_multi' ) ) {
+ return;
}
// Set up new multi widget
- if ( widget.get( 'is_multi' ) && ! widget_number ) {
+ if ( widget.get( 'is_multi' ) && ! widgetNumber ) {
widget.set( 'multi_number', widget.get( 'multi_number' ) + 1 );
- widget_number = widget.get( 'multi_number' );
+ widgetNumber = widget.get( 'multi_number' );
}
- control_html = $( '#widget-tpl-' + widget.get( 'id' ) ).html();
+ controlHtml = $( '#widget-tpl-' + widget.get( 'id' ) ).html();
if ( widget.get( 'is_multi' ) ) {
- control_html = control_html.replace( /<[^<>]+>/g, function( m ) {
- return m.replace( /__i__|%i%/g, widget_number );
+ controlHtml = controlHtml.replace( /<[^<>]+>/g, function( m ) {
+ return m.replace( /__i__|%i%/g, widgetNumber );
} );
} else {
widget.set( 'is_disabled', true ); // Prevent single widget from being added again now
}
- widget_el = $( control_html );
- customize_control = $( '
' );
- customize_control.addClass( 'customize-control' );
- customize_control.addClass( 'customize-control-' + customize_control_type );
- customize_control.append( widget_el );
- customize_control.find( '> .widget-icon' ).remove();
+ $widget = $( controlHtml );
+
+ $control = $( '' )
+ .addClass( 'customize-control' )
+ .addClass( 'customize-control-' + controlType )
+ .append( $widget );
+
+ // Remove icon which is visible inside the panel
+ $control.find( '> .widget-icon' ).remove();
+
if ( widget.get( 'is_multi' ) ) {
- customize_control.find( 'input[name="widget_number"]' ).val( widget_number );
- customize_control.find( 'input[name="multi_number"]' ).val( widget_number );
+ $control.find( 'input[name="widget_number"]' ).val( widgetNumber );
+ $control.find( 'input[name="multi_number"]' ).val( widgetNumber );
}
- widget_id = customize_control.find( '[name="widget-id"]' ).val();
- customize_control.hide(); // to be slid-down below
- setting_id = 'widget_' + widget.get( 'id_base' );
+ widgetId = $control.find( '[name="widget-id"]' ).val();
+
+ $control.hide(); // to be slid-down below
+
+ settingId = 'widget_' + widget.get( 'id_base' );
if ( widget.get( 'is_multi' ) ) {
- setting_id += '[' + widget_number + ']';
+ settingId += '[' + widgetNumber + ']';
}
- customize_control.attr( 'id', 'customize-control-' + setting_id.replace( /\]/g, '' ).replace( /\[/g, '-' ) );
+ $control.attr( 'id', 'customize-control-' + settingId.replace( /\]/g, '' ).replace( /\[/g, '-' ) );
- control.container.after( customize_control );
+ this.container.after( $control );
// Only create setting if it doesn't already exist (if we're adding a pre-existing inactive widget)
- is_existing_widget = api.has( setting_id );
- if ( ! is_existing_widget ) {
- setting_args = {
+ isExistingWidget = api.has( settingId );
+ if ( ! isExistingWidget ) {
+ settingArgs = {
transport: 'refresh',
- previewer: control.setting.previewer
+ previewer: this.setting.previewer
};
- api.create( setting_id, setting_id, {}, setting_args );
+ api.create( settingId, settingId, {}, settingArgs );
}
- Constructor = api.controlConstructor[customize_control_type];
- widget_form_control = new Constructor( setting_id, {
+ controlConstructor = api.controlConstructor[controlType];
+ widgetFormControl = new controlConstructor( settingId, {
params: {
settings: {
- 'default': setting_id
+ 'default': settingId
},
- sidebar_id: control.params.sidebar_id,
- widget_id: widget_id,
+ sidebar_id: self.params.sidebar_id,
+ widget_id: widgetId,
widget_id_base: widget.get( 'id_base' ),
- type: customize_control_type,
- is_new: ! is_existing_widget,
+ type: controlType,
+ is_new: ! isExistingWidget,
width: widget.get( 'width' ),
height: widget.get( 'height' ),
is_wide: widget.get( 'is_wide' )
},
- previewer: control.setting.previewer
+ previewer: self.setting.previewer
} );
- api.control.add( setting_id, widget_form_control );
+ api.control.add( settingId, widgetFormControl );
// Make sure widget is removed from the other sidebars
- api.each( function( other_setting ) {
- if ( other_setting.id === control.setting.id ) {
+ api.each( function( otherSetting ) {
+ if ( otherSetting.id === self.setting.id ) {
return;
}
- if ( 0 !== other_setting.id.indexOf( 'sidebars_widgets[' ) ) {
+
+ if ( 0 !== otherSetting.id.indexOf( 'sidebars_widgets[' ) ) {
return;
}
- var other_sidebar_widgets = other_setting().slice(), i;
- i = _.indexOf( other_sidebar_widgets, widget_id );
+
+ var otherSidebarWidgets = otherSetting().slice(),
+ i = _.indexOf( otherSidebarWidgets, widgetId );
+
if ( -1 !== i ) {
- other_sidebar_widgets.splice( i );
- other_setting( other_sidebar_widgets );
+ otherSidebarWidgets.splice( i );
+ otherSetting( otherSidebarWidgets );
}
} );
// Add widget to this sidebar
- sidebar_widgets = control.setting().slice();
- if ( -1 === _.indexOf( sidebar_widgets, widget_id ) ) {
- sidebar_widgets.push( widget_id );
- control.setting( sidebar_widgets );
+ sidebarWidgets = this.setting().slice();
+ if ( -1 === _.indexOf( sidebarWidgets, widgetId ) ) {
+ sidebarWidgets.push( widgetId );
+ this.setting( sidebarWidgets );
}
- customize_control.slideDown( function() {
- if ( is_existing_widget ) {
- widget_form_control.expandForm();
- widget_form_control.updateWidget( {
- instance: widget_form_control.setting(),
+ $control.slideDown( function() {
+ if ( isExistingWidget ) {
+ widgetFormControl.expandForm();
+ widgetFormControl.updateWidget( {
+ instance: widgetFormControl.setting(),
complete: function( error ) {
if ( error ) {
throw error;
}
- widget_form_control.focus();
+ widgetFormControl.focus();
}
} );
} else {
- widget_form_control.focus();
+ widgetFormControl.focus();
}
} );
- $( document ).trigger( 'widget-added', [ widget_el ] );
+ $( document ).trigger( 'widget-added', [ $widget ] );
- return widget_form_control;
+ return widgetFormControl;
}
-
} );
+ /**
+ * Extends wp.customizer.controlConstructor with control constructor for
+ * widget_form and sidebar_widgets.
+ */
$.extend( api.controlConstructor, {
widget_form: api.Widgets.WidgetControl,
sidebar_widgets: api.Widgets.SidebarControl
});
- api.bind( 'ready', function() {
- // Set up the widgets panel
- api.Widgets.availableWidgetsPanel = new api.Widgets.AvailableWidgetsPanelView({
- collection: api.Widgets.availableWidgets
- });
-
- // Highlight widget control
- api.Widgets.Previewer.bind( 'highlight-widget-control', api.Widgets.highlightWidgetFormControl );
-
- // Open and focus widget control
- api.Widgets.Previewer.bind( 'focus-widget-control', api.Widgets.focusWidgetFormControl );
- } );
-
/**
* Capture the instance of the Previewer since it is private
*/
@@ -1761,6 +1760,22 @@
}
} );
+ /**
+ * Init Customizer for widgets.
+ */
+ api.bind( 'ready', function() {
+ // Set up the widgets panel
+ api.Widgets.availableWidgetsPanel = new api.Widgets.AvailableWidgetsPanelView({
+ collection: api.Widgets.availableWidgets
+ });
+
+ // Highlight widget control
+ api.Widgets.Previewer.bind( 'highlight-widget-control', api.Widgets.highlightWidgetFormControl );
+
+ // Open and focus widget control
+ api.Widgets.Previewer.bind( 'focus-widget-control', api.Widgets.focusWidgetFormControl );
+ } );
+
/**
* Highlight a widget control.
*
@@ -1789,69 +1804,75 @@
/**
* Given a widget control, find the sidebar widgets control that contains it.
- * @param {string} widget_id
+ * @param {string} widgetId
* @return {object|null}
*/
- api.Widgets.getSidebarWidgetControlContainingWidget = function( widget_id ) {
- var found_control = null;
+ api.Widgets.getSidebarWidgetControlContainingWidget = function( widgetId ) {
+ var foundControl = null;
+
// @todo this can use widgetIdToSettingId(), then pass into wp.customize.control( x ).getSidebarWidgetsControl()
api.control.each( function( control ) {
- if ( control.params.type === 'sidebar_widgets' && -1 !== _.indexOf( control.setting(), widget_id ) ) {
- found_control = control;
+ if ( control.params.type === 'sidebar_widgets' && -1 !== _.indexOf( control.setting(), widgetId ) ) {
+ foundControl = control;
}
} );
- return found_control;
+ return foundControl;
};
/**
- * Given a widget_id for a widget appearing in the preview, get the widget form control associated with it
- * @param {string} widget_id
+ * Given a widget ID for a widget appearing in the preview, get the widget form control associated with it.
+ *
+ * @param {string} widgetId
* @return {object|null}
*/
- api.Widgets.getWidgetFormControlForWidget = function( widget_id ) {
- var found_control = null;
+ api.Widgets.getWidgetFormControlForWidget = function( widgetId ) {
+ var foundControl = null;
+
// @todo We can just use widgetIdToSettingId() here
api.control.each( function( control ) {
- if ( control.params.type === 'widget_form' && control.params.widget_id === widget_id ) {
- found_control = control;
+ if ( control.params.type === 'widget_form' && control.params.widget_id === widgetId ) {
+ foundControl = control;
}
} );
- return found_control;
+ return foundControl;
};
/**
- * @param {String} widget_id
+ * @param {String} widgetId
* @returns {Object}
*/
- function parse_widget_id( widget_id ) {
+ function parseWidgetId( widgetId ) {
var matches, parsed = {
number: null,
id_base: null
};
- matches = widget_id.match( /^(.+)-(\d+)$/ );
+
+ matches = widgetId.match( /^(.+)-(\d+)$/ );
if ( matches ) {
parsed.id_base = matches[1];
parsed.number = parseInt( matches[2], 10 );
} else {
// likely an old single widget
- parsed.id_base = widget_id;
+ parsed.id_base = widgetId;
}
+
return parsed;
}
/**
- * @param {String} widget_id
+ * @param {String} widgetId
* @returns {String} settingId
*/
- function widgetIdToSettingId( widget_id ) {
- var parsed = parse_widget_id( widget_id ), settingId;
+ function widgetIdToSettingId( widgetId ) {
+ var parsed = parseWidgetId( widgetId ), settingId;
settingId = 'widget_' + parsed.id_base;
if ( parsed.number ) {
settingId += '[' + parsed.number + ']';
}
+
return settingId;
}
diff --git a/wp-admin/js/customize-widgets.min.js b/wp-admin/js/customize-widgets.min.js
index f83297d84e..198f81abef 100644
--- a/wp-admin/js/customize-widgets.min.js
+++ b/wp-admin/js/customize-widgets.min.js
@@ -1 +1 @@
-!function(a,b){function c(a){var b,c={number:null,id_base:null};return b=a.match(/^(.+)-(\d+)$/),b?(c.id_base=b[1],c.number=parseInt(b[2],10)):c.id_base=a,c}function d(a){var b,d=c(a);return b="widget_"+d.id_base,d.number&&(b+="["+d.number+"]"),b}if(a&&a.customize){var e,f,g=a.customize;g.Widgets=g.Widgets||{},g.Widgets.data=_wpCustomizeWidgetsSettings||{},e=g.Widgets.data.l10n,delete g.Widgets.data.l10n,g.Widgets.WidgetModel=Backbone.Model.extend({id:null,temp_id:null,classname:null,control_tpl:null,description:null,is_disabled:null,is_multi:null,multi_number:null,name:null,id_base:null,transport:"refresh",params:[],width:null,height:null}),g.Widgets.WidgetCollection=Backbone.Collection.extend({model:g.Widgets.WidgetModel,doSearch:function(a){this.terms!==a&&(this.terms=a,this.terms.length>0&&this.search(this.terms),""===this.terms&&this.reset(g.Widgets.data.availableWidgets),this.trigger("update"))},search:function(a){var b,c,d;this.reset(g.Widgets.data.availableWidgets,{silent:!0}),a=a.replace(/[-\/\\^$*+?.()|[\]{}]/g,"\\$&"),a=a.replace(/ /g,")(?=.*"),b=new RegExp("^(?=.*"+a+").+","i"),c=this.filter(function(a){return d=_.union(a.get("name"),a.get("id"),a.get("description")),b.test(d)}),this.reset(c)}}),g.Widgets.availableWidgets=new g.Widgets.WidgetCollection(g.Widgets.data.availableWidgets),g.Widgets.SidebarModel=Backbone.Model.extend({after_title:null,after_widget:null,before_title:null,before_widget:null,"class":null,description:null,id:null,name:null,is_rendered:!1}),g.Widgets.SidebarCollection=Backbone.Collection.extend({model:g.Widgets.SidebarModel}),g.Widgets.registeredSidebars=new g.Widgets.SidebarCollection(g.Widgets.data.registeredSidebars),g.Widgets.AvailableWidgetsPanelView=a.Backbone.View.extend({el:"#available-widgets",events:{"input #widgets-search":"search","keyup #widgets-search":"search","change #widgets-search":"search","search #widgets-search":"search","focus .widget-tpl":"focus","click .widget-tpl":"_submit","keypress .widget-tpl":"_submit",keydown:"keyboardAccessible"},selected:null,currentSidebarControl:null,$search:null,initialize:function(){var a=this;this.$search=b("#widgets-search"),_.bindAll(this,"close"),this.listenTo(this.collection,"update",this.updateList),this.listenTo(this.collection,"change",this.updateList),this.updateList(),b("#customize-controls").on("click keydown",function(c){var d=b(c.target).is(".add-new-widget, .add-new-widget *");b("body").hasClass("adding-widget")&&!d&&a.close()}),g.Widgets.Previewer.bind("url",this.close)},search:function(a){var b;this.collection.doSearch(a.target.value),this.selected&&!this.selected.is(":visible")&&(this.selected.removeClass("selected"),this.selected=null),this.selected&&!a.target.value&&(this.selected.removeClass("selected"),this.selected=null),!this.selected&&a.target.value&&(b=this.$el.find("> .widget-tpl:visible:first"),b.length&&this.select(b))},updateList:function(){this.$el.find(".widget-tpl").hide(),this.collection.each(function(a){var c=b("#widget-tpl-"+a.id);c.toggle(!a.get("is_disabled")),a.get("is_disabled")&&c.is(this.selected)&&(this.selected=null)})},select:function(a){this.selected=b(a),this.selected.siblings(".widget-tpl").removeClass("selected"),this.selected.addClass("selected")},focus:function(a){this.select(b(a.currentTarget))},_submit:function(a){("keypress"!==a.type||13===a.which||32===a.which)&&this.submit(b(a.currentTarget))},submit:function(a){var c,d;a||(a=this.selected),a&&this.currentSidebarControl&&(this.select(a),c=b(this.selected).data("widget-id"),d=this.collection.findWhere({id:c}),d&&(this.currentSidebarControl.addWidget(d.get("id_base")),this.close()))},open:function(a){this.currentSidebarControl=a,_(this.currentSidebarControl.getWidgetFormControls()).each(function(a){a.params.is_wide&&a.collapseForm()}),b("body").addClass("adding-widget"),this.$el.find(".selected").removeClass("selected"),this.collection.doSearch(""),this.$search.focus()},close:function(a){a=a||{},a.returnFocus&&this.currentSidebarControl&&this.currentSidebarControl.container.find(".add-new-widget").focus(),this.currentSidebarControl=null,this.selected=null,b("body").removeClass("adding-widget"),this.$search.val("")},keyboardAccessible:function(a){var c=13===a.which,d=27===a.which,e=40===a.which,f=38===a.which,g=null,h=this.$el.find("> .widget-tpl:visible:first"),i=this.$el.find("> .widget-tpl:visible:last"),j=b(a.target).is(this.$search);return e||f?(e?j?g=h:this.selected&&0!==this.selected.nextAll(".widget-tpl:visible").length&&(g=this.selected.nextAll(".widget-tpl:visible:first")):f&&(j?g=i:this.selected&&0!==this.selected.prevAll(".widget-tpl:visible").length&&(g=this.selected.prevAll(".widget-tpl:visible:first"))),this.select(g),void(g?g.focus():this.$search.focus())):void((!c||this.$search.val())&&(c?this.submit():d&&this.close({returnFocus:!0})))}}),g.Widgets.formSyncHandlers={rss:function(a,c,d){var e=c.find(".widget-error:first"),f=b(""+d+"
").find(".widget-error:first");e.length&&f.length?e.replaceWith(f):e.length?e.remove():f.length&&c.find(".widget-content:first").prepend(f)}},g.Widgets.WidgetControl=g.Control.extend({ready:function(){this._setupModel(),this._setupWideWidget(),this._setupControlToggle(),this._setupWidgetTitle(),this._setupReorderUI(),this._setupHighlightEffects(),this._setupUpdateUI(),this._setupRemoveUI()},_setupModel:function(){var a,b=this;g.Widgets.savedWidgetIds=g.Widgets.savedWidgetIds||[],a=function(){g.Widgets.savedWidgetIds[b.params.widget_id]=!0},g.bind("ready",a),g.bind("saved",a),this._updateCount=0,this.isWidgetUpdating=!1,this.liveUpdateMode=!0,this.setting.bind(function(a,c){_(c).isEqual(a)||b.isWidgetUpdating||b.updateWidget({instance:a})})},_setupWideWidget:function(){var a,c,d,e,f,h=this;this.params.is_wide&&(a=this.container.find(".widget-inside"),c=a.find("> .form"),d=b(".wp-full-overlay-sidebar-content:first"),this.container.addClass("wide-widget-control"),this.container.find(".widget-content:first").css({"max-width":this.params.width,"min-height":this.params.height}),f=function(){var d,e=h.container.offset().top,f=b(window).height(),g=c.outerHeight();a.css("max-height",f),d=Math.max(0,Math.min(Math.max(e,0),f-g)),a.css("top",d)},e=b("#customize-theme-controls"),this.container.on("expand",function(){f(),d.on("scroll",f),b(window).on("resize",f),e.on("expanded collapsed",f)}),this.container.on("collapsed",function(){d.off("scroll",f),b(window).off("resize",f),e.off("expanded collapsed",f)}),g.each(function(a){0===a.id.indexOf("sidebars_widgets[")&&a.bind(function(){h.container.hasClass("expanded")&&f()})}))},_setupControlToggle:function(){var a,b=this;this.container.find(".widget-top").on("click",function(a){a.preventDefault();var c=b.getSidebarWidgetsControl();c.is_reordering||b.toggleForm()}),a=this.container.find(".widget-control-close"),a.on("click",function(a){a.preventDefault(),b.collapseForm(),b.container.find(".widget-top .widget-action:first").focus()})},_setupWidgetTitle:function(){var a,b=this;a=function(){var a=b.setting().title,c=b.container.find(".in-widget-title");c.text(a?": "+a:"")},this.setting.bind(a),a()},_setupReorderUI:function(){var a,c,d,e,f=this;a=function(a){a.siblings(".selected").removeClass("selected"),a.addClass("selected");var b=a.data("id")===f.params.sidebar_id;f.container.find(".move-widget-btn").prop("disabled",b)},this.container.find(".widget-title-action").after(b(g.Widgets.data.tpl.widgetReorderNav)),c=b(_.template(g.Widgets.data.tpl.moveWidgetArea,{sidebars:_(g.Widgets.registeredSidebars.toArray()).pluck("attributes")})),this.container.find(".widget-top").after(c),e=function(){var d,e=c.find("li");d=e.filter(function(){return b(this).data("id")===f.params.sidebar_id}),e.each(function(){var c,e,f=b(this);c=f.data("id"),e=g.Widgets.registeredSidebars.get(c),f.toggle(e.get("is_rendered")),f.hasClass("selected")&&!e.get("is_rendered")&&a(d)})},e(),g.Widgets.registeredSidebars.on("change:is_rendered",e),d=this.container.find(".widget-reorder-nav"),d.find(".move-widget, .move-widget-down, .move-widget-up").on("click keypress",function(a){if("keypress"!==a.type||13===a.which||32===a.which)if(b(this).focus(),b(this).is(".move-widget"))f.toggleWidgetMoveArea();else{var c=b(this).is(".move-widget-down"),d=b(this).is(".move-widget-up"),e=f.getWidgetSidebarPosition();if(d&&0===e||c&&e===f.getSidebarWidgetsControl().setting().length-1)return;d?f.moveUp():f.moveDown(),b(this).focus()}}),this.container.find(".widget-area-select").on("click keypress","li",function(c){("keypress"!==event.type||13===event.which||32===event.which)&&(c.preventDefault(),a(b(this)))}),this.container.find(".move-widget-btn").click(function(){f.getSidebarWidgetsControl().toggleReordering(!1);var a,b,c,d,e,h=f.params.sidebar_id,i=f.container.find(".widget-area-select li.selected").data("id");a=g("sidebars_widgets["+h+"]"),b=g("sidebars_widgets["+i+"]"),c=Array.prototype.slice.call(a()),d=Array.prototype.slice.call(b()),e=f.getWidgetSidebarPosition(),c.splice(e,1),d.push(f.params.widget_id),a(c),b(d),f.focus()})},_setupHighlightEffects:function(){var a=this;this.container.on("mouseenter click",function(){a.setting.previewer.send("highlight-widget",a.params.widget_id)}),this.setting.bind(function(){a.setting.previewer.send("highlight-widget",a.params.widget_id)})},_setupUpdateUI:function(){var a,c,d,f,h,i=this;a=this.container.find(".widget:first"),c=a.find(".widget-content:first"),d=this.container.find(".widget-control-save"),d.val(e.saveBtnLabel),d.attr("title",e.saveBtnTooltip),d.removeClass("button-primary").addClass("button-secondary"),d.on("click",function(a){a.preventDefault(),i.updateWidget({disable_form:!0})}),f=_.debounce(function(){i.updateWidget()},250),this.container.find(".widget-content").on("keydown","input",function(a){13===a.which&&(a.preventDefault(),i.updateWidget({ignore_active_element:!0}))}),c.on("change input propertychange",":input",function(a){i.liveUpdateMode&&("change"===a.type?i.updateWidget():this.checkValidity&&this.checkValidity()&&f())}),this.setting.previewer.channel.bind("synced",function(){i.container.removeClass("previewer-loading")}),g.Widgets.Previewer.bind("widget-updated",function(a){a===i.params.widget_id&&i.container.removeClass("previewer-loading")}),g.Widgets.Previewer.bind("rendered-widgets",function(a){var b=!!a[i.params.widget_id];i.container.toggleClass("widget-rendered",b)}),h=g.Widgets.formSyncHandlers[this.params.widget_id_base],h&&b(document).on("widget-synced",function(b,c){a.is(c)&&h.apply(document,arguments)})},_setupRemoveUI:function(){var a,b,c=this;a=this.container.find("a.widget-control-remove"),a.on("click",function(a){a.preventDefault();var b;b=c.container.next().is(".customize-control-widget_form")?c.container.next().find(".widget-action:first"):c.container.prev().is(".customize-control-widget_form")?c.container.prev().find(".widget-action:first"):c.container.next(".customize-control-sidebar_widgets").find(".add-new-widget:first"),c.container.slideUp(function(){var a,d,e=g.Widgets.getSidebarWidgetControlContainingWidget(c.params.widget_id);e&&(a=e.setting().slice(),d=_.indexOf(a,c.params.widget_id),-1!==d&&(a.splice(d,1),e.setting(a),b.focus()))})}),b=function(){a.text(e.removeBtnLabel),a.attr("title",e.removeBtnTooltip)},this.params.is_new?g.bind("saved",b):b()},_getInputs:function(a){return b(a).find(":input[name]")},_getInputsSignature:function(a){var c=_(a).map(function(a){var c,d=b(a);return c=d.is(":checkbox, :radio")?[d.attr("id"),d.attr("name"),d.prop("value")]:[d.attr("id"),d.attr("name")],c.join(",")});return c.join(";")},_getInputStatePropertyName:function(a){var c=b(a);return c.is(":radio, :checkbox")?"checked":"value"},getSidebarWidgetsControl:function(){var a,b;return a="sidebars_widgets["+this.params.sidebar_id+"]",(b=g.control(a))?b:void 0},updateWidget:function(c){var d,f,h,i,j,k,l,m,n,o,p,q=this;c=b.extend({instance:null,complete:null,ignore_active_element:!1},c),d=c.instance,f=c.complete,this._updateCount+=1,j=this._updateCount,h=this.container.find(".widget:first"),i=h.find(".widget-content:first"),i.find(".widget-error").remove(),this.container.addClass("widget-form-loading"),this.container.addClass("previewer-loading"),n=g.state("processing"),n(n()+1),this.liveUpdateMode||this.container.addClass("widget-form-disabled"),k={},k.action="update-widget",k.wp_customize="on",k.nonce=g.Widgets.data.nonce,l=b.param(k),m=this._getInputs(i),m.each(function(){var a=b(this),c=q._getInputStatePropertyName(this);a.data("state"+j,a.prop(c))}),l+=d?"&"+b.param({sanitized_widget_setting:JSON.stringify(d)}):"&"+m.serialize(),l+="&"+i.find("~ :input").serialize(),o=b.post(a.ajax.settings.url,l),o.done(function(a){var d,k,l,n,o=!1;return"0"===a?(g.Widgets.Previewer.preview.iframe.hide(),void g.Widgets.Previewer.login().done(function(){q.updateWidget(c),g.Widgets.Previewer.preview.iframe.show()})):"-1"===a?void g.Widgets.Previewer.cheatin():void(a.success?(k=b(""+a.data.form+"
"),l=q._getInputs(k),n=q._getInputsSignature(m)===q._getInputsSignature(l),n&&!q.liveUpdateMode&&(q.liveUpdateMode=!0,q.container.removeClass("widget-form-disabled"),q.container.find('input[name="savewidget"]').hide()),n&&q.liveUpdateMode?(m.each(function(a){var d,e,f,g=b(this),h=b(l[a]),i=q._getInputStatePropertyName(this);d=g.data("state"+j),e=h.prop(i),g.data("sanitized",e),f=d!==e&&(c.ignore_active_element||!g.is(document.activeElement)),f&&g.prop(i,e)}),b(document).trigger("widget-synced",[h,a.data.form])):q.liveUpdateMode?(q.liveUpdateMode=!1,q.container.find('input[name="savewidget"]').show(),o=!0):(i.html(a.data.form),q.container.removeClass("widget-form-disabled"),b(document).trigger("widget-updated",[h])),p=!o&&!_(q.setting()).isEqual(a.data.instance),p?(q.isWidgetUpdating=!0,q.setting(a.data.instance),q.isWidgetUpdating=!1):q.container.removeClass("previewer-loading"),f&&f.call(q,null,{no_change:!p,ajax_finished:!0})):(d=e.error,a.data&&a.data.message&&(d=a.data.message),f?f.call(q,d):i.prepend(''+d+"
")))}),o.fail(function(a,b){f&&f.call(q,b)}),o.always(function(){q.container.removeClass("widget-form-loading"),m.each(function(){b(this).removeData("state"+j)}),n(n()-1)})},expandControlSection:function(){var a=this.container.closest(".accordion-section");a.hasClass("open")||a.find(".accordion-section-title:first").trigger("click")},expandForm:function(){this.toggleForm(!0)},collapseForm:function(){this.toggleForm(!1)},toggleForm:function(a){var b,c,d,e=this;b=this.container.find("div.widget:first"),c=b.find(".widget-inside:first"),"undefined"==typeof a&&(a=!c.is(":visible")),c.is(":visible")!==a&&(a?(g.control.each(function(a){e.params.type===a.params.type&&e!==a&&a.collapseForm()}),d=function(){e.container.removeClass("expanding"),e.container.addClass("expanded"),e.container.trigger("expanded")},e.params.is_wide?c.fadeIn("fast",d):c.slideDown("fast",d),e.container.trigger("expand"),e.container.addClass("expanding")):(d=function(){e.container.removeClass("collapsing"),e.container.removeClass("expanded"),e.container.trigger("collapsed")},e.container.trigger("collapse"),e.container.addClass("collapsing"),e.params.is_wide?c.fadeOut("fast",d):c.slideUp("fast",function(){b.css({width:"",margin:""}),d()})))},focus:function(){this.expandControlSection(),this.expandForm(),this.container.find(".widget-content :focusable:first").focus()},getWidgetSidebarPosition:function(){var a,b;return a=this.getSidebarWidgetsControl().setting(),b=_.indexOf(a,this.params.widget_id),-1!==b?b:void 0},moveUp:function(){this._moveWidgetByOne(-1)},moveDown:function(){this._moveWidgetByOne(1)},_moveWidgetByOne:function(a){var b,c,d,e;b=this.getWidgetSidebarPosition(),c=this.getSidebarWidgetsControl().setting,d=Array.prototype.slice.call(c()),e=d[b+a],d[b+a]=this.params.widget_id,d[b]=e,c(d)},toggleWidgetMoveArea:function(a){var c,d=this;c=this.container.find(".move-widget-area"),"undefined"==typeof a&&(a=!c.hasClass("active")),a&&(c.find(".selected").removeClass("selected"),c.find("li").filter(function(){return b(this).data("id")===d.params.sidebar_id}).addClass("selected"),this.container.find(".move-widget-btn").prop("disabled",!0)),c.toggleClass("active",a)},highlightSectionAndControl:function(){var a;a=this.container.is(":hidden")?this.container.closest(".control-section"):this.container,b(".highlighted").removeClass("highlighted"),a.addClass("highlighted"),setTimeout(function(){a.removeClass("highlighted")},500)}}),g.Widgets.SidebarControl=g.Control.extend({ready:function(){var a=this;a.control_section=a.container.closest(".control-section"),a.section_content=a.container.closest(".accordion-section-content"),a._setupModel(),a._setupSortable(),a._setupAddition(),a._applyCardinalOrderClassNames()},_setupModel:function(){var a=this,d=g.Widgets.registeredSidebars.get(a.params.sidebar_id);a.setting.bind(function(d,e){var f,h,i,j=_(e).difference(d);d=_(d).filter(function(a){var b=c(a);return!!g.Widgets.availableWidgets.findWhere({id_base:b.id_base})}),f=_(d).map(function(b){var c=g.Widgets.getWidgetFormControlForWidget(b);return c||(c=a.addWidget(b)),c}),f.sort(function(a,b){var c=_.indexOf(d,a.params.widget_id),e=_.indexOf(d,b.params.widget_id);return c===e?0:e>c?-1:1}),h=a.section_content.find(".customize-control-sidebar_widgets"),i=_(f).map(function(a){return a.container[0]}),h.before(i),a._applyCardinalOrderClassNames(),_(f).each(function(b){b.params.sidebar_id=a.params.sidebar_id}),_(j).each(function(d){setTimeout(function(){var e,f,h,i,j,k=!1;g.each(function(b){if(b.id!==a.setting.id&&0===b.id.indexOf("sidebars_widgets[")&&"sidebars_widgets[wp_inactive_widgets]"!==b.id){var c,e=b();c=_.indexOf(e,d),-1!==c&&(k=!0)}}),k||(e=g.Widgets.getWidgetFormControlForWidget(d),f=e&&b.contains(document,e.container[0])&&!b.contains(a.section_content[0],e.container[0]),e&&!f&&(g.control.remove(e.id),e.container.remove()),g.Widgets.savedWidgetIds[d]&&(h=g.value("sidebars_widgets[wp_inactive_widgets]")().slice(),h.push(d),g.value("sidebars_widgets[wp_inactive_widgets]")(_(h).unique())),i=c(d).id_base,j=g.Widgets.availableWidgets.findWhere({id_base:i}),j&&!j.get("is_multi")&&j.set("is_disabled",!1))})})}),g.Widgets.Previewer.bind("rendered-sidebars",function(b){var c=!!b[a.params.sidebar_id];d.set("is_rendered",c)}),d.on("change:is_rendered",function(){var a,c="#accordion-section-sidebar-widgets-"+this.get("id");a=b(c),this.get("is_rendered")?a.stop().slideDown(function(){b(this).css("height","auto")}):(a.hasClass("open")&&a.find(".accordion-section-title").trigger("click"),a.stop().slideUp())})},_setupSortable:function(){var a=this;a.is_reordering=!1,a.section_content.sortable({items:"> .customize-control-widget_form",handle:".widget-top",axis:"y",connectWith:".accordion-section-content:has(.customize-control-sidebar_widgets)",update:function(){var c,d=a.section_content.sortable("toArray");c=b.map(d,function(a){return b("#"+a).find(":input[name=widget-id]").val()}),a.setting(c)}}),a.control_section.find(".accordion-section-title").droppable({accept:".customize-control-widget_form",over:function(){a.control_section.hasClass("open")||(a.control_section.addClass("open"),a.section_content.toggle(!1).slideToggle(150,function(){a.section_content.sortable("refreshPositions")}))}}),a.container.find(".reorder-toggle").on("click keydown",function(b){("keydown"!==b.type||13===b.which||32===b.which)&&a.toggleReordering(!a.is_reordering)})},_setupAddition:function(){var a=this;a.container.find(".add-new-widget").on("click keydown",function(c){("keydown"!==c.type||13===c.which||32===c.which)&&(a.section_content.hasClass("reordering")||(b("body").hasClass("adding-widget")?g.Widgets.availableWidgetsPanel.close():g.Widgets.availableWidgetsPanel.open(a)))})},_applyCardinalOrderClassNames:function(){var a=this;a.section_content.find(".customize-control-widget_form").removeClass("first-widget").removeClass("last-widget").find(".move-widget-down, .move-widget-up").prop("tabIndex",0),a.section_content.find(".customize-control-widget_form:first").addClass("first-widget").find(".move-widget-up").prop("tabIndex",-1),a.section_content.find(".customize-control-widget_form:last").addClass("last-widget").find(".move-widget-down").prop("tabIndex",-1)},toggleReordering:function(a){var b=this;a=Boolean(a),a!==b.section_content.hasClass("reordering")&&(b.is_reordering=a,b.section_content.toggleClass("reordering",a),a&&_(b.getWidgetFormControls()).each(function(a){a.collapseForm()}))},getWidgetFormControls:function(){var a,b=this;return a=_(b.setting()).map(function(a){var b=d(a),c=g.control(b);if(!c)throw new Error("Unable to find widget_form control for "+a);return c})},addWidget:function(a){var d,e,f,h,i,j,k,l,m,n=this,o="widget_form",p=c(a),q=p.number,r=p.id_base,s=g.Widgets.availableWidgets.findWhere({id_base:r});if(!s)throw new Error("Widget unexpectedly not found.");if(q&&!s.get("is_multi"))throw new Error("Did not expect a widget number to be supplied for a non-multi widget");return s.get("is_multi")&&!q&&(s.set("multi_number",s.get("multi_number")+1),q=s.get("multi_number")),d=b("#widget-tpl-"+s.get("id")).html(),s.get("is_multi")?d=d.replace(/<[^<>]+>/g,function(a){return a.replace(/__i__|%i%/g,q)}):s.set("is_disabled",!0),e=b(d),f=b(""),f.addClass("customize-control"),f.addClass("customize-control-"+o),f.append(e),f.find("> .widget-icon").remove(),s.get("is_multi")&&(f.find('input[name="widget_number"]').val(q),f.find('input[name="multi_number"]').val(q)),a=f.find('[name="widget-id"]').val(),f.hide(),h="widget_"+s.get("id_base"),s.get("is_multi")&&(h+="["+q+"]"),f.attr("id","customize-control-"+h.replace(/\]/g,"").replace(/\[/g,"-")),n.container.after(f),i=g.has(h),i||(m={transport:"refresh",previewer:n.setting.previewer},g.create(h,h,{},m)),j=g.controlConstructor[o],k=new j(h,{params:{settings:{"default":h},sidebar_id:n.params.sidebar_id,widget_id:a,widget_id_base:s.get("id_base"),type:o,is_new:!i,width:s.get("width"),height:s.get("height"),is_wide:s.get("is_wide")},previewer:n.setting.previewer}),g.control.add(h,k),g.each(function(b){if(b.id!==n.setting.id&&0===b.id.indexOf("sidebars_widgets[")){var c,d=b().slice();c=_.indexOf(d,a),-1!==c&&(d.splice(c),b(d))}}),l=n.setting().slice(),-1===_.indexOf(l,a)&&(l.push(a),n.setting(l)),f.slideDown(function(){i?(k.expandForm(),k.updateWidget({instance:k.setting(),complete:function(a){if(a)throw a;k.focus()}})):k.focus()}),b(document).trigger("widget-added",[e]),k}}),b.extend(g.controlConstructor,{widget_form:g.Widgets.WidgetControl,sidebar_widgets:g.Widgets.SidebarControl}),g.bind("ready",function(){g.Widgets.availableWidgetsPanel=new g.Widgets.AvailableWidgetsPanelView({collection:g.Widgets.availableWidgets}),g.Widgets.Previewer.bind("highlight-widget-control",g.Widgets.highlightWidgetFormControl),g.Widgets.Previewer.bind("focus-widget-control",g.Widgets.focusWidgetFormControl)}),f=g.Previewer,g.Previewer=f.extend({initialize:function(a,b){g.Widgets.Previewer=this,f.prototype.initialize.call(this,a,b),this.bind("refresh",this.refresh)}}),g.Widgets.highlightWidgetFormControl=function(a){var b=g.Widgets.getWidgetFormControlForWidget(a);b&&b.highlightSectionAndControl()},g.Widgets.focusWidgetFormControl=function(a){var b=g.Widgets.getWidgetFormControlForWidget(a);b&&b.focus()},g.Widgets.getSidebarWidgetControlContainingWidget=function(a){var b=null;return g.control.each(function(c){"sidebar_widgets"===c.params.type&&-1!==_.indexOf(c.setting(),a)&&(b=c)}),b},g.Widgets.getWidgetFormControlForWidget=function(a){var b=null;return g.control.each(function(c){"widget_form"===c.params.type&&c.params.widget_id===a&&(b=c)}),b}}}(window.wp,jQuery);
\ No newline at end of file
+!function(a,b){function c(a){var b,c={number:null,id_base:null};return b=a.match(/^(.+)-(\d+)$/),b?(c.id_base=b[1],c.number=parseInt(b[2],10)):c.id_base=a,c}function d(a){var b,d=c(a);return b="widget_"+d.id_base,d.number&&(b+="["+d.number+"]"),b}if(a&&a.customize){var e,f,g=a.customize;g.Widgets=g.Widgets||{},g.Widgets.data=_wpCustomizeWidgetsSettings||{},e=g.Widgets.data.l10n,delete g.Widgets.data.l10n,g.Widgets.WidgetModel=Backbone.Model.extend({id:null,temp_id:null,classname:null,control_tpl:null,description:null,is_disabled:null,is_multi:null,multi_number:null,name:null,id_base:null,transport:"refresh",params:[],width:null,height:null}),g.Widgets.WidgetCollection=Backbone.Collection.extend({model:g.Widgets.WidgetModel,doSearch:function(a){this.terms!==a&&(this.terms=a,this.terms.length>0&&this.search(this.terms),""===this.terms&&this.reset(g.Widgets.data.availableWidgets),this.trigger("update"))},search:function(a){var b,c,d;this.reset(g.Widgets.data.availableWidgets,{silent:!0}),a=a.replace(/[-\/\\^$*+?.()|[\]{}]/g,"\\$&"),a=a.replace(/ /g,")(?=.*"),b=new RegExp("^(?=.*"+a+").+","i"),c=this.filter(function(a){return d=_.union(a.get("name"),a.get("id"),a.get("description")),b.test(d)}),this.reset(c)}}),g.Widgets.availableWidgets=new g.Widgets.WidgetCollection(g.Widgets.data.availableWidgets),g.Widgets.SidebarModel=Backbone.Model.extend({after_title:null,after_widget:null,before_title:null,before_widget:null,"class":null,description:null,id:null,name:null,is_rendered:!1}),g.Widgets.SidebarCollection=Backbone.Collection.extend({model:g.Widgets.SidebarModel}),g.Widgets.registeredSidebars=new g.Widgets.SidebarCollection(g.Widgets.data.registeredSidebars),g.Widgets.AvailableWidgetsPanelView=a.Backbone.View.extend({el:"#available-widgets",events:{"input #widgets-search":"search","keyup #widgets-search":"search","change #widgets-search":"search","search #widgets-search":"search","focus .widget-tpl":"focus","click .widget-tpl":"_submit","keypress .widget-tpl":"_submit",keydown:"keyboardAccessible"},selected:null,currentSidebarControl:null,$search:null,initialize:function(){var a=this;this.$search=b("#widgets-search"),_.bindAll(this,"close"),this.listenTo(this.collection,"update",this.updateList),this.listenTo(this.collection,"change",this.updateList),this.updateList(),b("#customize-controls").on("click keydown",function(c){var d=b(c.target).is(".add-new-widget, .add-new-widget *");b("body").hasClass("adding-widget")&&!d&&a.close()}),g.Widgets.Previewer.bind("url",this.close)},search:function(a){var b;this.collection.doSearch(a.target.value),this.selected&&!this.selected.is(":visible")&&(this.selected.removeClass("selected"),this.selected=null),this.selected&&!a.target.value&&(this.selected.removeClass("selected"),this.selected=null),!this.selected&&a.target.value&&(b=this.$el.find("> .widget-tpl:visible:first"),b.length&&this.select(b))},updateList:function(){this.$el.find(".widget-tpl").hide(),this.collection.each(function(a){var c=b("#widget-tpl-"+a.id);c.toggle(!a.get("is_disabled")),a.get("is_disabled")&&c.is(this.selected)&&(this.selected=null)})},select:function(a){this.selected=b(a),this.selected.siblings(".widget-tpl").removeClass("selected"),this.selected.addClass("selected")},focus:function(a){this.select(b(a.currentTarget))},_submit:function(a){("keypress"!==a.type||13===a.which||32===a.which)&&this.submit(b(a.currentTarget))},submit:function(a){var c,d;a||(a=this.selected),a&&this.currentSidebarControl&&(this.select(a),c=b(this.selected).data("widget-id"),d=this.collection.findWhere({id:c}),d&&(this.currentSidebarControl.addWidget(d.get("id_base")),this.close()))},open:function(a){this.currentSidebarControl=a,_(this.currentSidebarControl.getWidgetFormControls()).each(function(a){a.params.is_wide&&a.collapseForm()}),b("body").addClass("adding-widget"),this.$el.find(".selected").removeClass("selected"),this.collection.doSearch(""),this.$search.focus()},close:function(a){a=a||{},a.returnFocus&&this.currentSidebarControl&&this.currentSidebarControl.container.find(".add-new-widget").focus(),this.currentSidebarControl=null,this.selected=null,b("body").removeClass("adding-widget"),this.$search.val("")},keyboardAccessible:function(a){var c=13===a.which,d=27===a.which,e=40===a.which,f=38===a.which,g=null,h=this.$el.find("> .widget-tpl:visible:first"),i=this.$el.find("> .widget-tpl:visible:last"),j=b(a.target).is(this.$search);return e||f?(e?j?g=h:this.selected&&0!==this.selected.nextAll(".widget-tpl:visible").length&&(g=this.selected.nextAll(".widget-tpl:visible:first")):f&&(j?g=i:this.selected&&0!==this.selected.prevAll(".widget-tpl:visible").length&&(g=this.selected.prevAll(".widget-tpl:visible:first"))),this.select(g),void(g?g.focus():this.$search.focus())):void((!c||this.$search.val())&&(c?this.submit():d&&this.close({returnFocus:!0})))}}),g.Widgets.formSyncHandlers={rss:function(a,c,d){var e=c.find(".widget-error:first"),f=b(""+d+"
").find(".widget-error:first");e.length&&f.length?e.replaceWith(f):e.length?e.remove():f.length&&c.find(".widget-content:first").prepend(f)}},g.Widgets.WidgetControl=g.Control.extend({ready:function(){this._setupModel(),this._setupWideWidget(),this._setupControlToggle(),this._setupWidgetTitle(),this._setupReorderUI(),this._setupHighlightEffects(),this._setupUpdateUI(),this._setupRemoveUI()},_setupModel:function(){var a,b=this;g.Widgets.savedWidgetIds=g.Widgets.savedWidgetIds||[],a=function(){g.Widgets.savedWidgetIds[b.params.widget_id]=!0},g.bind("ready",a),g.bind("saved",a),this._updateCount=0,this.isWidgetUpdating=!1,this.liveUpdateMode=!0,this.setting.bind(function(a,c){_(c).isEqual(a)||b.isWidgetUpdating||b.updateWidget({instance:a})})},_setupWideWidget:function(){var a,c,d,e,f,h=this;this.params.is_wide&&(a=this.container.find(".widget-inside"),c=a.find("> .form"),d=b(".wp-full-overlay-sidebar-content:first"),this.container.addClass("wide-widget-control"),this.container.find(".widget-content:first").css({"max-width":this.params.width,"min-height":this.params.height}),f=function(){var d,e=h.container.offset().top,f=b(window).height(),g=c.outerHeight();a.css("max-height",f),d=Math.max(0,Math.min(Math.max(e,0),f-g)),a.css("top",d)},e=b("#customize-theme-controls"),this.container.on("expand",function(){f(),d.on("scroll",f),b(window).on("resize",f),e.on("expanded collapsed",f)}),this.container.on("collapsed",function(){d.off("scroll",f),b(window).off("resize",f),e.off("expanded collapsed",f)}),g.each(function(a){0===a.id.indexOf("sidebars_widgets[")&&a.bind(function(){h.container.hasClass("expanded")&&f()})}))},_setupControlToggle:function(){var a,b=this;this.container.find(".widget-top").on("click",function(a){a.preventDefault();var c=b.getSidebarWidgetsControl();c.isReordering||b.toggleForm()}),a=this.container.find(".widget-control-close"),a.on("click",function(a){a.preventDefault(),b.collapseForm(),b.container.find(".widget-top .widget-action:first").focus()})},_setupWidgetTitle:function(){var a,b=this;a=function(){var a=b.setting().title,c=b.container.find(".in-widget-title");c.text(a?": "+a:"")},this.setting.bind(a),a()},_setupReorderUI:function(){var a,c,d,e,f=this;a=function(a){a.siblings(".selected").removeClass("selected"),a.addClass("selected");var b=a.data("id")===f.params.sidebar_id;f.container.find(".move-widget-btn").prop("disabled",b)},this.container.find(".widget-title-action").after(b(g.Widgets.data.tpl.widgetReorderNav)),c=b(_.template(g.Widgets.data.tpl.moveWidgetArea,{sidebars:_(g.Widgets.registeredSidebars.toArray()).pluck("attributes")})),this.container.find(".widget-top").after(c),e=function(){var d,e=c.find("li");d=e.filter(function(){return b(this).data("id")===f.params.sidebar_id}),e.each(function(){var c,e,f=b(this);c=f.data("id"),e=g.Widgets.registeredSidebars.get(c),f.toggle(e.get("is_rendered")),f.hasClass("selected")&&!e.get("is_rendered")&&a(d)})},e(),g.Widgets.registeredSidebars.on("change:is_rendered",e),d=this.container.find(".widget-reorder-nav"),d.find(".move-widget, .move-widget-down, .move-widget-up").on("click keypress",function(a){if("keypress"!==a.type||13===a.which||32===a.which)if(b(this).focus(),b(this).is(".move-widget"))f.toggleWidgetMoveArea();else{var c=b(this).is(".move-widget-down"),d=b(this).is(".move-widget-up"),e=f.getWidgetSidebarPosition();if(d&&0===e||c&&e===f.getSidebarWidgetsControl().setting().length-1)return;d?f.moveUp():f.moveDown(),b(this).focus()}}),this.container.find(".widget-area-select").on("click keypress","li",function(c){("keypress"!==event.type||13===event.which||32===event.which)&&(c.preventDefault(),a(b(this)))}),this.container.find(".move-widget-btn").click(function(){f.getSidebarWidgetsControl().toggleReordering(!1);var a,b,c,d,e,h=f.params.sidebar_id,i=f.container.find(".widget-area-select li.selected").data("id");a=g("sidebars_widgets["+h+"]"),b=g("sidebars_widgets["+i+"]"),c=Array.prototype.slice.call(a()),d=Array.prototype.slice.call(b()),e=f.getWidgetSidebarPosition(),c.splice(e,1),d.push(f.params.widget_id),a(c),b(d),f.focus()})},_setupHighlightEffects:function(){var a=this;this.container.on("mouseenter click",function(){a.setting.previewer.send("highlight-widget",a.params.widget_id)}),this.setting.bind(function(){a.setting.previewer.send("highlight-widget",a.params.widget_id)})},_setupUpdateUI:function(){var a,c,d,f,h,i=this;a=this.container.find(".widget:first"),c=a.find(".widget-content:first"),d=this.container.find(".widget-control-save"),d.val(e.saveBtnLabel),d.attr("title",e.saveBtnTooltip),d.removeClass("button-primary").addClass("button-secondary"),d.on("click",function(a){a.preventDefault(),i.updateWidget({disable_form:!0})}),f=_.debounce(function(){i.updateWidget()},250),this.container.find(".widget-content").on("keydown","input",function(a){13===a.which&&(a.preventDefault(),i.updateWidget({ignoreActiveElement:!0}))}),c.on("change input propertychange",":input",function(a){i.liveUpdateMode&&("change"===a.type?i.updateWidget():this.checkValidity&&this.checkValidity()&&f())}),this.setting.previewer.channel.bind("synced",function(){i.container.removeClass("previewer-loading")}),g.Widgets.Previewer.bind("widget-updated",function(a){a===i.params.widget_id&&i.container.removeClass("previewer-loading")}),g.Widgets.Previewer.bind("rendered-widgets",function(a){var b=!!a[i.params.widget_id];i.container.toggleClass("widget-rendered",b)}),h=g.Widgets.formSyncHandlers[this.params.widget_id_base],h&&b(document).on("widget-synced",function(b,c){a.is(c)&&h.apply(document,arguments)})},_setupRemoveUI:function(){var a,b,c=this;a=this.container.find("a.widget-control-remove"),a.on("click",function(a){a.preventDefault();var b;b=c.container.next().is(".customize-control-widget_form")?c.container.next().find(".widget-action:first"):c.container.prev().is(".customize-control-widget_form")?c.container.prev().find(".widget-action:first"):c.container.next(".customize-control-sidebar_widgets").find(".add-new-widget:first"),c.container.slideUp(function(){var a,d,e=g.Widgets.getSidebarWidgetControlContainingWidget(c.params.widget_id);e&&(a=e.setting().slice(),d=_.indexOf(a,c.params.widget_id),-1!==d&&(a.splice(d,1),e.setting(a),b.focus()))})}),b=function(){a.text(e.removeBtnLabel),a.attr("title",e.removeBtnTooltip)},this.params.is_new?g.bind("saved",b):b()},_getInputs:function(a){return b(a).find(":input[name]")},_getInputsSignature:function(a){var c=_(a).map(function(a){var c,d=b(a);return c=d.is(":checkbox, :radio")?[d.attr("id"),d.attr("name"),d.prop("value")]:[d.attr("id"),d.attr("name")],c.join(",")});return c.join(";")},_getInputStatePropertyName:function(a){var c=b(a);return c.is(":radio, :checkbox")?"checked":"value"},getSidebarWidgetsControl:function(){var a,b;return a="sidebars_widgets["+this.params.sidebar_id+"]",(b=g.control(a))?b:void 0},updateWidget:function(c){var d,f,h,i,j,k,l,m,n,o,p,q=this;c=b.extend({instance:null,complete:null,ignoreActiveElement:!1},c),d=c.instance,f=c.complete,this._updateCount+=1,j=this._updateCount,h=this.container.find(".widget:first"),i=h.find(".widget-content:first"),i.find(".widget-error").remove(),this.container.addClass("widget-form-loading"),this.container.addClass("previewer-loading"),n=g.state("processing"),n(n()+1),this.liveUpdateMode||this.container.addClass("widget-form-disabled"),k={},k.action="update-widget",k.wp_customize="on",k.nonce=g.Widgets.data.nonce,l=b.param(k),m=this._getInputs(i),m.each(function(){var a=b(this),c=q._getInputStatePropertyName(this);a.data("state"+j,a.prop(c))}),l+=d?"&"+b.param({sanitized_widget_setting:JSON.stringify(d)}):"&"+m.serialize(),l+="&"+i.find("~ :input").serialize(),o=b.post(a.ajax.settings.url,l),o.done(function(a){var d,k,l,n,o=!1;return"0"===a?(g.Widgets.Previewer.preview.iframe.hide(),void g.Widgets.Previewer.login().done(function(){q.updateWidget(c),g.Widgets.Previewer.preview.iframe.show()})):"-1"===a?void g.Widgets.Previewer.cheatin():void(a.success?(k=b(""+a.data.form+"
"),l=q._getInputs(k),n=q._getInputsSignature(m)===q._getInputsSignature(l),n&&!q.liveUpdateMode&&(q.liveUpdateMode=!0,q.container.removeClass("widget-form-disabled"),q.container.find('input[name="savewidget"]').hide()),n&&q.liveUpdateMode?(m.each(function(a){var d,e,f,g=b(this),h=b(l[a]),i=q._getInputStatePropertyName(this);d=g.data("state"+j),e=h.prop(i),g.data("sanitized",e),f=d!==e&&(c.ignoreActiveElement||!g.is(document.activeElement)),f&&g.prop(i,e)}),b(document).trigger("widget-synced",[h,a.data.form])):q.liveUpdateMode?(q.liveUpdateMode=!1,q.container.find('input[name="savewidget"]').show(),o=!0):(i.html(a.data.form),q.container.removeClass("widget-form-disabled"),b(document).trigger("widget-updated",[h])),p=!o&&!_(q.setting()).isEqual(a.data.instance),p?(q.isWidgetUpdating=!0,q.setting(a.data.instance),q.isWidgetUpdating=!1):q.container.removeClass("previewer-loading"),f&&f.call(q,null,{noChange:!p,ajaxFinished:!0})):(d=e.error,a.data&&a.data.message&&(d=a.data.message),f?f.call(q,d):i.prepend(''+d+"
")))}),o.fail(function(a,b){f&&f.call(q,b)}),o.always(function(){q.container.removeClass("widget-form-loading"),m.each(function(){b(this).removeData("state"+j)}),n(n()-1)})},expandControlSection:function(){var a=this.container.closest(".accordion-section");a.hasClass("open")||a.find(".accordion-section-title:first").trigger("click")},expandForm:function(){this.toggleForm(!0)},collapseForm:function(){this.toggleForm(!1)},toggleForm:function(a){var b,c,d,e=this;b=this.container.find("div.widget:first"),c=b.find(".widget-inside:first"),"undefined"==typeof a&&(a=!c.is(":visible")),c.is(":visible")!==a&&(a?(g.control.each(function(a){e.params.type===a.params.type&&e!==a&&a.collapseForm()}),d=function(){e.container.removeClass("expanding"),e.container.addClass("expanded"),e.container.trigger("expanded")},e.params.is_wide?c.fadeIn("fast",d):c.slideDown("fast",d),e.container.trigger("expand"),e.container.addClass("expanding")):(d=function(){e.container.removeClass("collapsing"),e.container.removeClass("expanded"),e.container.trigger("collapsed")},e.container.trigger("collapse"),e.container.addClass("collapsing"),e.params.is_wide?c.fadeOut("fast",d):c.slideUp("fast",function(){b.css({width:"",margin:""}),d()})))},focus:function(){this.expandControlSection(),this.expandForm(),this.container.find(".widget-content :focusable:first").focus()},getWidgetSidebarPosition:function(){var a,b;return a=this.getSidebarWidgetsControl().setting(),b=_.indexOf(a,this.params.widget_id),-1!==b?b:void 0},moveUp:function(){this._moveWidgetByOne(-1)},moveDown:function(){this._moveWidgetByOne(1)},_moveWidgetByOne:function(a){var b,c,d,e;b=this.getWidgetSidebarPosition(),c=this.getSidebarWidgetsControl().setting,d=Array.prototype.slice.call(c()),e=d[b+a],d[b+a]=this.params.widget_id,d[b]=e,c(d)},toggleWidgetMoveArea:function(a){var c,d=this;c=this.container.find(".move-widget-area"),"undefined"==typeof a&&(a=!c.hasClass("active")),a&&(c.find(".selected").removeClass("selected"),c.find("li").filter(function(){return b(this).data("id")===d.params.sidebar_id}).addClass("selected"),this.container.find(".move-widget-btn").prop("disabled",!0)),c.toggleClass("active",a)},highlightSectionAndControl:function(){var a;a=this.container.is(":hidden")?this.container.closest(".control-section"):this.container,b(".highlighted").removeClass("highlighted"),a.addClass("highlighted"),setTimeout(function(){a.removeClass("highlighted")},500)}}),g.Widgets.SidebarControl=g.Control.extend({ready:function(){this.$controlSection=this.container.closest(".control-section"),this.$sectionContent=this.container.closest(".accordion-section-content"),this._setupModel(),this._setupSortable(),this._setupAddition(),this._applyCardinalOrderClassNames()},_setupModel:function(){var a=this,d=g.Widgets.registeredSidebars.get(this.params.sidebar_id);this.setting.bind(function(d,e){var f,h,i,j;j=_(e).difference(d),d=_(d).filter(function(a){var b=c(a);return!!g.Widgets.availableWidgets.findWhere({id_base:b.id_base})}),f=_(d).map(function(b){var c=g.Widgets.getWidgetFormControlForWidget(b);return c||(c=a.addWidget(b)),c}),f.sort(function(a,b){var c=_.indexOf(d,a.params.widget_id),e=_.indexOf(d,b.params.widget_id);return c===e?0:e>c?-1:1}),i=_(f).map(function(a){return a.container[0]}),h=a.$sectionContent.find(".customize-control-sidebar_widgets"),h.before(i),a._applyCardinalOrderClassNames(),_(f).each(function(b){b.params.sidebar_id=a.params.sidebar_id}),_(j).each(function(d){setTimeout(function(){var e,f,h,i,j,k=!1;g.each(function(b){if(b.id!==a.setting.id&&0===b.id.indexOf("sidebars_widgets[")&&"sidebars_widgets[wp_inactiveWidgets]"!==b.id){var c,e=b();c=_.indexOf(e,d),-1!==c&&(k=!0)}}),k||(e=g.Widgets.getWidgetFormControlForWidget(d),f=e&&b.contains(document,e.container[0])&&!b.contains(a.$sectionContent[0],e.container[0]),e&&!f&&(g.control.remove(e.id),e.container.remove()),g.Widgets.savedWidgetIds[d]&&(h=g.value("sidebars_widgets[wp_inactiveWidgets]")().slice(),h.push(d),g.value("sidebars_widgets[wp_inactiveWidgets]")(_(h).unique())),i=c(d).id_base,j=g.Widgets.availableWidgets.findWhere({id_base:i}),j&&!j.get("is_multi")&&j.set("is_disabled",!1))})})}),g.Widgets.Previewer.bind("rendered-sidebars",function(b){var c=!!b[a.params.sidebar_id];d.set("is_rendered",c)}),d.on("change:is_rendered",function(){var a,c="#accordion-section-sidebar-widgets-"+this.get("id");a=b(c),this.get("is_rendered")?a.stop().slideDown(function(){b(this).css("height","auto")}):(a.hasClass("open")&&a.find(".accordion-section-title").trigger("click"),a.stop().slideUp())})},_setupSortable:function(){var a=this;this.isReordering=!1,this.$sectionContent.sortable({items:"> .customize-control-widget_form",handle:".widget-top",axis:"y",connectWith:".accordion-section-content:has(.customize-control-sidebar_widgets)",update:function(){var c,d=a.$sectionContent.sortable("toArray");c=b.map(d,function(a){return b("#"+a).find(":input[name=widget-id]").val()}),a.setting(c)}}),this.$controlSection.find(".accordion-section-title").droppable({accept:".customize-control-widget_form",over:function(){a.$controlSection.hasClass("open")||(a.$controlSection.addClass("open"),a.$sectionContent.toggle(!1).slideToggle(150,function(){a.$sectionContent.sortable("refreshPositions")}))}}),this.container.find(".reorder-toggle").on("click keydown",function(b){("keydown"!==b.type||13===b.which||32===b.which)&&a.toggleReordering(!a.isReordering)})},_setupAddition:function(){var a=this;this.container.find(".add-new-widget").on("click keydown",function(c){("keydown"!==c.type||13===c.which||32===c.which)&&(a.$sectionContent.hasClass("reordering")||(b("body").hasClass("adding-widget")?g.Widgets.availableWidgetsPanel.close():g.Widgets.availableWidgetsPanel.open(a)))})},_applyCardinalOrderClassNames:function(){this.$sectionContent.find(".customize-control-widget_form").removeClass("first-widget").removeClass("last-widget").find(".move-widget-down, .move-widget-up").prop("tabIndex",0),this.$sectionContent.find(".customize-control-widget_form:first").addClass("first-widget").find(".move-widget-up").prop("tabIndex",-1),this.$sectionContent.find(".customize-control-widget_form:last").addClass("last-widget").find(".move-widget-down").prop("tabIndex",-1)},toggleReordering:function(a){a=Boolean(a),a!==this.$sectionContent.hasClass("reordering")&&(this.isReordering=a,this.$sectionContent.toggleClass("reordering",a),a&&_(this.getWidgetFormControls()).each(function(a){a.collapseForm()}))},getWidgetFormControls:function(){var a;return a=_(this.setting()).map(function(a){var b=d(a),c=g.control(b);if(c)return c})},addWidget:function(a){var d,e,f,h,i,j,k,l,m,n=this,o="widget_form",p=c(a),q=p.number,r=p.id_base,s=g.Widgets.availableWidgets.findWhere({id_base:r});if(s&&(!q||s.get("is_multi")))return s.get("is_multi")&&!q&&(s.set("multi_number",s.get("multi_number")+1),q=s.get("multi_number")),d=b("#widget-tpl-"+s.get("id")).html(),s.get("is_multi")?d=d.replace(/<[^<>]+>/g,function(a){return a.replace(/__i__|%i%/g,q)}):s.set("is_disabled",!0),e=b(d),f=b("").addClass("customize-control").addClass("customize-control-"+o).append(e),f.find("> .widget-icon").remove(),s.get("is_multi")&&(f.find('input[name="widget_number"]').val(q),f.find('input[name="multi_number"]').val(q)),a=f.find('[name="widget-id"]').val(),f.hide(),i="widget_"+s.get("id_base"),s.get("is_multi")&&(i+="["+q+"]"),f.attr("id","customize-control-"+i.replace(/\]/g,"").replace(/\[/g,"-")),this.container.after(f),j=g.has(i),j||(m={transport:"refresh",previewer:this.setting.previewer},g.create(i,i,{},m)),h=g.controlConstructor[o],k=new h(i,{params:{settings:{"default":i},sidebar_id:n.params.sidebar_id,widget_id:a,widget_id_base:s.get("id_base"),type:o,is_new:!j,width:s.get("width"),height:s.get("height"),is_wide:s.get("is_wide")},previewer:n.setting.previewer}),g.control.add(i,k),g.each(function(b){if(b.id!==n.setting.id&&0===b.id.indexOf("sidebars_widgets[")){var c=b().slice(),d=_.indexOf(c,a);-1!==d&&(c.splice(d),b(c))}}),l=this.setting().slice(),-1===_.indexOf(l,a)&&(l.push(a),this.setting(l)),f.slideDown(function(){j?(k.expandForm(),k.updateWidget({instance:k.setting(),complete:function(a){if(a)throw a;k.focus()}})):k.focus()}),b(document).trigger("widget-added",[e]),k}}),b.extend(g.controlConstructor,{widget_form:g.Widgets.WidgetControl,sidebar_widgets:g.Widgets.SidebarControl}),f=g.Previewer,g.Previewer=f.extend({initialize:function(a,b){g.Widgets.Previewer=this,f.prototype.initialize.call(this,a,b),this.bind("refresh",this.refresh)}}),g.bind("ready",function(){g.Widgets.availableWidgetsPanel=new g.Widgets.AvailableWidgetsPanelView({collection:g.Widgets.availableWidgets}),g.Widgets.Previewer.bind("highlight-widget-control",g.Widgets.highlightWidgetFormControl),g.Widgets.Previewer.bind("focus-widget-control",g.Widgets.focusWidgetFormControl)}),g.Widgets.highlightWidgetFormControl=function(a){var b=g.Widgets.getWidgetFormControlForWidget(a);b&&b.highlightSectionAndControl()},g.Widgets.focusWidgetFormControl=function(a){var b=g.Widgets.getWidgetFormControlForWidget(a);b&&b.focus()},g.Widgets.getSidebarWidgetControlContainingWidget=function(a){var b=null;return g.control.each(function(c){"sidebar_widgets"===c.params.type&&-1!==_.indexOf(c.setting(),a)&&(b=c)}),b},g.Widgets.getWidgetFormControlForWidget=function(a){var b=null;return g.control.each(function(c){"widget_form"===c.params.type&&c.params.widget_id===a&&(b=c)}),b}}}(window.wp,jQuery);
\ No newline at end of file