smartxml: ElementNode.getLastTextNode
authorAleksander Łukasz <aleksander.lukasz@nowoczesnapolska.org.pl>
Tue, 22 Apr 2014 11:54:03 +0000 (13:54 +0200)
committerAleksander Łukasz <aleksander.lukasz@nowoczesnapolska.org.pl>
Wed, 23 Apr 2014 11:05:06 +0000 (13:05 +0200)
src/smartxml/smartxml.js
src/smartxml/smartxml.test.js

index e2cdc9b..3ee49b7 100644 (file)
@@ -223,6 +223,22 @@ $.extend(ElementNode.prototype, {
         return node && (node.nativeNode === this.nativeNode || node._$.parents().index(this._$) !== -1);
     },
 
+    getLastTextNode: function() {
+        var contents = this.contents(),
+            toret;
+
+        contents.reverse().some(function(node) {
+            if(node.nodeType === Node.TEXT_NODE) {
+                toret = node;
+                return true;
+            }
+            toret = node.getLastTextNode();
+            return !!toret;
+        });
+
+        return toret;
+    },
+
     toXML: function() {
         var wrapper = $('<div>');
         wrapper.append(this._getXMLDOMToDump());
index 5d1ca3e..a994f05 100644 (file)
@@ -219,6 +219,21 @@ describe('smartxml', function() {
                 expect(event.meta.oldVal).to.equal('value1');
             });
         });
+
+        describe('Searching for the last child text node', function() {
+            [
+                '<div>xxx<div></div>last</div>',
+                '<div><div>last</div></div>',
+                '<div>xxx<div>last</div><div></div></div>'
+            ].forEach(function(xml, i) {
+                var example = 'example ' + i;
+                it('returns last child text node ' + example + ')', function() {
+                    var doc = getDocumentFromXML(xml),
+                        lastTextNode = doc.root.getLastTextNode();
+                    expect(lastTextNode.getText()).to.equal('last', example);
+                });
+            });
+        });
     });
 
     describe('Basic TextNode properties', function() {