WordPress.org

Make WordPress Core

Ticket #52038: 52038.diff

File 52038.diff, 3.6 KB (added by azaozz, 10 months ago)
  • src/js/_enqueues/admin/post.js

     
    488488         * When the user is trying to load another page, or reloads current page
    489489         * show a confirmation dialog when there are unsaved changes.
    490490         */
    491         $(window).on( 'beforeunload.edit-post', function() {
    492                 var editor = typeof tinymce !== 'undefined' && tinymce.get('content');
     491        $( window ).on( 'beforeunload.edit-post', function( event ) {
     492                var editor  = window.tinymce && window.tinymce.get( 'content' );
     493                var changed = false;
    493494
    494                 if ( ( editor && ! editor.isHidden() && editor.isDirty() ) ||
    495                         ( wp.autosave && wp.autosave.server.postChanged() ) ) {
     495                if ( wp.autosave ) {
     496                        changed = wp.autosave.server.postChanged();
     497                } else if ( editor ) {
     498                        changed = ( ! editor.isHidden() && editor.isDirty() );
     499                }
    496500
     501                if ( changed ) {
     502                        event.preventDefault();
     503                        // The return string is needed for browser compat.
     504                        // See https://developer.mozilla.org/en-US/docs/Web/API/Window/beforeunload_event.
    497505                        return __( 'The changes you made will be lost if you navigate away from this page.' );
    498506                }
    499507        }).on( 'unload.edit-post', function( event ) {
  • src/js/_enqueues/wp/autosave.js

     
    3636         */
    3737        function autosave() {
    3838                var initialCompareString,
    39                         lastTriggerSave = 0,
    40                         $document = $(document);
     39                        initialCompareData = {},
     40                        lastTriggerSave    = 0,
     41                        $document          = $( document );
    4142
    4243                /**
     44                 * Sets the initial compare data.
     45                 *
     46                 * @since 5.6.1
     47                 */
     48                function setInitialCompare() {
     49                        initialCompareData = {
     50                                post_title: $( '#title' ).val() || '',
     51                                content: $( '#content' ).val() || '',
     52                                excerpt: $( '#excerpt' ).val() || ''
     53                        };
     54
     55                        initialCompareString = getCompareString( initialCompareData );
     56                }
     57
     58                /**
    4359                 * Returns the data saved in both local and remote autosave.
    4460                 *
    4561                 * @since 3.9.0
     
    686702                         * @return {boolean} True if the post has been changed.
    687703                         */
    688704                        function postChanged() {
     705                                var changed = false;
     706
     707                                // If there are TinyMCE instances, loop through them.
     708                                if ( window.tinymce ) {
     709                                        window.tinymce.each( [ 'content', 'excerpt' ], function( field ) {
     710                                                var editor = window.tinymce.get( field );
     711
     712                                                if ( ! editor || editor.isHidden() ) {
     713                                                        if ( $( '#' + field ).val() !== initialCompareData[ field ] ) {
     714                                                                changed = true;
     715                                                                // Break.
     716                                                                return false;
     717                                                        }
     718
     719                                                        return;
     720                                                }
     721
     722                                                if ( editor.isDirty() ) {
     723                                                        changed = true;
     724                                                        return false;
     725                                                }
     726                                        } );
     727
     728                                        if ( $( '#title' ).val() !== initialCompareData.post_title ) {
     729                                                changed = true;
     730                                        }
     731
     732                                        return changed;
     733                                }
     734
    689735                                return getCompareString() !== initialCompareString;
    690736                        }
    691737
     
    832878                 * @return {void}
    833879                 */
    834880                $document.on( 'tinymce-editor-init.autosave', function( event, editor ) {
    835                         if ( editor.id === 'content' ) {
     881                        // Reset the initialCompare data after the TinyMCE instances have been initialized.
     882                        if ( 'content' === editor.id || 'excerpt' === editor.id ) {
    836883                                window.setTimeout( function() {
    837884                                        editor.save();
    838                                         initialCompareString = getCompareString();
     885                                        setInitialCompare();
    839886                                }, 1000 );
    840887                        }
    841888                }).ready( function() {
    842 
    843889                        // Set the initial compare string in case TinyMCE is not used or not loaded first.
    844                         initialCompareString = getCompareString();
     890                        setInitialCompare();
    845891                });
    846892
    847893                return {