glance-dom
Version:
Glance DOM library
60 lines (42 loc) • 1.8 kB
JavaScript
;
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)));
}
}
}
};