X-Git-Url: https://git.mdrn.pl/fnpeditor.git/blobdiff_plain/436728b375888873e6e96079a73f12d8adbd7b96..ab1445aee3c066a08d0602dd8b2e6996646d986f:/src/editor/modules/documentCanvas/canvas/utils.js?ds=sidebyside diff --git a/src/editor/modules/documentCanvas/canvas/utils.js b/src/editor/modules/documentCanvas/canvas/utils.js index 62845e3..620e652 100644 --- a/src/editor/modules/documentCanvas/canvas/utils.js +++ b/src/editor/modules/documentCanvas/canvas/utils.js @@ -20,14 +20,15 @@ var nearestInDocumentOrder = function(selector, direction, element) { return null; }; +var getElementForElementRootNode = function(node) { + return node.getData('canvasElement'); +}; var getElementForNode = function(node) { - - var ptr = node.nodeType === Node.TEXT_NODE ? node.parent() : node; - while(!ptr.getData('canvasElement')) { - ptr = ptr.parent(); + while(!node.getData('canvasElement')) { + node = node.parent(); } - return ptr.getData('canvasElement'); + return node.getData('canvasElement'); }; var getElementForDetachedNode = function(node, originalParent) { @@ -41,18 +42,25 @@ var getElementForDetachedNode = function(node, originalParent) { return ptr.getData('canvasElement'); }; -var getElementForTextNode = function(textNode) { - var parentElement = getElementForNode(textNode.parent()), - toret; - parentElement.children().some(function(child) { - if(child.wlxmlNode.sameNode(textNode)) { - toret = child; - return true; - } - }); - return toret; +var caretPositionFromPoint = function(x, y) { + /* globals document */ + var range, textNode, offset; + if(document.caretPositionFromPoint) { + range = document.caretPositionFromPoint(x, y); + textNode = range.offsetNode; + offset = range.offset; + } else if(document.caretRangeFromPoint) { + range = document.caretRangeFromPoint(x, y); + textNode = range.startContainer; + offset = range.startOffset; + } + return { + textNode: textNode, + offset: offset + }; }; + return { nearestInDocumentOrder: nearestInDocumentOrder, unicode: { @@ -60,7 +68,8 @@ return { }, getElementForNode: getElementForNode, getElementForDetachedNode: getElementForDetachedNode, - getElementForTextNode: getElementForTextNode + getElementForElementRootNode: getElementForElementRootNode, + caretPositionFromPoint: caretPositionFromPoint }; });