WordPress.org

Make WordPress Core

Ticket #28595: 28595.11.patch

File 28595.11.patch, 5.1 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                } 
     
    381405                } else if ( cursorAfter && ( keyCode === VK.DOWN || keyCode === VK.RIGHT ) ) { 
    382406                        if ( view.nextSibling ) { 
    383407                                if ( getView( view.nextSibling ) ) { 
    384                                         setViewCursor( false, view.nextSibling ); 
     408                                        setViewCursor( keyCode === VK.RIGHT, view.nextSibling ); 
    385409                                } else { 
    386410                                        selection.setCursorLocation( view.nextSibling, 0 ); 
    387411                                } 
    388                         } else { 
    389                                 handleEnter( view ); 
    390412                        } 
    391413                        event.preventDefault(); 
    392414                } else if ( cursorBefore && ( keyCode === VK.UP || keyCode ===  VK.LEFT ) ) { 
    393415                        if ( view.previousSibling ) { 
    394416                                if ( getView( view.previousSibling ) ) { 
    395                                         setViewCursor( true, view.previousSibling ); 
     417                                        setViewCursor( keyCode === VK.UP, view.previousSibling ); 
    396418                                } else { 
    397419                                        selection.select( view.previousSibling, true ); 
    398420                                        selection.collapse(); 
    399421                                } 
    400                         } else { 
    401                                 handleEnter( view, true ); 
    402422                        } 
    403423                        event.preventDefault(); 
    404424                } else if ( cursorBefore && keyCode === VK.DOWN ) { 
     
    465485                        return; 
    466486                } 
    467487 
    468                 if ( keyCode === VK.LEFT || keyCode === VK.UP ) { 
     488                if ( keyCode === VK.LEFT ) { 
    469489                        setViewCursor( true, view ); 
    470490                        deselect(); 
    471                 } else if ( keyCode === VK.RIGHT || keyCode === VK.DOWN ) { 
     491                } else if ( keyCode === VK.UP ) { 
     492                        if ( view.previousSibling ) { 
     493                                if ( getView( view.previousSibling ) ) { 
     494                                        setViewCursor( true, view.previousSibling ); 
     495                                } else { 
     496                                        selection.select( view.previousSibling, true ); 
     497                                        selection.collapse(); 
     498                                } 
     499                        } else { 
     500                                setViewCursor( true, view ); 
     501                        } 
     502                        deselect(); 
     503                } else if ( keyCode === VK.RIGHT ) { 
    472504                        setViewCursor( false, view ); 
    473505                        deselect(); 
     506                } else if ( keyCode === VK.DOWN ) { 
     507                        if ( view.nextSibling ) { 
     508                                if ( getView( view.nextSibling ) ) { 
     509                                        setViewCursor( false, view.nextSibling ); 
     510                                } else { 
     511                                        selection.setCursorLocation( view.nextSibling, 0 ); 
     512                                } 
     513                        } else { 
     514                                setViewCursor( false, view ); 
     515                        } 
     516                        deselect(); 
    474517                } else if ( keyCode === VK.ENTER ) { 
    475518                        handleEnter( view ); 
    476519                } else if ( keyCode === VK.DELETE || keyCode === VK.BACKSPACE ) { 
     
    511554                } 
    512555        }); 
    513556 
     557        editor.on( 'focus', function() { 
     558                focus = true; 
     559                editor.dom.addClass( editor.getBody(), 'has-focus' ); 
     560        } ); 
     561 
     562        editor.on( 'blur', function() { 
     563                focus = false; 
     564                editor.dom.removeClass( editor.getBody(), 'has-focus' ); 
     565        } ); 
     566 
    514567        editor.on( 'nodechange', function( event ) { 
    515568                var dom = editor.dom, 
    516569                        views = editor.dom.select( '.wpview-wrap' ), 
     
    526579                dom.removeClass( views, 'wpview-selection-after' ); 
    527580                dom.removeClass( views, 'wpview-cursor-hide' ); 
    528581 
    529                 if ( view ) { 
     582                if ( view && editor.selection.isCollapsed() && focus ) { 
    530583                        if ( className === 'wpview-selection-before' || className === 'wpview-selection-after' ) { 
    531584                                setViewCursorTries = 0; 
    532585 
  • 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