X-Git-Url: https://git.mdrn.pl/fnpeditor.git/blobdiff_plain/efe36f4f1b5df351eeb4d40a54c3900cf9a7079b..a6983a6a33c76bc7ae107c604ba73c3571aed7b8:/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 0eb19d0..058ede8 100644 --- a/src/editor/modules/documentCanvas/canvas/utils.js +++ b/src/editor/modules/documentCanvas/canvas/utils.js @@ -3,13 +3,14 @@ define([ ], function($) { 'use strict'; - +/* globals Node */ var nearestInDocumentOrder = function(selector, direction, element) { var parents = $(element).parents(), parent = parents.length ? $(parents[parents.length-1]) : element; var adj = parent.find(selector).filter(function() { + /*jshint bitwise: false*/ return this.compareDocumentPosition(element) & (direction === 'above' ? Node.DOCUMENT_POSITION_FOLLOWING : Node.DOCUMENT_POSITION_PRECEDING); }); @@ -17,13 +18,40 @@ var nearestInDocumentOrder = function(selector, direction, element) { return adj[direction === 'above' ? adj.length-1 : 0]; } return null; -} +}; + +var getElementForElementRootNode = function(node) { + return node.getData('canvasElement'); +}; + +var getElementForNode = function(node) { + while(!node.getData('canvasElement')) { + node = node.parent(); + } + return node.getData('canvasElement'); +}; + +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: { ZWS: '\u200B' - } + }, + getElementForNode: getElementForNode, + getElementForDetachedNode: getElementForDetachedNode, + getElementForElementRootNode: getElementForElementRootNode }; });