WordPress.org

Make WordPress Core

Ticket #28595: 28595.10.patch

File 28595.10.patch, 4.2 KB (added by iseulde, 3 years ago)
  • src/wp-includes/js/tinymce/plugins/wpview/plugin.js

     
    88                VK = tinymce.util.VK, 
    99                TreeWalker = tinymce.dom.TreeWalker, 
    1010                toRemove = false, 
    11                 cursorInterval, lastKeyDownNode, setViewCursorTries; 
     11                cursorInterval, lastKeyDownNode, setViewCursorTries, focus; 
    1212 
    1313        function getView( node ) { 
    1414                return editor.dom.getParent( node, function( node ) { 
     
    349349                        selection = editor.selection, 
    350350                        node = selection.getNode(), 
    351351                        view = getView( node ), 
    352                         cursorBefore, cursorAfter; 
     352                        cursorBefore, cursorAfter, 
     353                        range, clonedRange, tempRange; 
    353354 
    354355                lastKeyDownNode = node; 
    355356 
     357                // Make sure we don't delete part of a view. 
     358                // If the range ends or starts with the view, we'll need to trim it. 
     359                if ( ! selection.isCollapsed() ) { 
     360                        range = selection.getRng(); 
     361 
     362                        if ( view = getView( range.endContainer ) ) { 
     363                                clonedRange = range.cloneRange(); 
     364                                selection.select( view.previousSibling, true ); 
     365                                selection.collapse(); 
     366                                tempRange = selection.getRng(); 
     367                                clonedRange.setEnd( tempRange.endContainer, tempRange.endOffset ); 
     368                                selection.setRng( clonedRange ); 
     369 
     370                                return; 
     371                        } else if ( view = getView( range.startContainer ) ) { 
     372                                clonedRange = range.cloneRange(); 
     373                                clonedRange.setStart( view.nextSibling, 0 ); 
     374                                selection.setRng( clonedRange ); 
     375 
     376                                return; 
     377                        } 
     378                } 
     379 
    356380                if ( ! view ) { 
    357381                        return; 
    358382                } 
     
    465489                        return; 
    466490                } 
    467491 
    468                 if ( keyCode === VK.LEFT || keyCode === VK.UP ) { 
     492                if ( keyCode === VK.LEFT ) { 
    469493                        setViewCursor( true, view ); 
    470494                        deselect(); 
    471                 } else if ( keyCode === VK.RIGHT || keyCode === VK.DOWN ) { 
     495                } else if ( keyCode === VK.UP ) { 
     496                        if ( view.previousSibling ) { 
     497                                if ( getView( view.previousSibling ) ) { 
     498                                        setViewCursor( true, view.previousSibling ); 
     499                                } else { 
     500                                        selection.select( view.previousSibling, true ); 
     501                                        selection.collapse(); 
     502                                } 
     503                        } else { 
     504                                handleEnter( view, true ); 
     505                        } 
     506                        deselect(); 
     507                } else if ( keyCode === VK.RIGHT ) { 
    472508                        setViewCursor( false, view ); 
    473509                        deselect(); 
     510                } else if ( keyCode === VK.DOWN ) { 
     511                        if ( view.nextSibling ) { 
     512                                if ( getView( view.nextSibling ) ) { 
     513                                        setViewCursor( false, view.nextSibling ); 
     514                                } else { 
     515                                        selection.setCursorLocation( view.nextSibling, 0 ); 
     516                                } 
     517                        } else { 
     518                                handleEnter( view ); 
     519                        } 
     520                        deselect(); 
    474521                } else if ( keyCode === VK.ENTER ) { 
    475522                        handleEnter( view ); 
    476523                } else if ( keyCode === VK.DELETE || keyCode === VK.BACKSPACE ) { 
     
    511558                } 
    512559        }); 
    513560 
     561        editor.on( 'focus', function() { 
     562                focus = true; 
     563                editor.dom.addClass( editor.getBody(), 'has-focus' ); 
     564        } ); 
     565 
     566        editor.on( 'blur', function() { 
     567                focus = false; 
     568                editor.dom.removeClass( editor.getBody(), 'has-focus' ); 
     569        } ); 
     570 
    514571        editor.on( 'nodechange', function( event ) { 
    515572                var dom = editor.dom, 
    516573                        views = editor.dom.select( '.wpview-wrap' ), 
     
    526583                dom.removeClass( views, 'wpview-selection-after' ); 
    527584                dom.removeClass( views, 'wpview-cursor-hide' ); 
    528585 
    529                 if ( view ) { 
     586                if ( view && editor.selection.isCollapsed() && focus ) { 
    530587                        if ( className === 'wpview-selection-before' || className === 'wpview-selection-after' ) { 
    531588                                setViewCursorTries = 0; 
    532589 
  • src/wp-includes/js/tinymce/skins/wordpress/wp-content.css

     
    241241        user-select: text; 
    242242} 
    243243 
    244 .wpview-wrap.wpview-selection-before:before, 
    245 .wpview-wrap.wpview-selection-after:before { 
     244.has-focus .wpview-wrap.wpview-selection-before:before, 
     245.has-focus .wpview-wrap.wpview-selection-after:before { 
    246246        content: ''; 
    247247        margin: 0; 
    248248        padding: 0; 
     
    258258        opacity: 1; 
    259259} 
    260260 
    261 .wpview-wrap.wpview-selection-after:before { 
     261.has-focus .wpview-wrap.wpview-selection-after:before { 
    262262        left: auto; 
    263263        right: -3px; 
    264264} 
    265265 
    266 .wpview-wrap.wpview-cursor-hide:before { 
     266.has-focus .wpview-wrap.wpview-cursor-hide:before { 
    267267        opacity: 0; 
    268268} 
    269269