X-Git-Url: https://scripts.mit.edu/gitweb/autoinstalls/wordpress.git/blobdiff_plain/61343b82c4f0da4c68e4c6373daafff4a81efdd1..48ab98cb1779cf2088c1351ac3dd3d0da6fb31d3:/wp-admin/js/post.js?ds=sidebyside diff --git a/wp-admin/js/post.js b/wp-admin/js/post.js index 7b7d4c39..45413f8e 100644 --- a/wp-admin/js/post.js +++ b/wp-admin/js/post.js @@ -1,4 +1,11 @@ -var tagBox, commentsBox, editPermalink, makeSlugeditClickable, WPSetThumbnailHTML, WPSetThumbnailID, WPRemoveThumbnail, wptitlehint; +/* global postL10n, ajaxurl, wpAjax, setPostThumbnailL10n, postboxes, pagenow, tinymce, alert, deleteUserSetting */ +/* global theList:true, theExtraList:true, getUserSetting, setUserSetting */ + +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) { @@ -11,7 +18,8 @@ function array_unique_noempty(a) { return out; } -(function($){ +( function($) { + var titleHasFocus = false; tagBox = { clean : function(tags) { @@ -81,11 +89,11 @@ tagBox = { }, flushTags : function(el, a, f) { - a = a || false; - var tags = $('.the-tags', el), + var tagsval, newtags, text, + tags = $('.the-tags', el), newtag = $('input.newtag', el), - comma = postL10n.comma, - newtags, text; + comma = postL10n.comma; + a = a || false; text = a ? $(a).text() : newtag.val(); tagsval = tags.val(); @@ -108,7 +116,7 @@ tagBox = { var tax = id.substr(id.indexOf('-')+1); $.post(ajaxurl, {'action':'get-tagcloud', 'tax':tax}, function(r, stat) { - if ( 0 == r || 'success' != stat ) + if ( 0 === r || 'success' != stat ) r = wpAjax.broken; r = $('

'+r+'

