WordPress.org

Make WordPress Core

Ticket #23220: AutoSave.patch

File AutoSave.patch, 4.4 KB (added by asannad, 9 years ago)
  • js/autosave.js

     
    55        autosaveLast = ( $('#post #title').val() || '' ) + ( $('#post #content').val() || '' );
    66        autosavePeriodical = $.schedule({time: autosaveL10n.autosaveInterval * 1000, func: function() { autosave(); }, repeat: true, protect: true});
    77
     8    autosavePeriodical_client = $.schedule({time: 10000, func: function() { autosave_set_local_storage(); }, repeat: true, protect: true});
     9
    810        //Disable autosave after the form has been submitted
    911        $("#post").submit(function() {
    1012                $.cancel(autosavePeriodical);
     13        $.cancel(autosavePeriodical_client);
     14        autosave_delete_local_storage();
    1115                autosaveLockRelease = false;
    1216        });
    1317
     
    162166                // if no errors: add slug UI
    163167                if ( !res.errors ) {
    164168                        postID = parseInt( res.responses[0].id, 10 );
     169
     170            autosave_delete_local_storage();
    165171                        if ( !isNaN(postID) && postID > 0 ) {
    166172                                autosave_update_slug(postID);
    167173                        }
     
    341347        }
    342348
    343349        autosaveOldMessage = jQuery('#autosave').html();
     350
     351    autosave_set_local_storage( post_data );
     352
    344353        jQuery.ajax({
    345354                data: post_data,
    346355                beforeSend: doAutoSave ? autosave_loading : null,
     
    349358                success: successCallback
    350359        });
    351360}
     361
     362function autosave_prepare_data_to_save( ) {
     363
     364    var post_data = {
     365        action: "autosave",
     366        post_ID:  jQuery("#post_ID").val() || 0,
     367        post_type: jQuery('#post_type').val() || ""
     368    };
     369
     370    if ( fullscreen && fullscreen.settings.visible ) {
     371        post_data["post_title"] = jQuery('#wp-fullscreen-title').val() || '';
     372        post_data["content"] = jQuery("#wp_mce_fullscreen").val() || '';
     373    } else {
     374        post_data["post_title"] = jQuery("#title").val() || '';
     375        post_data["content"] = jQuery("#content").val() || '';
     376    }
     377
     378    if ( jQuery('#post_name').val() )
     379        post_data["post_name"] = jQuery('#post_name').val();
     380
     381    var cats = ([]);
     382
     383    jQuery("[name='post_category[]']:checked").each( function(i) {
     384        cats.push(this.value);
     385    } );
     386    post_data["catslist"] = cats.join(",");
     387
     388    if ( jQuery("#comment_status").prop("checked") )
     389        post_data["comment_status"] = 'open';
     390    if ( jQuery("#ping_status").prop("checked") )
     391        post_data["ping_status"] = 'open';
     392    if ( jQuery("#excerpt").size() )
     393        post_data["excerpt"] = jQuery("#excerpt").val();
     394    if ( jQuery("#post_author").size() )
     395        post_data["post_author"] = jQuery("#post_author").val();
     396    if ( jQuery("#parent_id").val() )
     397        post_data["parent_id"] = jQuery("#parent_id").val();
     398    post_data["user_ID"] = jQuery("#user-id").val();
     399    if ( jQuery('#auto_draft').val() == '1' )
     400        post_data["auto_draft"] = '1';
     401
     402    return post_data;
     403
     404}
     405
     406function autosave_set_local_storage( ) {
     407
     408    if ( window.localStorage ) {
     409
     410        var post_id = jQuery("#post_ID").val() || 0;
     411
     412        if( 0 < post_id ) {
     413
     414            var post_data = autosave_prepare_data_to_save();
     415
     416            //if the content and title did not change from last server save,dont keep data in local storage
     417            if ( ( post_data["post_title"].length == 0 && post_data["content"].length == 0 ) || post_data["post_title"] + post_data["content"] == autosaveLast ) {
     418                autosave_delete_local_storage( post_id )
     419            } else {
     420                localStorage.setItem( autosaveL10n.blog_id+'_'+post_id, JSON.stringify( post_data ) );
     421            }
     422        }
     423    }
     424
     425}
     426
     427function autosave_get_local_storage( post_id ) {
     428
     429    if ( window.localStorage ) {
     430        return JSON.parse( localStorage.getItem( autosaveL10n.blog_id+'_'+post_id ) );
     431    }
     432
     433}
     434
     435function autosave_delete_local_storage( post_id ) {
     436
     437    if ( window.localStorage ) {
     438        localStorage.removeItem( autosaveL10n.blog_id+'_'+post_id );
     439    }
     440
     441}
  • script-loader.php

     
    577577        wp_localize_script( 'autosave', 'autosaveL10n', array(
    578578                'autosaveInterval' => AUTOSAVE_INTERVAL,
    579579                'savingText' => __('Saving Draft&#8230;'),
    580                 'saveAlert' => __('The changes you made will be lost if you navigate away from this page.')
     580                'saveAlert' => __('The changes you made will be lost if you navigate away from this page.'),
     581                'blog_id' => get_current_blog_id()
    581582        ) );
    582583
    583584}