refactoring: moving create(wlxmlNode) to constructor, caching element instance
[fnpeditor.git] / src / smartxml / core.js
index ec2c643..a2d39a6 100644 (file)
@@ -32,6 +32,10 @@ var documentNodeTransformations = {
         this._$.detach();
         if(existed) {
             this.triggerChangeEvent('nodeDetached', {parent: parent});
         this._$.detach();
         if(existed) {
             this.triggerChangeEvent('nodeDetached', {parent: parent});
+            if(!parent) {
+                // This was the root of the document
+                this.document._defineDocumentProperties(null);
+            }
         }
         return this;
     },
         }
         return this;
     },
@@ -41,9 +45,12 @@ var documentNodeTransformations = {
         if(this.isRoot()) {
             return this.document.replaceRoot(node);
         }
         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) {
     },
 
     after: INSERTION(function(node) {
@@ -70,8 +77,9 @@ var documentNodeTransformations = {
 
     wrapWith: function(node) {
         var insertion = this.getNodeInsertion(node);
 
     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;
         }
         insertion.ofNode.append(this);
         return insertion.ofNode;