UNPKG

glance-dom

Version:
60 lines (42 loc) 1.8 kB
'use strict'; Object.defineProperty(exports, "__esModule", { value: true }); var _log = require('../../utils/log'); var _log2 = _interopRequireDefault(_log); var _reduce = require('@arr/reduce'); var _reduce2 = _interopRequireDefault(_reduce); var _filter = require('@arr/filter'); var _filter2 = _interopRequireDefault(_filter); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } function _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) { arr2[i] = arr[i]; } return arr2; } else { return Array.from(arr); } } exports.default = { options: { 'contained-near-scope': { filter: function closestdom(_ref) { var elements = _ref.elements, _ref$containerElement = _ref.containerElements, containerElements = _ref$containerElement === undefined ? [document.documentElement] : _ref$containerElement, _ref$scopeElements = _ref.scopeElements, scopeElements = _ref$scopeElements === undefined ? [] : _ref$scopeElements; _log2.default.debug('Filtering for subjects contained near scope'); var containerLookup = new Set(containerElements); if (scopeElements.length === 0) return elements; var foundElements = (0, _reduce2.default)(scopeElements, function (result, scope) { var p = scope; do { var found = (0, _filter2.default)(elements, function (element) { return p === element || p.contains(element); }); if (found.length > 0 || containerLookup.has(p)) { result = result.concat(found); break; } } while ((p = p.parentNode) && p.outerHTML !== null); return result; }, []); return [].concat(_toConsumableArray(new Set(foundElements))); } } } };