X-Git-Url: https://git.mdrn.pl/fnpeditor.git/blobdiff_plain/436728b375888873e6e96079a73f12d8adbd7b96..a77e53b783db30a8e6e7935ddabe158a67e4221f:/src/editor/modules/documentCanvas/canvas/utils.js diff --git a/src/editor/modules/documentCanvas/canvas/utils.js b/src/editor/modules/documentCanvas/canvas/utils.js index 62845e3..1df3f82 100644 --- a/src/editor/modules/documentCanvas/canvas/utils.js +++ b/src/editor/modules/documentCanvas/canvas/utils.js @@ -20,29 +20,37 @@ var nearestInDocumentOrder = function(selector, direction, element) { return null; }; - -var getElementForNode = function(node) { - - var ptr = node.nodeType === Node.TEXT_NODE ? node.parent() : node; - while(!ptr.getData('canvasElement')) { - ptr = ptr.parent(); +var getElementForElementRootNode = function(node, withParent) { + if(node.nodeType === Node.TEXT_NODE) { + return _getElementForRootTextNode(node, withParent); } - return ptr.getData('canvasElement'); + return node.getData('canvasElement'); }; -var getElementForDetachedNode = function(node, originalParent) { - var ptr = originalParent; - if(ptr === null) { - 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); } - while(!ptr.getData('canvasElement')) { - ptr = ptr.parent(); + while(!node.getData('canvasElement')) { + node = node.parent(); } - return ptr.getData('canvasElement'); + return node.getData('canvasElement'); }; -var getElementForTextNode = function(textNode) { - var parentElement = getElementForNode(textNode.parent()), +var _getElementForTextNode = function(textNode, withParent) { + var parentElement = getElementForNode(withParent || textNode.parent()), toret; parentElement.children().some(function(child) { if(child.wlxmlNode.sameNode(textNode)) { @@ -53,6 +61,19 @@ var getElementForTextNode = function(textNode) { return toret; }; +var getElementForDetachedNode = function(node, originalParent) { + var ptr = originalParent; + if(ptr === null) { + return node.getData('canvasElement'); + } + while(!ptr.getData('canvasElement')) { + ptr = ptr.parent(); + } + return ptr.getData('canvasElement'); +}; + + + return { nearestInDocumentOrder: nearestInDocumentOrder, unicode: { @@ -60,7 +81,7 @@ return { }, getElementForNode: getElementForNode, getElementForDetachedNode: getElementForDetachedNode, - getElementForTextNode: getElementForTextNode + getElementForElementRootNode: getElementForElementRootNode }; });