Files
flights_web_raw/node_modules/focus-lock/dist/es2015/utils/all-affected.js
T

32 lines
1.2 KiB
JavaScript

import { FOCUS_DISABLED, FOCUS_GROUP } from '../constants';
import { asArray, toArray } from './array';
var filterNested = function (nodes) {
var contained = new Set();
var l = nodes.length;
for (var i = 0; i < l; i += 1) {
for (var j = i + 1; j < l; j += 1) {
var position = nodes[i].compareDocumentPosition(nodes[j]);
if ((position & Node.DOCUMENT_POSITION_CONTAINED_BY) > 0) {
contained.add(j);
}
if ((position & Node.DOCUMENT_POSITION_CONTAINS) > 0) {
contained.add(i);
}
}
}
return nodes.filter(function (_, index) { return !contained.has(index); });
};
var getTopParent = function (node) {
return node.parentNode ? getTopParent(node.parentNode) : node;
};
export var getAllAffectedNodes = function (node) {
var nodes = asArray(node);
return nodes.filter(Boolean).reduce(function (acc, currentNode) {
var group = currentNode.getAttribute(FOCUS_GROUP);
acc.push.apply(acc, (group
? filterNested(toArray(getTopParent(currentNode).querySelectorAll("[" + FOCUS_GROUP + "=\"" + group + "\"]:not([" + FOCUS_DISABLED + "=\"disabled\"])")))
: [currentNode]));
return acc;
}, []);
};