node.contents(), TextNode
authorAleksander Łukasz <aleksander.lukasz@nowoczesnapolska.org.pl>
Thu, 26 Sep 2013 13:12:36 +0000 (15:12 +0200)
committerAleksander Łukasz <aleksander.lukasz@nowoczesnapolska.org.pl>
Wed, 9 Oct 2013 14:56:54 +0000 (16:56 +0200)
src/smartxml/smartxml.js
src/smartxml/smartxml.test.js

index 0c76cd2..f6fae64 100644 (file)
@@ -23,6 +23,8 @@ var ElementNode = function(nativeNode) {
 };
 
 $.extend(ElementNode.prototype, {
+    nodeType: Node.ELEMENT_NODE,
+
     getTagName: function() {
         return this.nativeNode.tagName.toLowerCase();
     },
@@ -36,6 +38,8 @@ $.extend(ElementNode.prototype, {
         this._$.contents().each(function() {
             if(this.nodeType === Node.ELEMENT_NODE)
                 toret.push(new ElementNode(this));
+            else if(this.nodeType === Node.TEXT_NODE)
+                toret.push(new TextNode(this));
         });
         return toret;
     },
@@ -47,6 +51,16 @@ $.extend(ElementNode.prototype, {
 
 });
 
+var TextNode = function(nativeNode) {
+    this.nativeNode = nativeNode;
+    this._$ = $(nativeNode);
+}
+
+$.extend(TextNode.prototype, {
+    nodeType: Node.TEXT_NODE
+})
+
+
 return {
     documentFromXML: function(xml) {
         return new Document(parseXML(xml));
index 8b9ed6e..c9264bc 100644 (file)
@@ -17,6 +17,10 @@ var elementNodeFromParams = function(params) {
     return smartxml.elementNodeFromXML('<' + params.tag + '></' + params.tag + '>');
 }
 
+var elementNodeFromXML = function(xml) {
+    return smartxml.elementNodeFromXML(xml);
+}
+
 
 describe.only('smartxml', function() {
 
@@ -27,6 +31,18 @@ describe.only('smartxml', function() {
         });
     });
 
+    describe('Basic ElementNode properties', function() {
+        it('exposes node contents', function() {
+            var node = elementNodeFromXML('<node>Some<node>text</node>is here</node>'),
+                contents = node.contents();
+
+            expect(contents).to.have.length(3);
+            expect(contents[0].nodeType).to.equal(Node.TEXT_NODE, 'text node 1');
+            expect(contents[1].nodeType).to.equal(Node.ELEMENT_NODE, 'element node 1');
+            expect(contents[2].nodeType).to.equal(Node.TEXT_NODE, 'text node 2');
+        });
+    })
+
     describe('Manipulations', function() {
 
         it('appende element node to another element node', function() {