X-Git-Url: https://jasonwoof.com/gitweb/?a=blobdiff_plain;f=_source%2Fcore%2Fdom%2Frange.js;h=5a05ee1f0b05f12c5d420d2bd3d5021ce103bf6a;hb=refs%2Ftags%2Fv3.2.2;hp=127f7aaba39ce553c0961f31b471c82436c47d2f;hpb=e7789c1ad838194d45eeee6ac2eb6e55f5cf35a1;p=ckeditor.git diff --git a/_source/core/dom/range.js b/_source/core/dom/range.js index 127f7aa..5a05ee1 100644 --- a/_source/core/dom/range.js +++ b/_source/core/dom/range.js @@ -1240,7 +1240,7 @@ CKEDITOR.dom.range = function( document ) * always anchor beside text nodes or innermost element. * @param {Number} mode ( CKEDITOR.SHRINK_ELEMENT | CKEDITOR.SHRINK_TEXT ) The shrinking mode. */ - shrink : function( mode ) + shrink : function( mode, selectContents ) { // Unable to shrink a collapsed range. if ( !this.collapsed ) @@ -1315,14 +1315,14 @@ CKEDITOR.dom.range = function( document ) if ( moveStart ) { var textStart = walker[ mode == CKEDITOR.SHRINK_ELEMENT ? 'lastForward' : 'next'](); - textStart && this.setStartBefore( textStart ); + textStart && this.setStartAt( textStart, selectContents ? CKEDITOR.POSITION_AFTER_START : CKEDITOR.POSITION_BEFORE_START ); } if ( moveEnd ) { walker.reset(); var textEnd = walker[ mode == CKEDITOR.SHRINK_ELEMENT ? 'lastBackward' : 'previous'](); - textEnd && this.setEndAfter( textEnd ); + textEnd && this.setEndAt( textEnd, selectContents ? CKEDITOR.POSITION_BEFORE_END : CKEDITOR.POSITION_AFTER_END ); } return !!( moveStart || moveEnd ); @@ -1382,6 +1382,11 @@ CKEDITOR.dom.range = function( document ) // we will not need this check for our use of this class so we can // ignore it for now. + // Fixing invalid range start inside dtd empty elements. + if( startNode.type == CKEDITOR.NODE_ELEMENT + && CKEDITOR.dtd.$empty[ startNode.getName() ] ) + startNode = startNode.getParent(), startOffset = startNode.getIndex(); + this.startContainer = startNode; this.startOffset = startOffset; @@ -1408,6 +1413,11 @@ CKEDITOR.dom.range = function( document ) // will not need this check for our use of this class so we can ignore // it for now. + // Fixing invalid range end inside dtd empty elements. + if( endNode.type == CKEDITOR.NODE_ELEMENT + && CKEDITOR.dtd.$empty[ endNode.getName() ] ) + endNode = endNode.getParent(), endOffset = endNode.getIndex() + 1; + this.endContainer = endNode; this.endOffset = endOffset;