Autosave: improve the notice when the sessionStorage autosave is different than the content.
- Make it higher priority than the server autosave. - Change it so the editors undo and redo can be used. - Replace the restore link with a button. - Add better explanation/help. See #37025. git-svn-id: https://develop.svn.wordpress.org/trunk@37737 602fd350-edb4-49c9-b593-d223f7449a82
This commit is contained in:
parent
96d7eadb0c
commit
0f319917c4
@ -2003,14 +2003,13 @@ function convert_to_screen( $hook_name ) {
|
||||
*/
|
||||
function _local_storage_notice() {
|
||||
?>
|
||||
<div id="local-storage-notice" class="hidden notice">
|
||||
<div id="local-storage-notice" class="hidden notice is-dismissible">
|
||||
<p class="local-restore">
|
||||
<?php _e('The backup of this post in your browser is different from the version below.'); ?>
|
||||
<a class="restore-backup" href="#"><?php _e('Restore the backup.'); ?></a>
|
||||
<?php _e( 'The backup of this post in your browser is different from the version below.' ); ?>
|
||||
<button type="button" class="button restore-backup"><?php _e('Restore the backup'); ?></button>
|
||||
</p>
|
||||
<p class="undo-restore hidden">
|
||||
<?php _e('Post restored successfully.'); ?>
|
||||
<a class="undo-restore-backup" href="#"><?php _e('Undo.'); ?></a>
|
||||
<p class="help">
|
||||
<?php _e( 'This will replace the current editor content with the last backup version. You can use undo and redo in the editor to get the old content back or to return to the restored version.' ); ?>
|
||||
</p>
|
||||
</div>
|
||||
<?php
|
||||
|
@ -7,8 +7,8 @@ window.autosave = function() {
|
||||
( function( $, window ) {
|
||||
function autosave() {
|
||||
var initialCompareString,
|
||||
lastTriggerSave = 0,
|
||||
$document = $(document);
|
||||
lastTriggerSave = 0,
|
||||
$document = $(document);
|
||||
|
||||
/**
|
||||
* Returns the data saved in both local and remote autosave
|
||||
@ -19,11 +19,11 @@ window.autosave = function() {
|
||||
var post_name, parent_id, data,
|
||||
time = ( new Date() ).getTime(),
|
||||
cats = [],
|
||||
editor = typeof tinymce !== 'undefined' && tinymce.get('content');
|
||||
editor = getEditor();
|
||||
|
||||
// Don't run editor.save() more often than every 3 sec.
|
||||
// It is resource intensive and might slow down typing in long posts on slow devices.
|
||||
if ( editor && ! editor.isHidden() && time - 3000 > 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;
|
||||
|
Loading…
Reference in New Issue
Block a user