From: Aleksander Ɓukasz Date: Sat, 13 Jul 2013 14:14:43 +0000 (+0200) Subject: Fixing unwrapping DocumentTextElement X-Git-Url: https://git.mdrn.pl/fnpeditor.git/commitdiff_plain/72dfc92f908add69b4d862e9b6c3107e2a8acd21 Fixing unwrapping DocumentTextElement Handling cases when wrapper of a DocumentTextElement has DocumentTextElement sibling(s) --- diff --git a/modules/documentCanvas/canvas/canvas.test3.js b/modules/documentCanvas/canvas/canvas.test3.js index bd47bf7..08e6e0f 100644 --- a/modules/documentCanvas/canvas/canvas.test3.js +++ b/modules/documentCanvas/canvas/canvas.test3.js @@ -502,13 +502,13 @@ describe('Canvas', function() { describe('unwrapping', function() { it('unwraps DocumentTextElement from its parent DocumentNodeElement if it\'s its only child', function() { - var c = canvas.fromXML('
Alice has a cat
'), + var c = canvas.fromXML('
Alice has a cat
'), section = c.doc(), - text = section.children()[0].children()[0]; + text = section.children()[1].children()[0]; text.unwrap(); - expect(section.children().length).to.equal(1); + expect(section.children().length).to.equal(1, 'section has one child'); expect(section.children()[0].getText()).to.equal('Alice has a cat'); }) }); diff --git a/modules/documentCanvas/canvas/documentElement.js b/modules/documentCanvas/canvas/documentElement.js index 0e2cb3d..82a85c7 100644 --- a/modules/documentCanvas/canvas/documentElement.js +++ b/modules/documentCanvas/canvas/documentElement.js @@ -199,9 +199,26 @@ $.extend(DocumentTextElement.prototype, { } }, unwrap: function() { - if(this.parent().children().length === 1) { - var parent = this.parent(); - parent.after(this); + var parent = this.parent(); + if(parent.children().length === 1) { + var grandParent = parent.parent(); + if(grandParent) { + var grandParentChildren = grandParent.children(), + idx = grandParent.childIndex(parent), + prev = idx - 1 > -1 ? grandParentChildren[idx-1] : null, + next = idx + 1 < grandParentChildren.length ? grandParentChildren[idx+1] : null; + if(prev && next) { + prev.setText(prev.getText() + this.getText() + next.getText()); + next.detach(); + } else if (prev || next) { + var target = prev ? prev : next; + target.setText(target.getText() + this.getText()); + } else { + parent.after(this); + } + } else { + parent.after(this); + } parent.detach(); } },