From 198de8c828e46c2a849c56091146017a9f46f4f0 Mon Sep 17 00:00:00 2001
From: =?utf8?q?Aleksander=20=C5=81ukasz?=
 <aleksander.lukasz@nowoczesnapolska.org.pl>
Date: Mon, 18 Nov 2013 15:57:21 +0100
Subject: [PATCH] smartxml: fix DocumentNode.parent

---
 src/smartxml/smartxml.js      |  6 +++++-
 src/smartxml/smartxml.test.js | 13 +++++++++++++
 2 files changed, 18 insertions(+), 1 deletion(-)

diff --git a/src/smartxml/smartxml.js b/src/smartxml/smartxml.js
index 18664c7..5ad3010 100644
--- a/src/smartxml/smartxml.js
+++ b/src/smartxml/smartxml.js
@@ -38,7 +38,11 @@ $.extend(DocumentNode.prototype, {
     },
 
     parent: function() {
-        return this.nativeNode.parentNode ? this.document.createElementNode(this.nativeNode.parentNode) : null;
+        var parentNode = this.nativeNode.parentNode;
+        if(parentNode && parentNode.nodeType === Node.ELEMENT_NODE) {
+            return this.document.createElementNode(parentNode);
+        }
+        return null;
     },
 
     after: function(node) {
diff --git a/src/smartxml/smartxml.test.js b/src/smartxml/smartxml.test.js
index 8154ff5..df35a37 100644
--- a/src/smartxml/smartxml.test.js
+++ b/src/smartxml/smartxml.test.js
@@ -486,6 +486,19 @@ describe('smartxml', function() {
         });
     });
 
+    describe('Traversing', function() {
+        describe('Basic', function() {
+            it('can access node parent', function() {
+                var doc = getDocumentFromXML('<a><b></b></a>'),
+                    a = doc.root,
+                    b = a.contents()[0];
+
+                expect(a.parent()).to.equal(null, 'parent of a root is null');
+                expect(b.parent().sameNode(a)).to.be.true;
+            });
+        });
+    });
+
     describe('Serializing document to WLXML', function() {
         it('keeps document intact when no changes have been made', function() {
             var xmlIn = '<section>Alice<div>has</div>a <span class="uri" meta-uri="http://cat.com">cat</span>!</section>',
-- 
2.20.1