UNPKG

@mariusandra/simmerjs

Version:

A pure Javascript reverse CSS selector engine which calculates a DOM element's unique CSS selector on the current page.

51 lines (41 loc) 1.69 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.default = _default; var _convertSelectorStateIntoCSSSelector = _interopRequireDefault(require("./convertSelectorStateIntoCSSSelector")); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } /** * Execute a query using the current selector state and see if it produces a unique result. * If the result is unique then the analysis is complete and we can finish the process. * @param {object} element. The element we are trying to build a selector for * @param {object} state. The current selector state (has the stack and specificity sum) */ function _default(element, config, query, onError) { const { selectorMaxLength } = config; return function (state) { let validated = false; let selector; let results; for (let depth = 1; depth <= state.stack.length && !validated; depth += 1) { // use selector to query an element and see if it is a one-to-one selection selector = (0, _convertSelectorStateIntoCSSSelector.default)(state, depth).trim(); if (!(selector && selector.length)) { // too short return false; } if (selectorMaxLength && selector.length > selectorMaxLength) { // the selector is too long return false; } results = query(selector, onError); validated = results.length === 1 && (element.el !== undefined ? results[0] === element.el : results[0] === element); // we have to mark how deep the valdiation passed at if (validated) { state.verificationDepth = depth; } } return validated; }; }