Customize: Add selective refresh framework with implementation for widgets and re-implementation for nav menus.

See https://make.wordpress.org/core/2016/02/16/selective-refresh-in-the-customizer/.

Props westonruter, valendesigns, DrewAPicture, ocean90.
Fixes #27355.


git-svn-id: https://develop.svn.wordpress.org/trunk@36586 602fd350-edb4-49c9-b593-d223f7449a82
This commit is contained in:
Weston Ruter
2016-02-19 18:40:06 +00:00
parent 29e2274793
commit 03360d143d
23 changed files with 4204 additions and 578 deletions
+20
View File
@@ -3786,6 +3786,26 @@
});
});
// Focus on the control that is associated with the given setting.
api.previewer.bind( 'focus-control-for-setting', function( settingId ) {
var matchedControl;
api.control.each( function( control ) {
var settingIds = _.pluck( control.settings, 'id' );
if ( -1 !== _.indexOf( settingIds, settingId ) ) {
matchedControl = control;
}
} );
if ( matchedControl ) {
matchedControl.focus();
}
} );
// Refresh the preview when it requests.
api.previewer.bind( 'refresh', function() {
api.previewer.refresh();
});
api.trigger( 'ready' );
// Make sure left column gets focus
+5 -9
View File
@@ -19,7 +19,7 @@
api.Menus.data = {
itemTypes: [],
l10n: {},
menuItemTransport: 'postMessage',
settingTransport: 'refresh',
phpIntMax: 0,
defaultSettingValues: {
nav_menu: {},
@@ -2310,7 +2310,7 @@
customizeId = 'nav_menu_item[' + String( placeholderId ) + ']';
settingArgs = {
type: 'nav_menu_item',
transport: 'postMessage',
transport: api.Menus.data.settingTransport,
previewer: api.previewer
};
setting = api.create( customizeId, customizeId, {}, settingArgs );
@@ -2399,7 +2399,7 @@
// Register the menu control setting.
api.create( customizeId, customizeId, {}, {
type: 'nav_menu',
transport: 'postMessage',
transport: api.Menus.data.settingTransport,
previewer: api.previewer
} );
api( customizeId ).set( $.extend(
@@ -2486,10 +2486,6 @@
}
} );
api.previewer.bind( 'refresh', function() {
api.previewer.refresh();
});
// Open and focus menu control.
api.previewer.bind( 'focus-nav-menu-item-control', api.Menus.focusMenuItemControl );
} );
@@ -2535,7 +2531,7 @@
newCustomizeId = 'nav_menu[' + String( update.term_id ) + ']';
newSetting = api.create( newCustomizeId, newCustomizeId, settingValue, {
type: 'nav_menu',
transport: 'postMessage',
transport: api.Menus.data.settingTransport,
previewer: api.previewer
} );
@@ -2683,7 +2679,7 @@
newCustomizeId = 'nav_menu_item[' + String( update.post_id ) + ']';
newSetting = api.create( newCustomizeId, newCustomizeId, settingValue, {
type: 'nav_menu_item',
transport: 'postMessage',
transport: api.Menus.data.settingTransport,
previewer: api.previewer
} );
+2 -2
View File
@@ -34,7 +34,7 @@
multi_number: null,
name: null,
id_base: null,
transport: 'refresh',
transport: api.Widgets.data.selectiveRefresh ? 'postMessage' : 'refresh',
params: [],
width: null,
height: null,
@@ -1982,7 +1982,7 @@
isExistingWidget = api.has( settingId );
if ( ! isExistingWidget ) {
settingArgs = {
transport: 'refresh',
transport: api.Widgets.data.selectiveRefresh ? 'postMessage' : 'refresh',
previewer: this.setting.previewer
};
setting = api.create( settingId, settingId, '', settingArgs );