editor: canvas - fix problem with detaching empty text nodes
authorAleksander Łukasz <aleksander.lukasz@nowoczesnapolska.org.pl>
Fri, 13 Dec 2013 19:49:02 +0000 (20:49 +0100)
committerAleksander Łukasz <aleksander.lukasz@nowoczesnapolska.org.pl>
Sun, 15 Dec 2013 21:32:52 +0000 (22:32 +0100)
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.

src/editor/modules/documentCanvas/canvas/canvas.test.js
src/editor/modules/documentCanvas/canvas/documentElement.js

index bb795ec..6343d23 100644 (file)
@@ -33,6 +33,7 @@ describe('new Canvas', function() {
             c = canvas.fromXMLDocument(doc);
 
         expect(c.doc().children()).to.have.length(3);
             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');
     });
         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() {
 });
 
 describe('Cursor', function() {
index b5269ca..60e79de 100644 (file)
@@ -229,19 +229,11 @@ $.extend(DocumentNodeElement.prototype, {
 
         var elementContent = this._container().contents();
         var element = this;
 
         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;
             }
             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;
             toret.push(childElement);
         });
         return toret;