From: Aleksander Ɓukasz Date: Tue, 24 Jun 2014 09:24:39 +0000 (+0200) Subject: editor: start using data api on text nodes for keeping references to canvas elements X-Git-Url: https://git.mdrn.pl/fnpeditor.git/commitdiff_plain/e104b4b87dc39066cbe397984c6f0e6bcc0459f8?ds=inline;hp=f046659fbe4fd9fb752854f8ccb547918eddc5df 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. --- 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) {