smartxml: DocumentNode.getIndex function for syntactic sugar
[fnpeditor.git] / src / smartxml / smartxml.js
index 6b02779..b4036d3 100644 (file)
@@ -42,18 +42,14 @@ $.extend(DocumentNode.prototype, {
     after: function(node) {
         var insertion = this.getNodeInsertion(node);
         this._$.after(insertion.ofNode.nativeNode);
-        if(insertion.insertsNew) {
-            this.triggerChangeEvent('nodeAdded', {node: insertion.ofNode});
-        }
+        this.triggerChangeEvent(insertion.insertsNew ? 'nodeAdded' : 'nodeMoved', {node: insertion.ofNode});
         return insertion.ofNode;
     },
 
     before: function(node) {
         var insertion = this.getNodeInsertion(node);
         this._$.before(insertion.ofNode.nativeNode);
-        if(insertion.insertsNew) {
-            this.triggerChangeEvent('nodeAdded', {node: insertion.ofNode});
-        }
+        this.triggerChangeEvent(insertion.insertsNew ? 'nodeAdded' : 'nodeMoved', {node: insertion.ofNode});
         return insertion.ofNode;
     },
 
@@ -82,6 +78,10 @@ $.extend(DocumentNode.prototype, {
           insertion.insertsNew = true;
         }
         return insertion;
+    },
+
+    getIndex: function() {
+        return this.parent().indexOf(this);
     }
 });
 
@@ -173,18 +173,14 @@ $.extend(ElementNode.prototype, {
     append: function(node) {
         var insertion = this.getNodeInsertion(node);
         this._$.append(insertion.ofNode.nativeNode);
-        if(insertion.insertsNew) {
-            this.triggerChangeEvent('nodeAdded', {node: insertion.ofNode});
-        }
+        this.triggerChangeEvent(insertion.insertsNew ? 'nodeAdded' : 'nodeMoved', {node: insertion.ofNode});
         return insertion.ofNode;
     },
 
     prepend: function(node) {
         var insertion = this.getNodeInsertion(node);
         this._$.prepend(insertion.ofNode.nativeNode);
-        if(insertion.insertsNew) {
-            this.triggerChangeEvent('nodeAdded', {node: insertion.ofNode});
-        }
+        this.triggerChangeEvent(insertion.insertsNew ? 'nodeAdded' : 'nodeMoved', {node: insertion.ofNode});
         return insertion.ofNode;
     },
 
@@ -283,7 +279,7 @@ $.extend(TextNode.prototype, {
                 textNodeIdx: this.parent().indexOf(this),
                 offsetStart: Math.min(desc.start, desc.end),
                 offsetEnd: Math.max(desc.start, desc.end),
-                _with: {tag: desc.tagName, attrs: desc.attrs}
+                _with: {tagName: desc.tagName, attrs: desc.attrs}
             });
         } else {
             return DocumentNode.prototype.wrapWith.call(this, desc);
@@ -404,7 +400,7 @@ $.extend(Document.prototype, Backbone.Events, {
             throw new Error('Wrapping text in non-sibling text nodes not supported.');
         }
         
-        var wrapperElement = this.createElementNode({tagName: params._with.tag, attrs: params._with.attrs});
+        var wrapperElement = this.createElementNode({tagName: params._with.tagName, attrs: params._with.attrs});
         textNode1.after(wrapperElement);
         textNode1.detach();