$visualEditor = $(),
$textTop = $( '#ed_toolbar' ),
$textEditor = $( '#content' ),
- $textEditorClone = $( '<div id="content-textarea-clone" class="wp-exclude-emoji"></div>' ),
+ textEditor = $textEditor[0],
+ oldTextLength = 0,
$bottom = $( '#post-status-info' ),
$menuBar = $(),
$statusBar = $(),
sideSortablesHeight: 0
};
- $textEditorClone.insertAfter( $textEditor );
-
- $textEditorClone.css( {
- 'font-family': $textEditor.css( 'font-family' ),
- 'font-size': $textEditor.css( 'font-size' ),
- 'line-height': $textEditor.css( 'line-height' ),
- 'white-space': 'pre-wrap',
- 'word-wrap': 'break-word'
- } );
-
function getHeights() {
var windowWidth = $window.width();
}
}
- function textEditorKeyup( event ) {
- var VK = jQuery.ui.keyCode,
- key = event.keyCode,
- range = document.createRange(),
- selStart = $textEditor[0].selectionStart,
- selEnd = $textEditor[0].selectionEnd,
- textNode = $textEditorClone[0].firstChild,
- buffer = 10,
- offset, cursorTop, cursorBottom, editorTop, editorBottom;
-
- if ( selStart && selEnd && selStart !== selEnd ) {
- return;
- }
-
- // These are not TinyMCE ranges.
- try {
- range.setStart( textNode, selStart );
- range.setEnd( textNode, selEnd + 1 );
- } catch ( ex ) {}
-
- offset = range.getBoundingClientRect();
-
- if ( ! offset.height ) {
+ function textEditorResize() {
+ if ( mceEditor && ! mceEditor.isHidden() ) {
return;
}
- cursorTop = offset.top - buffer;
- cursorBottom = cursorTop + offset.height + buffer;
- editorTop = heights.adminBarHeight + heights.toolsHeight + heights.textTopHeight;
- editorBottom = heights.windowHeight - heights.bottomHeight;
-
- if ( cursorTop < editorTop && ( key === VK.UP || key === VK.LEFT || key === VK.BACKSPACE ) ) {
- window.scrollTo( window.pageXOffset, cursorTop + window.pageYOffset - editorTop );
- } else if ( cursorBottom > editorBottom ) {
- window.scrollTo( window.pageXOffset, cursorBottom + window.pageYOffset - editorBottom );
- }
- }
-
- function textEditorResize() {
- if ( ( mceEditor && ! mceEditor.isHidden() ) || ( ! mceEditor && initialMode === 'tinymce' ) ) {
+ if ( ! mceEditor && initialMode === 'tinymce' ) {
return;
}
- var textEditorHeight = $textEditor.height(),
- hiddenHeight;
+ var length = textEditor.value.length;
+ var height = parseInt( textEditor.style.height, 10 );
+ var top = window.scrollTop;
- $textEditorClone.width( $textEditor.width() - 22 );
- $textEditorClone.text( $textEditor.val() + ' ' );
+ if ( length < oldTextLength ) {
+ // textEditor.scrollHeight is not adjusted until the next line.
+ textEditor.style.height = 'auto';
- hiddenHeight = $textEditorClone.height();
+ if ( textEditor.scrollHeight > autoresizeMinHeight ) {
+ textEditor.style.height = textEditor.scrollHeight + 'px';
+ } else {
+ textEditor.style.height = autoresizeMinHeight + 'px';
+ }
- if ( hiddenHeight < autoresizeMinHeight ) {
- hiddenHeight = autoresizeMinHeight;
- }
+ // Prevent scroll-jumping in Firefox and IE.
+ window.scrollTop = top;
- if ( hiddenHeight === textEditorHeight ) {
- return;
+ if ( textEditor.scrollHeight < height ) {
+ adjust();
+ }
+ } else if ( height < textEditor.scrollHeight ) {
+ textEditor.style.height = textEditor.scrollHeight + 'px';
+ adjust();
}
- $textEditor.height( hiddenHeight );
-
- adjust();
+ oldTextLength = length;
}
// We need to wait for TinyMCE to initialize.
if ( event && event.deltaHeight > 0 && event.deltaHeight < 100 ) {
window.scrollBy( 0, event.deltaHeight );
- } else if ( advanced ) {
+ } else if ( visual && advanced ) {
fixedBottom = true;
$statusBar.css( {
$textEditor.css( {
marginTop: heights.textTopHeight
} );
-
- $textEditorClone.width( contentWrapWidth - 20 - ( borderWidth * 2 ) );
}
}
}
// Adjust when collapsing the menu, changing the columns, changing the body class.
$document.on( 'wp-collapse-menu.editor-expand postboxes-columnchange.editor-expand editor-classchange.editor-expand', adjust )
- .on( 'postbox-toggled.editor-expand', function() {
+ .on( 'postbox-toggled.editor-expand postbox-moved.editor-expand', function() {
if ( ! fixedSideTop && ! fixedSideBottom && window.pageYOffset > pinnedToolsTop ) {
fixedSideBottom = true;
window.scrollBy( 0, -1 );
});
$textEditor.on( 'focus.editor-expand input.editor-expand propertychange.editor-expand', textEditorResize );
- $textEditor.on( 'keyup.editor-expand', textEditorKeyup );
mceBind();
// Adjust when entering/exiting fullscreen mode.
}
function fadeOut( event ) {
- var key = event && event.keyCode;
+ var isMac,
+ key = event && event.keyCode;
+
+ if ( window.navigator.platform ) {
+ isMac = ( window.navigator.platform.indexOf( 'Mac' ) > -1 );
+ }
- // fadeIn and return on Escape and keyboard shortcut Alt+Shift+W.
- if ( key === 27 || ( key === 87 && event.altKey && event.shiftKey ) ) {
+ // fadeIn and return on Escape and keyboard shortcut Alt+Shift+W and Ctrl+Opt+W.
+ if ( key === 27 || ( key === 87 && event.altKey && ( ( ! isMac && event.shiftKey ) || ( isMac && event.ctrlKey ) ) ) ) {
fadeIn( event );
return;
}
} );
editor.addCommand( 'wpToggleDFW', toggle );
- editor.addShortcut( 'alt+shift+w', '', 'wpToggleDFW' );
+ editor.addShortcut( 'access+w', '', 'wpToggleDFW' );
} );
$document.on( 'tinymce-editor-init.focus', function( event, editor ) {