'); @@ -137,7 +145,7 @@ tagBox = { }); $('input.newtag', ajaxtag).blur(function() { - if ( this.value == '' ) + if ( '' === this.value ) $(this).parent().siblings('.taghint').css('visibility', ''); }).focus(function(){ $(this).parent().siblings('.taghint').css('visibility', 'hidden'); @@ -206,7 +214,7 @@ commentsBox = { $('#the-comment-list').append( r.responses[0].data ); theList = theExtraList = null; - $("a[className*=':']").unbind(); + $( 'a[className*=\':\']' ).unbind(); if ( commentsBox.st > commentsBox.total ) $('#show-comments').hide(); @@ -240,7 +248,7 @@ WPSetThumbnailID = function(id){ WPRemoveThumbnail = function(nonce){ $.post(ajaxurl, { - action:"set-post-thumbnail", post_id: $('#post_ID').val(), thumbnail_id: -1, _ajax_nonce: nonce, cookie: encodeURIComponent(document.cookie) + action: 'set-post-thumbnail', post_id: $( '#post_ID' ).val(), thumbnail_id: -1, _ajax_nonce: nonce, cookie: encodeURIComponent( document.cookie ) }, function(str){ if ( str == '0' ) { alert( setPostThumbnailL10n.error ); @@ -259,16 +267,15 @@ $(document).on( 'heartbeat-send.refresh-lock', function( e, data ) { if ( ! post_id || ! $('#post-lock-dialog').length ) return; - send['post_id'] = post_id; + send.post_id = post_id; if ( lock ) - send['lock'] = lock; + send.lock = lock; data['wp-refresh-post-lock'] = send; -}); -// Post locks: update the lock string or show the dialog if somebody has taken over editing -$(document).on( 'heartbeat-tick.refresh-lock', function( e, data ) { +}).on( 'heartbeat-tick.refresh-lock', function( e, data ) { + // Post locks: update the lock string or show the dialog if somebody has taken over editing var received, wrap, avatar; if ( data['wp-refresh-post-lock'] ) { @@ -279,19 +286,16 @@ $(document).on( 'heartbeat-tick.refresh-lock', function( e, data ) { wrap = $('#post-lock-dialog'); if ( wrap.length && ! wrap.is(':visible') ) { - if ( typeof autosave == 'function' ) { - $(document).on('autosave-disable-buttons.post-lock', function() { - wrap.addClass('saving'); - }).on('autosave-enable-buttons.post-lock', function() { + if ( wp.autosave ) { + // Save the latest changes and disable + $(document).one( 'heartbeat-tick', function() { + wp.autosave.server.suspend(); wrap.removeClass('saving').addClass('saved'); - window.onbeforeunload = null; + $(window).off( 'beforeunload.edit-post' ); }); - // Save the latest changes and disable - if ( ! autosave() ) - window.onbeforeunload = null; - - autosave = function(){}; + wrap.addClass('saving'); + wp.autosave.server.triggerSave(); } if ( received.lock_error.avatar_src ) { @@ -306,6 +310,25 @@ $(document).on( 'heartbeat-tick.refresh-lock', function( e, data ) { $('#active_post_lock').val( received.new_lock ); } } +}).on( 'before-autosave.update-post-slug', function() { + titleHasFocus = document.activeElement && document.activeElement.id === 'title'; +}).on( 'after-autosave.update-post-slug', function() { + // Create slug area only if not already there + // and the title field was not focused (user was not typing a title) when autosave ran + if ( ! $('#edit-slug-box > *').length && ! titleHasFocus ) { + $.post( ajaxurl, { + action: 'sample-permalink', + post_id: $('#post_ID').val(), + new_title: $('#title').val(), + samplepermalinknonce: $('#samplepermalinknonce').val() + }, + function( data ) { + if ( data != '-1' ) { + $('#edit-slug-box').html(data); + } + } + ); + } }); }(jQuery)); @@ -351,10 +374,25 @@ $(document).on( 'heartbeat-tick.refresh-lock', function( e, data ) { }(jQuery)); jQuery(document).ready( function($) { - var stamp, visibility, sticky = '', last = 0, co = $('#content'); + var stamp, visibility, $submitButtons, updateVisibility, updateText, + sticky = '', + last = 0, + co = $('#content'), + $document = $(document), + $editSlugWrap = $('#edit-slug-box'), + postId = $('#post_ID').val() || 0, + $submitpost = $('#submitpost'), + releaseLock = true, + $postVisibilitySelect = $('#post-visibility-select'), + $timestampdiv = $('#timestampdiv'), + $postStatusSelect = $('#post-status-select'); postboxes.add_postbox_toggles(pagenow); + // 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 ) @@ -371,6 +409,167 @@ 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 ( wp.heartbeat && $('#post-lock-dialog').length ) { + wp.heartbeat.interval( 15 ); + } + + // The form is being submitted by the user + $submitButtons = $submitpost.find( ':button, :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() + } + }); + }); + // multi-taxonomies if ( $('#tagsdiv-post_tag').length ) { tagBox.init(); @@ -401,17 +600,17 @@ jQuery(document).ready( function($) { $('#' + taxonomy + '-tabs').siblings('.tabs-panel').hide(); $(t).show(); if ( '#' + taxonomy + '-all' == t ) - deleteUserSetting(settingName); + deleteUserSetting( settingName ); else - setUserSetting(settingName, 'pop'); + setUserSetting( settingName, 'pop' ); return false; }); - if ( getUserSetting(settingName) ) + if ( getUserSetting( settingName ) ) $('a[href="#' + taxonomy + '-pop"]', '#' + taxonomy + '-tabs').click(); // Ajax Cat - $('#new' + taxonomy).one( 'focus', function() { $(this).val( '' ).removeClass( 'form-input-tip' ) } ); + $( '#new' + taxonomy ).one( 'focus', function() { $( this ).val( '' ).removeClass( 'form-input-tip' ); } ); $('#new' + taxonomy).keypress( function(event){ if( 13 === event.keyCode ) { @@ -463,7 +662,7 @@ jQuery(document).ready( function($) { // Custom Fields if ( $('#postcustom').length ) { - $('#the-list').wpList( { addAfter: function( xml, s ) { + $( '#the-list' ).wpList( { addAfter: function() { $('table#list-table').show(); }, addBefore: function( s ) { s.data += '&post_id=' + $('#post_ID').val(); @@ -477,24 +676,23 @@ jQuery(document).ready( function($) { stamp = $('#timestamp').html(); visibility = $('#post-visibility-display').html(); - function updateVisibility() { - var pvSelect = $('#post-visibility-select'); - if ( $('input:radio:checked', pvSelect).val() != 'public' ) { + updateVisibility = function() { + if ( $postVisibilitySelect.find('input:radio:checked').val() != 'public' ) { $('#sticky').prop('checked', false); $('#sticky-span').hide(); } else { $('#sticky-span').show(); } - if ( $('input:radio:checked', pvSelect).val() != 'password' ) { + if ( $postVisibilitySelect.find('input:radio:checked').val() != 'password' ) { $('#password-span').hide(); } else { $('#password-span').show(); } - } + }; - function updateText() { + updateText = function() { - if ( ! $('#timestampdiv').length ) + if ( ! $timestampdiv.length ) return true; var attemptedDate, originalDate, currentDate, publishOn, postStatus = $('#post_status'), @@ -506,10 +704,10 @@ jQuery(document).ready( function($) { currentDate = new Date( $('#cur_aa').val(), $('#cur_mm').val() -1, $('#cur_jj').val(), $('#cur_hh').val(), $('#cur_mn').val() ); if ( attemptedDate.getFullYear() != aa || (1 + attemptedDate.getMonth()) != mm || attemptedDate.getDate() != jj || attemptedDate.getMinutes() != mn ) { - $('.timestamp-wrap', '#timestampdiv').addClass('form-invalid'); + $timestampdiv.find('.timestamp-wrap').addClass('form-invalid'); return false; } else { - $('.timestamp-wrap', '#timestampdiv').removeClass('form-invalid'); + $timestampdiv.find('.timestamp-wrap').removeClass('form-invalid'); } if ( attemptedDate > currentDate && $('#original_post_status').val() != 'future' ) { @@ -531,20 +729,20 @@ jQuery(document).ready( function($) { .replace( '%2$s', jj ) .replace( '%3$s', aa ) .replace( '%4$s', hh ) - .replace( '%5$s', mn ) - + ' ' + .replace( '%5$s', mn ) + + ' ' ); } - if ( $('input:radio:checked', '#post-visibility-select').val() == 'private' ) { + if ( $postVisibilitySelect.find('input:radio:checked').val() == 'private' ) { $('#publish').val( postL10n.update ); - if ( optPublish.length == 0 ) { + if ( 0 === optPublish.length ) { postStatus.append(''); } else { optPublish.html( postL10n.privatelyPublished ); } $('option[value="publish"]', postStatus).prop('selected', true); - $('.edit-post-status', '#misc-publishing-actions').hide(); + $('#misc-publishing-actions .edit-post-status').hide(); } else { if ( $('#original_post_status').val() == 'future' || $('#original_post_status').val() == 'draft' ) { if ( optPublish.length ) { @@ -555,7 +753,7 @@ jQuery(document).ready( function($) { optPublish.html( postL10n.published ); } if ( postStatus.is(':hidden') ) - $('.edit-post-status', '#misc-publishing-actions').show(); + $('#misc-publishing-actions .edit-post-status').show(); } $('#post-status-display').html($('option:selected', postStatus).text()); if ( $('option:selected', postStatus).val() == 'private' || $('option:selected', postStatus).val() == 'publish' ) { @@ -569,191 +767,198 @@ jQuery(document).ready( function($) { } } return true; - } + }; - $('.edit-visibility', '#visibility').click(function () { - if ($('#post-visibility-select').is(":hidden")) { + $( '#visibility .edit-visibility').click( function () { + if ( $postVisibilitySelect.is(':hidden') ) { updateVisibility(); - $('#post-visibility-select').slideDown('fast'); + $postVisibilitySelect.slideDown('fast').find('input[type="radio"]').first().focus(); $(this).hide(); } return false; }); - $('.cancel-post-visibility', '#post-visibility-select').click(function () { - $('#post-visibility-select').slideUp('fast'); + $postVisibilitySelect.find('.cancel-post-visibility').click( function( event ) { + $postVisibilitySelect.slideUp('fast'); $('#visibility-radio-' + $('#hidden-post-visibility').val()).prop('checked', true); $('#post_password').val($('#hidden-post-password').val()); $('#sticky').prop('checked', $('#hidden-post-sticky').prop('checked')); $('#post-visibility-display').html(visibility); - $('.edit-visibility', '#visibility').show(); + $('#visibility .edit-visibility').show().focus(); updateText(); - return false; + event.preventDefault(); }); - $('.save-post-visibility', '#post-visibility-select').click(function () { // crazyhorse - multiple ok cancels - var pvSelect = $('#post-visibility-select'); - - pvSelect.slideUp('fast'); - $('.edit-visibility', '#visibility').show(); + $postVisibilitySelect.find('.save-post-visibility').click( function( event ) { // crazyhorse - multiple ok cancels + $postVisibilitySelect.slideUp('fast'); + $('#visibility .edit-visibility').show(); updateText(); - if ( $('input:radio:checked', pvSelect).val() != 'public' ) { + if ( $postVisibilitySelect.find('input:radio:checked').val() != 'public' ) { $('#sticky').prop('checked', false); } // WEAPON LOCKED - if ( true == $('#sticky').prop('checked') ) { + if ( $('#sticky').prop('checked') ) { sticky = 'Sticky'; } else { sticky = ''; } - $('#post-visibility-display').html( postL10n[$('input:radio:checked', pvSelect).val() + sticky] ); - return false; + $('#post-visibility-display').html( postL10n[ $postVisibilitySelect.find('input:radio:checked').val() + sticky ] ); + event.preventDefault(); }); - $('input:radio', '#post-visibility-select').change(function() { + $postVisibilitySelect.find('input:radio').change( function() { updateVisibility(); }); - $('#timestampdiv').siblings('a.edit-timestamp').click(function() { - if ($('#timestampdiv').is(":hidden")) { - $('#timestampdiv').slideDown('fast'); + $timestampdiv.siblings('a.edit-timestamp').click( function( event ) { + if ( $timestampdiv.is( ':hidden' ) ) { + $timestampdiv.slideDown('fast'); $('#mm').focus(); $(this).hide(); } - return false; + event.preventDefault(); }); - $('.cancel-timestamp', '#timestampdiv').click(function() { - $('#timestampdiv').slideUp('fast'); + $timestampdiv.find('.cancel-timestamp').click( function( event ) { + $timestampdiv.slideUp('fast').siblings('a.edit-timestamp').show().focus(); $('#mm').val($('#hidden_mm').val()); $('#jj').val($('#hidden_jj').val()); $('#aa').val($('#hidden_aa').val()); $('#hh').val($('#hidden_hh').val()); $('#mn').val($('#hidden_mn').val()); - $('#timestampdiv').siblings('a.edit-timestamp').show(); updateText(); - return false; + event.preventDefault(); }); - $('.save-timestamp', '#timestampdiv').click(function () { // crazyhorse - multiple ok cancels + $timestampdiv.find('.save-timestamp').click( function( event ) { // crazyhorse - multiple ok cancels if ( updateText() ) { - $('#timestampdiv').slideUp('fast'); - $('#timestampdiv').siblings('a.edit-timestamp').show(); + $timestampdiv.slideUp('fast'); + $timestampdiv.siblings('a.edit-timestamp').show(); } - return false; + event.preventDefault(); }); - $('#post').on( 'submit', function(e){ + $('#post').on( 'submit', function( event ) { if ( ! updateText() ) { - e.preventDefault(); - $('#timestampdiv').show(); + event.preventDefault(); + $timestampdiv.show(); + + if ( wp.autosave ) { + wp.autosave.enableButtons(); + } + $('#publishing-action .spinner').hide(); - $('#publish').prop('disabled', false).removeClass('button-primary-disabled'); - return false; } }); - $('#post-status-select').siblings('a.edit-post-status').click(function() { - if ($('#post-status-select').is(":hidden")) { - $('#post-status-select').slideDown('fast'); + $postStatusSelect.siblings('a.edit-post-status').click( function( event ) { + if ( $postStatusSelect.is( ':hidden' ) ) { + $postStatusSelect.slideDown('fast').find('select').focus(); $(this).hide(); } - return false; + event.preventDefault(); }); - $('.save-post-status', '#post-status-select').click(function() { - $('#post-status-select').slideUp('fast'); - $('#post-status-select').siblings('a.edit-post-status').show(); + $postStatusSelect.find('.save-post-status').click( function( event ) { + $postStatusSelect.slideUp('fast').siblings('a.edit-post-status').show(); updateText(); - return false; + event.preventDefault(); }); - $('.cancel-post-status', '#post-status-select').click(function() { - $('#post-status-select').slideUp('fast'); - $('#post_status').val($('#hidden_post_status').val()); - $('#post-status-select').siblings('a.edit-post-status').show(); + $postStatusSelect.find('.cancel-post-status').click( function( event ) { + $('#post-status-select').slideUp('fast').siblings( 'a.edit-post-status' ).show().focus(); + $('#post_status').val( $('#hidden_post_status').val() ); updateText(); - return false; + event.preventDefault(); }); } // end submitdiv // permalink - if ( $('#edit-slug-box').length ) { - editPermalink = function(post_id) { - 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(); - - $('#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 $('.cancel', '#edit-slug-buttons').click(); - } - $.post(ajaxurl, { - action: 'sample-permalink', - post_id: post_id, - 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); - makeSlugeditClickable(); - $('#view-post-btn').show(); - }); + 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() ) { + b.children('.cancel').click(); return false; - }); - - $('.cancel', '#edit-slug-buttons').click(function() { - $('#view-post-btn').show(); - e.html(revert_e); + } + $.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(revert_slug); - return false; + real_slug.val(new_slug); + $('#view-post-btn').show(); }); + return false; + }); - for ( i = 0; i < full.length; ++i ) { - if ( '%' == full.charAt(i) ) - c++; - } + b.children('.cancel').click(function() { + $('#view-post-btn').show(); + e.html(revert_e); + b.html(revert_b); + real_slug.val(revert_slug); + return false; + }); - 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(e) { - real_slug.val(this.value); - }).focus(); + for ( i = 0; i < full.length; ++i ) { + if ( '%' == full.charAt(i) ) + c++; } - makeSlugeditClickable = function() { - $('#editable-post-name').click(function() { - $('#edit-slug-buttons').children('.edit-slug').click(); - }); - } - makeSlugeditClickable(); + 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 ); + + if ( $target.is('#editable-post-name') || $target.hasClass('edit-slug') ) { + editPermalink(); + } + }); } // word count if ( typeof(wpWordCount) != 'undefined' ) { - $(document).triggerHandler('wpcountwords', [ co.val() ]); + $document.triggerHandler('wpcountwords', [ co.val() ]); co.keyup( function(e) { var k = e.keyCode || e.charCode; @@ -762,7 +967,7 @@ jQuery(document).ready( function($) { return true; if ( 13 == k || 8 == last || 46 == last ) - $(document).triggerHandler('wpcountwords', [ co.val() ]); + $document.triggerHandler('wpcountwords', [ co.val() ]); last = k; return true; @@ -774,7 +979,7 @@ jQuery(document).ready( function($) { var title = $('#' + id), titleprompt = $('#' + id + '-prompt-text'); - if ( title.val() == '' ) + if ( '' === title.val() ) titleprompt.removeClass('screen-reader-text'); titleprompt.click(function(){ @@ -783,7 +988,7 @@ jQuery(document).ready( function($) { }); title.blur(function(){ - if ( this.value == '' ) + if ( '' === this.value ) titleprompt.removeClass('screen-reader-text'); }).focus(function(){ titleprompt.addClass('screen-reader-text'); @@ -791,130 +996,98 @@ jQuery(document).ready( function($) { titleprompt.addClass('screen-reader-text'); $(this).unbind(e); }); - } + }; wptitlehint(); - // resizable textarea#content - (function() { - var textarea = $('textarea#content'), offset = null, el; + // Resize the visual and text editors + ( function() { + var editor, offset, mce, + $textarea = $('textarea#content'), + $handle = $('#post-status-info'), + $postdivrich = $('#postdivrich'); + // No point for touch devices - if ( !textarea.length || 'ontouchstart' in window ) + if ( ! $textarea.length || 'ontouchstart' in window ) { + // Hide the resize handle + $('#content-resize-handle').hide(); return; - - function dragging(e) { - textarea.height( Math.max(50, offset + e.pageY) + 'px' ); - return false; } - function endDrag(e) { - var height; - - textarea.focus(); - $(document).unbind('mousemove', dragging).unbind('mouseup', endDrag); + function dragging( event ) { + if ( $postdivrich.hasClass( 'wp-editor-expand' ) ) { + return; + } - height = parseInt( textarea.css('height'), 10 ); + if ( mce ) { + editor.theme.resizeTo( null, offset + event.pageY ); + } else { + $textarea.height( Math.max( 50, offset + event.pageY ) ); + } - // sanity check - if ( height && height > 50 && height < 5000 ) - setUserSetting( 'ed_size', height ); + event.preventDefault(); } - textarea.css('resize', 'none'); - el = $('

