From 7dc3d4d5e031615e4dd5393fe126daa7248ce184 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Aleksander=20=C5=81ukasz?= Date: Thu, 11 Jul 2013 15:51:29 +0200 Subject: [PATCH] Fixing wrapping part of text element - handling start/end equal to zero, - handling start > end --- modules/documentCanvas/canvas/canvas.test3.js | 52 ++++++++++++------- .../documentCanvas/canvas/documentElement.js | 6 +-- 2 files changed, 37 insertions(+), 21 deletions(-) diff --git a/modules/documentCanvas/canvas/canvas.test3.js b/modules/documentCanvas/canvas/canvas.test3.js index 34c372d..0d8e87a 100644 --- a/modules/documentCanvas/canvas/canvas.test3.js +++ b/modules/documentCanvas/canvas/canvas.test3.js @@ -375,26 +375,42 @@ describe('Canvas', function() { expect(returned.getWlxmlClass()).to.equal('some.class'); }); - it('wraps part of DocumentTextElement', function() { - var c = canvas.fromXML('
Alice has a cat
'), - text = c.doc().children()[0]; - - var returned = text.wrapWithNodeElement({tag: 'header', klass: 'some.class', start: 5, end: 12}), - children = c.doc().children(); - - expect(children.length).to.equal(3); - - expect(children[0]).to.be.instanceOf(documentElement.DocumentTextElement); - expect(children[0].getText()).to.equal('Alice'); + describe('wrapping part of DocumentTextElement', function() { + [{start: 5, end: 12}, {start: 12, end: 5}].forEach(function(offsets) { + it('wraps in the middle ' + offsets.start + '/' + offsets.end, function() { + var c = canvas.fromXML('
Alice has a cat
'), + text = c.doc().children()[0]; + + var returned = text.wrapWithNodeElement({tag: 'header', klass: 'some.class', start: offsets.start, end: offsets.end}), + children = c.doc().children(); + + expect(children.length).to.equal(3); + + expect(children[0]).to.be.instanceOf(documentElement.DocumentTextElement); + expect(children[0].getText()).to.equal('Alice'); + + expect(children[1].sameNode(returned)).to.be.true; + expect(returned.getWlxmlTag()).to.equal('header'); + expect(returned.getWlxmlClass()).to.equal('some.class'); + expect(children[1].children().length).to.equal(1); + expect(children[1].children()[0].getText()).to.equal(' has a '); + + expect(children[2]).to.be.instanceOf(documentElement.DocumentTextElement); + expect(children[2].getText()).to.equal('cat'); + }); + }); - expect(children[1].sameNode(returned)).to.be.true; - expect(returned.getWlxmlTag()).to.equal('header'); - expect(returned.getWlxmlClass()).to.equal('some.class'); - expect(children[1].children().length).to.equal(1); - expect(children[1].children()[0].getText()).to.equal(' has a '); + it('wraps whole text inside DocumentTextElement if offsets span entire content', function() { + var c = canvas.fromXML('
Alice has a cat
'), + text = c.doc().children()[0]; + + var returned = text.wrapWithNodeElement({tag: 'header', klass: 'some.class', start: 0, end: 15}), + children = c.doc().children(); - expect(children[2]).to.be.instanceOf(documentElement.DocumentTextElement); - expect(children[2].getText()).to.equal('cat'); + expect(children.length).to.equal(1); + expect(children[0]).to.be.instanceOf(documentElement.DocumentNodeElement); + expect(children[0].children()[0].getText()).to.equal('Alice has a cat'); + }); }); it('wraps text spanning multiple sibling DocumentTextNodes', function() { diff --git a/modules/documentCanvas/canvas/documentElement.js b/modules/documentCanvas/canvas/documentElement.js index 89e98a2..b82b471 100644 --- a/modules/documentCanvas/canvas/documentElement.js +++ b/modules/documentCanvas/canvas/documentElement.js @@ -186,12 +186,12 @@ $.extend(DocumentTextElement.prototype, { return documentElementFromHTMLElement(dom[0]); }, wrapWithNodeElement: function(wlxmlNode) { - if(wlxmlNode.start && wlxmlNode.end) { + if(typeof wlxmlNode.start === 'number' && typeof wlxmlNode.end === 'number') { return this.canvas.wrapText({ inside: this.parent(), textNodeIdx: this.parent().childIndex(this), - offsetStart: wlxmlNode.start, - offsetEnd: wlxmlNode.end, + offsetStart: Math.min(wlxmlNode.start, wlxmlNode.end), + offsetEnd: Math.max(wlxmlNode.start, wlxmlNode.end), _with: {tag: wlxmlNode.tag, klass: wlxmlNode.klass} }); } else { -- 2.20.1