X-Git-Url: https://git.mdrn.pl/fnpeditor.git/blobdiff_plain/1cbef89f1995ae8bb83d01a58d20b005ad8b3a8f..4ff93211ebf44be111ae2c00b7ee9c843ff6d7c9:/src/smartxml/core.js?ds=sidebyside diff --git a/src/smartxml/core.js b/src/smartxml/core.js index f940ccc..ec2c643 100644 --- a/src/smartxml/core.js +++ b/src/smartxml/core.js @@ -13,7 +13,7 @@ var INSERTION = function(implementation) { nodeParent, returned; options = options || {}; - if(!(this.document.containsNode(this))) { + if(!(this.document.containsNode(this)) || !insertion.isNew) { nodeParent = insertion.ofNode.parent(); } returned = implementation.call(this, insertion.ofNode); @@ -433,7 +433,7 @@ var documentTransformations = { return insertion.ofNode; }, deleteText: function(params) { - var ptr, prev, next, toDetach, middle, text; + var ptr, next, toDetach, middle, text; if(params.from.node.sameNode(params.to.node)) { ptr = params.from.node; @@ -452,7 +452,10 @@ var documentTransformations = { while(next || ptr.parent()) { if(next) { - if(next.sameNode(params.to.node) || (next.nodeType === Node.ELEMENT_NODE && next.containsNode(params.to.node))) { + if(next.sameNode(params.to.node)) { + return; + } + else if(next.nodeType === Node.ELEMENT_NODE && next.containsNode(params.to.node)) { middle = next; break; } else { @@ -466,24 +469,19 @@ var documentTransformations = { } } - ptr = params.to.node; - - if(!this.containsNode(ptr)) { + if(!this.containsNode(params.to.node)) { // The end node was merged during detaching nodes above - there is nothing more left to do. return; } - prev = ptr.prev(); - while(prev || ptr.parent()) { - if(ptr.sameNode(middle)) { - break; - } - if(prev) { - toDetach = prev; - prev = prev.prev(); - toDetach.detach(); + + ptr = middle.contents()[0]; + while(ptr && !ptr.sameNode(params.to.node)) { + if(ptr.nodeType === Node.ELEMENT_NODE && ptr.containsNode(params.to.node)) { + ptr = ptr.contents()[0]; + continue; } else { - ptr = ptr.parent(); - prev = ptr.prev(); + ptr = ptr.next(); + ptr.prev().detach(); } } }