Ticket #3133: 3133_3.patch
File 3133_3.patch, 3.9 KB (added by , 14 years ago) |
---|
-
_source/plugins/wysiwygarea/plugin.js
76 76 77 77 // Remove the original contents. 78 78 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 80 83 clone = !i && element || element.clone( true ); 81 84 82 85 // If we're inserting a block at dtd-violated position, split … … 113 116 114 117 range.moveToPosition( lastElement, CKEDITOR.POSITION_AFTER_END ); 115 118 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 } 119 125 120 126 selection.selectRanges( [ range ] ); 121 127 -
_source/core/dom/range.js
1578 1578 1579 1579 return walker.checkForward(); 1580 1580 }, 1581 1582 1581 /** 1583 * Moves the range boundaries to the first editing pointinside an1582 * Moves the range to the first/last editing position inside an 1584 1583 * element. For example, in an element tree like 1585 1584 * "<p><b><i></i></b> Text</p>", the start editing point is 1586 1585 * "<p><b><i>^</i></b> Text</p>" (inside <i>). 1587 1586 * @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. 1589 1589 */ 1590 moveToElementEdit Start : function( targetElement)1590 moveToElementEditablePosition: function( targetElement, isMoveToEnd ) 1591 1591 { 1592 1592 var editableElement; 1593 1593 … … 1598 1598 else if ( editableElement ) 1599 1599 break ; // If we already found an editable element, stop the loop. 1600 1600 1601 targetElement = targetElement .getFirst();1601 targetElement = targetElement[ isMoveToEnd? 'getLast' : 'getFirst' ].call( targetElement ); 1602 1602 } 1603 1603 1604 1604 if ( editableElement ) 1605 1605 { 1606 this.moveToPosition(editableElement, CKEDITOR.POSITION_AFTER_START); 1606 this.moveToPosition( editableElement, 1607 isMoveToEnd ? 1608 CKEDITOR.POSITION_BEFORE_END : CKEDITOR.POSITION_AFTER_START ); 1607 1609 return true; 1608 1610 } 1609 1611 else … … 1611 1613 }, 1612 1614 1613 1615 /** 1614 * Get the single node enclosed within the range if there's one.1616 *@see {CKEDITOR.dom.range.moveToElementEditablePosition} 1615 1617 */ 1616 getEnclosedNode : function()1618 moveToElementEditStart : function( target ) 1617 1619 { 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 ); 1630 1629 }, 1631 1630 1632 1631 getTouchedStartNode : function()