X-Git-Url: https://git.mdrn.pl/fnpeditor.git/blobdiff_plain/fd5607f0a5ffb5f37df8a53a8b50d72ec6a4f8b9..ce1cadf0f7da03cb03d2ca728c92cfc9ea8c6517:/src/smartxml/core.js?ds=inline diff --git a/src/smartxml/core.js b/src/smartxml/core.js index 665f9d5..a2d39a6 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); @@ -32,6 +32,10 @@ var documentNodeTransformations = { this._$.detach(); if(existed) { this.triggerChangeEvent('nodeDetached', {parent: parent}); + if(!parent) { + // This was the root of the document + this.document._defineDocumentProperties(null); + } } return this; }, @@ -41,9 +45,12 @@ var documentNodeTransformations = { if(this.isRoot()) { return this.document.replaceRoot(node); } - toret = this.after(node); - this.detach(); - return toret; + if(this.parent()) { + toret = this.after(node); + this.detach(); + return toret; + } + throw new Error('Cannot replace node without a parent.'); }, after: INSERTION(function(node) { @@ -70,8 +77,9 @@ var documentNodeTransformations = { wrapWith: function(node) { var insertion = this.getNodeInsertion(node); - if(this.parent()) { - this.before(insertion.ofNode); + + if(this.parent() || this.isRoot()) { + this.replaceWith(insertion.ofNode); } insertion.ofNode.append(this); return insertion.ofNode;