WordPress.org

Make WordPress Core

Ticket #28595: 28595.9.patch

File 28595.9.patch, 2.6 KB (added by iseulde, 4 years ago)
  • src/wp-includes/js/tinymce/plugins/wpview/plugin.js

     
    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 ) {
     
    526573                dom.removeClass( views, 'wpview-selection-after' );
    527574                dom.removeClass( views, 'wpview-cursor-hide' );
    528575
    529                 if ( view ) {
     576                if ( view && editor.selection.isCollapsed() ) {
    530577                        if ( className === 'wpview-selection-before' || className === 'wpview-selection-after' ) {
    531578                                setViewCursorTries = 0;
    532579