mirror of
https://github.com/gosticks/wordpress-develop.git
synced 2025-10-16 12:05:38 +00:00
Editor: Fix improper triggering of the "Are you sure" prompt when navigating away from the old, "classic" Edit Post screen and there are no changes. Was triggered when there is an instance of TinyMCE in the Excerpt postbox.
Props rodrigosprimo, jonathanstegall, kevin940726, azaozz. Fixes #52038. git-svn-id: https://develop.svn.wordpress.org/trunk@49807 602fd350-edb4-49c9-b593-d223f7449a82
This commit is contained in:
parent
2ea3033c0d
commit
3f12f0e77c
@ -488,12 +488,20 @@ jQuery(document).ready( function($) {
|
||||
* When the user is trying to load another page, or reloads current page
|
||||
* show a confirmation dialog when there are unsaved changes.
|
||||
*/
|
||||
$(window).on( 'beforeunload.edit-post', function() {
|
||||
var editor = typeof tinymce !== 'undefined' && tinymce.get('content');
|
||||
$( window ).on( 'beforeunload.edit-post', function( event ) {
|
||||
var editor = window.tinymce && window.tinymce.get( 'content' );
|
||||
var changed = false;
|
||||
|
||||
if ( ( editor && ! editor.isHidden() && editor.isDirty() ) ||
|
||||
( wp.autosave && wp.autosave.server.postChanged() ) ) {
|
||||
if ( wp.autosave ) {
|
||||
changed = wp.autosave.server.postChanged();
|
||||
} else if ( editor ) {
|
||||
changed = ( ! editor.isHidden() && editor.isDirty() );
|
||||
}
|
||||
|
||||
if ( changed ) {
|
||||
event.preventDefault();
|
||||
// The return string is needed for browser compat.
|
||||
// See https://developer.mozilla.org/en-US/docs/Web/API/Window/beforeunload_event.
|
||||
return __( 'The changes you made will be lost if you navigate away from this page.' );
|
||||
}
|
||||
}).on( 'unload.edit-post', function( event ) {
|
||||
|
||||
@ -36,8 +36,24 @@ window.autosave = function() {
|
||||
*/
|
||||
function autosave() {
|
||||
var initialCompareString,
|
||||
lastTriggerSave = 0,
|
||||
$document = $(document);
|
||||
initialCompareData = {},
|
||||
lastTriggerSave = 0,
|
||||
$document = $( document );
|
||||
|
||||
/**
|
||||
* Sets the initial compare data.
|
||||
*
|
||||
* @since 5.6.1
|
||||
*/
|
||||
function setInitialCompare() {
|
||||
initialCompareData = {
|
||||
post_title: $( '#title' ).val() || '',
|
||||
content: $( '#content' ).val() || '',
|
||||
excerpt: $( '#excerpt' ).val() || ''
|
||||
};
|
||||
|
||||
initialCompareString = getCompareString( initialCompareData );
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the data saved in both local and remote autosave.
|
||||
@ -686,6 +702,32 @@ window.autosave = function() {
|
||||
* @return {boolean} True if the post has been changed.
|
||||
*/
|
||||
function postChanged() {
|
||||
var changed = false;
|
||||
|
||||
// If there are TinyMCE instances, loop through them.
|
||||
if ( window.tinymce ) {
|
||||
window.tinymce.each( [ 'content', 'excerpt' ], function( field ) {
|
||||
var editor = window.tinymce.get( field );
|
||||
|
||||
if ( ! editor || editor.isHidden() ) {
|
||||
if ( $( '#' + field ).val() !== initialCompareData[ field ] ) {
|
||||
changed = true;
|
||||
// Break.
|
||||
return false;
|
||||
}
|
||||
} else if ( editor.isDirty() ) {
|
||||
changed = true;
|
||||
return false;
|
||||
}
|
||||
} );
|
||||
|
||||
if ( $( '#title' ).val() !== initialCompareData.post_title ) {
|
||||
changed = true;
|
||||
}
|
||||
|
||||
return changed;
|
||||
}
|
||||
|
||||
return getCompareString() !== initialCompareString;
|
||||
}
|
||||
|
||||
@ -832,16 +874,16 @@ window.autosave = function() {
|
||||
* @return {void}
|
||||
*/
|
||||
$document.on( 'tinymce-editor-init.autosave', function( event, editor ) {
|
||||
if ( editor.id === 'content' ) {
|
||||
// Reset the initialCompare data after the TinyMCE instances have been initialized.
|
||||
if ( 'content' === editor.id || 'excerpt' === editor.id ) {
|
||||
window.setTimeout( function() {
|
||||
editor.save();
|
||||
initialCompareString = getCompareString();
|
||||
setInitialCompare();
|
||||
}, 1000 );
|
||||
}
|
||||
}).ready( function() {
|
||||
|
||||
// Set the initial compare string in case TinyMCE is not used or not loaded first.
|
||||
initialCompareString = getCompareString();
|
||||
setInitialCompare();
|
||||
});
|
||||
|
||||
return {
|
||||
|
||||
Loading…
Reference in New Issue
Block a user