-/* 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, editPermalink, makeSlugeditClickable, 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) {
return out;
}
-(function($){
+( function($) {
+ var titleHasFocus = false;
tagBox = {
clean : function(tags) {
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'] ) {
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 ) {
$('#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));
}(jQuery));
jQuery(document).ready( function($) {
- var stamp, visibility, updateVisibility, updateText,
- 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 )
}).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 );
}
+ // 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();
visibility = $('#post-visibility-display').html();
updateVisibility = function() {
- var pvSelect = $('#post-visibility-select');
- if ( $('input:radio:checked', pvSelect).val() != 'public' ) {
+ 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();
updateText = function() {
- if ( ! $('#timestampdiv').length )
+ if ( ! $timestampdiv.length )
return true;
var attemptedDate, originalDate, currentDate, publishOn, postStatus = $('#post_status'),
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' ) {
);
}
- if ( $('input:radio:checked', '#post-visibility-select').val() == 'private' ) {
+ if ( $postVisibilitySelect.find('input:radio:checked').val() == 'private' ) {
$('#publish').val( postL10n.update );
if ( 0 === optPublish.length ) {
postStatus.append('<option value="publish">' + postL10n.privatelyPublished + '</option>');
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 ) {
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' ) {
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
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 slug_value, 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('<a href="#" class="save button button-small">'+postL10n.ok+'</a> <a class="cancel" href="#">'+postL10n.cancel+'</a>');
- 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();
+ 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('<a href="#" class="save button button-small">'+postL10n.ok+'</a> <a class="cancel" href="#">'+postL10n.cancel+'</a>');
+ 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');
+ });
}
- $.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();
- });
- return false;
- });
-
- $('.cancel', '#edit-slug-buttons').click(function() {
- $('#view-post-btn').show();
- e.html(revert_e);
b.html(revert_b);
- real_slug.val(revert_slug);
- return false;
+ 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++;
+ }
- for ( i = 0; i < full.length; ++i ) {
- if ( '%' == full.charAt(i) )
- c++;
+ slug_value = ( c > full.length / 4 ) ? '' : full;
+ e.html('<input type="text" id="new-post-slug" value="'+slug_value+'" />').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();
+ }
- slug_value = ( c > full.length / 4 ) ? '' : full;
- e.html('<input type="text" id="new-post-slug" value="'+slug_value+'" />').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 );
- makeSlugeditClickable = function() {
- $('#editable-post-name').click(function() {
- $('#edit-slug-buttons').children('.edit-slug').click();
- });
- };
- makeSlugeditClickable();
+ 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;
return true;
if ( 13 == k || 8 == last || 46 == last )
- $(document).triggerHandler('wpcountwords', [ co.val() ]);
+ $document.triggerHandler('wpcountwords', [ co.val() ]);
last = k;
return true;
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');
+
// No point for touch devices
- if ( !textarea.length || 'ontouchstart' in window )
+ if ( ! $textarea.length || 'ontouchstart' in window ) {
return;
-
- function dragging(e) {
- textarea.height( Math.max(50, offset + e.pageY) + 'px' );
- return false;
}
- function endDrag() {
- var height;
-
- textarea.focus();
- $(document).unbind('mousemove', dragging).unbind('mouseup', endDrag);
-
- height = parseInt( textarea.css('height'), 10 );
+ function dragging( event ) {
+ 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 = $('<div id="content-resize-handle"><br></div>');
- $('#wp-content-wrap').append(el);
- el.on('mousedown', function(e) {
- offset = textarea.height() - e.pageY;
- textarea.blur();
- $(document).mousemove(dragging).mouseup(endDrag);
- return false;
- });
- })();
-
- 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 )
- 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();
+ function endDrag() {
+ var height, toolbarHeight;
- if ( !ifr_height || !tb_height )
- return false;
+ if ( mce ) {
+ editor.focus();
+ toolbarHeight = $( '#wp-content-editor-container .mce-toolbar-grp' ).height();
- // total height including toolbar and statusbar
- height = ifr_height + tb_height + 21;
- // textarea height = total height - 33px toolbar
- height -= 33;
+ if ( toolbarHeight < 10 || toolbarHeight > 200 ) {
+ toolbarHeight = 30;
+ }
- return height;
+ height = parseInt( $('#content_ifr').css('height'), 10 ) + toolbarHeight - 28;
+ } else {
+ $textarea.focus();
+ height = parseInt( $textarea.css('height'), 10 );
}
- // resize TinyMCE to match the textarea height when switching Text -> Visual
- ed.onLoadContent.add( function() {
- var ifr_height, node = document.getElementById('content'),
- height = node ? parseInt( node.style.height, 10 ) : 0,
- tb_height = $('#content_tbl tr.mceFirst').height() || 33;
+ $document.off( '.wp-editor-resize' );
- // 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 );
-
- // 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' );
- }
- });
-
- // resize the textarea to match TinyMCE's height when switching Visual -> Text
- ed.onSaveContent.add( function() {
- var height = getHeight();
+ // sanity check
+ if ( height && height > 50 && height < 5000 ) {
+ setUserSetting( 'ed_size', height );
+ }
+ }
- if ( !height || height < 50 || height > 5000 )
- return;
+ $textarea.css( 'resize', 'none' );
- $('textarea#content').css( 'height', height + 'px' );
- });
+ $handle.on( 'mousedown.wp-editor-resize', function( event ) {
+ if ( typeof tinymce !== 'undefined' ) {
+ editor = tinymce.get('content');
+ }
- // save on resizing TinyMCE
- ed.onPostRender.add(function() {
- $( '#content_resize' ).on( 'mousedown.wp-mce-resize', function() {
- $( document ).on( 'mouseup.wp-mce-resize', function() {
- var height;
+ if ( editor && ! editor.isHidden() ) {
+ mce = true;
+ offset = $('#content_ifr').height() - event.pageY;
+ } else {
+ mce = false;
+ offset = $textarea.height() - event.pageY;
+ $textarea.blur();
+ }
- $(document).off('mouseup.wp-mce-resize');
+ $document.on( 'mousemove.wp-editor-resize', dragging )
+ .on( 'mouseup.wp-editor-resize mouseleave.wp-editor-resize', endDrag );
- height = getHeight();
- // sanity check
- if ( height && height > 50 && height < 5000 )
- setUserSetting( 'ed_size', height );
- });
- });
- });
- });
+ 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() {
var editor, body, format = this.id;