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; }, []); };