From: Aleksander Ɓukasz <aleksander.lukasz@nowoczesnapolska.org.pl>
Date: Wed, 23 Oct 2013 10:44:09 +0000 (+0200)
Subject: smartxml: fix changing node's tag
X-Git-Url: https://git.mdrn.pl/fnpeditor.git/commitdiff_plain/80415f03b8fabc18238c1f283348270331702d2e?ds=sidebyside

smartxml: fix changing node's tag
---

diff --git a/src/smartxml/smartxml.js b/src/smartxml/smartxml.js
index 80ee43c..9a3ba26 100644
--- a/src/smartxml/smartxml.js
+++ b/src/smartxml/smartxml.js
@@ -107,6 +107,7 @@ $.extend(ElementNode.prototype, DocumentNode.prototype, {
         });
         node.setData(this.getData());
 
+        this._$.replaceWith(node._$);
         this._setNativeNode(node._$[0]);
         this.triggerChangeEvent('nodeTagChange', {oldTagName: oldTagName, newTagName: this.getTagName()});
     },
diff --git a/src/smartxml/smartxml.test.js b/src/smartxml/smartxml.test.js
index da1b335..7fd408e 100644
--- a/src/smartxml/smartxml.test.js
+++ b/src/smartxml/smartxml.test.js
@@ -77,6 +77,19 @@ describe('smartxml', function() {
         });
 
         describe('Changing node tag', function() {
+            it('can change tag name', function() {
+                var doc = getDocumentFromXML('<div><header></header></div>'),
+                    header = doc.root.contents()[0];
+                header.setTag('span');
+                expect(header.getTagName()).to.equal('span');
+                
+                // DOM specifies ElementNode tag as a read-only property, so
+                // changing it in a seamless way is a little bit tricky. For this reason
+                // the folowing expectations are required, despite the fact that they actually are
+                // motivated by implemetation detail.
+                expect(header.parent().sameNode(doc.root)).to.equal(true, 'ensure we stayed in a document');
+            });
+
             it('keeps custom data', function() {
                 var node = elementNodeFromXML('<div></div>');