+ // Clear the window name. Otherwise if this is a former preview window where the user navigated to edit another post,
+ // and the first post is still being edited, clicking Preview there will use this window to show the preview.
+ window.name = '';
+
+ // Post locks: contain focus inside the dialog. If the dialog is shown, focus the first item.
+ $('#post-lock-dialog .notification-dialog').on( 'keydown', function(e) {
+ if ( e.which != 9 )
+ return;
+
+ var target = $(e.target);
+
+ if ( target.hasClass('wp-tab-first') && e.shiftKey ) {
+ $(this).find('.wp-tab-last').focus();
+ e.preventDefault();
+ } else if ( target.hasClass('wp-tab-last') && ! e.shiftKey ) {
+ $(this).find('.wp-tab-first').focus();
+ e.preventDefault();
+ }
+ }).filter(':visible').find('.wp-tab-first').focus();
+
+ // Set the heartbeat interval to 15 sec. if post lock dialogs are enabled
+ if ( wp.heartbeat && $('#post-lock-dialog').length ) {
+ wp.heartbeat.interval( 15 );
+ }
+
+ // The form is being submitted by the user
+ $submitButtons = $submitpost.find( ':submit, a.submitdelete, #post-preview' ).on( 'click.edit-post', function( event ) {
+ var $button = $(this);
+
+ if ( $button.hasClass('disabled') ) {
+ event.preventDefault();
+ return;
+ }
+
+ if ( $button.hasClass('submitdelete') || $button.is( '#post-preview' ) ) {
+ return;
+ }
+
+ // The form submission can be blocked from JS or by using HTML 5.0 validation on some fields.
+ // Run this only on an actual 'submit'.
+ $('form#post').off( 'submit.edit-post' ).on( 'submit.edit-post', function( event ) {
+ if ( event.isDefaultPrevented() ) {
+ return;
+ }
+
+ // Stop autosave
+ if ( wp.autosave ) {
+ wp.autosave.server.suspend();
+ }
+
+ releaseLock = false;
+ $(window).off( 'beforeunload.edit-post' );
+
+ $submitButtons.addClass( 'disabled' );
+
+ if ( $button.attr('id') === 'publish' ) {
+ $submitpost.find('#major-publishing-actions .spinner').show();
+ } else {
+ $submitpost.find('#minor-publishing .spinner').show();
+ }
+ });
+ });
+
+ // Submit the form saving a draft or an autosave, and show a preview in a new tab
+ $('#post-preview').on( 'click.post-preview', function( event ) {
+ var $this = $(this),
+ $form = $('form#post'),
+ $previewField = $('input#wp-preview'),
+ target = $this.attr('target') || 'wp-preview',
+ ua = navigator.userAgent.toLowerCase();
+
+ event.preventDefault();
+
+ if ( $this.hasClass('disabled') ) {
+ return;
+ }
+
+ if ( wp.autosave ) {
+ wp.autosave.server.tempBlockSave();
+ }
+
+ $previewField.val('dopreview');
+ $form.attr( 'target', target ).submit().attr( 'target', '' );
+
+ // Workaround for WebKit bug preventing a form submitting twice to the same action.
+ // https://bugs.webkit.org/show_bug.cgi?id=28633
+ if ( ua.indexOf('safari') !== -1 && ua.indexOf('chrome') === -1 ) {
+ $form.attr( 'action', function( index, value ) {
+ return value + '?t=' + ( new Date() ).getTime();
+ });
+ }
+
+ $previewField.val('');
+ });
+
+ // This code is meant to allow tabbing from Title to Post content.
+ $('#title').on( 'keydown.editor-focus', function( event ) {
+ var editor, $textarea;
+
+ if ( event.keyCode === 9 && ! event.ctrlKey && ! event.altKey && ! event.shiftKey ) {
+ editor = typeof tinymce != 'undefined' && tinymce.get('content');
+ $textarea = $('#content');
+
+ if ( editor && ! editor.isHidden() ) {
+ editor.focus();
+ } else if ( $textarea.length ) {
+ $textarea.focus();
+ } else {
+ return;
+ }
+
+ event.preventDefault();
+ }
+ });
+
+ // Autosave new posts after a title is typed
+ if ( $( '#auto_draft' ).val() ) {
+ $( '#title' ).blur( function() {
+ var cancel;
+
+ if ( ! this.value || $('#edit-slug-box > *').length ) {
+ return;
+ }
+
+ // Cancel the autosave when the blur was triggered by the user submitting the form
+ $('form#post').one( 'submit', function() {
+ cancel = true;
+ });
+
+ window.setTimeout( function() {
+ if ( ! cancel && wp.autosave ) {
+ wp.autosave.server.triggerSave();
+ }
+ }, 200 );
+ });
+ }
+
+ $document.on( 'autosave-disable-buttons.edit-post', function() {
+ $submitButtons.addClass( 'disabled' );
+ }).on( 'autosave-enable-buttons.edit-post', function() {
+ if ( ! wp.heartbeat || ! wp.heartbeat.hasConnectionError() ) {
+ $submitButtons.removeClass( 'disabled' );
+ }
+ }).on( 'before-autosave.edit-post', function() {
+ $( '.autosave-message' ).text( postL10n.savingText );
+ }).on( 'after-autosave.edit-post', function( event, data ) {
+ $( '.autosave-message' ).text( data.message );
+ });
+
+ $(window).on( 'beforeunload.edit-post', function() {
+ var editor = typeof tinymce !== 'undefined' && tinymce.get('content');
+
+ if ( ( editor && ! editor.isHidden() && editor.isDirty() ) ||
+ ( wp.autosave && wp.autosave.server.postChanged() ) ) {
+
+ return postL10n.saveAlert;
+ }
+ }).on( 'unload.edit-post', function( event ) {
+ if ( ! releaseLock ) {
+ return;
+ }
+
+ // Unload is triggered (by hand) on removing the Thickbox iframe.
+ // Make sure we process only the main document unload.
+ if ( event.target && event.target.nodeName != '#document' ) {
+ return;
+ }
+
+ $.ajax({
+ type: 'POST',
+ url: ajaxurl,
+ async: false,
+ data: {
+ action: 'wp-remove-post-lock',
+ _wpnonce: $('#_wpnonce').val(),
+ post_ID: $('#post_ID').val(),
+ active_post_lock: $('#active_post_lock').val()
+ }
+ });
+ });
+