123456789101112131415161718192021222324252627282930313233343536 |
- import focusDisabled from './focus-disabled';
- import isNativelyFocusable from './is-natively-focusable';
- import AbstractVirtualNode from '../../core/base/virtual-node/abstract-virtual-node';
- import { getNodeFromTree } from '../../core/utils';
- /**
- * Determines if an element is focusable
- * @method isFocusable
- * @memberof axe.commons.dom
- * @instance
- * @param {HTMLElement} el The HTMLElement
- * @return {Boolean} The element's focusability status
- */
- function isFocusable(el) {
- const vNode = el instanceof AbstractVirtualNode ? el : getNodeFromTree(el);
- if (vNode.props.nodeType !== 1) {
- return false;
- }
- if (focusDisabled(vNode)) {
- return false;
- } else if (isNativelyFocusable(vNode)) {
- return true;
- }
- // check if the tabindex is specified and a parseable number
- var tabindex = vNode.attr('tabindex');
- if (tabindex && !isNaN(parseInt(tabindex, 10))) {
- return true;
- }
- return false;
- }
- export default isFocusable;
|