choerodon-ui
Version:
An enterprise-class UI design language and React-based implementation
44 lines (34 loc) • 1.45 kB
JavaScript
Object.defineProperty(exports, "__esModule", {
value: true
});
exports["default"] = focusable;
exports.findFirstFocusableElement = findFirstFocusableElement;
exports.findFocusableElements = findFocusableElements;
exports.findFocusableParent = findFocusableParent;
var selector = 'a[href], area[href], input:not([disabled]):not([type="hidden"]), select:not([disabled]), textarea:not([disabled]), button:not([disabled]), iframe, object, embed, [tabindex="0"], [contenteditable], audio[controls], video[controls], summary, [tabindex^="0"], [tabindex^="1"], [tabindex^="2"], [tabindex^="3"], [tabindex^="4"], [tabindex^="5"], [tabindex^="6"], [tabindex^="7"], [tabindex^="8"], [tabindex^="9"]';
function focusable(node) {
return ['matches', 'msMatchesSelector', 'webkitMatchesSelector', 'mozMatchesSelector'].some(function (method) {
return method in node && node[method](selector);
});
}
function findFirstFocusableElement(node) {
return node.querySelector(selector);
}
function findFocusableElements(node) {
return Array.from(node.querySelectorAll(selector));
}
function findFocusableParent(node, root) {
var parentElement = node.parentElement;
if (parentElement) {
if (focusable(parentElement)) {
return parentElement;
}
if (root && parentElement === root) {
return null;
}
return findFocusableParent(parentElement, root);
}
return null;
}
//# sourceMappingURL=focusable.js.map
;