1
1
/* global document, window, Promise */
2
2
var axeCore = require ( 'axe-core' ) ;
3
+ var rIC = require ( 'requestidlecallback' ) ;
3
4
var after = require ( './after' ) ;
5
+
6
+ var requestIdleCallback = rIC . request ;
7
+ var cancelIdleCallback = rIC . cancel ;
8
+
4
9
var React = undefined ;
5
10
var ReactDOM = undefined ;
6
11
@@ -11,7 +16,7 @@ var moderate = 'color:orange;font-weight:bold;';
11
16
var minor = 'color:orange;font-weight:normal;' ;
12
17
var defaultReset = 'font-color:black;font-weight:normal;' ;
13
18
14
- var timer ;
19
+ var idleId ;
15
20
var timeout ;
16
21
var _createElement ;
17
22
var components = { } ;
@@ -108,75 +113,78 @@ function createDeferred() {
108
113
}
109
114
110
115
function checkAndReport ( node , timeout ) {
111
- if ( timer ) {
112
- clearTimeout ( timer ) ;
113
- timer = undefined ;
116
+ if ( idleId ) {
117
+ cancelIdleCallback ( idleId ) ;
118
+ idleId = undefined ;
114
119
}
115
120
116
121
var deferred = createDeferred ( ) ;
117
122
118
123
nodes . push ( node ) ;
119
- timer = setTimeout ( function ( ) {
120
- var n = getCommonParent ( nodes ) ;
121
- if ( n . nodeName . toLowerCase ( ) === 'html' ) {
122
- // if the only common parent is the body, then analyze the whole page
123
- n = document ;
124
- }
125
- axeCore . run ( n , { reporter : 'v2' } , function ( error , results ) {
126
- if ( error ) {
127
- return deferred . reject ( error ) ;
124
+ idleId = requestIdleCallback (
125
+ function ( ) {
126
+ var n = getCommonParent ( nodes ) ;
127
+ if ( n . nodeName . toLowerCase ( ) === 'html' ) {
128
+ // if the only common parent is the body, then analyze the whole page
129
+ n = document ;
128
130
}
131
+ axeCore . run ( n , { reporter : 'v2' } , function ( error , results ) {
132
+ if ( error ) {
133
+ return deferred . reject ( error ) ;
134
+ }
129
135
130
- results . violations = results . violations . filter ( function ( result ) {
131
- result . nodes = result . nodes . filter ( function ( node ) {
132
- var key = node . target . toString ( ) + result . id ;
133
- var retVal = ! cache [ key ] ;
134
- cache [ key ] = key ;
135
- return retVal ;
136
+ results . violations = results . violations . filter ( function ( result ) {
137
+ result . nodes = result . nodes . filter ( function ( node ) {
138
+ var key = node . target . toString ( ) + result . id ;
139
+ var retVal = ! cache [ key ] ;
140
+ cache [ key ] = key ;
141
+ return retVal ;
142
+ } ) ;
143
+ return ! ! result . nodes . length ;
136
144
} ) ;
137
- return ! ! result . nodes . length ;
138
- } ) ;
139
- if ( results . violations . length ) {
140
- console . group ( '%cNew aXe issues' , serious ) ;
141
- results . violations . forEach ( function ( result ) {
142
- var fmt ;
143
- switch ( result . impact ) {
144
- case 'critical' :
145
- fmt = critical ;
146
- break ;
147
- case 'serious' :
148
- fmt = serious ;
149
- break ;
150
- case 'moderate' :
151
- fmt = moderate ;
152
- break ;
153
- case 'minor' :
154
- fmt = minor ;
155
- break ;
156
- default :
157
- fmt = minor ;
158
- break ;
159
- }
160
- console . groupCollapsed (
161
- '%c%s: %c%s %s' ,
162
- fmt ,
163
- result . impact ,
164
- defaultReset ,
165
- result . help ,
166
- result . helpUrl
167
- ) ;
168
- result . nodes . forEach ( function ( node ) {
169
- failureSummary ( node , 'any' ) ;
170
- failureSummary ( node , 'none' ) ;
145
+ if ( results . violations . length ) {
146
+ console . group ( '%cNew aXe issues' , serious ) ;
147
+ results . violations . forEach ( function ( result ) {
148
+ var fmt ;
149
+ switch ( result . impact ) {
150
+ case 'critical' :
151
+ fmt = critical ;
152
+ break ;
153
+ case 'serious' :
154
+ fmt = serious ;
155
+ break ;
156
+ case 'moderate' :
157
+ fmt = moderate ;
158
+ break ;
159
+ case 'minor' :
160
+ fmt = minor ;
161
+ break ;
162
+ default :
163
+ fmt = minor ;
164
+ break ;
165
+ }
166
+ console . groupCollapsed (
167
+ '%c%s: %c%s %s' ,
168
+ fmt ,
169
+ result . impact ,
170
+ defaultReset ,
171
+ result . help ,
172
+ result . helpUrl
173
+ ) ;
174
+ result . nodes . forEach ( function ( node ) {
175
+ failureSummary ( node , 'any' ) ;
176
+ failureSummary ( node , 'none' ) ;
177
+ } ) ;
178
+ console . groupEnd ( ) ;
171
179
} ) ;
172
180
console . groupEnd ( ) ;
173
- } ) ;
174
- console . groupEnd ( ) ;
175
- }
181
+ }
176
182
177
- deferred . resolve ( ) ;
178
- } ) ;
179
- } , timeout ) ;
183
+ deferred . resolve ( ) ;
184
+ } ) ;
185
+ } ,
186
+ { timeout : timeout }
187
+ ) ;
180
188
181
189
return deferred . promise ;
182
190
}
0 commit comments