From 71ae342050112bfef542fa9a23b7fcaf2dad0f5b Mon Sep 17 00:00:00 2001 From: Andrew Ozz Date: Wed, 16 Dec 2020 15:25:09 +0000 Subject: [PATCH] Editor: Fix improper triggering of the "Are you sure" prompt when navigating away from the old, "classic" Edit Post screen and there are no changes. Was triggered when there is an instance of TinyMCE in the Excerpt postbox. Props rodrigosprimo, jonathanstegall, kevin940726, azaozz. Fixes #52038. Built from https://develop.svn.wordpress.org/trunk@49807 git-svn-id: http://core.svn.wordpress.org/trunk@49530 1a063a9b-81f0-0310-95a4-ce76da25c4cd --- wp-admin/js/post.js | 16 +++++++--- wp-admin/js/post.min.js | 2 +- wp-includes/js/autosave.js | 54 ++++++++++++++++++++++++++++++---- wp-includes/js/autosave.min.js | 2 +- wp-includes/version.php | 2 +- 5 files changed, 63 insertions(+), 13 deletions(-) diff --git a/wp-admin/js/post.js b/wp-admin/js/post.js index 17445df17e..0c95258348 100644 --- a/wp-admin/js/post.js +++ b/wp-admin/js/post.js @@ -488,12 +488,20 @@ jQuery(document).ready( function($) { * When the user is trying to load another page, or reloads current page * show a confirmation dialog when there are unsaved changes. */ - $(window).on( 'beforeunload.edit-post', function() { - var editor = typeof tinymce !== 'undefined' && tinymce.get('content'); + $( window ).on( 'beforeunload.edit-post', function( event ) { + var editor = window.tinymce && window.tinymce.get( 'content' ); + var changed = false; - if ( ( editor && ! editor.isHidden() && editor.isDirty() ) || - ( wp.autosave && wp.autosave.server.postChanged() ) ) { + if ( wp.autosave ) { + changed = wp.autosave.server.postChanged(); + } else if ( editor ) { + changed = ( ! editor.isHidden() && editor.isDirty() ); + } + if ( changed ) { + event.preventDefault(); + // The return string is needed for browser compat. + // See https://developer.mozilla.org/en-US/docs/Web/API/Window/beforeunload_event. return __( 'The changes you made will be lost if you navigate away from this page.' ); } }).on( 'unload.edit-post', function( event ) { diff --git a/wp-admin/js/post.min.js b/wp-admin/js/post.min.js index 36b83be35c..5478ecfc4a 100644 --- a/wp-admin/js/post.min.js +++ b/wp-admin/js/post.min.js @@ -1,2 +1,2 @@ /*! This file is auto-generated */ -window.makeSlugeditClickable=window.editPermalink=function(){},window.wp=window.wp||{},function(n){var t=!1,s=wp.i18n.__;window.commentsBox={st:0,get:function(t,e){var i,a=this.st;return e=e||20,this.st+=e,this.total=t,n("#commentsdiv .spinner").addClass("is-active"),i={action:"get-comments",mode:"single",_ajax_nonce:n("#add_comment_nonce").val(),p:n("#post_ID").val(),start:a,number:e},n.post(ajaxurl,i,function(t){if(t=wpAjax.parseAjaxResponse(t),n("#commentsdiv .widefat").show(),n("#commentsdiv .spinner").removeClass("is-active"),"object"==typeof t&&t.responses[0])return n("#the-comment-list").append(t.responses[0].data),theList=theExtraList=null,n("a[className*=':']").unbind(),void(commentsBox.st>commentsBox.total?n("#show-comments").hide():n("#show-comments").show().children("a").text(s("Show more comments")));1!=t?n("#the-comment-list").append(''+wpAjax.broken+""):n("#show-comments").text(s("No more comments found."))}),!1},load:function(t){this.st=jQuery("#the-comment-list tr.comment:visible").length,this.get(t)}},window.WPSetThumbnailHTML=function(t){n(".inside","#postimagediv").html(t)},window.WPSetThumbnailID=function(t){var e=n('input[value="_thumbnail_id"]',"#list-table");0",{class:"avatar avatar-64 photo",width:64,height:64,alt:"",src:i.lock_error.avatar_src,srcset:i.lock_error.avatar_src_2x?i.lock_error.avatar_src_2x+" 2x":void 0}),a.find("div.post-locked-avatar").empty().append(s)),a.show().find(".currently-editing").text(i.lock_error.text),a.find(".wp-tab-first").focus()):i.new_lock&&n("#active_post_lock").val(i.new_lock))}).on("before-autosave.update-post-slug",function(){t=document.activeElement&&"title"===document.activeElement.id}).on("after-autosave.update-post-slug",function(){n("#edit-slug-box > *").length||t||n.post(ajaxurl,{action:"sample-permalink",post_id:n("#post_ID").val(),new_title:n("#title").val(),samplepermalinknonce:n("#samplepermalinknonce").val()},function(t){"-1"!=t&&n("#edit-slug-box").html(t)})})}(jQuery),function(s){var n,t;function a(){n=!1,window.clearTimeout(t),t=window.setTimeout(function(){n=!0},3e5)}s(document).on("heartbeat-send.wp-refresh-nonces",function(t,e){var i,a=s("#wp-auth-check-wrap");(n||a.length&&!a.hasClass("hidden"))&&(i=s("#post_ID").val())&&s("#_wpnonce").val()&&(e["wp-refresh-post-nonces"]={post_id:i})}).on("heartbeat-tick.wp-refresh-nonces",function(t,e){var i=e["wp-refresh-post-nonces"];i&&(a(),i.replace&&s.each(i.replace,function(t,e){s("#"+t).val(e)}),i.heartbeatNonce&&(window.heartbeatSettings.nonce=i.heartbeatNonce))}).ready(function(){a()})}(jQuery),jQuery(document).ready(function(h){var p,e,i,a,s,n,o,l,c,t,r,d,u=h("#content"),f=h(document),v=h("#post_ID").val()||0,m=h("#submitpost"),w=!0,b=h("#post-visibility-select"),g=h("#timestampdiv"),k=h("#post-status-select"),_=!!window.navigator.platform&&-1!==window.navigator.platform.indexOf("Mac"),y=new ClipboardJS(".copy-attachment-url.edit-media"),x=wp.i18n.__,C=wp.i18n._x;function D(t){r.hasClass("wp-editor-expand")||(c?o.theme.resizeTo(null,l+t.pageY):u.height(Math.max(50,l+t.pageY)),t.preventDefault())}function j(){var t,e;r.hasClass("wp-editor-expand")||(t=c?(o.focus(),((e=parseInt(h("#wp-content-editor-container .mce-toolbar-grp").height(),10))<10||200 *").length&&(h("form#post").one("submit",function(){t=!0}),window.setTimeout(function(){!t&&wp.autosave&&wp.autosave.server.triggerSave()},200))}),f.on("autosave-disable-buttons.edit-post",function(){i.addClass("disabled")}).on("autosave-enable-buttons.edit-post",function(){wp.heartbeat&&wp.heartbeat.hasConnectionError()||i.removeClass("disabled")}).on("before-autosave.edit-post",function(){h(".autosave-message").text(x("Saving Draft\u2026"))}).on("after-autosave.edit-post",function(t,e){h(".autosave-message").text(e.message),h(document.body).hasClass("post-new-php")&&h(".submitbox .submitdelete").show()}),h(window).on("beforeunload.edit-post",function(){var t="undefined"!=typeof tinymce&&tinymce.get("content");if(t&&!t.isHidden()&&t.isDirty()||wp.autosave&&wp.autosave.server.postChanged())return x("The changes you made will be lost if you navigate away from this page.")}).on("unload.edit-post",function(t){if(w&&(!t.target||"#document"==t.target.nodeName)){var e=h("#post_ID").val(),i=h("#active_post_lock").val();if(e&&i){var a={action:"wp-remove-post-lock",_wpnonce:h("#_wpnonce").val(),post_ID:e,active_post_lock:i};if(window.FormData&&window.navigator.sendBeacon){var s=new window.FormData;if(h.each(a,function(t,e){s.append(t,e)}),window.navigator.sendBeacon(ajaxurl,s))return}h.post({async:!1,data:a,url:ajaxurl})}}}),h("#tagsdiv-post_tag").length?window.tagBox&&window.tagBox.init():h(".meta-box-sortables").children("div.postbox").each(function(){if(0===this.id.indexOf("tagsdiv-"))return window.tagBox&&window.tagBox.init(),!1}),h(".categorydiv").each(function(){var t,e,i,s,a;(i=h(this).attr("id").split("-")).shift(),s=i.join("-"),a=s+"_tab","category"==s&&(a="cats"),h("a","#"+s+"-tabs").click(function(t){t.preventDefault();var e=h(this).attr("href");h(this).parent().addClass("tabs").siblings("li").removeClass("tabs"),h("#"+s+"-tabs").siblings(".tabs-panel").hide(),h(e).show(),"#"+s+"-all"==e?deleteUserSetting(a):setUserSetting(a,"pop")}),getUserSetting(a)&&h('a[href="#'+s+'-pop"]',"#"+s+"-tabs").click(),h("#new"+s).one("focus",function(){h(this).val("").removeClass("form-input-tip")}),h("#new"+s).keypress(function(t){13===t.keyCode&&(t.preventDefault(),h("#"+s+"-add-submit").click())}),h("#"+s+"-add-submit").click(function(){h("#new"+s).focus()}),t=function(t){return!!h("#new"+s).val()&&(t.data+="&"+h(":checked","#"+s+"checklist").serialize(),h("#"+s+"-add-submit").prop("disabled",!0),t)},e=function(t,e){var i,a=h("#new"+s+"_parent");h("#"+s+"-add-submit").prop("disabled",!1),"undefined"!=e.parsed.responses[0]&&(i=e.parsed.responses[0].supplemental.newcat_parent)&&(a.before(i),a.remove())},h("#"+s+"checklist").wpList({alt:"",response:s+"-ajax-response",addBefore:t,addAfter:e}),h("#"+s+"-add-toggle").click(function(t){t.preventDefault(),h("#"+s+"-adder").toggleClass("wp-hidden-children"),h('a[href="#'+s+'-all"]',"#"+s+"-tabs").click(),h("#new"+s).focus()}),h("#"+s+"checklist, #"+s+"checklist-pop").on("click",'li.popular-category > label input[type="checkbox"]',function(){var t=h(this),e=t.is(":checked"),i=t.val();i&&t.parents("#taxonomy-"+s).length&&h("#in-"+s+"-"+i+", #in-popular-"+s+"-"+i).prop("checked",e)})}),h("#postcustom").length&&h("#the-list").wpList({addBefore:function(t){return t.data+="&post_id="+h("#post_ID").val(),t},addAfter:function(){h("table#list-table").show()}}),h("#submitdiv").length&&(p=h("#timestamp").html(),e=h("#post-visibility-display").html(),a=function(){"public"!=b.find("input:radio:checked").val()?(h("#sticky").prop("checked",!1),h("#sticky-span").hide()):h("#sticky-span").show(),"password"!=b.find("input:radio:checked").val()?h("#password-span").hide():h("#password-span").show()},s=function(){if(!g.length)return!0;var t,e,i,a,s=h("#post_status"),n=h('option[value="publish"]',s),o=h("#aa").val(),l=h("#mm").val(),c=h("#jj").val(),r=h("#hh").val(),d=h("#mn").val();return t=new Date(o,l-1,c,r,d),e=new Date(h("#hidden_aa").val(),h("#hidden_mm").val()-1,h("#hidden_jj").val(),h("#hidden_hh").val(),h("#hidden_mn").val()),i=new Date(h("#cur_aa").val(),h("#cur_mm").val()-1,h("#cur_jj").val(),h("#cur_hh").val(),h("#cur_mn").val()),t.getFullYear()!=o||1+t.getMonth()!=l||t.getDate()!=c||t.getMinutes()!=d?(g.find(".timestamp-wrap").addClass("form-invalid"),!1):(g.find(".timestamp-wrap").removeClass("form-invalid"),i"+x("%1$s %2$s, %3$s at %4$s:%5$s").replace("%1$s",h('option[value="'+l+'"]',"#mm").attr("data-text")).replace("%2$s",parseInt(c,10)).replace("%3$s",o).replace("%4$s",("00"+r).slice(-2)).replace("%5$s",("00"+d).slice(-2))+" "),"private"==b.find("input:radio:checked").val()?(h("#publish").val(x("Update")),0===n.length?s.append('"):n.html(x("Privately Published")),h('option[value="publish"]',s).prop("selected",!0),h("#misc-publishing-actions .edit-post-status").hide()):("future"==h("#original_post_status").val()||"draft"==h("#original_post_status").val()?n.length&&(n.remove(),s.val(h("#hidden_post_status").val())):n.html(x("Published")),s.is(":hidden")&&h("#misc-publishing-actions .edit-post-status").show()),h("#post-status-display").text(wp.sanitize.stripTagsAndEncodeText(h("option:selected",s).text())),"private"==h("option:selected",s).val()||"publish"==h("option:selected",s).val()?h("#save-post").hide():(h("#save-post").show(),"pending"==h("option:selected",s).val()?h("#save-post").show().val(x("Save as Pending")):h("#save-post").show().val(x("Save Draft"))),!0)},h("#visibility .edit-visibility").click(function(t){t.preventDefault(),b.is(":hidden")&&(a(),b.slideDown("fast",function(){b.find('input[type="radio"]').first().focus()}),h(this).hide())}),b.find(".cancel-post-visibility").click(function(t){b.slideUp("fast"),h("#visibility-radio-"+h("#hidden-post-visibility").val()).prop("checked",!0),h("#post_password").val(h("#hidden-post-password").val()),h("#sticky").prop("checked",h("#hidden-post-sticky").prop("checked")),h("#post-visibility-display").html(e),h("#visibility .edit-visibility").show().focus(),s(),t.preventDefault()}),b.find(".save-post-visibility").click(function(t){var e="",i=b.find("input:radio:checked").val();switch(b.slideUp("fast"),h("#visibility .edit-visibility").show().focus(),s(),"public"!==i&&h("#sticky").prop("checked",!1),i){case"public":e=h("#sticky").prop("checked")?x("Public, Sticky"):x("Public");break;case"private":e=x("Private");break;case"password":e=x("Password Protected")}h("#post-visibility-display").text(e),t.preventDefault()}),b.find("input:radio").change(function(){a()}),g.siblings("a.edit-timestamp").click(function(t){g.is(":hidden")&&(g.slideDown("fast",function(){h("input, select",g.find(".timestamp-wrap")).first().focus()}),h(this).hide()),t.preventDefault()}),g.find(".cancel-timestamp").click(function(t){g.slideUp("fast").siblings("a.edit-timestamp").show().focus(),h("#mm").val(h("#hidden_mm").val()),h("#jj").val(h("#hidden_jj").val()),h("#aa").val(h("#hidden_aa").val()),h("#hh").val(h("#hidden_hh").val()),h("#mn").val(h("#hidden_mn").val()),s(),t.preventDefault()}),g.find(".save-timestamp").click(function(t){s()&&(g.slideUp("fast"),g.siblings("a.edit-timestamp").show().focus()),t.preventDefault()}),h("#post").on("submit",function(t){s()||(t.preventDefault(),g.show(),wp.autosave&&wp.autosave.enableButtons(),h("#publishing-action .spinner").removeClass("is-active"))}),k.siblings("a.edit-post-status").click(function(t){k.is(":hidden")&&(k.slideDown("fast",function(){k.find("select").focus()}),h(this).hide()),t.preventDefault()}),k.find(".save-post-status").click(function(t){k.slideUp("fast").siblings("a.edit-post-status").show().focus(),s(),t.preventDefault()}),k.find(".cancel-post-status").click(function(t){k.slideUp("fast").siblings("a.edit-post-status").show().focus(),h("#post_status").val(h("#hidden_post_status").val()),s(),t.preventDefault()})),h("#titlediv").on("click",".edit-slug",function(){!function(){var t,e,a,i,s=0,n=h("#post_name"),o=n.val(),l=h("#sample-permalink"),c=l.html(),r=h("#sample-permalink a").html(),d=h("#edit-slug-buttons"),p=d.html(),u=h("#editable-post-name-full");for(u.find("img").replaceWith(function(){return this.alt}),u=u.html(),l.html(r),a=h("#editable-post-name"),i=a.html(),d.html(' "),d.children(".save").click(function(){var i=a.children("input").val();i!=h("#editable-post-name-full").text()?h.post(ajaxurl,{action:"sample-permalink",post_id:v,new_slug:i,new_title:h("#title").val(),samplepermalinknonce:h("#samplepermalinknonce").val()},function(t){var e=h("#edit-slug-box");e.html(t),e.hasClass("hidden")&&e.fadeIn("fast",function(){e.removeClass("hidden")}),d.html(p),l.html(c),n.val(i),h(".edit-slug").focus(),wp.a11y.speak(x("Permalink saved"))}):d.children(".cancel").click()}),d.children(".cancel").click(function(){h("#view-post-btn").show(),a.html(i),d.html(p),l.html(c),n.val(o),h(".edit-slug").focus()}),t=0;tu.length/4?"":u,a.html('').children("input").keydown(function(t){var e=t.which;13===e&&(t.preventDefault(),d.children(".save").click()),27===e&&d.children(".cancel").click()}).keyup(function(){n.val(this.value)}).focus()}()}),window.wptitlehint=function(t){var e=h("#"+(t=t||"title")),i=h("#"+t+"-prompt-text");""===e.val()&&i.removeClass("screen-reader-text"),e.on("input",function(){""!==this.value?i.addClass("screen-reader-text"):i.removeClass("screen-reader-text")})},wptitlehint(),t=h("#post-status-info"),r=h("#postdivrich"),!u.length||"ontouchstart"in window?h("#content-resize-handle").hide():t.on("mousedown.wp-editor-resize",function(t){"undefined"!=typeof tinymce&&(o=tinymce.get("content")),o&&!o.isHidden()?(c=!0,l=h("#content_ifr").height()-t.pageY):(c=!1,l=u.height()-t.pageY,u.blur()),f.on("mousemove.wp-editor-resize",D).on("mouseup.wp-editor-resize mouseleave.wp-editor-resize",j),t.preventDefault()}).on("mouseup.wp-editor-resize",j),"undefined"!=typeof tinymce&&(h("#post-formats-select input.post-format").on("change.set-editor-class",function(){var t,e,i=this.id;i&&h(this).prop("checked")&&(t=tinymce.get("content"))&&((e=t.getBody()).className=e.className.replace(/\bpost-format-[^ ]+/,""),t.dom.addClass(e,"post-format-0"==i?"post-format-standard":i),h(document).trigger("editor-classchange"))}),h("#page_template").on("change.set-editor-class",function(){var t,e,i=h(this).val()||"";(i=i.substr(i.lastIndexOf("/")+1,i.length).replace(/\.php$/,"").replace(/\./g,"-"))&&(t=tinymce.get("content"))&&((e=t.getBody()).className=e.className.replace(/\bpage-template-[^ ]+/,""),t.dom.addClass(e,"page-template-"+i),h(document).trigger("editor-classchange"))})),u.on("keydown.wp-autosave",function(t){if(83===t.which){if(t.shiftKey||t.altKey||_&&(!t.metaKey||t.ctrlKey)||!_&&!t.ctrlKey)return;wp.autosave&&wp.autosave.server.triggerSave(),t.preventDefault()}}),"auto-draft"===h("#original_post_status").val()&&window.history.replaceState&&h("#publish").on("click",function(){d=window.location.href,d+=-1!==d.indexOf("?")?"&":"?",d+="wp-post-new-reload=true",window.history.replaceState(null,null,d)});y.on("success",function(t){var e=h(t.trigger),i=h(".success",e.closest(".copy-to-clipboard-container"));t.clearSelection(),e.focus(),clearTimeout(n),i.removeClass("hidden"),n=setTimeout(function(){i.addClass("hidden")},3e3),wp.a11y.speak(x("The file URL has been copied to your clipboard"))})}),function(t,l){t(function(){var i,a=t("#content"),s=t("#wp-word-count").find(".word-count"),n=0;function o(){var t,e;t=!i||i.isHidden()?a.val():i.getContent({format:"raw"}),(e=l.count(t))!==n&&s.text(e),n=e}t(document).on("tinymce-editor-init",function(t,e){"content"===e.id&&(i=e).on("nodechange keyup",_.debounce(o,1e3))}),a.on("input keyup",_.debounce(o,1e3)),o()})}(jQuery,new wp.utils.WordCounter); \ No newline at end of file +window.makeSlugeditClickable=window.editPermalink=function(){},window.wp=window.wp||{},function(n){var t=!1,s=wp.i18n.__;window.commentsBox={st:0,get:function(t,e){var i,a=this.st;return e=e||20,this.st+=e,this.total=t,n("#commentsdiv .spinner").addClass("is-active"),i={action:"get-comments",mode:"single",_ajax_nonce:n("#add_comment_nonce").val(),p:n("#post_ID").val(),start:a,number:e},n.post(ajaxurl,i,function(t){if(t=wpAjax.parseAjaxResponse(t),n("#commentsdiv .widefat").show(),n("#commentsdiv .spinner").removeClass("is-active"),"object"==typeof t&&t.responses[0])return n("#the-comment-list").append(t.responses[0].data),theList=theExtraList=null,n("a[className*=':']").unbind(),void(commentsBox.st>commentsBox.total?n("#show-comments").hide():n("#show-comments").show().children("a").text(s("Show more comments")));1!=t?n("#the-comment-list").append(''+wpAjax.broken+""):n("#show-comments").text(s("No more comments found."))}),!1},load:function(t){this.st=jQuery("#the-comment-list tr.comment:visible").length,this.get(t)}},window.WPSetThumbnailHTML=function(t){n(".inside","#postimagediv").html(t)},window.WPSetThumbnailID=function(t){var e=n('input[value="_thumbnail_id"]',"#list-table");0",{class:"avatar avatar-64 photo",width:64,height:64,alt:"",src:i.lock_error.avatar_src,srcset:i.lock_error.avatar_src_2x?i.lock_error.avatar_src_2x+" 2x":void 0}),a.find("div.post-locked-avatar").empty().append(s)),a.show().find(".currently-editing").text(i.lock_error.text),a.find(".wp-tab-first").focus()):i.new_lock&&n("#active_post_lock").val(i.new_lock))}).on("before-autosave.update-post-slug",function(){t=document.activeElement&&"title"===document.activeElement.id}).on("after-autosave.update-post-slug",function(){n("#edit-slug-box > *").length||t||n.post(ajaxurl,{action:"sample-permalink",post_id:n("#post_ID").val(),new_title:n("#title").val(),samplepermalinknonce:n("#samplepermalinknonce").val()},function(t){"-1"!=t&&n("#edit-slug-box").html(t)})})}(jQuery),function(s){var n,t;function a(){n=!1,window.clearTimeout(t),t=window.setTimeout(function(){n=!0},3e5)}s(document).on("heartbeat-send.wp-refresh-nonces",function(t,e){var i,a=s("#wp-auth-check-wrap");(n||a.length&&!a.hasClass("hidden"))&&(i=s("#post_ID").val())&&s("#_wpnonce").val()&&(e["wp-refresh-post-nonces"]={post_id:i})}).on("heartbeat-tick.wp-refresh-nonces",function(t,e){var i=e["wp-refresh-post-nonces"];i&&(a(),i.replace&&s.each(i.replace,function(t,e){s("#"+t).val(e)}),i.heartbeatNonce&&(window.heartbeatSettings.nonce=i.heartbeatNonce))}).ready(function(){a()})}(jQuery),jQuery(document).ready(function(h){var p,e,i,a,s,n,o,l,c,t,r,d,u=h("#content"),f=h(document),v=h("#post_ID").val()||0,m=h("#submitpost"),w=!0,b=h("#post-visibility-select"),g=h("#timestampdiv"),k=h("#post-status-select"),_=!!window.navigator.platform&&-1!==window.navigator.platform.indexOf("Mac"),y=new ClipboardJS(".copy-attachment-url.edit-media"),x=wp.i18n.__,C=wp.i18n._x;function D(t){r.hasClass("wp-editor-expand")||(c?o.theme.resizeTo(null,l+t.pageY):u.height(Math.max(50,l+t.pageY)),t.preventDefault())}function j(){var t,e;r.hasClass("wp-editor-expand")||(t=c?(o.focus(),((e=parseInt(h("#wp-content-editor-container .mce-toolbar-grp").height(),10))<10||200 *").length&&(h("form#post").one("submit",function(){t=!0}),window.setTimeout(function(){!t&&wp.autosave&&wp.autosave.server.triggerSave()},200))}),f.on("autosave-disable-buttons.edit-post",function(){i.addClass("disabled")}).on("autosave-enable-buttons.edit-post",function(){wp.heartbeat&&wp.heartbeat.hasConnectionError()||i.removeClass("disabled")}).on("before-autosave.edit-post",function(){h(".autosave-message").text(x("Saving Draft\u2026"))}).on("after-autosave.edit-post",function(t,e){h(".autosave-message").text(e.message),h(document.body).hasClass("post-new-php")&&h(".submitbox .submitdelete").show()}),h(window).on("beforeunload.edit-post",function(t){var e=window.tinymce&&window.tinymce.get("content"),i=!1;if(wp.autosave?i=wp.autosave.server.postChanged():e&&(i=!e.isHidden()&&e.isDirty()),i)return t.preventDefault(),x("The changes you made will be lost if you navigate away from this page.")}).on("unload.edit-post",function(t){if(w&&(!t.target||"#document"==t.target.nodeName)){var e=h("#post_ID").val(),i=h("#active_post_lock").val();if(e&&i){var a={action:"wp-remove-post-lock",_wpnonce:h("#_wpnonce").val(),post_ID:e,active_post_lock:i};if(window.FormData&&window.navigator.sendBeacon){var s=new window.FormData;if(h.each(a,function(t,e){s.append(t,e)}),window.navigator.sendBeacon(ajaxurl,s))return}h.post({async:!1,data:a,url:ajaxurl})}}}),h("#tagsdiv-post_tag").length?window.tagBox&&window.tagBox.init():h(".meta-box-sortables").children("div.postbox").each(function(){if(0===this.id.indexOf("tagsdiv-"))return window.tagBox&&window.tagBox.init(),!1}),h(".categorydiv").each(function(){var t,e,i,s,a;(i=h(this).attr("id").split("-")).shift(),s=i.join("-"),a=s+"_tab","category"==s&&(a="cats"),h("a","#"+s+"-tabs").click(function(t){t.preventDefault();var e=h(this).attr("href");h(this).parent().addClass("tabs").siblings("li").removeClass("tabs"),h("#"+s+"-tabs").siblings(".tabs-panel").hide(),h(e).show(),"#"+s+"-all"==e?deleteUserSetting(a):setUserSetting(a,"pop")}),getUserSetting(a)&&h('a[href="#'+s+'-pop"]',"#"+s+"-tabs").click(),h("#new"+s).one("focus",function(){h(this).val("").removeClass("form-input-tip")}),h("#new"+s).keypress(function(t){13===t.keyCode&&(t.preventDefault(),h("#"+s+"-add-submit").click())}),h("#"+s+"-add-submit").click(function(){h("#new"+s).focus()}),t=function(t){return!!h("#new"+s).val()&&(t.data+="&"+h(":checked","#"+s+"checklist").serialize(),h("#"+s+"-add-submit").prop("disabled",!0),t)},e=function(t,e){var i,a=h("#new"+s+"_parent");h("#"+s+"-add-submit").prop("disabled",!1),"undefined"!=e.parsed.responses[0]&&(i=e.parsed.responses[0].supplemental.newcat_parent)&&(a.before(i),a.remove())},h("#"+s+"checklist").wpList({alt:"",response:s+"-ajax-response",addBefore:t,addAfter:e}),h("#"+s+"-add-toggle").click(function(t){t.preventDefault(),h("#"+s+"-adder").toggleClass("wp-hidden-children"),h('a[href="#'+s+'-all"]',"#"+s+"-tabs").click(),h("#new"+s).focus()}),h("#"+s+"checklist, #"+s+"checklist-pop").on("click",'li.popular-category > label input[type="checkbox"]',function(){var t=h(this),e=t.is(":checked"),i=t.val();i&&t.parents("#taxonomy-"+s).length&&h("#in-"+s+"-"+i+", #in-popular-"+s+"-"+i).prop("checked",e)})}),h("#postcustom").length&&h("#the-list").wpList({addBefore:function(t){return t.data+="&post_id="+h("#post_ID").val(),t},addAfter:function(){h("table#list-table").show()}}),h("#submitdiv").length&&(p=h("#timestamp").html(),e=h("#post-visibility-display").html(),a=function(){"public"!=b.find("input:radio:checked").val()?(h("#sticky").prop("checked",!1),h("#sticky-span").hide()):h("#sticky-span").show(),"password"!=b.find("input:radio:checked").val()?h("#password-span").hide():h("#password-span").show()},s=function(){if(!g.length)return!0;var t,e,i,a,s=h("#post_status"),n=h('option[value="publish"]',s),o=h("#aa").val(),l=h("#mm").val(),c=h("#jj").val(),r=h("#hh").val(),d=h("#mn").val();return t=new Date(o,l-1,c,r,d),e=new Date(h("#hidden_aa").val(),h("#hidden_mm").val()-1,h("#hidden_jj").val(),h("#hidden_hh").val(),h("#hidden_mn").val()),i=new Date(h("#cur_aa").val(),h("#cur_mm").val()-1,h("#cur_jj").val(),h("#cur_hh").val(),h("#cur_mn").val()),t.getFullYear()!=o||1+t.getMonth()!=l||t.getDate()!=c||t.getMinutes()!=d?(g.find(".timestamp-wrap").addClass("form-invalid"),!1):(g.find(".timestamp-wrap").removeClass("form-invalid"),i"+x("%1$s %2$s, %3$s at %4$s:%5$s").replace("%1$s",h('option[value="'+l+'"]',"#mm").attr("data-text")).replace("%2$s",parseInt(c,10)).replace("%3$s",o).replace("%4$s",("00"+r).slice(-2)).replace("%5$s",("00"+d).slice(-2))+" "),"private"==b.find("input:radio:checked").val()?(h("#publish").val(x("Update")),0===n.length?s.append('"):n.html(x("Privately Published")),h('option[value="publish"]',s).prop("selected",!0),h("#misc-publishing-actions .edit-post-status").hide()):("future"==h("#original_post_status").val()||"draft"==h("#original_post_status").val()?n.length&&(n.remove(),s.val(h("#hidden_post_status").val())):n.html(x("Published")),s.is(":hidden")&&h("#misc-publishing-actions .edit-post-status").show()),h("#post-status-display").text(wp.sanitize.stripTagsAndEncodeText(h("option:selected",s).text())),"private"==h("option:selected",s).val()||"publish"==h("option:selected",s).val()?h("#save-post").hide():(h("#save-post").show(),"pending"==h("option:selected",s).val()?h("#save-post").show().val(x("Save as Pending")):h("#save-post").show().val(x("Save Draft"))),!0)},h("#visibility .edit-visibility").click(function(t){t.preventDefault(),b.is(":hidden")&&(a(),b.slideDown("fast",function(){b.find('input[type="radio"]').first().focus()}),h(this).hide())}),b.find(".cancel-post-visibility").click(function(t){b.slideUp("fast"),h("#visibility-radio-"+h("#hidden-post-visibility").val()).prop("checked",!0),h("#post_password").val(h("#hidden-post-password").val()),h("#sticky").prop("checked",h("#hidden-post-sticky").prop("checked")),h("#post-visibility-display").html(e),h("#visibility .edit-visibility").show().focus(),s(),t.preventDefault()}),b.find(".save-post-visibility").click(function(t){var e="",i=b.find("input:radio:checked").val();switch(b.slideUp("fast"),h("#visibility .edit-visibility").show().focus(),s(),"public"!==i&&h("#sticky").prop("checked",!1),i){case"public":e=h("#sticky").prop("checked")?x("Public, Sticky"):x("Public");break;case"private":e=x("Private");break;case"password":e=x("Password Protected")}h("#post-visibility-display").text(e),t.preventDefault()}),b.find("input:radio").change(function(){a()}),g.siblings("a.edit-timestamp").click(function(t){g.is(":hidden")&&(g.slideDown("fast",function(){h("input, select",g.find(".timestamp-wrap")).first().focus()}),h(this).hide()),t.preventDefault()}),g.find(".cancel-timestamp").click(function(t){g.slideUp("fast").siblings("a.edit-timestamp").show().focus(),h("#mm").val(h("#hidden_mm").val()),h("#jj").val(h("#hidden_jj").val()),h("#aa").val(h("#hidden_aa").val()),h("#hh").val(h("#hidden_hh").val()),h("#mn").val(h("#hidden_mn").val()),s(),t.preventDefault()}),g.find(".save-timestamp").click(function(t){s()&&(g.slideUp("fast"),g.siblings("a.edit-timestamp").show().focus()),t.preventDefault()}),h("#post").on("submit",function(t){s()||(t.preventDefault(),g.show(),wp.autosave&&wp.autosave.enableButtons(),h("#publishing-action .spinner").removeClass("is-active"))}),k.siblings("a.edit-post-status").click(function(t){k.is(":hidden")&&(k.slideDown("fast",function(){k.find("select").focus()}),h(this).hide()),t.preventDefault()}),k.find(".save-post-status").click(function(t){k.slideUp("fast").siblings("a.edit-post-status").show().focus(),s(),t.preventDefault()}),k.find(".cancel-post-status").click(function(t){k.slideUp("fast").siblings("a.edit-post-status").show().focus(),h("#post_status").val(h("#hidden_post_status").val()),s(),t.preventDefault()})),h("#titlediv").on("click",".edit-slug",function(){!function(){var t,e,a,i,s=0,n=h("#post_name"),o=n.val(),l=h("#sample-permalink"),c=l.html(),r=h("#sample-permalink a").html(),d=h("#edit-slug-buttons"),p=d.html(),u=h("#editable-post-name-full");for(u.find("img").replaceWith(function(){return this.alt}),u=u.html(),l.html(r),a=h("#editable-post-name"),i=a.html(),d.html(' "),d.children(".save").click(function(){var i=a.children("input").val();i!=h("#editable-post-name-full").text()?h.post(ajaxurl,{action:"sample-permalink",post_id:v,new_slug:i,new_title:h("#title").val(),samplepermalinknonce:h("#samplepermalinknonce").val()},function(t){var e=h("#edit-slug-box");e.html(t),e.hasClass("hidden")&&e.fadeIn("fast",function(){e.removeClass("hidden")}),d.html(p),l.html(c),n.val(i),h(".edit-slug").focus(),wp.a11y.speak(x("Permalink saved"))}):d.children(".cancel").click()}),d.children(".cancel").click(function(){h("#view-post-btn").show(),a.html(i),d.html(p),l.html(c),n.val(o),h(".edit-slug").focus()}),t=0;tu.length/4?"":u,a.html('').children("input").keydown(function(t){var e=t.which;13===e&&(t.preventDefault(),d.children(".save").click()),27===e&&d.children(".cancel").click()}).keyup(function(){n.val(this.value)}).focus()}()}),window.wptitlehint=function(t){var e=h("#"+(t=t||"title")),i=h("#"+t+"-prompt-text");""===e.val()&&i.removeClass("screen-reader-text"),e.on("input",function(){""!==this.value?i.addClass("screen-reader-text"):i.removeClass("screen-reader-text")})},wptitlehint(),t=h("#post-status-info"),r=h("#postdivrich"),!u.length||"ontouchstart"in window?h("#content-resize-handle").hide():t.on("mousedown.wp-editor-resize",function(t){"undefined"!=typeof tinymce&&(o=tinymce.get("content")),o&&!o.isHidden()?(c=!0,l=h("#content_ifr").height()-t.pageY):(c=!1,l=u.height()-t.pageY,u.blur()),f.on("mousemove.wp-editor-resize",D).on("mouseup.wp-editor-resize mouseleave.wp-editor-resize",j),t.preventDefault()}).on("mouseup.wp-editor-resize",j),"undefined"!=typeof tinymce&&(h("#post-formats-select input.post-format").on("change.set-editor-class",function(){var t,e,i=this.id;i&&h(this).prop("checked")&&(t=tinymce.get("content"))&&((e=t.getBody()).className=e.className.replace(/\bpost-format-[^ ]+/,""),t.dom.addClass(e,"post-format-0"==i?"post-format-standard":i),h(document).trigger("editor-classchange"))}),h("#page_template").on("change.set-editor-class",function(){var t,e,i=h(this).val()||"";(i=i.substr(i.lastIndexOf("/")+1,i.length).replace(/\.php$/,"").replace(/\./g,"-"))&&(t=tinymce.get("content"))&&((e=t.getBody()).className=e.className.replace(/\bpage-template-[^ ]+/,""),t.dom.addClass(e,"page-template-"+i),h(document).trigger("editor-classchange"))})),u.on("keydown.wp-autosave",function(t){if(83===t.which){if(t.shiftKey||t.altKey||_&&(!t.metaKey||t.ctrlKey)||!_&&!t.ctrlKey)return;wp.autosave&&wp.autosave.server.triggerSave(),t.preventDefault()}}),"auto-draft"===h("#original_post_status").val()&&window.history.replaceState&&h("#publish").on("click",function(){d=window.location.href,d+=-1!==d.indexOf("?")?"&":"?",d+="wp-post-new-reload=true",window.history.replaceState(null,null,d)});y.on("success",function(t){var e=h(t.trigger),i=h(".success",e.closest(".copy-to-clipboard-container"));t.clearSelection(),e.focus(),clearTimeout(n),i.removeClass("hidden"),n=setTimeout(function(){i.addClass("hidden")},3e3),wp.a11y.speak(x("The file URL has been copied to your clipboard"))})}),function(t,l){t(function(){var i,a=t("#content"),s=t("#wp-word-count").find(".word-count"),n=0;function o(){var t,e;t=!i||i.isHidden()?a.val():i.getContent({format:"raw"}),(e=l.count(t))!==n&&s.text(e),n=e}t(document).on("tinymce-editor-init",function(t,e){"content"===e.id&&(i=e).on("nodechange keyup",_.debounce(o,1e3))}),a.on("input keyup",_.debounce(o,1e3)),o()})}(jQuery,new wp.utils.WordCounter); \ No newline at end of file diff --git a/wp-includes/js/autosave.js b/wp-includes/js/autosave.js index d2f06b8046..a1bd570c68 100644 --- a/wp-includes/js/autosave.js +++ b/wp-includes/js/autosave.js @@ -36,8 +36,24 @@ window.autosave = function() { */ function autosave() { var initialCompareString, - lastTriggerSave = 0, - $document = $(document); + initialCompareData = {}, + lastTriggerSave = 0, + $document = $( document ); + + /** + * Sets the initial compare data. + * + * @since 5.6.1 + */ + function setInitialCompare() { + initialCompareData = { + post_title: $( '#title' ).val() || '', + content: $( '#content' ).val() || '', + excerpt: $( '#excerpt' ).val() || '' + }; + + initialCompareString = getCompareString( initialCompareData ); + } /** * Returns the data saved in both local and remote autosave. @@ -686,6 +702,32 @@ window.autosave = function() { * @return {boolean} True if the post has been changed. */ function postChanged() { + var changed = false; + + // If there are TinyMCE instances, loop through them. + if ( window.tinymce ) { + window.tinymce.each( [ 'content', 'excerpt' ], function( field ) { + var editor = window.tinymce.get( field ); + + if ( ! editor || editor.isHidden() ) { + if ( $( '#' + field ).val() !== initialCompareData[ field ] ) { + changed = true; + // Break. + return false; + } + } else if ( editor.isDirty() ) { + changed = true; + return false; + } + } ); + + if ( $( '#title' ).val() !== initialCompareData.post_title ) { + changed = true; + } + + return changed; + } + return getCompareString() !== initialCompareString; } @@ -832,16 +874,16 @@ window.autosave = function() { * @return {void} */ $document.on( 'tinymce-editor-init.autosave', function( event, editor ) { - if ( editor.id === 'content' ) { + // Reset the initialCompare data after the TinyMCE instances have been initialized. + if ( 'content' === editor.id || 'excerpt' === editor.id ) { window.setTimeout( function() { editor.save(); - initialCompareString = getCompareString(); + setInitialCompare(); }, 1000 ); } }).ready( function() { - // Set the initial compare string in case TinyMCE is not used or not loaded first. - initialCompareString = getCompareString(); + setInitialCompare(); }); return { diff --git a/wp-includes/js/autosave.min.js b/wp-includes/js/autosave.min.js index 3eb3e4932b..4837e421c2 100644 --- a/wp-includes/js/autosave.min.js +++ b/wp-includes/js/autosave.min.js @@ -1,2 +1,2 @@ /*! This file is auto-generated */ -window.autosave=function(){return!0},function(c,o){function a(t){var e,n,o,a=(new Date).getTime(),i=[],s=p();return s&&s.isDirty()&&!s.isHidden()&&I