{ "version": 3, "sources": [ "domUtils.ts" ], "names": [ "browser", "domObjects", "is", "win", "getWindow", "nodeContains", "parent", "child", "parentNode", "closest", "element", "selector", "matchesSelector", "node", "docFrag", "host", "window", "realWindow", "replace", "prefixedMatchesSelector", "getParent", "el", "indexOfDeepestElement", "elements", "deepestZoneParents", "deepestZone", "index", "i", "n", "length", "dropzone", "ownerDocument", "deepestZIndex", "parseInt", "getComputedStyle", "zIndex", "dropzoneZIndex", "parentParent", "unshift", "HTMLElement", "SVGElement", "SVGSVGElement", "ownerSVGElement", "dropzoneParents", "parents", "lastChild", "previousSibling", "matchesUpTo", "limit", "getActualElement", "SVGElementInstance", "correspondingUseElement", "getScrollXY", "relevantWindow", "x", "scrollX", "document", "documentElement", "scrollLeft", "y", "scrollY", "scrollTop", "getElementClientRect", "clientRect", "getBoundingClientRect", "getClientRects", "left", "right", "top", "bottom", "width", "height", "getElementRect", "isIOS7", "scroll", "getPath", "path", "push", "trySelector", "value", "string", "querySelector" ], "mappings": "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", "sourcesContent": [ "import browser from './browser'\nimport domObjects from './domObjects'\nimport * as is from './is'\nimport win, { getWindow } from './window'\n\nexport function nodeContains (parent: Node | Interact.EventTarget, child: Node | Interact.EventTarget) {\n while (child) {\n if (child === parent) {\n return true\n }\n\n child = (child as Node).parentNode\n }\n\n return false\n}\n\nexport function closest (element: Node, selector: string) {\n while (is.element(element)) {\n if (matchesSelector(element, selector)) { return element }\n\n element = parentNode(element)\n }\n\n return null\n}\n\nexport function parentNode (node: Node | Document) {\n let parent = node.parentNode\n\n if (is.docFrag(parent)) {\n // skip past #shado-root fragments\n // tslint:disable-next-line\n while ((parent = (parent as any).host) && is.docFrag(parent)) {\n continue\n }\n\n return parent\n }\n\n return parent\n}\n\nexport function matchesSelector (element: Interact.Element, selector: string) {\n // remove /deep/ from selectors if shadowDOM polyfill is used\n if (win.window !== win.realWindow) {\n selector = selector.replace(/\\/deep\\//g, ' ')\n }\n\n return element[browser.prefixedMatchesSelector](selector)\n}\n\nconst getParent = el => el.parentNode ? el.parentNode : el.host\n\n// Test for the element that's \"above\" all other qualifiers\nexport function indexOfDeepestElement (elements: Interact.Element[] | NodeListOf) {\n let deepestZoneParents = []\n let deepestZone = elements[0]\n let index = deepestZone ? 0 : -1\n let i\n let n\n\n for (i = 1; i < elements.length; i++) {\n const dropzone = elements[i]\n\n // an element might belong to multiple selector dropzones\n if (!dropzone || dropzone === deepestZone) {\n continue\n }\n\n if (!deepestZone) {\n deepestZone = dropzone\n index = i\n continue\n }\n\n // check if the deepest or current are document.documentElement or document.rootElement\n // - if the current dropzone is, do nothing and continue\n if (dropzone.parentNode === dropzone.ownerDocument) {\n continue\n }\n // - if deepest is, update with the current dropzone and continue to next\n else if (deepestZone.parentNode === dropzone.ownerDocument) {\n deepestZone = dropzone\n index = i\n continue\n }\n\n // compare zIndex of siblings\n if (dropzone.parentNode === deepestZone.parentNode) {\n const deepestZIndex = parseInt(getWindow(deepestZone).getComputedStyle(deepestZone).zIndex, 10) || 0\n const dropzoneZIndex = parseInt(getWindow(dropzone).getComputedStyle(dropzone).zIndex, 10) || 0\n\n if (dropzoneZIndex >= deepestZIndex) {\n deepestZone = dropzone\n index = i\n }\n\n continue\n }\n\n // populate the ancestry array for the latest deepest dropzone\n if (!deepestZoneParents.length) {\n let parent = deepestZone\n let parentParent\n\n while ((parentParent = getParent(parent)) && parentParent !== parent.ownerDocument) {\n deepestZoneParents.unshift(parent)\n parent = parentParent\n }\n }\n\n let parent\n\n // if this element is an svg element and the current deepest is an\n // HTMLElement\n if (deepestZone instanceof domObjects.HTMLElement &&\n dropzone instanceof domObjects.SVGElement &&\n !(dropzone instanceof domObjects.SVGSVGElement)) {\n if (dropzone === deepestZone.parentNode) {\n continue\n }\n\n parent = dropzone.ownerSVGElement\n }\n else {\n parent = dropzone\n }\n\n const dropzoneParents = []\n\n while (parent.parentNode !== parent.ownerDocument) {\n dropzoneParents.unshift(parent)\n parent = getParent(parent)\n }\n\n n = 0\n\n // get (position of last common ancestor) + 1\n while (dropzoneParents[n] && dropzoneParents[n] === deepestZoneParents[n]) {\n n++\n }\n\n const parents = [\n dropzoneParents[n - 1],\n dropzoneParents[n],\n deepestZoneParents[n],\n ]\n\n let child = parents[0].lastChild\n\n while (child) {\n if (child === parents[1]) {\n deepestZone = dropzone\n index = i\n deepestZoneParents = dropzoneParents\n\n break\n }\n else if (child === parents[2]) {\n break\n }\n\n child = child.previousSibling\n }\n }\n\n return index\n}\n\nexport function matchesUpTo (element: Interact.Element, selector: string, limit: Node) {\n while (is.element(element)) {\n if (matchesSelector(element, selector)) {\n return true\n }\n\n element = parentNode(element) as Interact.Element\n\n if (element === limit) {\n return matchesSelector(element, selector)\n }\n }\n\n return false\n}\n\nexport function getActualElement (element: Interact.Element) {\n return (element instanceof domObjects.SVGElementInstance\n ? (element as SVGElement).correspondingUseElement\n : element)\n}\n\nexport function getScrollXY (relevantWindow) {\n relevantWindow = relevantWindow || win.window\n return {\n x: relevantWindow.scrollX || relevantWindow.document.documentElement.scrollLeft,\n y: relevantWindow.scrollY || relevantWindow.document.documentElement.scrollTop,\n }\n}\n\nexport function getElementClientRect (element: Interact.Element) {\n const clientRect = (element instanceof domObjects.SVGElement\n ? element.getBoundingClientRect()\n : element.getClientRects()[0])\n\n return clientRect && {\n left : clientRect.left,\n right : clientRect.right,\n top : clientRect.top,\n bottom: clientRect.bottom,\n width : clientRect.width || clientRect.right - clientRect.left,\n height: clientRect.height || clientRect.bottom - clientRect.top,\n }\n}\n\nexport function getElementRect (element: Interact.Element) {\n const clientRect = getElementClientRect(element)\n\n if (!browser.isIOS7 && clientRect) {\n const scroll = getScrollXY(win.getWindow(element))\n\n clientRect.left += scroll.x\n clientRect.right += scroll.x\n clientRect.top += scroll.y\n clientRect.bottom += scroll.y\n }\n\n return clientRect\n}\n\nexport function getPath (node: Node | Document) {\n const path = []\n\n while (node) {\n path.push(node)\n node = parentNode(node)\n }\n\n return path\n}\n\nexport function trySelector (value) {\n if (!is.string(value)) { return false }\n\n // an exception will be raised if it is invalid\n domObjects.document.querySelector(value)\n return true\n}\n" ] }