From e104b4b87dc39066cbe397984c6f0e6bcc0459f8 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Aleksander=20=C5=81ukasz?= Date: Tue, 24 Jun 2014 11:24:39 +0200 Subject: [PATCH 1/1] editor: start using data api on text nodes for keeping references to canvas elements 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. --- .../documentCanvas/canvas/documentElement.js | 2 +- .../documentCanvas/canvas/genericElement.js | 20 +++-------- .../modules/documentCanvas/canvas/utils.js | 34 ++----------------- 3 files changed, 7 insertions(+), 49 deletions(-) diff --git a/src/editor/modules/documentCanvas/canvas/documentElement.js b/src/editor/modules/documentCanvas/canvas/documentElement.js index d40ca9b..50a188a 100644 --- a/src/editor/modules/documentCanvas/canvas/documentElement.js +++ b/src/editor/modules/documentCanvas/canvas/documentElement.js @@ -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); }; diff --git a/src/editor/modules/documentCanvas/canvas/genericElement.js b/src/editor/modules/documentCanvas/canvas/genericElement.js index e769ee8..a769240 100644 --- a/src/editor/modules/documentCanvas/canvas/genericElement.js +++ b/src/editor/modules/documentCanvas/canvas/genericElement.js @@ -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(); } }, diff --git a/src/editor/modules/documentCanvas/canvas/utils.js b/src/editor/modules/documentCanvas/canvas/utils.js index 4e262a0..058ede8 100644 --- a/src/editor/modules/documentCanvas/canvas/utils.js +++ b/src/editor/modules/documentCanvas/canvas/utils.js @@ -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) { -- 2.20.1