Make WordPress Core

Ticket #24756: 24756-6.patch

File 24756-6.patch, 6.3 KB (added by azaozz, 11 years ago)
  • wp-includes/js/autosave.js

     
    246246
    247247function autosave_enable_buttons() {
    248248        jQuery(document).trigger('autosave-enable-buttons');
    249         if ( ! wp.heartbeat.hasConnectionError() ) {
     249        if ( ! wp.heartbeat || ! wp.heartbeat.hasConnectionError() ) {
    250250                // delay that a bit to avoid some rare collisions while the DOM is being updated.
    251251                setTimeout(function(){
    252252                        var parent = jQuery('#submitpost');
     
    388388
    389389        lastsaveddata: '',
    390390        blog_id: 0,
    391         ajaxurl: window.ajaxurl || 'wp-admin/admin-ajax.php',
    392391        hasStorage: false,
    393392
    394393        // Check if the browser supports sessionStorage and it's not disabled
     
    492491         * @return bool
    493492         */
    494493        save: function( data ) {
    495                 var result = false;
     494                var result = false, post_data;
    496495
    497496                if ( ! data ) {
    498497                        post_data = wp.autosave.getPostData();
     
    502501                        post_data.autosave = true;
    503502                }
    504503
    505                 // If the content and title did not change since the last save, don't save again
    506                 if ( post_data.post_title + ': ' + post_data.content == this.lastsaveddata )
     504                // If the content, title and excerpt did not change since the last save, don't save again
     505                if ( ( post_data.post_title || '' ) + ( post_data.content || '' ) + ( post_data.excerpt || '' ) == this.lastsaveddata )
    507506                        return false;
    508507
    509508                // Cannot get the post data at the moment
     
    515514                result = this.setData( post_data );
    516515
    517516                if ( result )
    518                         this.lastsaveddata = post_data.post_title + ': ' + post_data.content;
     517                        this.lastsaveddata = ( post_data.post_title || '' ) + ( post_data.content || '' ) + ( post_data.excerpt || '' );
    519518
    520519                return result;
    521520        },
     
    524523        init: function( settings ) {
    525524                var self = this;
    526525
    527                 // Check if the browser supports sessionStorage and editor.js is loaded
    528                 if ( ! this.checkStorage() || typeof switchEditors == 'undefined' )
     526                // Check if the browser supports sessionStorage and it's not disabled
     527                if ( ! this.checkStorage() )
    529528                        return;
    530529
    531530                // Don't run if the post type supports neither 'editor' (textarea#content) nor 'excerpt'.
     
    538537                if ( !this.blog_id )
    539538                        this.blog_id = typeof window.autosaveL10n != 'undefined' ? window.autosaveL10n.blog_id : 0;
    540539
    541                 this.checkPost();
    542540                $(document).ready( function(){ self.run(); } );
    543541        },
    544542
    545543        // Run on DOM ready
    546544        run: function() {
    547                 var self = this, post_data;
     545                var self = this;
    548546
    549                 // Set the comparison string
    550                 if ( !this.lastsaveddata ) {
    551                         post_data = wp.autosave.getPostData();
     547                // Check if the local post data is different than the loaded post data.
     548                this.checkPost();
    552549
    553                         if ( post_data.content && $('#wp-content-wrap').hasClass('tmce-active') )
    554                                 this.lastsaveddata = post_data.post_title + ': ' + switchEditors.pre_wpautop( post_data.content );
    555                         else
    556                                 this.lastsaveddata = post_data.post_title + ': ' + post_data.content;
    557                 }
    558 
    559550                // Set the schedule
    560551                this.schedule = $.schedule({
    561552                        time: 15 * 1000,
     
    605596         * @return void
    606597         */
    607598        checkPost: function() {
    608                 var self = this, post_data = this.getData(), content, check_data, strip_tags = false, notice,
     599                var self = this, post_data = this.getData(), content, post_title, excerpt, notice,
    609600                        post_id = $('#post_ID').val() || 0, cookie = wpCookies.get( 'wp-saving-post-' + post_id );
    610601
    611602                if ( ! post_data )
     
    625616                if ( $('#has-newer-autosave').length )
    626617                        return;
    627618
    628                 // cookie == 'check' means the post was not saved properly, always show #local-storage-notice
    629                 if ( cookie != 'check' ) {
    630                         content = $('#content').val();
    631                         check_data = $.extend( {}, post_data );
     619                content = $('#content').val() || '';
     620                post_title = $('#title').val() || '';
     621                excerpt = $('#excerpt').val() || '';
    632622
    633                         if ( $('#wp-content-wrap').hasClass('tmce-active') )
    634                                 content = switchEditors.pre_wpautop( content );
     623                if ( $('#wp-content-wrap').hasClass('tmce-active') && typeof switchEditors != 'undefined' )
     624                        content = switchEditors.pre_wpautop( content );
    635625
    636                         if ( this.compare( content, check_data.content ) && this.compare( $('#title').val(), check_data.post_title ) && this.compare( $('#excerpt').val(), check_data.excerpt ) )
    637                                 return;
     626                // cookie == 'check' means the post was not saved properly, always show #local-storage-notice
     627                if ( cookie != 'check' && this.compare( content, post_data.content ) && this.compare( title, post_data.post_title ) && this.compare( excerpt, post_data.excerpt ) ) {
     628                        return;
    638629                }
    639630
    640631                this.restore_post_data = post_data;
    641                 this.undo_post_data = wp.autosave.getPostData();
     632                this.undo_post_data = {
     633                        content: content,
     634                        post_title: post_title,
     635                        excerpt: excerpt
     636                };
    642637
    643638                notice = $('#local-storage-notice');
    644639                $('.wrap h2').first().after( notice.addClass('updated').show() );
     
    666661
    667662                if ( post_data ) {
    668663                        // Set the last saved data
    669                         this.lastsaveddata = post_data.post_title + ': ' + post_data.content;
     664                        this.lastsaveddata = ( post_data.post_title || '' ) + ( post_data.content || '' ) + ( post_data.excerpt || '' );
    670665
    671666                        if ( $('#title').val() != post_data.post_title )
    672667                                $('#title').focus().val( post_data.post_title || '' );
     
    674669                        $('#excerpt').val( post_data.excerpt || '' );
    675670                        editor = typeof tinymce != 'undefined' && tinymce.get('content');
    676671
    677                         if ( editor && ! editor.isHidden() ) {
     672                        if ( editor && ! editor.isHidden() && typeof switchEditors != 'undefined' ) {
    678673                                // Make sure there's an undo level in the editor
    679674                                editor.undoManager.add();
    680675                                editor.setContent( post_data.content ? switchEditors.wpautop( post_data.content ) : '' );
  • wp-includes/script-loader.php

     
    103103                'dismiss' => __('Dismiss'),
    104104        ) );
    105105
    106         $scripts->add( 'autosave', "/wp-includes/js/autosave$suffix.js", array('schedule', 'wp-ajax-response', 'editor'), false, 1 );
     106        $scripts->add( 'autosave', "/wp-includes/js/autosave$suffix.js", array('schedule', 'wp-ajax-response'), false, 1 );
    107107
    108108        $scripts->add( 'heartbeat', "/wp-includes/js/heartbeat$suffix.js", array('jquery'), false, 1 );
    109109        did_action( 'init' ) && $scripts->localize( 'heartbeat', 'heartbeatSettings',