|
15 | 15 | $visualEditor = $(),
|
16 | 16 | $textTop = $( '#ed_toolbar' ),
|
17 | 17 | $textEditor = $( '#content' ),
|
18 |
| - $textEditorClone = $( '<div id="content-textarea-clone" class="wp-exclude-emoji"></div>' ), |
| 18 | + textEditor = $textEditor[0], |
| 19 | + textEditorLength = 0, |
19 | 20 | $bottom = $( '#post-status-info' ),
|
20 | 21 | $menuBar = $(),
|
21 | 22 | $statusBar = $(),
|
|
52 | 53 | sideSortablesHeight: 0
|
53 | 54 | };
|
54 | 55 |
|
55 |
| - $textEditorClone.insertAfter( $textEditor ); |
56 |
| - |
57 |
| - $textEditorClone.css( { |
58 |
| - 'font-family': $textEditor.css( 'font-family' ), |
59 |
| - 'font-size': $textEditor.css( 'font-size' ), |
60 |
| - 'line-height': $textEditor.css( 'line-height' ), |
61 |
| - 'white-space': 'pre-wrap', |
62 |
| - 'word-wrap': 'break-word' |
63 |
| - } ); |
64 |
| - |
65 | 56 | function getHeights() {
|
66 | 57 | var windowWidth = $window.width();
|
67 | 58 |
|
|
84 | 75 | }
|
85 | 76 | }
|
86 | 77 |
|
87 |
| - function textEditorKeyup( event ) { |
88 |
| - var VK = jQuery.ui.keyCode, |
89 |
| - key = event.keyCode, |
90 |
| - range = document.createRange(), |
91 |
| - selStart = $textEditor[0].selectionStart, |
92 |
| - selEnd = $textEditor[0].selectionEnd, |
93 |
| - textNode = $textEditorClone[0].firstChild, |
94 |
| - buffer = 10, |
95 |
| - offset, cursorTop, cursorBottom, editorTop, editorBottom; |
96 |
| - |
97 |
| - if ( selStart && selEnd && selStart !== selEnd ) { |
98 |
| - return; |
99 |
| - } |
100 |
| - |
101 |
| - // These are not TinyMCE ranges. |
102 |
| - try { |
103 |
| - range.setStart( textNode, selStart ); |
104 |
| - range.setEnd( textNode, selEnd + 1 ); |
105 |
| - } catch ( ex ) {} |
106 |
| - |
107 |
| - offset = range.getBoundingClientRect(); |
| 78 | + function textEditorResize() { |
| 79 | + var reduce, scrollHeight; |
108 | 80 |
|
109 |
| - if ( ! offset.height ) { |
| 81 | + if ( mceEditor && ! mceEditor.isHidden() ) { |
110 | 82 | return;
|
111 | 83 | }
|
112 | 84 |
|
113 |
| - cursorTop = offset.top - buffer; |
114 |
| - cursorBottom = cursorTop + offset.height + buffer; |
115 |
| - editorTop = heights.adminBarHeight + heights.toolsHeight + heights.textTopHeight; |
116 |
| - editorBottom = heights.windowHeight - heights.bottomHeight; |
117 |
| - |
118 |
| - if ( cursorTop < editorTop && ( key === VK.UP || key === VK.LEFT || key === VK.BACKSPACE ) ) { |
119 |
| - window.scrollTo( window.pageXOffset, cursorTop + window.pageYOffset - editorTop ); |
120 |
| - } else if ( cursorBottom > editorBottom ) { |
121 |
| - window.scrollTo( window.pageXOffset, cursorBottom + window.pageYOffset - editorBottom ); |
122 |
| - } |
123 |
| - } |
124 |
| - |
125 |
| - function textEditorResize() { |
126 |
| - if ( ( mceEditor && ! mceEditor.isHidden() ) || ( ! mceEditor && initialMode === 'tinymce' ) ) { |
| 85 | + if ( ! mceEditor && initialMode === 'tinymce' ) { |
127 | 86 | return;
|
128 | 87 | }
|
129 | 88 |
|
130 |
| - var textEditorHeight = $textEditor.height(), |
131 |
| - hiddenHeight; |
132 |
| - |
133 |
| - $textEditorClone.width( $textEditor.width() - 22 ); |
134 |
| - $textEditorClone.text( $textEditor.val() + ' ' ); |
135 |
| - |
136 |
| - hiddenHeight = $textEditorClone.height(); |
| 89 | + reduce = textEditorLength > ( textEditorLength = textEditor.value.length ); |
| 90 | + scrollHeight = textEditor.scrollHeight; |
137 | 91 |
|
138 |
| - if ( hiddenHeight < autoresizeMinHeight ) { |
139 |
| - hiddenHeight = autoresizeMinHeight; |
140 |
| - } |
141 |
| - |
142 |
| - if ( hiddenHeight === textEditorHeight ) { |
143 |
| - return; |
| 92 | + if ( reduce ) { |
| 93 | + textEditor.style.height = 'auto'; |
| 94 | + textEditor.style.height = scrollHeight + 'px'; |
| 95 | + adjust(); |
| 96 | + } else if ( parseInt( textEditor.style.height, 10 ) < scrollHeight ) { |
| 97 | + textEditor.style.height = scrollHeight + 'px'; |
| 98 | + adjust(); |
144 | 99 | }
|
145 |
| - |
146 |
| - $textEditor.height( hiddenHeight ); |
147 |
| - |
148 |
| - adjust(); |
149 | 100 | }
|
150 | 101 |
|
151 | 102 | // We need to wait for TinyMCE to initialize.
|
|
474 | 425 |
|
475 | 426 | if ( event && event.deltaHeight > 0 && event.deltaHeight < 100 ) {
|
476 | 427 | window.scrollBy( 0, event.deltaHeight );
|
477 |
| - } else if ( advanced ) { |
| 428 | + } else if ( visual && advanced ) { |
478 | 429 | fixedBottom = true;
|
479 | 430 |
|
480 | 431 | $statusBar.css( {
|
|
603 | 554 | $textEditor.css( {
|
604 | 555 | marginTop: heights.textTopHeight
|
605 | 556 | } );
|
606 |
| - |
607 |
| - $textEditorClone.width( contentWrapWidth - 20 - ( borderWidth * 2 ) ); |
608 | 557 | }
|
609 | 558 | }
|
610 | 559 | }
|
|
660 | 609 | });
|
661 | 610 |
|
662 | 611 | $textEditor.on( 'focus.editor-expand input.editor-expand propertychange.editor-expand', textEditorResize );
|
663 |
| - $textEditor.on( 'keyup.editor-expand', textEditorKeyup ); |
664 | 612 | mceBind();
|
665 | 613 |
|
666 | 614 | // Adjust when entering/exiting fullscreen mode.
|
|
0 commit comments