WordPress.org

Make WordPress Core

Ticket #28567: 28567.5.patch

File 28567.5.patch, 5.0 KB (added by azaozz, 5 years ago)
  • src/wp-includes/js/tinymce/plugins/wpview/plugin.js

     
    5555        function setViewCursor( before, view ) {
    5656                var location = before ? 'before' : 'after',
    5757                        offset = before ? 0 : 1;
     58                deselect();
    5859                editor.selection.setCursorLocation( editor.dom.select( '.wpview-selection-' + location, view )[0], offset );
    5960                editor.nodeChanged();
    6061        }
     
    111112                dom.bind( clipboard, 'beforedeactivate focusin focusout', _stop );
    112113                dom.bind( selected, 'beforedeactivate focusin focusout', _stop );
    113114
     115                tinymce.DOM.addClass( editor.getContainer(), 'wpview-selected' );
     116
    114117                // Make sure that the editor is focused.
    115118                // It is possible that the editor is not focused when the mouse event fires
    116119                // without focus, the selection will not work properly.
     
    274277                        var view = getView( event.target ),
    275278                                deselectEventType;
    276279
     280                        firstFocus = false;
     281
    277282                        // Contain clicks inside the view wrapper
    278283                        if ( view ) {
    279284                                event.stopPropagation();
     
    484489
    485490                if ( keyCode === VK.LEFT ) {
    486491                        setViewCursor( true, view );
    487                         deselect();
    488492                } else if ( keyCode === VK.UP ) {
    489493                        if ( view.previousSibling ) {
    490494                                if ( getView( view.previousSibling ) ) {
    491495                                        setViewCursor( true, view.previousSibling );
    492496                                } else {
     497                                        deselect();
    493498                                        selection.select( view.previousSibling, true );
    494499                                        selection.collapse();
    495500                                }
     
    496501                        } else {
    497502                                setViewCursor( true, view );
    498503                        }
    499                         deselect();
     504                       
    500505                } else if ( keyCode === VK.RIGHT ) {
    501506                        setViewCursor( false, view );
    502                         deselect();
    503507                } else if ( keyCode === VK.DOWN ) {
    504508                        if ( view.nextSibling ) {
    505509                                if ( getView( view.nextSibling ) ) {
    506510                                        setViewCursor( false, view.nextSibling );
    507511                                } else {
     512                                        deselect();
    508513                                        selection.setCursorLocation( view.nextSibling, 0 );
    509514                                }
    510515                        } else {
    511516                                setViewCursor( false, view );
    512517                        }
    513                         deselect();
    514518                } else if ( keyCode === VK.ENTER ) {
    515519                        handleEnter( view );
    516520                } else if ( keyCode === VK.DELETE || keyCode === VK.BACKSPACE ) {
     
    586590                dom.removeClass( views, 'wpview-selection-after' );
    587591                dom.removeClass( views, 'wpview-cursor-hide' );
    588592
    589                 if ( view && editor.selection.isCollapsed() && focus ) {
    590                         if ( className === 'wpview-selection-before' || className === 'wpview-selection-after' ) {
    591                                 setViewCursorTries = 0;
     593                if ( ! selected ) {
     594                        tinymce.DOM.removeClass( editor.getContainer(), 'wpview-selected' );
     595                }
    592596
    593                                 // Make sure the cursor arrived in the right node.
    594                                 // This is necessary for Firefox.
    595                                 if ( lKDN === view.previousSibling ) {
    596                                         setViewCursor( true, view );
    597                                         return;
    598                                 } else if ( lKDN === view.nextSibling ) {
    599                                         setViewCursor( false, view );
    600                                         return;
    601                                 }
     597                if ( focus ) {
     598                        if ( view ) {
     599                                if ( className === 'wpview-selection-before' || className === 'wpview-selection-after' && editor.selection.isCollapsed() ) {
     600                                        setViewCursorTries = 0;
    602601
    603                                 dom.addClass( view, className );
     602                                        deselect();
    604603
    605                                 cursorInterval = setInterval( function() {
    606                                         if ( dom.hasClass( view, 'wpview-cursor-hide' ) ) {
    607                                                 dom.removeClass( view, 'wpview-cursor-hide' );
    608                                         } else {
    609                                                 dom.addClass( view, 'wpview-cursor-hide' );
     604                                        tinymce.DOM.addClass( editor.getContainer(), 'wpview-selected' );
     605
     606                                        // Make sure the cursor arrived in the right node.
     607                                        // This is necessary for Firefox.
     608                                        if ( lKDN === view.previousSibling ) {
     609                                                setViewCursor( true, view );
     610                                                return;
     611                                        } else if ( lKDN === view.nextSibling ) {
     612                                                setViewCursor( false, view );
     613                                                return;
    610614                                        }
    611                                 }, 500 );
    612                         // If the cursor happens to be anywhere around the view, then set the cursor properly.
    613                         // Only try this once to prevent a loop. (You never know.)
    614                         } else if ( ! selected && ! setViewCursorTries ) {
    615                                 setViewCursorTries++;
    616                                 setViewCursor( true, view );
     615
     616                                        dom.addClass( view, className );
     617
     618                                        cursorInterval = setInterval( function() {
     619                                                if ( dom.hasClass( view, 'wpview-cursor-hide' ) ) {
     620                                                        dom.removeClass( view, 'wpview-cursor-hide' );
     621                                                } else {
     622                                                        dom.addClass( view, 'wpview-cursor-hide' );
     623                                                }
     624                                        }, 500 );
     625                                // If the cursor lands anywhere else in the view, set the cursor before it.
     626                                // Only try this once to prevent a loop. (You never know.)
     627                                } else if ( className !== 'wpview-clipboard' && ! setViewCursorTries ) {
     628                                        deselect();
     629                                        setViewCursorTries++;
     630                                        setViewCursor( true, view );
     631                                }
     632                        } else {
     633                                deselect();
    617634                        }
    618635                }
    619636        });
    620637
     638        editor.on( 'resolvename', function( event ) {
     639                if ( editor.dom.hasClass( event.target, 'wpview-wrap' ) ) {
     640                        event.name = editor.dom.getAttrib( event.target, 'data-wpview-type' ) || 'wpview';
     641                } else if ( getView( event.target ) ) {
     642                        event.preventDefault();
     643                        event.stopPropagation();
     644                }
     645        });
     646
    621647        return {
    622648                getViewText: getViewText,
    623649                setViewText: setViewText