From: Aleksander Ɓukasz Date: Fri, 2 Aug 2013 08:44:38 +0000 (+0200) Subject: Dividing DocumentTextElement with DocumentNodeElement X-Git-Url: https://git.mdrn.pl/fnpeditor.git/commitdiff_plain/28faa6e7111db9527643804893de5aee7eb3da33 Dividing DocumentTextElement with DocumentNodeElement --- diff --git a/modules/documentCanvas/canvas/canvas.test3.js b/modules/documentCanvas/canvas/canvas.test3.js index 9877bb6..95698d0 100644 --- a/modules/documentCanvas/canvas/canvas.test3.js +++ b/modules/documentCanvas/canvas/canvas.test3.js @@ -388,6 +388,21 @@ describe('Canvas', function() { expect(children[1]).to.be.instanceOf(documentElement.DocumentTextElement); expect(children[1].getText()).to.equal('Alice'); }); + + it('can divide DocumentTextElement with a new DocumentNodeElement', function() { + var c = canvas.fromXML('
Alice has a cat
'), + section = c.doc(), + text = section.children()[0]; + + var returned = text.divide({tag: 'aside', klass: 'footnote', offset: 5}), + sectionChildren = section.children(), + lhsText = sectionChildren[0], + rhsText = sectionChildren[2]; + + expect(lhsText.getText()).to.equal('Alice'); + expect(returned.sameNode(sectionChildren[1])); + expect(rhsText.getText()).to.equal(' has a cat'); + }); }); describe('Splitting text', function() { diff --git a/modules/documentCanvas/canvas/documentElement.js b/modules/documentCanvas/canvas/documentElement.js index 5eef4b5..c6c9f22 100644 --- a/modules/documentCanvas/canvas/documentElement.js +++ b/modules/documentCanvas/canvas/documentElement.js @@ -456,6 +456,22 @@ $.extend(DocumentTextElement.prototype, { return {first: parentElement, second: newElement}; }, + divide: function(params) { + var myText = this.getText(); + + if(params.offset <= 0 || params.offset >= myText.length) + return; + + var lhsText = myText.substr(0, params.offset), + rhsText = myText.substr(params.offset), + newElement = DocumentNodeElement.create({tag: params.tag, klass: params.klass}, this.canvas), + rhsTextElement = DocumentTextElement.create({text: rhsText}); + + this.setText(lhsText); + this.after(newElement); + newElement.after(rhsTextElement); + return newElement; + } }); return {