]> scripts.mit.edu Git - autoinstalls/wordpress.git/blobdiff - wp-includes/js/autosave.js
Wordpress 4.6-scripts
[autoinstalls/wordpress.git] / wp-includes / js / autosave.js
index 85d5f841931ff610f7bfcdfcdf87dc923e10c234..b5a8c6c0e66f7a8fa7ff25a350b23aaa3f82df49 100644 (file)
@@ -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();
-
-                               $notice.on( 'click.autosave-local', function( event ) {
-                                       var $target = $( event.target );
-
-                                       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' );
-                                       }
+                                       .addClass( 'notice-warning' );
 
-                                       event.preventDefault();
+                               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 );
+                               }
+
+                               $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;