UNPKG

devextreme

Version:

HTML5 JavaScript Component Suite for Responsive Web Development

49 lines (43 loc) 1.61 kB
"use strict"; var $ = require("../../core/renderer"), domAdapter = require("../../core/dom_adapter"); var _focusable = function _focusable(element, tabIndex) { if (!visible(element)) { return false; } var nodeName = element.nodeName.toLowerCase(), isTabIndexNotNaN = !isNaN(tabIndex), isDisabled = element.disabled, isDefaultFocus = /^(input|select|textarea|button|object|iframe)$/.test(nodeName), isHyperlink = nodeName === "a", isFocusable = true, isContentEditable = element.isContentEditable; if (isDefaultFocus || isContentEditable) { isFocusable = !isDisabled; } else { if (isHyperlink) { isFocusable = element.href || isTabIndexNotNaN; } else { isFocusable = isTabIndexNotNaN; } } return isFocusable; }; var visible = function visible(element) { var $element = $(element); return $element.is(":visible") && $element.css("visibility") !== "hidden" && $element.parents().css("visibility") !== "hidden"; }; module.exports = { focusable: function focusable(index, element) { return _focusable(element, $(element).attr("tabIndex")); }, tabbable: function tabbable(index, element) { var tabIndex = $(element).attr("tabIndex"); return (isNaN(tabIndex) || tabIndex >= 0) && _focusable(element, tabIndex); }, // note: use this method instead of is(":focus") focused: function focused($element) { var element = $($element).get(0); return domAdapter.getActiveElement() === element; } };