From: Aleksander Ɓukasz Date: Tue, 19 Nov 2013 14:29:51 +0000 (+0100) Subject: smartxml: Fixing single text node unwrap X-Git-Url: https://git.mdrn.pl/fnpeditor.git/commitdiff_plain/e72654c4d22af93a05a8af98ab58cc44b152c6e7?ds=inline;hp=fadd66e0cc7a22d06a1d8f4ab08871fec8dafcdf smartxml: Fixing single text node unwrap --- diff --git a/src/smartxml/smartxml.js b/src/smartxml/smartxml.js index 40f3aad..b150cde 100644 --- a/src/smartxml/smartxml.js +++ b/src/smartxml/smartxml.js @@ -100,6 +100,22 @@ $.extend(DocumentNode.prototype, { return node; }, + /** + * Removes parent of a node if node has no siblings. + */ + unwrap: function() { + if(this.isRoot()) { + return; + } + var parent = this.parent(), + grandParent; + if(parent.contents().length === 1) { + grandParent = parent.parent(); + parent.unwrapContent(); + return grandParent; + } + }, + triggerChangeEvent: function(type, metaData) { var event = new events.ChangeEvent(type, $.extend({node: this}, metaData || {})); if(type === 'nodeDetached' || this.document.containsNode(event.meta.node)) { @@ -275,22 +291,6 @@ $.extend(ElementNode.prototype, { }; }, - /** - * Removes parent of a node if node has no siblings. - */ - unwrap: function() { - if(this.isRoot()) { - return; - } - var parent = this.parent(), - grandParent; - if(parent.contents().length === 1) { - grandParent = parent.parent(); - parent.unwrapContent(); - return grandParent; - } - }, - wrapText: function(params) { return this.document._wrapText(_.extend({inside: this}, params)); }, diff --git a/src/smartxml/smartxml.test.js b/src/smartxml/smartxml.test.js index 67ada78..ccaf0ef 100644 --- a/src/smartxml/smartxml.test.js +++ b/src/smartxml/smartxml.test.js @@ -313,7 +313,7 @@ describe('smartxml', function() { expect(node.contents()[2].getText()).to.equal(' a cat!'); }); - it('unwrap single node from its parent', function() { + it('unwrap single element node from its parent', function() { var doc = getDocumentFromXML('
'), div = doc.root, a = div.contents()[0], @@ -326,6 +326,19 @@ describe('smartxml', function() { expect(div.contents()[0].sameNode(b)).to.equal(true, 'node got unwrapped'); }); + it('unwrap single text node from its parent', function() { + var doc = getDocumentFromXML('
Some text!
'), + div = doc.root, + span = div.contents()[1], + text = span.contents()[0]; + + var parent = text.unwrap(); + + expect(parent.sameNode(div)).to.equal(true, 'returns new parent'); + expect(div.contents()).to.have.length(1, 'root contains only one node'); + expect(div.contents()[0].getText()).to.equal('Some text!'); + }); + describe('Wrapping text', function() { it('wraps text spanning multiple sibling TextNodes', function() { var section = elementNodeFromXML('
Alice has a small cat
'),