1 | 'use strict';
|
2 |
|
3 | exports.__esModule = true;
|
4 | var aria = aria || {};
|
5 |
|
6 | aria.Utils = aria.Utils || {};
|
7 |
|
8 |
|
9 |
|
10 |
|
11 |
|
12 |
|
13 |
|
14 |
|
15 |
|
16 | aria.Utils.focusFirstDescendant = function (element) {
|
17 | for (var i = 0; i < element.childNodes.length; i++) {
|
18 | var child = element.childNodes[i];
|
19 | if (aria.Utils.attemptFocus(child) || aria.Utils.focusFirstDescendant(child)) {
|
20 | return true;
|
21 | }
|
22 | }
|
23 | return false;
|
24 | };
|
25 |
|
26 |
|
27 |
|
28 |
|
29 |
|
30 |
|
31 |
|
32 |
|
33 |
|
34 | aria.Utils.focusLastDescendant = function (element) {
|
35 | for (var i = element.childNodes.length - 1; i >= 0; i--) {
|
36 | var child = element.childNodes[i];
|
37 | if (aria.Utils.attemptFocus(child) || aria.Utils.focusLastDescendant(child)) {
|
38 | return true;
|
39 | }
|
40 | }
|
41 | return false;
|
42 | };
|
43 |
|
44 |
|
45 |
|
46 |
|
47 |
|
48 |
|
49 |
|
50 |
|
51 | aria.Utils.attemptFocus = function (element) {
|
52 | if (!aria.Utils.isFocusable(element)) {
|
53 | return false;
|
54 | }
|
55 | aria.Utils.IgnoreUtilFocusChanges = true;
|
56 | try {
|
57 | element.focus();
|
58 | } catch (e) {}
|
59 | aria.Utils.IgnoreUtilFocusChanges = false;
|
60 | return document.activeElement === element;
|
61 | };
|
62 |
|
63 | aria.Utils.isFocusable = function (element) {
|
64 | if (element.tabIndex > 0 || element.tabIndex === 0 && element.getAttribute('tabIndex') !== null) {
|
65 | return true;
|
66 | }
|
67 |
|
68 | if (element.disabled) {
|
69 | return false;
|
70 | }
|
71 |
|
72 | switch (element.nodeName) {
|
73 | case 'A':
|
74 | return !!element.href && element.rel !== 'ignore';
|
75 | case 'INPUT':
|
76 | return element.type !== 'hidden' && element.type !== 'file';
|
77 | case 'BUTTON':
|
78 | case 'SELECT':
|
79 | case 'TEXTAREA':
|
80 | return true;
|
81 | default:
|
82 | return false;
|
83 | }
|
84 | };
|
85 |
|
86 |
|
87 |
|
88 |
|
89 |
|
90 |
|
91 |
|
92 |
|
93 | aria.Utils.triggerEvent = function (elm, name) {
|
94 | var eventName = void 0;
|
95 |
|
96 | if (/^mouse|click/.test(name)) {
|
97 | eventName = 'MouseEvents';
|
98 | } else if (/^key/.test(name)) {
|
99 | eventName = 'KeyboardEvent';
|
100 | } else {
|
101 | eventName = 'HTMLEvents';
|
102 | }
|
103 | var evt = document.createEvent(eventName);
|
104 |
|
105 | for (var _len = arguments.length, opts = Array(_len > 2 ? _len - 2 : 0), _key = 2; _key < _len; _key++) {
|
106 | opts[_key - 2] = arguments[_key];
|
107 | }
|
108 |
|
109 | evt.initEvent.apply(evt, [name].concat(opts));
|
110 | elm.dispatchEvent ? elm.dispatchEvent(evt) : elm.fireEvent('on' + name, evt);
|
111 |
|
112 | return elm;
|
113 | };
|
114 |
|
115 | aria.Utils.keys = {
|
116 | tab: 9,
|
117 | enter: 13,
|
118 | space: 32,
|
119 | left: 37,
|
120 | up: 38,
|
121 | right: 39,
|
122 | down: 40,
|
123 | esc: 27
|
124 | };
|
125 |
|
126 | exports.default = aria.Utils; |
\ | No newline at end of file |