Customize: Prevent syncing unmodified settings from controls into preview to guard against triggering an infinite reload due to selective refresh fallback behavior.

If a value is sanitized in PHP and differs from the JS value in the pane, a `change` event for the setting is triggered upon refresh. This should be avoided since the value just came from the server as being sanitized. This also fixes periodic issue where selective refresh happens immediately after a full refresh.

Fixes #37032.

Built from https://develop.svn.wordpress.org/trunk@39112


git-svn-id: http://core.svn.wordpress.org/trunk@39054 1a063a9b-81f0-0310-95a4-ce76da25c4cd
This commit is contained in:
Weston Ruter
2016-11-03 05:07:32 +00:00
parent 721cf281a3
commit 985a1f6a97
5 changed files with 34 additions and 5 deletions

View File

@@ -4299,6 +4299,7 @@
var previewer = this, synced = {}, constructs;
synced.settings = api.get();
synced['settings-modified-while-loading'] = previewer.settingsModifiedWhileLoading;
if ( 'resolved' !== previewer.deferred.active.state() || previewer.loading ) {
synced.scroll = previewer.scroll;
}
@@ -4421,7 +4422,7 @@
* Refresh the preview seamlessly.
*/
refresh: function() {
var previewer = this;
var previewer = this, onSettingChange;
// Display loading indicator
previewer.send( 'loading-initiated' );
@@ -4435,6 +4436,15 @@
container: previewer.container
});
previewer.settingsModifiedWhileLoading = {};
onSettingChange = function( setting ) {
previewer.settingsModifiedWhileLoading[ setting.id ] = true;
};
api.bind( 'change', onSettingChange );
previewer.loading.always( function() {
api.unbind( 'change', onSettingChange );
} );
previewer.loading.done( function( readyData ) {
var loadingFrame = this, previousPreview, onceSynced;

File diff suppressed because one or more lines are too long