# HG changeset patch # User stighal@opera.com # Date 1326465922 -3600 # Branch stighal_patch_02 # Node ID a1e9690cb3f027889cc976337ac3b6f5832b5b6a # Parent e5de1ccef45ade2c6e50ea5a2f054eb963999373 According to point 10 in the Range spec for insertNode() [1], the end should be set to (parent, new offset) if start and end points are equal after pre-inserting the new node. [1] http://dvcs.w3.org/hg/domcore/raw-file/tip/Overview.html#dom-range-insertnode diff -r e5de1ccef45a -r a1e9690cb3f0 DOMCore/tests/approved/common.js --- a/DOMCore/tests/approved/common.js Thu Jan 12 14:07:20 2012 +0100 +++ b/DOMCore/tests/approved/common.js Fri Jan 13 15:45:22 2012 +0100 @@ -857,6 +857,21 @@ parentNode = referenceNode.parentNode; } + // "Let new offset be the index of reference node, or parent's length if reference node is null." + var newOffset; + if (!referenceNode) { + newOffset = nodeLength(parentNode); + } else { + newOffset = indexOf(referenceNode); + } + + // "Add node's length to new offset, if node is a DocumentFragment. Otherwise add one to new offset." + if (newNode.nodeType == Node.DOCUMENT_FRAGMENT_NODE) { + newOffset += newNode.length; + } else { + newOffset++; + } + // "Call insertBefore(newNode, reference node) on parent node, re-raising // any exceptions that call raised." try { @@ -864,6 +879,16 @@ } catch (e) { return getDomExceptionName(e); } + + // "If start and end are the same, set end to (parent, new offset)" + if (range.startContainer == range.endContainer + && range.startOffset == range.endOffset) { + try { + range.setEnd(parentNode, newOffset); + } catch (e) { + return getDomExceptionName(e); + } + } } /**