Ticket #3133: 3133_3.patch

File 3133_3.patch, 3.9 KB (added by Garry Yao, 10 years ago)
  • _source/plugins/wysiwygarea/plugin.js

     
    7676
    7777                                // Remove the original contents.
    7878                                range.deleteContents();
    79 
     79                               
     80                                // Place the carot right after the editing end of previous boundary node. (#3313)
     81                                range.moveToElementEditEnd( range.getBoundaryNodes().endNode );
     82
    8083                                clone = !i && element || element.clone( true );
    8184
    8285                                // If we're inserting a block at dtd-violated position, split
     
    113116
    114117                        range.moveToPosition( lastElement, CKEDITOR.POSITION_AFTER_END );
    115118
    116                         var next = lastElement.getNextSourceNode( true );
    117                         if ( next && next.type == CKEDITOR.NODE_ELEMENT )
    118                                 range.moveToElementEditStart( next );
     119                        if( isBlock )   // Place cursor at start of the block's next element.
     120                        {
     121                                var next = lastElement.getNextSourceNode( true );
     122                                if ( next && next.type == CKEDITOR.NODE_ELEMENT )
     123                                        range.moveToElementEditStart( next );
     124                        }
    119125
    120126                        selection.selectRanges( [ range ] );
    121127
  • _source/core/dom/range.js

     
    15781578
    15791579                        return walker.checkForward();
    15801580                },
    1581 
    15821581                /**
    1583                  * Moves the range boundaries to the first editing point inside an
     1582                 * Moves the range to the first/last editing position inside an
    15841583                 * element. For example, in an element tree like
    15851584                 * "<p><b><i></i></b> Text</p>", the start editing point is
    15861585                 * "<p><b><i>^</i></b> Text</p>" (inside <i>).
    15871586                 * @param {CKEDITOR.dom.element} targetElement The element into which
    1588                  *              look for the editing spot.
     1587                 *              look for the editing spot, it should be guaranteed to contains at least one editable position.
     1588                        @param {Boolean} isMoveToEnd Whether move to the end editable position.
    15891589                 */
    1590                 moveToElementEditStart : function( targetElement )
     1590                moveToElementEditablePosition: function( targetElement, isMoveToEnd )
    15911591                {
    15921592                        var editableElement;
    15931593
     
    15981598                                else if ( editableElement )
    15991599                                        break ;         // If we already found an editable element, stop the loop.
    16001600
    1601                                 targetElement = targetElement.getFirst();
     1601                                targetElement = targetElement[ isMoveToEnd? 'getLast' : 'getFirst' ].call( targetElement );
    16021602                        }
    16031603
    16041604                        if ( editableElement )
    16051605                        {
    1606                                 this.moveToPosition(editableElement, CKEDITOR.POSITION_AFTER_START);
     1606                                this.moveToPosition( editableElement,
     1607                                                isMoveToEnd ?
     1608                                                CKEDITOR.POSITION_BEFORE_END : CKEDITOR.POSITION_AFTER_START );
    16071609                                return true;
    16081610                        }
    16091611                        else
     
    16111613                },
    16121614
    16131615                /**
    1614                  * Get the single node enclosed within the range if there's one.
     1616                 *@see {CKEDITOR.dom.range.moveToElementEditablePosition}
    16151617                 */
    1616                 getEnclosedNode : function()
     1618                moveToElementEditStart : function( target )
    16171619                {
    1618                         var walkerRange = this.clone(),
    1619                                 walker = new CKEDITOR.dom.walker( walkerRange ),
    1620                                 isNotBookmarks = CKEDITOR.dom.walker.bookmark( true ),
    1621                                 isNotWhitespaces = CKEDITOR.dom.walker.whitespaces( true ),
    1622                                 evaluator = function( node )
    1623                                 {
    1624                                         return isNotWhitespaces( node ) && isNotBookmarks( node );
    1625                                 };
    1626                         walkerRange.evaluator = evaluator;
    1627                         var node = walker.next();
    1628                         walker.reset();
    1629                         return node && node.equals( walker.previous() ) ? node : null;
     1620                        return this.moveToElementEditablePosition( target );
     1621                },
     1622
     1623                /**
     1624                 *@see {CKEDITOR.dom.range.moveToElementEditablePosition}
     1625                 */
     1626                moveToElementEditEnd : function( target )
     1627                {
     1628                        return this.moveToElementEditablePosition( target, true );
    16301629                },
    16311630
    16321631                getTouchedStartNode : function()
© 2003 – 2019 CKSource – Frederico Knabben. All rights reserved. | Terms of use | Privacy policy