From f2cfe219c603d0d912b5bd0484e22725026d85aa Mon Sep 17 00:00:00 2001
From: =?utf8?q?Aleksander=20=C5=81ukasz?=
 <aleksander.lukasz@nowoczesnapolska.org.pl>
Date: Fri, 13 Dec 2013 20:49:02 +0100
Subject: [PATCH] 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('<section><div>A<span>b</span></div></section>'),
+            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