editor: start using data api on text nodes for keeping references to canvas elements
authorAleksander Łukasz <aleksander.lukasz@nowoczesnapolska.org.pl>
Tue, 24 Jun 2014 09:24:39 +0000 (11:24 +0200)
committerAleksander Łukasz <aleksander.lukasz@nowoczesnapolska.org.pl>
Fri, 18 Jul 2014 09:57:34 +0000 (11:57 +0200)
GenericElement doesn't need to dispatch nodeTextChange events
anymore as TextNodes now have their own reference to canvas
elements and wlxmlListener can dispatch to them directly.

We still need to handle changes to the comments though - this should
be refactored out to some kind of non-rendering canvas element.

src/editor/modules/documentCanvas/canvas/documentElement.js
src/editor/modules/documentCanvas/canvas/genericElement.js
src/editor/modules/documentCanvas/canvas/utils.js

index d40ca9b..50a188a 100644 (file)
@@ -18,6 +18,7 @@ var DocumentElement = function(wlxmlNode, canvas) {
 
     this.dom = this.createDOM();
     this.dom.data('canvas-element', this);
+    this.wlxmlNode.setData('canvasElement', this);
 };
 
 $.extend(DocumentElement.prototype, {
@@ -89,7 +90,6 @@ $.extend(DocumentElement.prototype, {
 // DocumentNodeElement represents an element node from WLXML document rendered inside Canvas
 var DocumentNodeElement = function(wlxmlNode, canvas) {
     DocumentElement.call(this, wlxmlNode, canvas);
-    wlxmlNode.setData('canvasElement', this);
     this.init(this.dom);
 };
 
index e769ee8..a769240 100644 (file)
@@ -148,23 +148,11 @@ $.extend(generic, {
         }
     },
     onNodeTextChange: function(event) {
-        var node = event.meta.node,
-            toSet = node.getText(),
-            handled;
-        
-        handled = this.children().some(function(child) {
-            if(child.wlxmlNode.sameNode(node)) {
-                if(toSet === '') {
-                    toSet = utils.unicode.ZWS;
-                }
-                if(toSet !== child.getText()) {
-                    child.setText(toSet);
-                }
-                return true;
-            }
-        });
+        var node = event.meta.node;
 
-        if(!handled && node.parent() && node.parent().is('comment') && this.wlxmlNode.sameNode(node.parent().parent())) {
+        /* TODO: This handling of changes to the comments should probably be implemented via separate,
+        non-rendering comments element */
+        if(node.parent() && node.parent().is('comment') && this.wlxmlNode.sameNode(node.parent().parent())) {
             this.commentsView.render();
         }
     },
index 4e262a0..058ede8 100644 (file)
@@ -20,47 +20,17 @@ var nearestInDocumentOrder = function(selector, direction, element) {
     return null;
 };
 
-var getElementForElementRootNode = function(node, withParent) {
-    if(node.nodeType === Node.TEXT_NODE) {
-        return _getElementForRootTextNode(node, withParent);
-    }
+var getElementForElementRootNode = function(node) {
     return node.getData('canvasElement');
 };
 
-var _getElementForRootTextNode = function(textNode, withParent) {
-    var parentElement = getElementForNode(withParent || textNode.parent()),
-        toret;
-    parentElement.children().some(function(child) {
-        if(child.wlxmlNode.sameNode(textNode)) {
-            toret = child;
-            return true;
-        }
-    });
-    return toret;
-};
-
-var getElementForNode = function(node, withParent) {
-    if(node.nodeType === Node.TEXT_NODE) {
-        return _getElementForTextNode(node, withParent);
-    }
+var getElementForNode = function(node) {
     while(!node.getData('canvasElement')) {
         node = node.parent();
     }
     return node.getData('canvasElement');
 };
 
-var _getElementForTextNode = function(textNode, withParent) {
-    var parentElement = getElementForNode(withParent || textNode.parent()),
-        toret;
-    parentElement.children().some(function(child) {
-        if(child.wlxmlNode.sameNode(textNode)) {
-            toret = child;
-            return true;
-        }
-    });
-    return toret || parentElement;
-};
-
 var getElementForDetachedNode = function(node, originalParent) {
     var ptr = originalParent;
     if(ptr === null) {