diff --git a/src/wp-admin/includes/template.php b/src/wp-admin/includes/template.php
index 42833231a6..cc590e3dfd 100644
--- a/src/wp-admin/includes/template.php
+++ b/src/wp-admin/includes/template.php
@@ -2003,14 +2003,13 @@ function convert_to_screen( $hook_name ) {
*/
function _local_storage_notice() {
?>
-
+
lastTriggerSave ) {
+ if ( editor && editor.isDirty() && ! editor.isHidden() && time - 3000 > lastTriggerSave ) {
editor.save();
lastTriggerSave = time;
}
@@ -88,9 +88,13 @@ window.autosave = function() {
$document.trigger( 'autosave-enable-buttons' );
}
+ function getEditor() {
+ return typeof tinymce !== 'undefined' && tinymce.get('content');
+ }
+
// Autosave in localStorage
function autosaveLocal() {
- var restorePostData, undoPostData, blog_id, post_id, hasStorage, intervalTimer,
+ var blog_id, post_id, hasStorage, intervalTimer,
lastCompareString,
isSuspended = false;
@@ -266,7 +270,7 @@ window.autosave = function() {
intervalTimer = window.setInterval( save, 15000 );
$( 'form#post' ).on( 'submit.autosave-local', function() {
- var editor = typeof tinymce !== 'undefined' && tinymce.get('content'),
+ var editor = getEditor(),
post_id = $('#post_ID').val() || 0;
if ( editor && ! editor.isHidden() ) {
@@ -310,7 +314,8 @@ window.autosave = function() {
function checkPost() {
var content, post_title, excerpt, $notice,
postData = getSavedPostData(),
- cookie = wpCookies.get( 'wp-saving-post' );
+ cookie = wpCookies.get( 'wp-saving-post' ),
+ $newerAutosaveNotice = $( '#has-newer-autosave' ).parent( '.notice' );
if ( cookie === post_id + '-saved' ) {
wpCookies.remove( 'wp-saving-post' );
@@ -323,11 +328,6 @@ window.autosave = function() {
return;
}
- // There is a newer autosave. Don't show two "restore" notices at the same time.
- if ( $( '#has-newer-autosave' ).length ) {
- return;
- }
-
content = $( '#content' ).val() || '';
post_title = $( '#title' ).val() || '';
excerpt = $( '#excerpt' ).val() || '';
@@ -338,34 +338,25 @@ window.autosave = function() {
return;
}
- restorePostData = postData;
- undoPostData = {
- content: content,
- post_title: post_title,
- excerpt: excerpt
- };
-
$notice = $( '#local-storage-notice' )
.insertAfter( $( '.wrap h1, .wrap h2' ).first() )
- .addClass( 'notice-warning' )
- .show();
+ .addClass( 'notice-warning' );
- $notice.on( 'click.autosave-local', function( event ) {
- var $target = $( event.target );
+ if ( $newerAutosaveNotice.length ) {
+ // If there is a "server" autosave notice, hide it.
+ // The data in the session storage is either the same or newer.
+ $newerAutosaveNotice.slideUp( 150, function() {
+ $notice.slideDown( 150 );
+ });
+ } else {
+ $notice.slideDown( 200 );
+ }
- if ( $target.hasClass( 'restore-backup' ) ) {
- restorePost( restorePostData );
- $target.parent().hide();
- $(this).find( 'p.undo-restore' ).show();
- $notice.removeClass( 'notice-warning' ).addClass( 'notice-success' );
- } else if ( $target.hasClass( 'undo-restore-backup' ) ) {
- restorePost( undoPostData );
- $target.parent().hide();
- $(this).find( 'p.local-restore' ).show();
- $notice.removeClass( 'notice-success' ).addClass( 'notice-warning' );
- }
-
- event.preventDefault();
+ $notice.find( '.restore-backup' ).on( 'click.autosave-local', function() {
+ restorePost( postData );
+ $notice.fadeTo( 250, 0, function() {
+ $notice.slideUp( 150 );
+ });
});
}
@@ -382,16 +373,25 @@ window.autosave = function() {
}
$( '#excerpt' ).val( postData.excerpt || '' );
- editor = typeof tinymce !== 'undefined' && tinymce.get('content');
+ editor = getEditor();
if ( editor && ! editor.isHidden() && typeof switchEditors !== 'undefined' ) {
+ if ( editor.settings.wpautop && postData.content ) {
+ postData.content = switchEditors.wpautop( postData.content );
+ }
+
// Make sure there's an undo level in the editor
- editor.undoManager.add();
- editor.setContent( postData.content ? switchEditors.wpautop( postData.content ) : '' );
+ editor.undoManager.transact( function() {
+ editor.setContent( postData.content || '' );
+ editor.nodeChanged();
+ });
} else {
// Make sure the Text editor is selected
$( '#content-html' ).click();
- $( '#content' ).val( postData.content );
+ $( '#content' ).focus();
+ // Using document.execCommand() will let the user undo.
+ document.execCommand( 'selectAll' );
+ document.execCommand( 'insertText', false, postData.content || '' );
}
return true;