diff --git a/src/wp-admin/js/post.js b/src/wp-admin/js/post.js index 7a1b363550..0b621464e5 100644 --- a/src/wp-admin/js/post.js +++ b/src/wp-admin/js/post.js @@ -1,10 +1,12 @@ -/* global postL10n, ajaxurl, wpAjax, setPostThumbnailL10n, postboxes, pagenow, tinymce, alert, deleteUserSetting, getUserSetting, setUserSetting */ -/* global theList:true, theExtraList:true, autosave:true */ +/* global postL10n, ajaxurl, wpAjax, setPostThumbnailL10n, postboxes, pagenow, tinymce, alert, deleteUserSetting */ +/* global theList:true, theExtraList:true, getUserSetting, setUserSetting */ -var tagBox, commentsBox, WPSetThumbnailHTML, WPSetThumbnailID, WPRemoveThumbnail, wptitlehint; +var tagBox, commentsBox, WPSetThumbnailHTML, WPSetThumbnailID, WPRemoveThumbnail, wptitlehint, makeSlugeditClickable, editPermalink; // Back-compat: prevent fatal errors makeSlugeditClickable = editPermalink = function(){}; +window.wp = window.wp || {}; + // return an array with any duplicate, whitespace or values removed function array_unique_noempty(a) { var out = []; @@ -283,10 +285,10 @@ $(document).on( 'heartbeat-send.refresh-lock', function( e, data ) { wrap = $('#post-lock-dialog'); if ( wrap.length && ! wrap.is(':visible') ) { - if ( typeof wp != 'undefined' && wp.autosave ) { + if ( wp.autosave ) { // Save the latest changes and disable $(document).one( 'heartbeat-tick', function() { - wp.autosave.server.disable(); + wp.autosave.server.suspend(); wrap.removeClass('saving').addClass('saved'); $(window).off( 'beforeunload.edit-post' ); }); @@ -313,7 +315,7 @@ $(document).on( 'heartbeat-send.refresh-lock', function( e, data ) { $.post( ajaxurl, { action: 'sample-permalink', post_id: $('#post_ID').val(), - new_title: typeof fullscreen != 'undefined' && fullscreen.settings.visible ? $('#wp-fullscreen-title').val() : $('#title').val(), + new_title: $('#title').val(), samplepermalinknonce: $('#samplepermalinknonce').val() }, function( data ) { @@ -368,7 +370,7 @@ $(document).on( 'heartbeat-send.refresh-lock', function( e, data ) { }(jQuery)); jQuery(document).ready( function($) { - var stamp, visibility, $submitButtons, + var stamp, visibility, $submitButtons, updateVisibility, updateText, sticky = '', last = 0, co = $('#content'), @@ -399,7 +401,7 @@ jQuery(document).ready( function($) { }).filter(':visible').find('.wp-tab-first').focus(); // Set the heartbeat interval to 15 sec. if post lock dialogs are enabled - if ( typeof wp !== 'undefined' && wp.heartbeat && $('#post-lock-dialog').length ) { + if ( wp.heartbeat && $('#post-lock-dialog').length ) { wp.heartbeat.interval( 15 ); } @@ -407,7 +409,7 @@ jQuery(document).ready( function($) { $submitButtons = $submitpost.find( ':button, :submit, a.submitdelete, #post-preview' ).on( 'click.edit-post', function( event ) { var $button = $(this); - if ( $button.hasClass('button-disabled') ) { + if ( $button.hasClass('disabled') ) { event.preventDefault(); return; } @@ -423,14 +425,15 @@ jQuery(document).ready( function($) { return; } - if ( typeof wp != 'undefined' && wp.autosave ) { - wp.autosave.server.disable(); + // Stop autosave + if ( wp.autosave ) { + wp.autosave.server.suspend(); } releaseLock = false; $(window).off( 'beforeunload.edit-post' ); - $submitButtons.addClass( 'button-disabled' ); + $submitButtons.addClass( 'disabled' ); if ( $button.attr('id') === 'publish' ) { $submitpost.find('#major-publishing-actions .spinner').show(); @@ -447,14 +450,14 @@ jQuery(document).ready( function($) { $previewField = $('input#wp-preview'), target = $this.attr('target') || 'wp-preview', ua = navigator.userAgent.toLowerCase(); - + event.preventDefault(); - if ( $this.prop('disabled') ) { + if ( $this.hasClass('disabled') ) { return; } - if ( typeof wp != 'undefined' && wp.autosave ) { + if ( wp.autosave ) { wp.autosave.server.tempBlockSave(); } @@ -496,27 +499,31 @@ jQuery(document).ready( function($) { return; } - if ( typeof wp != 'undefined' && wp.autosave ) { + if ( wp.autosave ) { wp.autosave.server.triggerSave(); } }); } $(document).on( 'autosave-disable-buttons.edit-post', function() { - $submitButtons.addClass( 'button-disabled' ); + $submitButtons.addClass( 'disabled' ); }).on( 'autosave-enable-buttons.edit-post', function() { - if ( ! window.wp || ! window.wp.heartbeat || ! window.wp.heartbeat.hasConnectionError() ) { - $submitButtons.removeClass( 'button-disabled' ); + 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() ) || - ( typeof wp !== 'undefined' && wp.autosave && wp.autosave.server.postChanged() ) ) { + if ( ( editor && ! editor.isHidden() && editor.isDirty() ) || + ( wp.autosave && wp.autosave.server.postChanged() ) ) { - return autosaveL10n.saveAlert; + return postL10n.saveAlert; } }).on( 'unload.edit-post', function( event ) { if ( ! releaseLock ) { @@ -817,7 +824,7 @@ jQuery(document).ready( function($) { event.preventDefault(); $timestampdiv.show(); - if ( typeof wp !== 'undefined' && wp.autosave ) { + if ( wp.autosave ) { wp.autosave.enableButtons(); } @@ -848,70 +855,76 @@ jQuery(document).ready( function($) { } // end submitdiv // permalink - if ( $editSlugWrap.length ) { - function editPermalink() { - var i, c = 0, e = $('#editable-post-name'), revert_e = e.html(), real_slug = $('#post_name'), - revert_slug = real_slug.val(), b = $('#edit-slug-buttons'), revert_b = b.html(), - full = $('#editable-post-name-full').html(); + function editPermalink() { + var i, slug_value, + c = 0, + e = $('#editable-post-name'), + revert_e = e.html(), + real_slug = $('#post_name'), + revert_slug = real_slug.val(), + b = $('#edit-slug-buttons'), + revert_b = b.html(), + full = $('#editable-post-name-full').html(); - $('#view-post-btn').hide(); - b.html(''+postL10n.ok+' '+postL10n.cancel+''); - b.children('.save').click(function() { - var new_slug = e.children('input').val(); - if ( new_slug == $('#editable-post-name-full').text() ) { - return $('#edit-slug-buttons .cancel').click(); - } - $.post(ajaxurl, { - action: 'sample-permalink', - post_id: postId, - new_slug: new_slug, - new_title: $('#title').val(), - samplepermalinknonce: $('#samplepermalinknonce').val() - }, function(data) { - var box = $('#edit-slug-box'); - box.html(data); - if (box.hasClass('hidden')) { - box.fadeIn('fast', function () { - box.removeClass('hidden'); - }); - } - b.html(revert_b); - real_slug.val(new_slug); - $('#view-post-btn').show(); - }); - return false; - }); - - $('#edit-slug-buttons .cancel').click(function() { - $('#view-post-btn').show(); - e.html(revert_e); - b.html(revert_b); - real_slug.val(revert_slug); - return false; - }); - - for ( i = 0; i < full.length; ++i ) { - if ( '%' == full.charAt(i) ) - c++; + $('#view-post-btn').hide(); + b.html(''+postL10n.ok+' '+postL10n.cancel+''); + b.children('.save').click(function() { + var new_slug = e.children('input').val(); + if ( new_slug == $('#editable-post-name-full').text() ) { + return $('#edit-slug-buttons .cancel').click(); } - - slug_value = ( c > full.length / 4 ) ? '' : full; - e.html('').children('input').keypress(function(e) { - var key = e.keyCode || 0; - // on enter, just save the new slug, don't save the post - if ( 13 == key ) { - b.children('.save').click(); - return false; + $.post(ajaxurl, { + action: 'sample-permalink', + post_id: postId, + new_slug: new_slug, + new_title: $('#title').val(), + samplepermalinknonce: $('#samplepermalinknonce').val() + }, function(data) { + var box = $('#edit-slug-box'); + box.html(data); + if (box.hasClass('hidden')) { + box.fadeIn('fast', function () { + box.removeClass('hidden'); + }); } - if ( 27 == key ) { - b.children('.cancel').click(); - return false; - } - } ).keyup( function() { - real_slug.val(this.value); - }).focus(); - }; + b.html(revert_b); + real_slug.val(new_slug); + $('#view-post-btn').show(); + }); + return false; + }); + $('#edit-slug-buttons .cancel').click(function() { + $('#view-post-btn').show(); + e.html(revert_e); + b.html(revert_b); + real_slug.val(revert_slug); + return false; + }); + + for ( i = 0; i < full.length; ++i ) { + if ( '%' == full.charAt(i) ) + c++; + } + + slug_value = ( c > full.length / 4 ) ? '' : full; + e.html('').children('input').keypress(function(e) { + var key = e.keyCode || 0; + // on enter, just save the new slug, don't save the post + if ( 13 == key ) { + b.children('.save').click(); + return false; + } + if ( 27 == key ) { + b.children('.cancel').click(); + return false; + } + } ).keyup( function() { + real_slug.val(this.value); + }).focus(); + } + + if ( $editSlugWrap.length ) { $editSlugWrap.on( 'click', function( event ) { var $target = $( event.target ); @@ -971,7 +984,7 @@ jQuery(document).ready( function($) { $document = $( document ), $textarea = $('textarea#content'), $handle = $('#post-status-info'); - + // No point for touch devices if ( ! $textarea.length || 'ontouchstart' in window ) { return; diff --git a/src/wp-includes/css/buttons.css b/src/wp-includes/css/buttons.css index c941133d53..3bde649288 100644 --- a/src/wp-includes/css/buttons.css +++ b/src/wp-includes/css/buttons.css @@ -165,8 +165,10 @@ TABLE OF CONTENTS: .wp-core-ui .button[disabled], .wp-core-ui .button:disabled, +.wp-core-ui .button.disabled, .wp-core-ui .button-secondary[disabled], .wp-core-ui .button-secondary:disabled, +.wp-core-ui .button-secondary.disabled, .wp-core-ui .button-disabled { color: #aaa !important; border-color: #ddd !important; @@ -221,7 +223,8 @@ TABLE OF CONTENTS: .wp-core-ui .button-primary[disabled], .wp-core-ui .button-primary:disabled, -.wp-core-ui .button-primary-disabled { +.wp-core-ui .button-primary-disabled, +.wp-core-ui .button-primary.disabled { color: #94cde7 !important; background: #298cba !important; border-color: #1b607f !important; diff --git a/src/wp-includes/js/autosave.js b/src/wp-includes/js/autosave.js index ab6952b08f..11251e19b0 100644 --- a/src/wp-includes/js/autosave.js +++ b/src/wp-includes/js/autosave.js @@ -6,7 +6,6 @@ window.autosave = function(){}; function autosave() { var initialCompareString, lastTriggerSave = 0, - isSuspended = false, $document = $(document); /** @@ -87,18 +86,11 @@ window.autosave = function(){}; $document.trigger( 'autosave-enable-buttons' ); } - function suspend() { - isSuspended = true; - } - - function resume() { - isSuspended = false; - } - // Autosave in localStorage function autosaveLocal() { var restorePostData, undoPostData, blog_id, post_id, hasStorage, intervalTimer, - lastCompareString; + lastCompareString, + isSuspended = false; // Check if the browser supports sessionStorage and it's not disabled function checkStorage() { @@ -196,6 +188,14 @@ window.autosave = function(){}; return setStorage( stored ); } + function suspend() { + isSuspended = true; + } + + function resume() { + isSuspended = false; + } + /** * Save post data for the current post * @@ -415,14 +415,17 @@ window.autosave = function(){}; return { hasStorage: hasStorage, getSavedPostData: getSavedPostData, - save: save + save: save, + suspend: suspend, + resume: resume }; } // Autosave on the server function autosaveServer() { - var _disabled, _blockSave, _blockSaveTimer, previousCompareString, lastCompareString, - nextRun = 0; + var _blockSave, _blockSaveTimer, previousCompareString, lastCompareString, + nextRun = 0, + isSuspended = false; // Block saving for the next 10 sec. function tempBlockSave() { @@ -434,6 +437,14 @@ window.autosave = function(){}; }, 10000 ); } + function suspend() { + isSuspended = true; + } + + function resume() { + isSuspended = false; + } + // Runs on heartbeat-response function response( data ) { _schedule(); @@ -442,7 +453,6 @@ window.autosave = function(){}; previousCompareString = ''; $document.trigger( 'after-autosave', [data] ); - $( '.autosave-message' ).text( data.message ); enableButtons(); if ( data.success ) { @@ -451,15 +461,6 @@ window.autosave = function(){}; } } - /** - * Disable autosave - * - * Intended to run on form.submit - */ - function disable() { - _disabled = true; - } - /** * Save immediately * @@ -488,7 +489,7 @@ window.autosave = function(){}; function save() { var postData, compareString; - if ( isSuspended || _disabled || _blockSave ) { + if ( isSuspended || _blockSave ) { return false; } @@ -516,7 +517,6 @@ window.autosave = function(){}; $document.trigger( 'wpcountwords', [ postData.content ] ) .trigger( 'before-autosave', [ postData ] ); - $( '.autosave-message' ).text( autosaveL10n.savingText ); postData._wpnonce = $( '#_wpnonce' ).val() || ''; return postData; @@ -556,10 +556,11 @@ window.autosave = function(){}; }); return { - disable: disable, tempBlockSave: tempBlockSave, triggerSave: triggerSave, - postChanged: postChanged + postChanged: postChanged, + suspend: suspend, + resume: resume }; } @@ -584,8 +585,6 @@ window.autosave = function(){}; getCompareString: getCompareString, disableButtons: disableButtons, enableButtons: enableButtons, - suspend: suspend, - resume: resume, local: autosaveLocal(), server: autosaveServer() }; diff --git a/src/wp-includes/script-loader.php b/src/wp-includes/script-loader.php index 61ad4bd913..426eb97368 100644 --- a/src/wp-includes/script-loader.php +++ b/src/wp-includes/script-loader.php @@ -430,6 +430,8 @@ function wp_default_scripts( &$scripts ) { 'privatelyPublished' => __('Privately Published'), 'published' => __('Published'), 'comma' => _x( ',', 'tag delimiter' ), + 'saveAlert' => __('The changes you made will be lost if you navigate away from this page.'), + 'savingText' => __('Saving Draft…'), ) ); $scripts->add( 'link', "/wp-admin/js/link$suffix.js", array( 'wp-lists', 'postbox' ), false, 1 ); @@ -653,8 +655,6 @@ function wp_just_in_time_script_localization() { wp_localize_script( 'autosave', 'autosaveL10n', array( 'autosaveInterval' => AUTOSAVE_INTERVAL, - 'savingText' => __('Saving Draft…'), - 'saveAlert' => __('The changes you made will be lost if you navigate away from this page.'), 'blog_id' => get_current_blog_id(), ) );