From f2cfe219c603d0d912b5bd0484e22725026d85aa Mon Sep 17 00:00:00 2001 From: =?utf8?q?Aleksander=20=C5=81ukasz?= Date: Fri, 13 Dec 2013 20:49:02 +0100 Subject: [PATCH 1/1] editor: canvas - fix problem with detaching empty text nodes This code is a remnant of the old canvas implementation that should be removed long time ago after switching to event based documents. And it just happens that it broke handling of nodeDetach event for of empty text nodes. --- .../documentCanvas/canvas/canvas.test.js | 21 +++++++++++++++++++ .../documentCanvas/canvas/documentElement.js | 10 +-------- 2 files changed, 22 insertions(+), 9 deletions(-) diff --git a/src/editor/modules/documentCanvas/canvas/canvas.test.js b/src/editor/modules/documentCanvas/canvas/canvas.test.js index bb795ec..6343d23 100644 --- a/src/editor/modules/documentCanvas/canvas/canvas.test.js +++ b/src/editor/modules/documentCanvas/canvas/canvas.test.js @@ -33,6 +33,7 @@ describe('new Canvas', function() { c = canvas.fromXMLDocument(doc); expect(c.doc().children()).to.have.length(3); + expect(c.doc().children()[0].canvas).to.equal(c); }); }); @@ -105,6 +106,26 @@ describe('Listening to document changes', function() { expect(headerNode.getData('canvasElement').sameNode(headerElement)).to.equal(true, 'node->element'); expect(headerElement.data('wlxmlNode').sameNode(headerNode)).to.equal(true, 'element->node'); }); + + it('Handles nodeDetached event for an empty text node', function(done) { + var doc = wlxml.WLXMLDocumentFromXML('
Ab
'), + aTextNode = doc.root.contents()[0].contents()[0], + aTextElement; + + canvas.fromXMLDocument(doc); + aTextElement = utils.findCanvasElementInParent(aTextNode, aTextNode.parent()); // TODO: This really should be easier... + + aTextElement.setText(''); + + wait(function() { + var parent = aTextElement.parent(); + expect(aTextElement.getText({raw:true})).to.equal(utils.unicode.ZWS, 'canvas represents this as empty node'); + aTextElement.data('wlxmlNode').detach(); + expect(parent.children().length).to.equal(1); + expect(parent.children()[0].getWlxmlTag()).to.equal('span'); + done(); + }); + }); }); describe('Cursor', function() { diff --git a/src/editor/modules/documentCanvas/canvas/documentElement.js b/src/editor/modules/documentCanvas/canvas/documentElement.js index b5269ca..60e79de 100644 --- a/src/editor/modules/documentCanvas/canvas/documentElement.js +++ b/src/editor/modules/documentCanvas/canvas/documentElement.js @@ -229,19 +229,11 @@ $.extend(DocumentNodeElement.prototype, { var elementContent = this._container().contents(); var element = this; - elementContent.each(function(idx) { + elementContent.each(function() { var childElement = DocumentElement.fromHTMLElement(this, element.canvas); if(childElement === undefined) { return true; } - if(idx === 0 && elementContent.length > 1 && elementContent[1].nodeType === Node.ELEMENT_NODE && (childElement instanceof DocumentTextElement) && $.trim($(this).text()) === '') { - return true; - } - if(idx > 0 && childElement instanceof DocumentTextElement) { - if(toret[toret.length-1] instanceof DocumentNodeElement && $.trim($(this).text()) === '') { - return true; - } - } toret.push(childElement); }); return toret; -- 2.20.1