diff --git a/core/dom/range.js b/core/dom/range.js index 81ec9e529e0..74555eccb25 100644 --- a/core/dom/range.js +++ b/core/dom/range.js @@ -178,6 +178,7 @@ CKEDITOR.dom.range = function( root ) { range.optimizeBookmark(); + var isDelete = action === 0; var isExtract = action == 1; var isClone = action == 2; var doClone = isClone || isExtract; @@ -387,6 +388,11 @@ CKEDITOR.dom.range = function( root ) { function consume( node, newParent, toStart, forceClone ) { var nextSibling = toStart ? node.getPrevious() : node.getNext(); + // We do not clone if we are only deleting, so do nothing. + if ( forceClone && isDelete ) { + return nextSibling; + } + // If cloning, just clone it. if ( isClone || forceClone ) { newParent.append( node.clone( true ), toStart ); diff --git a/tests/core/dom/range/clonecontents.js b/tests/core/dom/range/clonecontents.js index bf1a8a35819..9f56b37e96b 100644 --- a/tests/core/dom/range/clonecontents.js +++ b/tests/core/dom/range/clonecontents.js @@ -475,6 +475,21 @@ var clone = range.cloneContents(); assert.isInnerHtmlMatching( '
foo
', clone.getHtml() ); + }, + + 'test cloneContents - empty container, non-empty container': function() { + var root = doc.createElement( 'div' ), + range = new CKEDITOR.dom.range( doc ); + + root.setHtml( 'f[]r
', bender.tools.range.getWithHtml( root, range ) ); }, - 'test extractContents - mergeThen (nothing to merge)': function() { + 'test deleteContents - mergeThen (nothing to merge)': function() { var root = doc.createElement( 'div' ), range = new CKEDITOR.dom.range( doc ); @@ -174,6 +174,36 @@ range.deleteContents( true ); assert.isInnerHtmlMatching( 'f[]r
', bender.tools.range.getWithHtml( root, range ) ); + }, + + 'test deleteContents - empty containers': function() { + var root = doc.createElement( 'div' ), + range = new CKEDITOR.dom.range( doc ); + + root.setHtml( 'xfoo
y' ); + doc.getBody().append( root ); + + range.setStart( root.findOne( 'h1' ), 0 ); //foo
*', clone.getHtml().replace( /<\/b>/g, '*' ) ); assert.isInnerHtmlMatching( 'x[]ay', bender.tools.range.getWithHtml( root, range ).replace( /<\/b>/g, '*' ) ); + }, + + 'test extractContents - empty container, non-empty container': function() { + var root = doc.createElement( 'div' ), + range = new CKEDITOR.dom.range( doc ); + + root.setHtml( '