smartxml: wrapping TextNode content
authorAleksander Łukasz <aleksander.lukasz@nowoczesnapolska.org.pl>
Thu, 24 Oct 2013 10:51:19 +0000 (12:51 +0200)
committerAleksander Łukasz <aleksander.lukasz@nowoczesnapolska.org.pl>
Thu, 24 Oct 2013 10:51:19 +0000 (12:51 +0200)
A little bit different api to introduce additional features.

src/smartxml/smartxml.js
src/smartxml/smartxml.test.js

index 7c68e06..2e507db 100644 (file)
@@ -41,10 +41,13 @@ $.extend(DocumentNode.prototype, {
     },
 
     wrapWith: function(node) {
     },
 
     wrapWith: function(node) {
+        node = node instanceof ElementNode ? node : this.document.createElementNode(node);
+
         if(this.parent()) {
             this.before(node);
         }
         node.append(this);
         if(this.parent()) {
             this.before(node);
         }
         node.append(this);
+        return node;
     },
 
     triggerChangeEvent: function(type, metaData) {
     },
 
     triggerChangeEvent: function(type, metaData) {
@@ -245,7 +248,7 @@ $.extend(Document.prototype, Backbone.Events, {
 
     createElementNode: function(from) {
         if(!(from instanceof HTMLElement)) {
 
     createElementNode: function(from) {
         if(!(from instanceof HTMLElement)) {
-            from = $('<' + from.tagName + '>');
+            from = $('<' + from.tagName + '>')[0];
         }
         return new this.ElementNodeFactory(from, this);
     },
         }
         return new this.ElementNodeFactory(from, this);
     },
index 15fe394..58156c2 100644 (file)
@@ -178,6 +178,23 @@ describe('smartxml', function() {
             var event = spy.args[0][0];
             expect(event.type).to.equal('nodeTextChange');
         });
             var event = spy.args[0][0];
             expect(event.type).to.equal('nodeTextChange');
         });
+
+        describe('Wrapping TextNode contents', function() {
+
+            it('wraps DocumentTextElement', function() {
+                var node = elementNodeFromXML('<section>Alice</section>'),
+                    textNode = node.contents()[0];
+                
+                var returned = textNode.wrapWith({tagName: 'header'}),
+                    parent = textNode.parent(),
+                    parent2 = node.contents()[0];
+
+                expect(returned.sameNode(parent)).to.be.equal(true, 'wrapper is a parent');
+                expect(returned.sameNode(parent2)).to.be.equal(true, 'wrapper has a correct parent');
+                expect(returned.getTagName()).to.equal('header');
+            });
+        });
+
     });
 
     describe('Manipulations', function() {
     });
 
     describe('Manipulations', function() {
@@ -197,16 +214,6 @@ describe('smartxml', function() {
             expect(node.parent().sameNode(wrapper)).to.be.true;
         });
 
             expect(node.parent().sameNode(wrapper)).to.be.true;
         });
 
-        it('wraps text node with element node', function() {
-            var node = elementNodeFromXML('<div>Alice</div>'),
-                textNode = node.contents()[0],
-                wrapper = elementNodeFromXML('<wrapper></wrapper>');
-
-            textNode.wrapWith(wrapper);
-            expect(textNode.parent().sameNode(wrapper)).to.be.true;
-            expect(node.contents()).to.have.length(1);
-        });
-
         it('unwraps element node contents', function() {
             var node = elementNodeFromXML('<div>Alice <div>has <span>propably</span> a cat</div>!</div>'),
                 outerDiv = node.contents()[1];
         it('unwraps element node contents', function() {
             var node = elementNodeFromXML('<div>Alice <div>has <span>propably</span> a cat</div>!</div>'),
                 outerDiv = node.contents()[1];