UNPKG

spiritjs

Version:

The animation toolkit for the web

75 lines (73 loc) 2.13 kB
"use strict"; exports.__esModule = true; exports.getElement = getElement; exports.getExpression = getExpression; var _is = require("./is"); var _debug = _interopRequireDefault(require("./debug")); function _interopRequireDefault(e) { return e && e.__esModule ? e : { "default": e }; } /** * Get DOM representation for an element. * * @param {Element} element * @param {null|undefined|Node} nodeContext * @returns {string|null} */ function getExpression(element, nodeContext) { if (nodeContext === void 0) { nodeContext = null; } var paths = []; var isNodeContext = function isNodeContext() { if (!nodeContext) { return true; } return nodeContext !== element; }; while (element.nodeType === window.Node.ELEMENT_NODE && isNodeContext()) { var index = 0; for (var sibling = element.previousSibling; sibling; sibling = sibling.previousSibling) { if (sibling.nodeType === window.Node.DOCUMENT_TYPE_NODE) { continue; } if (sibling.nodeName === element.nodeName) { ++index; } } var tagName = element.nodeName.toLowerCase(); var pathIndex = "[" + (index + 1) + "]"; if ((0, _is.isSVG)(element)) { tagName = "*[local-name()='" + tagName + "']"; } paths.unshift(tagName + pathIndex); element = element.parentNode; } if (paths.length === 0) { return null; } return nodeContext ? paths.join('/') : "/" + paths.join('/'); } /** * Get an element from expression * * @param {string} expression * @param {Node} nodeContext * @returns {Node|null} */ function getElement(expression, nodeContext) { if (nodeContext === void 0) { nodeContext = null; } if (!nodeContext) { nodeContext = document.body || document.documentElement; } try { var evaluated = document.evaluate(expression, nodeContext, null, window.XPathResult.ANY_TYPE, null); return evaluated.iterateNext(); } catch (err) { if ((0, _debug["default"])()) { console.error('Cannot get element from expression: ', expression); console.error(err.stack); } } return null; }