X-Git-Url: https://git.mdrn.pl/fnpeditor.git/blobdiff_plain/0bea7025f60aa5cc2ed89eed72da0d616f3574ef..88afe908cdc2cd584c551730a98d1b312df48958:/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 89ed192..620e652 100644 --- a/src/editor/modules/documentCanvas/canvas/utils.js +++ b/src/editor/modules/documentCanvas/canvas/utils.js @@ -20,46 +20,15 @@ var nearestInDocumentOrder = function(selector, direction, element) { return null; }; -var findCanvasElement = function(node, childOf) { - if(node.nodeType === Node.ELEMENT_NODE) { - return node.getData('canvasElement'); - } - if(node.nodeType === Node.TEXT_NODE) { - return findCanvasElementInParent(node, childOf || node.parent()); - } -}; - -/** - * We take child and its parent as arguments separatly to - * handle situation where child was removed from WLXMLDocument - * and it lost reference to its parent (but we may still have it on canvas). -*/ -var findCanvasElementInParent = function(wlxmlChildNode, wlxmlParentNode) { - var parentElement, toret; - - if(wlxmlParentNode === null) { - toret = wlxmlChildNode.getData('canvasElement'); - if(toret.parent()) { - throw new Error('This should never happen: root canvas element doesn\'t render root document node!'); - } - } else { - parentElement = findCanvasElement(wlxmlParentNode); - parentElement.children().forEach(function(child) { - if(child.wlxmlNode.sameNode(wlxmlChildNode)) { // czemu tu, przy drugim undo child nie mial data? - toret = child; - } - }); - } - return toret; +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) { @@ -73,15 +42,34 @@ var getElementForDetachedNode = function(node, originalParent) { return ptr.getData('canvasElement'); }; +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, - findCanvasElement: findCanvasElement, - findCanvasElementInParent: findCanvasElementInParent, unicode: { ZWS: '\u200B' }, getElementForNode: getElementForNode, - getElementForDetachedNode: getElementForDetachedNode + getElementForDetachedNode: getElementForDetachedNode, + getElementForElementRootNode: getElementForElementRootNode, + caretPositionFromPoint: caretPositionFromPoint }; });