WordPress.org

Make WordPress Core

Ticket #28595: 28595.11.patch

File 28595.11.patch, 5.1 KB (added by iseulde, 4 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