Customize: Prevent customize-preview-widgets JS errors in preview if a sidebar is registered with empty before_widget/after_widget params.

Selective refresh will not be available for widgets when they lack these params, so previewing will fallback to full page refreshes. Sidebars registered as such should be rare so this accounts for an edge case.

Fixes #37478.


git-svn-id: https://develop.svn.wordpress.org/trunk@38166 602fd350-edb4-49c9-b593-d223f7449a82
This commit is contained in:
Weston Ruter 2016-07-27 16:26:22 +00:00
parent 2db9d7bee7
commit 3b28231001

View File

@ -376,6 +376,11 @@ wp.customize.widgetsPreview = wp.customize.WidgetCustomizerPreview = (function(
sidebarPartial.params.sidebarArgs.after_widget
);
// Handle rare case where before_widget and after_widget are empty.
if ( ! widgetContainerElement[0] ) {
return;
}
widgetContainerElement.attr( 'data-customize-partial-id', widgetPartial.id );
widgetContainerElement.attr( 'data-customize-partial-type', 'widget' );
widgetContainerElement.attr( 'data-customize-widget-id', widgetId );
@ -521,21 +526,18 @@ wp.customize.widgetsPreview = wp.customize.WidgetCustomizerPreview = (function(
widgetClasses;
emptyWidget = $( widgetTpl );
widgetSelector = emptyWidget.prop( 'tagName' );
widgetClasses = emptyWidget.prop( 'className' );
// Remove class names that incorporate the string formatting placeholders %1$s and %2$s.
widgetClasses = widgetClasses.replace( /\S*%[12]\$s\S*/g, '' );
widgetClasses = widgetClasses.replace( /^\s+|\s+$/g, '' );
widgetSelector = emptyWidget.prop( 'tagName' ) || '';
widgetClasses = emptyWidget.prop( 'className' ) || '';
// Prevent a rare case when before_widget, before_title, after_title and after_widget is empty.
if ( ! widgetClasses ) {
return;
}
if ( widgetClasses ) {
// Remove class names that incorporate the string formatting placeholders %1$s and %2$s.
widgetClasses = widgetClasses.replace( /\S*%[12]\$s\S*/g, '' );
widgetClasses = widgetClasses.replace( /^\s+|\s+$/g, '' );
widgetSelector += '.' + widgetClasses.split( /\s+/ ).join( '.' );
}
self.widgetSelectors.push( widgetSelector );
});
};