From: Aleksander Ɓukasz Date: Mon, 8 Jul 2013 13:35:08 +0000 (+0200) Subject: Wrapping text spanning multiple sibling DocumentTextNodes X-Git-Url: https://git.mdrn.pl/fnpeditor.git/commitdiff_plain/6e53b1192b37d578f900c26ffe2fa34b18730e74 Wrapping text spanning multiple sibling DocumentTextNodes --- diff --git a/modules/documentCanvas/canvas/canvas.js b/modules/documentCanvas/canvas/canvas.js index 65cacca..3cb4db5 100644 --- a/modules/documentCanvas/canvas/canvas.js +++ b/modules/documentCanvas/canvas/canvas.js @@ -41,20 +41,23 @@ $.extend(Canvas.prototype, { textNode1.after(wrapperElement); textNode1.detach(); - wrapperElement.before({text:prefixOutside}); + if(prefixOutside.length > 0) + wrapperElement.before({text:prefixOutside}); if(sameNode) { var core = textNode1.getText().substr(params.offsetStart, params.offsetEnd - params.offsetStart); wrapperElement.append({text: core}); } else { textNode2.detach(); - wrapperElement.append({text: prefixInside}); + if(prefixInside.length > 0) + wrapperElement.append({text: prefixInside}); for(var i = idx1 + 1; i < idx2; i++) { wrapperElement.append(childrenInside[i]); } - - wrapperElement.append({text: suffixInside}); + if(suffixInside.length > 0) + wrapperElement.append({text: suffixInside}); } - wrapperElement.after({text: suffixOutside}); + if(suffixOutside.length > 0) + wrapperElement.after({text: suffixOutside}); return wrapperElement; } diff --git a/modules/documentCanvas/canvas/canvas.test3.js b/modules/documentCanvas/canvas/canvas.test3.js index 23fd35e..4a7c661 100644 --- a/modules/documentCanvas/canvas/canvas.test3.js +++ b/modules/documentCanvas/canvas/canvas.test3.js @@ -232,6 +232,35 @@ describe('Canvas', function() { expect(children[2]).to.be.instanceOf(documentElement.DocumentTextElement); expect(children[2].getText()).to.equal('cat'); }); + + it('wraps text spanning multiple sibling DocumentTextNodes', function() { + var c = canvas.fromXML('
Alice has a small cat
'), + section = c.doc(), + wrapper = c.wrapText({ + inside: section, + _with: {tag: 'span', klass: 'some.class'}, + offsetStart: 6, + offsetEnd: 4, + textNodeIdx: [0,2] + }); + + expect(section.children().length).to.equal(2); + expect(section.children()[0]).to.be.instanceOf(documentElement.DocumentTextElement); + expect(section.children()[0].getText()).to.equal('Alice '); + + var wrapper2 = section.children()[1]; + expect(wrapper2.sameNode(wrapper)).to.be.true; + + var wrapperChildren = wrapper.children(); + expect(wrapperChildren.length).to.equal(3); + expect(wrapperChildren[0].getText()).to.equal('has a '); + + expect(wrapperChildren[1]).to.be.instanceOf(documentElement.DocumentNodeElement); + expect(wrapperChildren[1].children().length).to.equal(1); + expect(wrapperChildren[1].children()[0].getText()).to.equal('small'); + + expect(wrapperChildren[2].getText()).to.equal(' cat'); + }); }); });