WordPress.org

Make WordPress Core

Ticket #36482: 36482.patch

File 36482.patch, 3.8 KB (added by iseulde, 6 years ago)
  • src/wp-admin/js/editor-expand.js

     
    1515                        $visualEditor = $(),
    1616                        $textTop = $( '#ed_toolbar' ),
    1717                        $textEditor = $( '#content' ),
     18                        textEditor = $textEditor[0],
     19                        textEditorLength = 0,
    1820                        $textEditorClone = $( '<div id="content-textarea-clone" class="wp-exclude-emoji"></div>' ),
     21                        textEditorClonelineHeight = parseInt( $textEditor.css( 'line-height' ), 10 ),
    1922                        $bottom = $( '#post-status-info' ),
    2023                        $menuBar = $(),
    2124                        $statusBar = $(),
     
    8790                function textEditorKeyup( event ) {
    8891                        var VK = jQuery.ui.keyCode,
    8992                                key = event.keyCode,
    90                                 range = document.createRange(),
    91                                 selStart = $textEditor[0].selectionStart,
    92                                 selEnd = $textEditor[0].selectionEnd,
    93                                 textNode = $textEditorClone[0].firstChild,
    9493                                buffer = 10,
    95                                 offset, cursorTop, cursorBottom, editorTop, editorBottom;
     94                                offset, cursorTop, editorTop;
    9695
    97                         if ( selStart && selEnd && selStart !== selEnd ) {
     96                        if ( key !== VK.UP && key !== VK.LEFT && key !== VK.BACKSPACE ) {
    9897                                return;
    9998                        }
    10099
    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();
    108 
    109                         if ( ! offset.height ) {
    110                                 return;
    111                         }
     100                        $textEditorClone.width( $textEditor.width() - 22 );
     101                        $textEditorClone.text( $textEditor.val().substring( 0, $textEditor[0].selectionStart ) || '&nbsp;' );
    112102
    113                         cursorTop = offset.top - buffer;
    114                         cursorBottom = cursorTop + offset.height + buffer;
     103                        offset = $textEditorClone[0].getBoundingClientRect();
     104                        cursorTop = offset.bottom + textEditorClonelineHeight - buffer;
    115105                        editorTop = heights.adminBarHeight + heights.toolsHeight + heights.textTopHeight;
    116                         editorBottom = heights.windowHeight - heights.bottomHeight;
    117106
    118                         if ( cursorTop < editorTop && ( key === VK.UP || key === VK.LEFT || key === VK.BACKSPACE ) ) {
     107                        if ( cursorTop < editorTop ) {
    119108                                window.scrollTo( window.pageXOffset, cursorTop + window.pageYOffset - editorTop );
    120                         } else if ( cursorBottom > editorBottom ) {
    121                                 window.scrollTo( window.pageXOffset, cursorBottom + window.pageYOffset - editorBottom );
    122109                        }
    123110                }
    124111
    125112                function textEditorResize() {
     113                        var pageYOffset, height,
     114                                reduce = textEditorLength && textEditorLength > textEditor.value.length;
     115
    126116                        if ( ( mceEditor && ! mceEditor.isHidden() ) || ( ! mceEditor && initialMode === 'tinymce' ) ) {
    127117                                return;
    128118                        }
    129119
    130                         var textEditorHeight = $textEditor.height(),
    131                                 hiddenHeight;
     120                        textEditorLength = textEditor.value.length;
     121                        height = textEditor.style.height;
    132122
    133                         $textEditorClone.width( $textEditor.width() - 22 );
    134                         $textEditorClone.text( $textEditor.val() + '&nbsp;' );
     123                        if ( reduce ) {
     124                                pageYOffset = window.pageYOffset;
    135125
    136                         hiddenHeight = $textEditorClone.height();
     126                                textEditor.style.height = 'auto';
     127                                textEditor.style.height = textEditor.scrollHeight + 'px';
    137128
    138                         if ( hiddenHeight < autoresizeMinHeight ) {
    139                                 hiddenHeight = autoresizeMinHeight;
     129                                window.scrollTo( window.pageXOffset, pageYOffset );
     130                        } else if ( parseInt( textEditor.style.height, 10 ) < textEditor.scrollHeight ) {
     131                                textEditor.style.height = textEditor.scrollHeight + 'px';
    140132                        }
    141133
    142                         if ( hiddenHeight === textEditorHeight ) {
    143                                 return;
     134                        if ( height !== textEditor.style.height ) {
     135                                adjust();
    144136                        }
    145 
    146                         $textEditor.height( hiddenHeight );
    147 
    148                         adjust();
    149137                }
    150138
    151139                // We need to wait for TinyMCE to initialize.
     
    474462
    475463                                        if ( event && event.deltaHeight > 0 && event.deltaHeight < 100 ) {
    476464                                                window.scrollBy( 0, event.deltaHeight );
    477                                         } else if ( advanced ) {
     465                                        } else if ( visual && advanced ) {
    478466                                                fixedBottom = true;
    479467
    480468                                                $statusBar.css( {