smartxml: ElementNode.insertAtIndex
authorAleksander Łukasz <aleksander.lukasz@nowoczesnapolska.org.pl>
Tue, 26 Nov 2013 13:11:15 +0000 (14:11 +0100)
committerAleksander Łukasz <aleksander.lukasz@nowoczesnapolska.org.pl>
Tue, 26 Nov 2013 13:11:15 +0000 (14:11 +0100)
src/smartxml/smartxml.js
src/smartxml/smartxml.test.js

index 9f060e8..cfe94f0 100644 (file)
@@ -272,6 +272,13 @@ $.extend(ElementNode.prototype, {
         this._$.prepend(nativeNode);
     }),
 
         this._$.prepend(nativeNode);
     }),
 
+    insertAtIndex: function(nativeNode, index) {
+        var contents = this.contents();
+        if(contents[index]) {
+            return contents[index].before(nativeNode);
+        }
+    },
+
     unwrapContent: function() {
         var parent = this.parent();
         if(!parent) {
     unwrapContent: function() {
         var parent = this.parent();
         if(!parent) {
index a4ceaa4..98d7f88 100644 (file)
@@ -336,6 +336,16 @@ describe('smartxml', function() {
             expect(rootContents[0].getText()).to.equal('Alice a cat');
         });
 
             expect(rootContents[0].getText()).to.equal('Alice a cat');
         });
 
+        it('inserts node at index', function() {
+            var doc = getDocumentFromXML('<div><a></a><b></b><c></c></div>'),
+                b = doc.root.contents()[1];
+
+            var inserted = doc.root.insertAtIndex({tagName: 'test'}, 1);
+
+            expect(doc.root.contents()[1].sameNode(inserted)).to.equal(true, 'inserted node returned');
+            expect(b.getIndex()).to.equal(2, 'b node shifted right');
+        });
+
         it('appends element node to another element node', function() {
             var node1 = elementNodeFromParams({tag: 'div'}),
                 node2 = elementNodeFromParams({tag: 'a'}),
         it('appends element node to another element node', function() {
             var node1 = elementNodeFromParams({tag: 'div'}),
                 node2 = elementNodeFromParams({tag: 'a'}),