focus-lock
Version:
DOM trap for a focus
23 lines (22 loc) • 740 B
JavaScript
import { isRadioElement } from './is';
const findSelectedRadio = (node, nodes) => nodes
.filter(isRadioElement)
.filter((el) => el.name === node.name)
.filter((el) => el.checked)[0] || node;
export const correctNode = (node, nodes) => {
if (isRadioElement(node) && node.name) {
return findSelectedRadio(node, nodes);
}
return node;
};
/**
* giving a set of radio inputs keeps only selected (tabbable) ones
* @param nodes
*/
export const correctNodes = (nodes) => {
// IE11 has no Set(array) constructor
const resultSet = new Set();
nodes.forEach((node) => resultSet.add(correctNode(node, nodes)));
// using filter to support IE11
return nodes.filter((node) => resultSet.has(node));
};