selectors.js 1.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950
  1. /**
  2. * DevExtreme (ui/widget/selectors.js)
  3. * Version: 19.1.16
  4. * Build date: Tue Oct 18 2022
  5. *
  6. * Copyright (c) 2012 - 2022 Developer Express Inc. ALL RIGHTS RESERVED
  7. * Read about DevExtreme licensing here: https://js.devexpress.com/Licensing/
  8. */
  9. "use strict";
  10. var $ = require("../../core/renderer");
  11. var domAdapter = require("../../core/dom_adapter");
  12. var _focusable = function(element, tabIndex) {
  13. if (!visible(element)) {
  14. return false
  15. }
  16. var nodeName = element.nodeName.toLowerCase();
  17. var isTabIndexNotNaN = !isNaN(tabIndex);
  18. var isDisabled = element.disabled;
  19. var isDefaultFocus = /^(input|select|textarea|button|object|iframe)$/.test(nodeName);
  20. var isHyperlink = "a" === nodeName;
  21. var isFocusable = true;
  22. var isContentEditable = element.isContentEditable;
  23. if (isDefaultFocus || isContentEditable) {
  24. isFocusable = !isDisabled
  25. } else {
  26. if (isHyperlink) {
  27. isFocusable = element.href || isTabIndexNotNaN
  28. } else {
  29. isFocusable = isTabIndexNotNaN
  30. }
  31. }
  32. return isFocusable
  33. };
  34. var visible = function(element) {
  35. var $element = $(element);
  36. return $element.is(":visible") && "hidden" !== $element.css("visibility") && "hidden" !== $element.parents().css("visibility")
  37. };
  38. module.exports = {
  39. focusable: function(index, element) {
  40. return _focusable(element, $(element).attr("tabIndex"))
  41. },
  42. tabbable: function(index, element) {
  43. var tabIndex = $(element).attr("tabIndex");
  44. return (isNaN(tabIndex) || tabIndex >= 0) && _focusable(element, tabIndex)
  45. },
  46. focused: function($element) {
  47. var element = $($element).get(0);
  48. return domAdapter.getActiveElement() === element
  49. }
  50. };