'); - $('#wp-content-wrap').append(el); - el.on('mousedown', function(e) { - offset = textarea.height() - e.pageY; - textarea.blur(); - $(document).mousemove(dragging).mouseup(endDrag); - return false; - }); - })(); + function endDrag() { + var height, toolbarHeight; - if ( typeof(tinymce) != 'undefined' ) { - tinymce.onAddEditor.add(function(mce, ed){ - // iOS expands the iframe to full height and the user cannot adjust it. - if ( ed.id != 'content' || tinymce.isIOS5 ) + if ( $postdivrich.hasClass( 'wp-editor-expand' ) ) { return; - - function getHeight() { - var height, node = document.getElementById('content_ifr'), - ifr_height = node ? parseInt( node.style.height, 10 ) : 0, - tb_height = $('#content_tbl tr.mceFirst').height(); - - if ( !ifr_height || !tb_height ) - return false; - - // total height including toolbar and statusbar - height = ifr_height + tb_height + 21; - // textarea height = total height - 33px toolbar - height -= 33; - - return height; } - // resize TinyMCE to match the textarea height when switching Text -> Visual - ed.onLoadContent.add( function(ed, o) { - var ifr_height, node = document.getElementById('content'), - height = node ? parseInt( node.style.height, 10 ) : 0, - tb_height = $('#content_tbl tr.mceFirst').height() || 33; - - // height cannot be under 50 or over 5000 - if ( !height || height < 50 || height > 5000 ) - height = 360; // default height for the main editor - - if ( getUserSetting( 'ed_size' ) > 5000 ) - setUserSetting( 'ed_size', 360 ); + if ( mce ) { + editor.focus(); + toolbarHeight = parseInt( $( '#wp-content-editor-container .mce-toolbar-grp' ).height(), 10 ); - // compensate for padding and toolbars - ifr_height = ( height - tb_height ) + 12; - - // sanity check - if ( ifr_height > 50 && ifr_height < 5000 ) { - $('#content_tbl').css('height', '' ); - $('#content_ifr').css('height', ifr_height + 'px' ); + if ( toolbarHeight < 10 || toolbarHeight > 200 ) { + toolbarHeight = 30; } - }); - // resize the textarea to match TinyMCE's height when switching Visual -> Text - ed.onSaveContent.add( function(ed, o) { - var height = getHeight(); + height = parseInt( $('#content_ifr').css('height'), 10 ) + toolbarHeight - 28; + } else { + $textarea.focus(); + height = parseInt( $textarea.css('height'), 10 ); + } - if ( !height || height < 50 || height > 5000 ) - return; + $document.off( '.wp-editor-resize' ); - $('textarea#content').css( 'height', height + 'px' ); - }); + // sanity check + if ( height && height > 50 && height < 5000 ) { + setUserSetting( 'ed_size', height ); + } + } - // save on resizing TinyMCE - ed.onPostRender.add(function() { - $('#content_resize').on('mousedown.wp-mce-resize', function(e){ - $(document).on('mouseup.wp-mce-resize', function(e){ - var height; + $handle.on( 'mousedown.wp-editor-resize', function( event ) { + if ( typeof tinymce !== 'undefined' ) { + editor = tinymce.get('content'); + } - $(document).off('mouseup.wp-mce-resize'); + if ( editor && ! editor.isHidden() ) { + mce = true; + offset = $('#content_ifr').height() - event.pageY; + } else { + mce = false; + offset = $textarea.height() - event.pageY; + $textarea.blur(); + } - height = getHeight(); - // sanity check - if ( height && height > 50 && height < 5000 ) - setUserSetting( 'ed_size', height ); - }); - }); - }); - }); + $document.on( 'mousemove.wp-editor-resize', dragging ) + .on( 'mouseup.wp-editor-resize mouseleave.wp-editor-resize', endDrag ); + + event.preventDefault(); + }).on( 'mouseup.wp-editor-resize', endDrag ); + })(); + if ( typeof tinymce !== 'undefined' ) { // When changing post formats, change the editor body class - $('#post-formats-select input.post-format').on( 'change.set-editor-class', function( event ) { + $( '#post-formats-select input.post-format' ).on( 'change.set-editor-class', function() { var editor, body, format = this.id; - if ( format && $( this ).prop('checked') ) { - editor = tinymce.get( 'content' ); - - if ( editor ) { - body = editor.getBody(); - body.className = body.className.replace( /\bpost-format-[^ ]+/, '' ); - editor.dom.addClass( body, format == 'post-format-0' ? 'post-format-standard' : format ); - } + if ( format && $( this ).prop( 'checked' ) && ( editor = tinymce.get( 'content' ) ) ) { + body = editor.getBody(); + body.className = body.className.replace( /\bpost-format-[^ ]+/, '' ); + editor.dom.addClass( body, format == 'post-format-0' ? 'post-format-standard' : format ); + $( document ).trigger( 'editor-classchange' ); } }); }