- commit
- 15a0e41ec1ef025a1207af63a7a6479566320a06
- parent
- 24cf63e8a02ef5bcd563a4c14448c188eda4b6f0
- Author
- Tobias Bengfort <tobias.bengfort@posteo.de>
- Date
- 2019-03-26 20:57
build
Diffstat
| M | babel.js | 10892 | +++++++++++++++++++++++++++++++++++-------------------------- |
| M | fuzz.js | 2102 | +++++++++++++++++++++++++++++++------------------------------ |
2 files changed, 7281 insertions, 5713 deletions
diff --git a/babel.js b/babel.js
@@ -1,190 +1,4 @@ 1 1 (function(){function r(e,n,t){function o(i,f){if(!n[i]){if(!e[i]){var c="function"==typeof require&&require;if(!f&&c)return c(i,!0);if(u)return u(i,!0);var a=new Error("Cannot find module '"+i+"'");throw a.code="MODULE_NOT_FOUND",a}var p=n[i]={exports:{}};e[i][0].call(p.exports,function(r){var n=e[i][1][r];return o(n||r)},p,p.exports,r,e,n,t)}return n[i].exports}for(var u="function"==typeof require&&require,i=0;i<t.length;i++)o(t[i]);return o}return r})()({1:[function(require,module,exports){2 -1 // shim for using process in browser3 -1 var process = module.exports = {};4 -15 -1 // cached from whatever global is present so that test runners that stub it6 -1 // don't break things. But we need to wrap it in a try catch in case it is7 -1 // wrapped in strict mode code which doesn't define any globals. It's inside a8 -1 // function because try/catches deoptimize in certain engines.9 -110 -1 var cachedSetTimeout;11 -1 var cachedClearTimeout;12 -113 -1 function defaultSetTimout() {14 -1 throw new Error('setTimeout has not been defined');15 -1 }16 -1 function defaultClearTimeout () {17 -1 throw new Error('clearTimeout has not been defined');18 -1 }19 -1 (function () {20 -1 try {21 -1 if (typeof setTimeout === 'function') {22 -1 cachedSetTimeout = setTimeout;23 -1 } else {24 -1 cachedSetTimeout = defaultSetTimout;25 -1 }26 -1 } catch (e) {27 -1 cachedSetTimeout = defaultSetTimout;28 -1 }29 -1 try {30 -1 if (typeof clearTimeout === 'function') {31 -1 cachedClearTimeout = clearTimeout;32 -1 } else {33 -1 cachedClearTimeout = defaultClearTimeout;34 -1 }35 -1 } catch (e) {36 -1 cachedClearTimeout = defaultClearTimeout;37 -1 }38 -1 } ())39 -1 function runTimeout(fun) {40 -1 if (cachedSetTimeout === setTimeout) {41 -1 //normal enviroments in sane situations42 -1 return setTimeout(fun, 0);43 -1 }44 -1 // if setTimeout wasn't available but was latter defined45 -1 if ((cachedSetTimeout === defaultSetTimout || !cachedSetTimeout) && setTimeout) {46 -1 cachedSetTimeout = setTimeout;47 -1 return setTimeout(fun, 0);48 -1 }49 -1 try {50 -1 // when when somebody has screwed with setTimeout but no I.E. maddness51 -1 return cachedSetTimeout(fun, 0);52 -1 } catch(e){53 -1 try {54 -1 // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally55 -1 return cachedSetTimeout.call(null, fun, 0);56 -1 } catch(e){57 -1 // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error58 -1 return cachedSetTimeout.call(this, fun, 0);59 -1 }60 -1 }61 -162 -163 -1 }64 -1 function runClearTimeout(marker) {65 -1 if (cachedClearTimeout === clearTimeout) {66 -1 //normal enviroments in sane situations67 -1 return clearTimeout(marker);68 -1 }69 -1 // if clearTimeout wasn't available but was latter defined70 -1 if ((cachedClearTimeout === defaultClearTimeout || !cachedClearTimeout) && clearTimeout) {71 -1 cachedClearTimeout = clearTimeout;72 -1 return clearTimeout(marker);73 -1 }74 -1 try {75 -1 // when when somebody has screwed with setTimeout but no I.E. maddness76 -1 return cachedClearTimeout(marker);77 -1 } catch (e){78 -1 try {79 -1 // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally80 -1 return cachedClearTimeout.call(null, marker);81 -1 } catch (e){82 -1 // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error.83 -1 // Some versions of I.E. have different rules for clearTimeout vs setTimeout84 -1 return cachedClearTimeout.call(this, marker);85 -1 }86 -1 }87 -188 -189 -190 -1 }91 -1 var queue = [];92 -1 var draining = false;93 -1 var currentQueue;94 -1 var queueIndex = -1;95 -196 -1 function cleanUpNextTick() {97 -1 if (!draining || !currentQueue) {98 -1 return;99 -1 }100 -1 draining = false;101 -1 if (currentQueue.length) {102 -1 queue = currentQueue.concat(queue);103 -1 } else {104 -1 queueIndex = -1;105 -1 }106 -1 if (queue.length) {107 -1 drainQueue();108 -1 }109 -1 }110 -1111 -1 function drainQueue() {112 -1 if (draining) {113 -1 return;114 -1 }115 -1 var timeout = runTimeout(cleanUpNextTick);116 -1 draining = true;117 -1118 -1 var len = queue.length;119 -1 while(len) {120 -1 currentQueue = queue;121 -1 queue = [];122 -1 while (++queueIndex < len) {123 -1 if (currentQueue) {124 -1 currentQueue[queueIndex].run();125 -1 }126 -1 }127 -1 queueIndex = -1;128 -1 len = queue.length;129 -1 }130 -1 currentQueue = null;131 -1 draining = false;132 -1 runClearTimeout(timeout);133 -1 }134 -1135 -1 process.nextTick = function (fun) {136 -1 var args = new Array(arguments.length - 1);137 -1 if (arguments.length > 1) {138 -1 for (var i = 1; i < arguments.length; i++) {139 -1 args[i - 1] = arguments[i];140 -1 }141 -1 }142 -1 queue.push(new Item(fun, args));143 -1 if (queue.length === 1 && !draining) {144 -1 runTimeout(drainQueue);145 -1 }146 -1 };147 -1148 -1 // v8 likes predictible objects149 -1 function Item(fun, array) {150 -1 this.fun = fun;151 -1 this.array = array;152 -1 }153 -1 Item.prototype.run = function () {154 -1 this.fun.apply(null, this.array);155 -1 };156 -1 process.title = 'browser';157 -1 process.browser = true;158 -1 process.env = {};159 -1 process.argv = [];160 -1 process.version = ''; // empty string to avoid regexp issues161 -1 process.versions = {};162 -1163 -1 function noop() {}164 -1165 -1 process.on = noop;166 -1 process.addListener = noop;167 -1 process.once = noop;168 -1 process.off = noop;169 -1 process.removeListener = noop;170 -1 process.removeAllListeners = noop;171 -1 process.emit = noop;172 -1 process.prependListener = noop;173 -1 process.prependOnceListener = noop;174 -1175 -1 process.listeners = function (name) { return [] }176 -1177 -1 process.binding = function (name) {178 -1 throw new Error('process.binding is not supported');179 -1 };180 -1181 -1 process.cwd = function () { return '/' };182 -1 process.chdir = function (dir) {183 -1 throw new Error('process.chdir is not supported');184 -1 };185 -1 process.umask = function() { return 0; };186 -1187 -1 },{}],2:[function(require,module,exports){188 2 // Copyright 2012 Google Inc. 189 3 // 190 4 // Licensed under the Apache License, Version 2.0 (the "License"); @@ -1467,7 +1281,7 @@ axs.utils.findDescendantsWithRole = function(element, role) { 1467 1281 return result; 1468 1282 }; 1469 12831470 -1 },{}],3:[function(require,module,exports){-1 1284 },{}],2:[function(require,module,exports){ 1471 1285 // Copyright 2013 Google Inc. 1472 1286 // 1473 1287 // Licensed under the Apache License, Version 2.0 (the "License"); @@ -1504,7 +1318,7 @@ axs.browserUtils.matchSelector = function(element, selector) { 1504 1318 return false; 1505 1319 }; 1506 13201507 -1 },{}],4:[function(require,module,exports){-1 1321 },{}],3:[function(require,module,exports){ 1508 1322 // Copyright 2015 Google Inc. 1509 1323 // 1510 1324 // Licensed under the Apache License, Version 2.0 (the "License"); @@ -2046,7 +1860,7 @@ axs.color.YCC_CUBE_FACES_WHITE = [ { p0: axs.color.WHITE_YCC, p1: axs.color.CYAN 2046 1860 { p0: axs.color.WHITE_YCC, p1: axs.color.MAGENTA_YCC, p2: axs.color.YELLOW_YCC }, 2047 1861 { p0: axs.color.WHITE_YCC, p1: axs.color.YELLOW_YCC, p2: axs.color.CYAN_YCC } ]; 2048 18622049 -1 },{}],5:[function(require,module,exports){-1 1863 },{}],4:[function(require,module,exports){ 2050 1864 // Copyright 2012 Google Inc. 2051 1865 // 2052 1866 // Licensed under the Apache License, Version 2.0 (the "License"); @@ -3730,7 +3544,7 @@ axs.constants.TAG_TO_IMPLICIT_SEMANTIC_INFO = { 3730 3544 }] 3731 3545 }; 3732 35463733 -1 },{}],6:[function(require,module,exports){-1 3547 },{}],5:[function(require,module,exports){ 3734 3548 // Copyright 2015 Google Inc. 3735 3549 // 3736 3550 // Licensed under the Apache License, Version 2.0 (the "License"); @@ -3944,7 +3758,7 @@ axs.dom.composedTreeSearch = function(node, end, callbacks, parentFlags, opt_sha 3944 3758 return found; 3945 3759 }; 3946 37603947 -1 },{}],7:[function(require,module,exports){-1 3761 },{}],6:[function(require,module,exports){ 3948 3762 // Copyright 2012 Google Inc. 3949 3763 // 3950 3764 // Licensed under the Apache License, Version 2.0 (the "License"); @@ -4873,7 +4687,7 @@ axs.properties.getNativelySupportedAttributes = function(element) { 4873 4687 }; 4874 4688 })(); 4875 46894876 -1 },{}],8:[function(require,module,exports){-1 4690 },{}],7:[function(require,module,exports){ 4877 4691 var query = require('./lib/query.js'); 4878 4692 var name = require('./lib/name.js'); 4879 4693 @@ -4889,7 +4703,7 @@ module.exports = { 4889 4703 closest: query.closest, 4890 4704 }; 4891 47054892 -1 },{"./lib/name.js":10,"./lib/query.js":11}],9:[function(require,module,exports){-1 4706 },{"./lib/name.js":9,"./lib/query.js":10}],8:[function(require,module,exports){ 4893 4707 exports.attributes = { 4894 4708 // widget 4895 4709 'autocomplete': 'token', @@ -5216,8 +5030,8 @@ exports.nameFromDescendant = { 5216 5030 }; 5217 5031 5218 5032 exports.nameDefaults = {5219 -1 '[type="submit"]': 'Submit',5220 -1 '[type="reset"]': 'Reset',-1 5033 'input[type="submit"]': 'Submit', -1 5034 'input[type="reset"]': 'Reset', 5221 5035 'summary': 'Details', 5222 5036 }; 5223 5037 @@ -5232,7 +5046,7 @@ exports.labelable = [ 5232 5046 'textarea', 5233 5047 ]; 5234 50485235 -1 },{}],10:[function(require,module,exports){-1 5049 },{}],9:[function(require,module,exports){ 5236 5050 var constants = require('./constants.js'); 5237 5051 var query = require('./query.js'); 5238 5052 var util = require('./util.js'); @@ -5297,7 +5111,7 @@ var getContent = function(root, referenced, owned) { 5297 5111 5298 5112 var allowNameFromContent = function(el) { 5299 5113 var role = query.getRole(el);5300 -1 return !role || constants.nameFromContents.indexOf(role) !== -1;-1 5114 return role && constants.nameFromContents.indexOf(role) !== -1; 5301 5115 }; 5302 5116 5303 5117 var isLabelable = function(el) { @@ -5323,15 +5137,22 @@ var getLabelNodes = function(element) { 5323 5137 return labels; 5324 5138 }; 5325 51395326 -1 // http://www.ssbbartgroup.com/blog/how-the-w3c-text-alternative-computation-works/5327 -1 // https://www.w3.org/TR/accname-aam-1.1/#h-mapping_additional_nd_te-1 5140 var isInLabelForOtherWidget = function(el) { -1 5141 var label = el.parentElement.closest('label'); -1 5142 var ownLabels = getLabelNodes(el); -1 5143 return label && ownLabels.indexOf(label) === -1; -1 5144 }; -1 5145 5328 5146 var getName = function(el, recursive, referenced, owned) { 5329 5147 var ret = ''; 5330 5148 var owned = owned || []; 5331 5149 -1 5150 // A 5332 5151 if (query.getAttribute(el, 'hidden', referenced)) { 5333 5152 return ''; 5334 5153 } -1 5154 -1 5155 // B 5335 5156 if (!recursive && el.matches('[aria-labelledby]')) { 5336 5157 var ids = el.getAttribute('aria-labelledby').split(/\s+/); 5337 5158 var strings = ids.map(function(id) { @@ -5340,13 +5161,14 @@ var getName = function(el, recursive, referenced, owned) { 5340 5161 }); 5341 5162 ret = strings.join(' '); 5342 5163 } -1 5164 -1 5165 // C 5343 5166 if (!ret.trim() && el.matches('[aria-label]')) { 5344 5167 ret = el.getAttribute('aria-label'); 5345 5168 }5346 -1 if (!ret.trim() && query.matches(el, 'presentation')) {5347 -1 return getContent(el, referenced, owned);5348 -1 }5349 -1 if (!ret && !recursive && isLabelable(el)) {-1 5169 -1 5170 // D -1 5171 if (!ret.trim() && !recursive && isLabelable(el)) { 5350 5172 var strings = getLabelNodes(el).map(function(label) { 5351 5173 return getName(label, true, label, owned); 5352 5174 }); @@ -5371,23 +5193,40 @@ var getName = function(el, recursive, referenced, owned) { 5371 5193 } 5372 5194 } 5373 5195 }5374 -1 if (el.closest('label') || recursive || query.matches(el, 'button')) {5375 -1 if (!ret.trim() && query.matches(el, 'textbox,button,combobox,listbox,range')) {-1 5196 -1 5197 // E -1 5198 if (!ret.trim() && (recursive || isInLabelForOtherWidget(el) || query.matches(el, 'button'))) { -1 5199 if (query.matches(el, 'textbox,button,combobox,listbox,range')) { 5376 5200 if (query.matches(el, 'textbox,button')) { 5377 5201 ret = el.value || el.textContent; 5378 5202 } else if (query.matches(el, 'combobox,listbox')) { 5379 5203 var selected = query.querySelector(el, ':selected') || query.querySelector(el, 'option'); 5380 5204 if (selected) { 5381 5205 ret = getName(selected, recursive, referenced, owned); -1 5206 } else { -1 5207 ret = el.value || ''; 5382 5208 } 5383 5209 } else if (query.matches(el, 'range')) { 5384 5210 ret = '' + (query.getAttribute(el, 'valuetext') || query.getAttribute(el, 'valuenow') || el.value); 5385 5211 } 5386 5212 } 5387 5213 }5388 -1 if (!ret.trim() && (recursive || allowNameFromContent(el)) && !query.matches(el, 'menu')) {-1 5214 -1 5215 // F -1 5216 // FIXME: menu is not mentioned in the spec -1 5217 if (!ret.trim() && (recursive || allowNameFromContent(el) || el.closest('label')) && !query.matches(el, 'menu')) { 5389 5218 ret = getContent(el, referenced, owned); 5390 5219 } -1 5220 -1 5221 // TODO: G -1 5222 // TODO: H -1 5223 -1 5224 // FIXME: not mentioned in the spec -1 5225 if (!ret.trim() && query.matches(el, 'presentation')) { -1 5226 return getContent(el, referenced, owned); -1 5227 } -1 5228 -1 5229 // FIXME: not mentioned in the spec 5391 5230 if (!ret.trim()) { 5392 5231 for (var selector in constants.nameDefaults) { 5393 5232 if (el.matches(selector)) { @@ -5395,6 +5234,8 @@ var getName = function(el, recursive, referenced, owned) { 5395 5234 } 5396 5235 } 5397 5236 } -1 5237 -1 5238 // I 5398 5239 if (!ret.trim()) { 5399 5240 ret = el.title || ''; 5400 5241 } @@ -5439,7 +5280,7 @@ module.exports = { 5439 5280 getDescription: getDescription, 5440 5281 }; 5441 52825442 -1 },{"./constants.js":9,"./query.js":11,"./util.js":12}],11:[function(require,module,exports){-1 5283 },{"./constants.js":8,"./query.js":10,"./util.js":11}],10:[function(require,module,exports){ 5443 5284 var constants = require('./constants.js'); 5444 5285 var util = require('./util.js'); 5445 5286 @@ -5598,7 +5439,7 @@ module.exports = { 5598 5439 closest: closest, 5599 5440 }; 5600 54415601 -1 },{"./constants.js":9,"./util.js":12}],12:[function(require,module,exports){-1 5442 },{"./constants.js":8,"./util.js":11}],11:[function(require,module,exports){ 5602 5443 var walkDOM = function(root, fn) { 5603 5444 if (fn(root) === false) { 5604 5445 return false; @@ -5628,10 +5469,9 @@ module.exports = { 5628 5469 searchUp: searchUp, 5629 5470 }; 5630 54715631 -1 },{}],13:[function(require,module,exports){5632 -1 (function (process){5633 -1 /*! aXe v3.1.25634 -1 * Copyright (c) 2018 Deque Systems, Inc.-1 5472 },{}],12:[function(require,module,exports){ -1 5473 /*! aXe v3.2.2 -1 5474 * Copyright (c) 2019 Deque Systems, Inc. 5635 5475 * 5636 5476 * Your use of this Source Code Form is subject to the terms of the Mozilla Public 5637 5477 * License, v. 2.0. If a copy of the MPL was not distributed with this @@ -5651,7 +5491,7 @@ module.exports = { 5651 5491 return obj && typeof Symbol === 'function' && obj.constructor === Symbol && obj !== Symbol.prototype ? 'symbol' : typeof obj; 5652 5492 }; 5653 5493 var axe = axe || {};5654 -1 axe.version = '3.1.2';-1 5494 axe.version = '3.2.2'; 5655 5495 if (typeof define === 'function' && define.amd) { 5656 5496 define('axe-core', [], function() { 5657 5497 'use strict'; @@ -5678,1117 +5518,2143 @@ module.exports = { 5678 5518 } 5679 5519 SupportError.prototype = Object.create(Error.prototype); 5680 5520 SupportError.prototype.constructor = SupportError;5681 -1 'use strict';5682 -1 axe.imports = {};5683 -1 'use strict';5684 -1 var utils = axe.utils = {};5685 -1 'use strict';5686 -1 var helpers = {};5687 -1 'use strict';5688 -1 var _typeof = typeof Symbol === 'function' && typeof Symbol.iterator === 'symbol' ? function(obj) {5689 -1 return typeof obj;5690 -1 } : function(obj) {5691 -1 return obj && typeof Symbol === 'function' && obj.constructor === Symbol && obj !== Symbol.prototype ? 'symbol' : typeof obj;5692 -1 };5693 -1 var _extends = Object.assign || function(target) {5694 -1 for (var i = 1; i < arguments.length; i++) {5695 -1 var source = arguments[i];5696 -1 for (var key in source) {5697 -1 if (Object.prototype.hasOwnProperty.call(source, key)) {5698 -1 target[key] = source[key];5699 -1 }-1 5521 (function() { -1 5522 function r(e, n, t) { -1 5523 function o(i, f) { -1 5524 if (!n[i]) { -1 5525 if (!e[i]) { -1 5526 var c = 'function' == typeof require && require; -1 5527 if (!f && c) { -1 5528 return c(i, !0); -1 5529 } -1 5530 if (u) { -1 5531 return u(i, !0); -1 5532 } -1 5533 var a = new Error('Cannot find module \'' + i + '\''); -1 5534 throw a.code = 'MODULE_NOT_FOUND', a; -1 5535 } -1 5536 var p = n[i] = { -1 5537 exports: {} -1 5538 }; -1 5539 e[i][0].call(p.exports, function(r) { -1 5540 var n = e[i][1][r]; -1 5541 return o(n || r); -1 5542 }, p, p.exports, r, e, n, t); -1 5543 } -1 5544 return n[i].exports; -1 5545 } -1 5546 for (var u = 'function' == typeof require && require, i = 0; i < t.length; i++) { -1 5547 o(t[i]); -1 5548 } -1 5549 return o; -1 5550 } -1 5551 return r; -1 5552 })()({ -1 5553 1: [ function(_dereq_, module, exports) { -1 5554 _dereq_('es6-promise').polyfill(); -1 5555 axe.imports = { -1 5556 axios: _dereq_('axios'), -1 5557 CssSelectorParser: _dereq_('css-selector-parser').CssSelectorParser, -1 5558 doT: _dereq_('dot'), -1 5559 emojiRegexText: _dereq_('emoji-regex') -1 5560 }; -1 5561 }, { -1 5562 axios: 2, -1 5563 'css-selector-parser': 27, -1 5564 dot: 29, -1 5565 'emoji-regex': 30, -1 5566 'es6-promise': 31 -1 5567 } ], -1 5568 2: [ function(_dereq_, module, exports) { -1 5569 module.exports = _dereq_('./lib/axios'); -1 5570 }, { -1 5571 './lib/axios': 4 -1 5572 } ], -1 5573 3: [ function(_dereq_, module, exports) { -1 5574 (function(process) { -1 5575 'use strict'; -1 5576 var utils = _dereq_('./../utils'); -1 5577 var settle = _dereq_('./../core/settle'); -1 5578 var buildURL = _dereq_('./../helpers/buildURL'); -1 5579 var parseHeaders = _dereq_('./../helpers/parseHeaders'); -1 5580 var isURLSameOrigin = _dereq_('./../helpers/isURLSameOrigin'); -1 5581 var createError = _dereq_('../core/createError'); -1 5582 var btoa = typeof window !== 'undefined' && window.btoa && window.btoa.bind(window) || _dereq_('./../helpers/btoa'); -1 5583 module.exports = function xhrAdapter(config) { -1 5584 return new Promise(function dispatchXhrRequest(resolve, reject) { -1 5585 var requestData = config.data; -1 5586 var requestHeaders = config.headers; -1 5587 if (utils.isFormData(requestData)) { -1 5588 delete requestHeaders['Content-Type']; -1 5589 } -1 5590 var request = new XMLHttpRequest(); -1 5591 var loadEvent = 'onreadystatechange'; -1 5592 var xDomain = false; -1 5593 if (process.env.NODE_ENV !== 'test' && typeof window !== 'undefined' && window.XDomainRequest && !('withCredentials' in request) && !isURLSameOrigin(config.url)) { -1 5594 request = new window.XDomainRequest(); -1 5595 loadEvent = 'onload'; -1 5596 xDomain = true; -1 5597 request.onprogress = function handleProgress() {}; -1 5598 request.ontimeout = function handleTimeout() {}; -1 5599 } -1 5600 if (config.auth) { -1 5601 var username = config.auth.username || ''; -1 5602 var password = config.auth.password || ''; -1 5603 requestHeaders.Authorization = 'Basic ' + btoa(username + ':' + password); -1 5604 } -1 5605 request.open(config.method.toUpperCase(), buildURL(config.url, config.params, config.paramsSerializer), true); -1 5606 request.timeout = config.timeout; -1 5607 request[loadEvent] = function handleLoad() { -1 5608 if (!request || request.readyState !== 4 && !xDomain) { -1 5609 return; -1 5610 } -1 5611 if (request.status === 0 && !(request.responseURL && request.responseURL.indexOf('file:') === 0)) { -1 5612 return; -1 5613 } -1 5614 var responseHeaders = 'getAllResponseHeaders' in request ? parseHeaders(request.getAllResponseHeaders()) : null; -1 5615 var responseData = !config.responseType || config.responseType === 'text' ? request.responseText : request.response; -1 5616 var response = { -1 5617 data: responseData, -1 5618 status: request.status === 1223 ? 204 : request.status, -1 5619 statusText: request.status === 1223 ? 'No Content' : request.statusText, -1 5620 headers: responseHeaders, -1 5621 config: config, -1 5622 request: request -1 5623 }; -1 5624 settle(resolve, reject, response); -1 5625 request = null; -1 5626 }; -1 5627 request.onerror = function handleError() { -1 5628 reject(createError('Network Error', config, null, request)); -1 5629 request = null; -1 5630 }; -1 5631 request.ontimeout = function handleTimeout() { -1 5632 reject(createError('timeout of ' + config.timeout + 'ms exceeded', config, 'ECONNABORTED', request)); -1 5633 request = null; -1 5634 }; -1 5635 if (utils.isStandardBrowserEnv()) { -1 5636 var cookies = _dereq_('./../helpers/cookies'); -1 5637 var xsrfValue = (config.withCredentials || isURLSameOrigin(config.url)) && config.xsrfCookieName ? cookies.read(config.xsrfCookieName) : undefined; -1 5638 if (xsrfValue) { -1 5639 requestHeaders[config.xsrfHeaderName] = xsrfValue; -1 5640 } -1 5641 } -1 5642 if ('setRequestHeader' in request) { -1 5643 utils.forEach(requestHeaders, function setRequestHeader(val, key) { -1 5644 if (typeof requestData === 'undefined' && key.toLowerCase() === 'content-type') { -1 5645 delete requestHeaders[key]; -1 5646 } else { -1 5647 request.setRequestHeader(key, val); -1 5648 } -1 5649 }); -1 5650 } -1 5651 if (config.withCredentials) { -1 5652 request.withCredentials = true; -1 5653 } -1 5654 if (config.responseType) { -1 5655 try { -1 5656 request.responseType = config.responseType; -1 5657 } catch (e) { -1 5658 if (config.responseType !== 'json') { -1 5659 throw e; -1 5660 } -1 5661 } -1 5662 } -1 5663 if (typeof config.onDownloadProgress === 'function') { -1 5664 request.addEventListener('progress', config.onDownloadProgress); -1 5665 } -1 5666 if (typeof config.onUploadProgress === 'function' && request.upload) { -1 5667 request.upload.addEventListener('progress', config.onUploadProgress); -1 5668 } -1 5669 if (config.cancelToken) { -1 5670 config.cancelToken.promise.then(function onCanceled(cancel) { -1 5671 if (!request) { -1 5672 return; -1 5673 } -1 5674 request.abort(); -1 5675 reject(cancel); -1 5676 request = null; -1 5677 }); -1 5678 } -1 5679 if (requestData === undefined) { -1 5680 requestData = null; -1 5681 } -1 5682 request.send(requestData); -1 5683 }); -1 5684 }; -1 5685 }).call(this, _dereq_('_process')); -1 5686 }, { -1 5687 '../core/createError': 10, -1 5688 './../core/settle': 13, -1 5689 './../helpers/btoa': 17, -1 5690 './../helpers/buildURL': 18, -1 5691 './../helpers/cookies': 20, -1 5692 './../helpers/isURLSameOrigin': 22, -1 5693 './../helpers/parseHeaders': 24, -1 5694 './../utils': 26, -1 5695 _process: 33 -1 5696 } ], -1 5697 4: [ function(_dereq_, module, exports) { -1 5698 'use strict'; -1 5699 var utils = _dereq_('./utils'); -1 5700 var bind = _dereq_('./helpers/bind'); -1 5701 var Axios = _dereq_('./core/Axios'); -1 5702 var defaults = _dereq_('./defaults'); -1 5703 function createInstance(defaultConfig) { -1 5704 var context = new Axios(defaultConfig); -1 5705 var instance = bind(Axios.prototype.request, context); -1 5706 utils.extend(instance, Axios.prototype, context); -1 5707 utils.extend(instance, context); -1 5708 return instance; 5700 5709 }5701 -1 }5702 -1 return target;5703 -1 };5704 -1 function getDefaultConfiguration(audit) {5705 -1 'use strict';5706 -1 var config;5707 -1 if (audit) {5708 -1 config = axe.utils.clone(audit);5709 -1 config.commons = audit.commons;5710 -1 } else {5711 -1 config = {};5712 -1 }5713 -1 config.reporter = config.reporter || null;5714 -1 config.rules = config.rules || [];5715 -1 config.checks = config.checks || [];5716 -1 config.data = _extends({5717 -1 checks: {},5718 -1 rules: {}5719 -1 }, config.data);5720 -1 return config;5721 -1 }5722 -1 function unpackToObject(collection, audit, method) {5723 -1 'use strict';5724 -1 var i, l;5725 -1 for (i = 0, l = collection.length; i < l; i++) {5726 -1 audit[method](collection[i]);5727 -1 }5728 -1 }5729 -1 function Audit(audit) {5730 -1 this.brand = 'axe';5731 -1 this.application = 'axeAPI';5732 -1 this.tagExclude = [ 'experimental' ];5733 -1 this.defaultConfig = audit;5734 -1 this._init();5735 -1 this._defaultLocale = null;5736 -1 }5737 -1 Audit.prototype._setDefaultLocale = function() {5738 -1 if (this._defaultLocale) {5739 -1 return;5740 -1 }5741 -1 var locale = {5742 -1 checks: {},5743 -1 rules: {}5744 -1 };5745 -1 var checkIDs = Object.keys(this.data.checks);5746 -1 for (var i = 0; i < checkIDs.length; i++) {5747 -1 var id = checkIDs[i];5748 -1 var check = this.data.checks[id];5749 -1 var _check$messages = check.messages, pass = _check$messages.pass, fail = _check$messages.fail, incomplete = _check$messages.incomplete;5750 -1 locale.checks[id] = {5751 -1 pass: pass,5752 -1 fail: fail,5753 -1 incomplete: incomplete-1 5710 var axios = createInstance(defaults); -1 5711 axios.Axios = Axios; -1 5712 axios.create = function create(instanceConfig) { -1 5713 return createInstance(utils.merge(defaults, instanceConfig)); 5754 5714 };5755 -1 }5756 -1 var ruleIDs = Object.keys(this.data.rules);5757 -1 for (var _i = 0; _i < ruleIDs.length; _i++) {5758 -1 var _id = ruleIDs[_i];5759 -1 var rule = this.data.rules[_id];5760 -1 var description = rule.description, help = rule.help;5761 -1 locale.rules[_id] = {5762 -1 description: description,5763 -1 help: help-1 5715 axios.Cancel = _dereq_('./cancel/Cancel'); -1 5716 axios.CancelToken = _dereq_('./cancel/CancelToken'); -1 5717 axios.isCancel = _dereq_('./cancel/isCancel'); -1 5718 axios.all = function all(promises) { -1 5719 return Promise.all(promises); 5764 5720 };5765 -1 }5766 -1 this._defaultLocale = locale;5767 -1 };5768 -1 Audit.prototype._resetLocale = function() {5769 -1 var defaultLocale = this._defaultLocale;5770 -1 if (!defaultLocale) {5771 -1 return;5772 -1 }5773 -1 this.applyLocale(defaultLocale);5774 -1 };5775 -1 var mergeCheckLocale = function mergeCheckLocale(a, b) {5776 -1 var pass = b.pass, fail = b.fail;5777 -1 if (typeof pass === 'string') {5778 -1 pass = axe.imports.doT.compile(pass);5779 -1 }5780 -1 if (typeof fail === 'string') {5781 -1 fail = axe.imports.doT.compile(fail);5782 -1 }5783 -1 return _extends({}, a, {5784 -1 messages: {5785 -1 pass: pass || a.messages.pass,5786 -1 fail: fail || a.messages.fail,5787 -1 incomplete: _typeof(a.messages.incomplete) === 'object' ? _extends({}, a.messages.incomplete, b.incomplete) : b.incomplete5788 -1 }5789 -1 });5790 -1 };5791 -1 var mergeRuleLocale = function mergeRuleLocale(a, b) {5792 -1 var help = b.help, description = b.description;5793 -1 if (typeof help === 'string') {5794 -1 help = axe.imports.doT.compile(help);5795 -1 }5796 -1 if (typeof description === 'string') {5797 -1 description = axe.imports.doT.compile(description);5798 -1 }5799 -1 return _extends({}, a, {5800 -1 help: help || a.help,5801 -1 description: description || a.description5802 -1 });5803 -1 };5804 -1 Audit.prototype._applyCheckLocale = function(checks) {5805 -1 var keys = Object.keys(checks);5806 -1 for (var i = 0; i < keys.length; i++) {5807 -1 var id = keys[i];5808 -1 if (!this.data.checks[id]) {5809 -1 throw new Error('Locale provided for unknown check: "' + id + '"');5810 -1 }5811 -1 this.data.checks[id] = mergeCheckLocale(this.data.checks[id], checks[id]);5812 -1 }5813 -1 };5814 -1 Audit.prototype._applyRuleLocale = function(rules) {5815 -1 var keys = Object.keys(rules);5816 -1 for (var i = 0; i < keys.length; i++) {5817 -1 var id = keys[i];5818 -1 if (!this.data.rules[id]) {5819 -1 throw new Error('Locale provided for unknown rule: "' + id + '"');-1 5721 axios.spread = _dereq_('./helpers/spread'); -1 5722 module.exports = axios; -1 5723 module.exports.default = axios; -1 5724 }, { -1 5725 './cancel/Cancel': 5, -1 5726 './cancel/CancelToken': 6, -1 5727 './cancel/isCancel': 7, -1 5728 './core/Axios': 8, -1 5729 './defaults': 15, -1 5730 './helpers/bind': 16, -1 5731 './helpers/spread': 25, -1 5732 './utils': 26 -1 5733 } ], -1 5734 5: [ function(_dereq_, module, exports) { -1 5735 'use strict'; -1 5736 function Cancel(message) { -1 5737 this.message = message; 5820 5738 }5821 -1 this.data.rules[id] = mergeRuleLocale(this.data.rules[id], rules[id]);5822 -1 }5823 -1 };5824 -1 Audit.prototype.applyLocale = function(locale) {5825 -1 this._setDefaultLocale();5826 -1 if (locale.checks) {5827 -1 this._applyCheckLocale(locale.checks);5828 -1 }5829 -1 if (locale.rules) {5830 -1 this._applyRuleLocale(locale.rules);5831 -1 }5832 -1 };5833 -1 Audit.prototype._init = function() {5834 -1 var audit = getDefaultConfiguration(this.defaultConfig);5835 -1 axe.commons = commons = audit.commons;5836 -1 this.reporter = audit.reporter;5837 -1 this.commands = {};5838 -1 this.rules = [];5839 -1 this.checks = {};5840 -1 unpackToObject(audit.rules, this, 'addRule');5841 -1 unpackToObject(audit.checks, this, 'addCheck');5842 -1 this.data = {};5843 -1 this.data.checks = audit.data && audit.data.checks || {};5844 -1 this.data.rules = audit.data && audit.data.rules || {};5845 -1 this.data.failureSummaries = audit.data && audit.data.failureSummaries || {};5846 -1 this.data.incompleteFallbackMessage = audit.data && audit.data.incompleteFallbackMessage || '';5847 -1 this._constructHelpUrls();5848 -1 };5849 -1 Audit.prototype.registerCommand = function(command) {5850 -1 'use strict';5851 -1 this.commands[command.id] = command.callback;5852 -1 };5853 -1 Audit.prototype.addRule = function(spec) {5854 -1 'use strict';5855 -1 if (spec.metadata) {5856 -1 this.data.rules[spec.id] = spec.metadata;5857 -1 }5858 -1 var rule = this.getRule(spec.id);5859 -1 if (rule) {5860 -1 rule.configure(spec);5861 -1 } else {5862 -1 this.rules.push(new Rule(spec, this));5863 -1 }5864 -1 };5865 -1 Audit.prototype.addCheck = function(spec) {5866 -1 'use strict';5867 -1 var metadata = spec.metadata;5868 -1 if ((typeof metadata === 'undefined' ? 'undefined' : _typeof(metadata)) === 'object') {5869 -1 this.data.checks[spec.id] = metadata;5870 -1 if (_typeof(metadata.messages) === 'object') {5871 -1 Object.keys(metadata.messages).filter(function(prop) {5872 -1 return metadata.messages.hasOwnProperty(prop) && typeof metadata.messages[prop] === 'string';5873 -1 }).forEach(function(prop) {5874 -1 if (metadata.messages[prop].indexOf('function') === 0) {5875 -1 metadata.messages[prop] = new Function('return ' + metadata.messages[prop] + ';')();-1 5739 Cancel.prototype.toString = function toString() { -1 5740 return 'Cancel' + (this.message ? ': ' + this.message : ''); -1 5741 }; -1 5742 Cancel.prototype.__CANCEL__ = true; -1 5743 module.exports = Cancel; -1 5744 }, {} ], -1 5745 6: [ function(_dereq_, module, exports) { -1 5746 'use strict'; -1 5747 var Cancel = _dereq_('./Cancel'); -1 5748 function CancelToken(executor) { -1 5749 if (typeof executor !== 'function') { -1 5750 throw new TypeError('executor must be a function.'); -1 5751 } -1 5752 var resolvePromise; -1 5753 this.promise = new Promise(function promiseExecutor(resolve) { -1 5754 resolvePromise = resolve; -1 5755 }); -1 5756 var token = this; -1 5757 executor(function cancel(message) { -1 5758 if (token.reason) { -1 5759 return; 5876 5760 } -1 5761 token.reason = new Cancel(message); -1 5762 resolvePromise(token.reason); 5877 5763 }); 5878 5764 }5879 -1 }5880 -1 if (this.checks[spec.id]) {5881 -1 this.checks[spec.id].configure(spec);5882 -1 } else {5883 -1 this.checks[spec.id] = new Check(spec);5884 -1 }5885 -1 };5886 -1 function getRulesToRun(rules, context, options) {5887 -1 var base = {5888 -1 now: [],5889 -1 later: []5890 -1 };5891 -1 var splitRules = rules.reduce(function(out, rule) {5892 -1 if (!axe.utils.ruleShouldRun(rule, context, options)) {5893 -1 return out;5894 -1 }5895 -1 if (rule.preload) {5896 -1 out.later.push(rule);5897 -1 return out;-1 5765 CancelToken.prototype.throwIfRequested = function throwIfRequested() { -1 5766 if (this.reason) { -1 5767 throw this.reason; -1 5768 } -1 5769 }; -1 5770 CancelToken.source = function source() { -1 5771 var cancel; -1 5772 var token = new CancelToken(function executor(c) { -1 5773 cancel = c; -1 5774 }); -1 5775 return { -1 5776 token: token, -1 5777 cancel: cancel -1 5778 }; -1 5779 }; -1 5780 module.exports = CancelToken; -1 5781 }, { -1 5782 './Cancel': 5 -1 5783 } ], -1 5784 7: [ function(_dereq_, module, exports) { -1 5785 'use strict'; -1 5786 module.exports = function isCancel(value) { -1 5787 return !!(value && value.__CANCEL__); -1 5788 }; -1 5789 }, {} ], -1 5790 8: [ function(_dereq_, module, exports) { -1 5791 'use strict'; -1 5792 var defaults = _dereq_('./../defaults'); -1 5793 var utils = _dereq_('./../utils'); -1 5794 var InterceptorManager = _dereq_('./InterceptorManager'); -1 5795 var dispatchRequest = _dereq_('./dispatchRequest'); -1 5796 function Axios(instanceConfig) { -1 5797 this.defaults = instanceConfig; -1 5798 this.interceptors = { -1 5799 request: new InterceptorManager(), -1 5800 response: new InterceptorManager() -1 5801 }; 5898 5802 }5899 -1 out.now.push(rule);5900 -1 return out;5901 -1 }, base);5902 -1 return splitRules;5903 -1 }5904 -1 function getDefferedRule(rule, context, options) {5905 -1 var markStart = void 0;5906 -1 var markEnd = void 0;5907 -1 if (options.performanceTimer) {5908 -1 markStart = 'mark_rule_start_' + rule.id;5909 -1 markEnd = 'mark_rule_end_' + rule.id;5910 -1 axe.utils.performanceTimer.mark(markStart);5911 -1 }5912 -1 return function(resolve, reject) {5913 -1 rule.run(context, options, function(ruleResult) {5914 -1 if (options.performanceTimer) {5915 -1 axe.utils.performanceTimer.mark(markEnd);5916 -1 axe.utils.performanceTimer.measure('rule_' + rule.id, markStart, markEnd);-1 5803 Axios.prototype.request = function request(config) { -1 5804 if (typeof config === 'string') { -1 5805 config = utils.merge({ -1 5806 url: arguments[0] -1 5807 }, arguments[1]); 5917 5808 }5918 -1 resolve(ruleResult);5919 -1 }, function(err) {5920 -1 if (!options.debug) {5921 -1 var errResult = Object.assign(new RuleResult(rule), {5922 -1 result: axe.constants.CANTTELL,5923 -1 description: 'An error occured while running this rule',5924 -1 message: err.message,5925 -1 stack: err.stack,5926 -1 error: err5927 -1 });5928 -1 resolve(errResult);5929 -1 } else {5930 -1 reject(err);-1 5809 config = utils.merge(defaults, { -1 5810 method: 'get' -1 5811 }, this.defaults, config); -1 5812 config.method = config.method.toLowerCase(); -1 5813 var chain = [ dispatchRequest, undefined ]; -1 5814 var promise = Promise.resolve(config); -1 5815 this.interceptors.request.forEach(function unshiftRequestInterceptors(interceptor) { -1 5816 chain.unshift(interceptor.fulfilled, interceptor.rejected); -1 5817 }); -1 5818 this.interceptors.response.forEach(function pushResponseInterceptors(interceptor) { -1 5819 chain.push(interceptor.fulfilled, interceptor.rejected); -1 5820 }); -1 5821 while (chain.length) { -1 5822 promise = promise.then(chain.shift(), chain.shift()); 5931 5823 } -1 5824 return promise; -1 5825 }; -1 5826 utils.forEach([ 'delete', 'get', 'head', 'options' ], function forEachMethodNoData(method) { -1 5827 Axios.prototype[method] = function(url, config) { -1 5828 return this.request(utils.merge(config || {}, { -1 5829 method: method, -1 5830 url: url -1 5831 })); -1 5832 }; 5932 5833 });5933 -1 };5934 -1 }5935 -1 Audit.prototype.run = function(context, options, resolve, reject) {5936 -1 'use strict';5937 -1 this.normalizeOptions(options);5938 -1 axe._selectCache = [];5939 -1 var allRulesToRun = getRulesToRun(this.rules, context, options);5940 -1 var runNowRules = allRulesToRun.now;5941 -1 var runLaterRules = allRulesToRun.later;5942 -1 var nowRulesQueue = axe.utils.queue();5943 -1 runNowRules.forEach(function(rule) {5944 -1 nowRulesQueue.defer(getDefferedRule(rule, context, options));5945 -1 });5946 -1 var preloaderQueue = axe.utils.queue();5947 -1 if (runLaterRules.length) {5948 -1 preloaderQueue.defer(function(res, rej) {5949 -1 axe.utils.preload(options).then(function(preloadResults) {5950 -1 var assets = preloadResults[0];5951 -1 res(assets);5952 -1 }).catch(function(err) {5953 -1 console.warn('Couldn\'t load preload assets: ', err);5954 -1 var assets = undefined;5955 -1 res(assets);5956 -1 });-1 5834 utils.forEach([ 'post', 'put', 'patch' ], function forEachMethodWithData(method) { -1 5835 Axios.prototype[method] = function(url, data, config) { -1 5836 return this.request(utils.merge(config || {}, { -1 5837 method: method, -1 5838 url: url, -1 5839 data: data -1 5840 })); -1 5841 }; 5957 5842 });5958 -1 }5959 -1 var queueForNowRulesAndPreloader = axe.utils.queue();5960 -1 queueForNowRulesAndPreloader.defer(nowRulesQueue);5961 -1 queueForNowRulesAndPreloader.defer(preloaderQueue);5962 -1 queueForNowRulesAndPreloader.then(function(nowRulesAndPreloaderResults) {5963 -1 var assetsFromQueue = nowRulesAndPreloaderResults.pop();5964 -1 if (assetsFromQueue && assetsFromQueue.length) {5965 -1 var assets = assetsFromQueue[0];5966 -1 if (assets) {5967 -1 context = _extends({}, context, assets);5968 -1 }5969 -1 }5970 -1 var nowRulesResults = nowRulesAndPreloaderResults[0];5971 -1 if (!runLaterRules.length) {5972 -1 axe._selectCache = undefined;5973 -1 resolve(nowRulesResults.filter(function(result) {5974 -1 return !!result;5975 -1 }));5976 -1 return;5977 -1 }5978 -1 var laterRulesQueue = axe.utils.queue();5979 -1 runLaterRules.forEach(function(rule) {5980 -1 var deferredRule = getDefferedRule(rule, context, options);5981 -1 laterRulesQueue.defer(deferredRule);5982 -1 });5983 -1 laterRulesQueue.then(function(laterRuleResults) {5984 -1 axe._selectCache = undefined;5985 -1 resolve(nowRulesResults.concat(laterRuleResults).filter(function(result) {5986 -1 return !!result;5987 -1 }));5988 -1 }).catch(reject);5989 -1 }).catch(reject);5990 -1 };5991 -1 Audit.prototype.after = function(results, options) {5992 -1 'use strict';5993 -1 var rules = this.rules;5994 -1 return results.map(function(ruleResult) {5995 -1 var rule = axe.utils.findBy(rules, 'id', ruleResult.id);5996 -1 if (!rule) {5997 -1 throw new Error('Result for unknown rule. You may be running mismatch aXe-core versions');5998 -1 }5999 -1 return rule.after(ruleResult, options);6000 -1 });6001 -1 };6002 -1 Audit.prototype.getRule = function(ruleId) {6003 -1 return this.rules.find(function(rule) {6004 -1 return rule.id === ruleId;6005 -1 });6006 -1 };6007 -1 Audit.prototype.normalizeOptions = function(options) {6008 -1 'use strict';6009 -1 var audit = this;6010 -1 if (_typeof(options.runOnly) === 'object') {6011 -1 if (Array.isArray(options.runOnly)) {6012 -1 options.runOnly = {6013 -1 type: 'tag',6014 -1 values: options.runOnly6015 -1 };6016 -1 }6017 -1 var only = options.runOnly;6018 -1 if (only.value && !only.values) {6019 -1 only.values = only.value;6020 -1 delete only.value;-1 5843 module.exports = Axios; -1 5844 }, { -1 5845 './../defaults': 15, -1 5846 './../utils': 26, -1 5847 './InterceptorManager': 9, -1 5848 './dispatchRequest': 11 -1 5849 } ], -1 5850 9: [ function(_dereq_, module, exports) { -1 5851 'use strict'; -1 5852 var utils = _dereq_('./../utils'); -1 5853 function InterceptorManager() { -1 5854 this.handlers = []; 6021 5855 }6022 -1 if (!Array.isArray(only.values) || only.values.length === 0) {6023 -1 throw new Error('runOnly.values must be a non-empty array');-1 5856 InterceptorManager.prototype.use = function use(fulfilled, rejected) { -1 5857 this.handlers.push({ -1 5858 fulfilled: fulfilled, -1 5859 rejected: rejected -1 5860 }); -1 5861 return this.handlers.length - 1; -1 5862 }; -1 5863 InterceptorManager.prototype.eject = function eject(id) { -1 5864 if (this.handlers[id]) { -1 5865 this.handlers[id] = null; -1 5866 } -1 5867 }; -1 5868 InterceptorManager.prototype.forEach = function forEach(fn) { -1 5869 utils.forEach(this.handlers, function forEachHandler(h) { -1 5870 if (h !== null) { -1 5871 fn(h); -1 5872 } -1 5873 }); -1 5874 }; -1 5875 module.exports = InterceptorManager; -1 5876 }, { -1 5877 './../utils': 26 -1 5878 } ], -1 5879 10: [ function(_dereq_, module, exports) { -1 5880 'use strict'; -1 5881 var enhanceError = _dereq_('./enhanceError'); -1 5882 module.exports = function createError(message, config, code, request, response) { -1 5883 var error = new Error(message); -1 5884 return enhanceError(error, config, code, request, response); -1 5885 }; -1 5886 }, { -1 5887 './enhanceError': 12 -1 5888 } ], -1 5889 11: [ function(_dereq_, module, exports) { -1 5890 'use strict'; -1 5891 var utils = _dereq_('./../utils'); -1 5892 var transformData = _dereq_('./transformData'); -1 5893 var isCancel = _dereq_('../cancel/isCancel'); -1 5894 var defaults = _dereq_('../defaults'); -1 5895 var isAbsoluteURL = _dereq_('./../helpers/isAbsoluteURL'); -1 5896 var combineURLs = _dereq_('./../helpers/combineURLs'); -1 5897 function throwIfCancellationRequested(config) { -1 5898 if (config.cancelToken) { -1 5899 config.cancelToken.throwIfRequested(); -1 5900 } 6024 5901 }6025 -1 if ([ 'rule', 'rules' ].includes(only.type)) {6026 -1 only.type = 'rule';6027 -1 only.values.forEach(function(ruleId) {6028 -1 if (!audit.getRule(ruleId)) {6029 -1 throw new Error('unknown rule `' + ruleId + '` in options.runOnly');-1 5902 module.exports = function dispatchRequest(config) { -1 5903 throwIfCancellationRequested(config); -1 5904 if (config.baseURL && !isAbsoluteURL(config.url)) { -1 5905 config.url = combineURLs(config.baseURL, config.url); -1 5906 } -1 5907 config.headers = config.headers || {}; -1 5908 config.data = transformData(config.data, config.headers, config.transformRequest); -1 5909 config.headers = utils.merge(config.headers.common || {}, config.headers[config.method] || {}, config.headers || {}); -1 5910 utils.forEach([ 'delete', 'get', 'head', 'post', 'put', 'patch', 'common' ], function cleanHeaderConfig(method) { -1 5911 delete config.headers[method]; -1 5912 }); -1 5913 var adapter = config.adapter || defaults.adapter; -1 5914 return adapter(config).then(function onAdapterResolution(response) { -1 5915 throwIfCancellationRequested(config); -1 5916 response.data = transformData(response.data, response.headers, config.transformResponse); -1 5917 return response; -1 5918 }, function onAdapterRejection(reason) { -1 5919 if (!isCancel(reason)) { -1 5920 throwIfCancellationRequested(config); -1 5921 if (reason && reason.response) { -1 5922 reason.response.data = transformData(reason.response.data, reason.response.headers, config.transformResponse); -1 5923 } 6030 5924 } -1 5925 return Promise.reject(reason); 6031 5926 });6032 -1 } else if ([ 'tag', 'tags', undefined ].includes(only.type)) {6033 -1 only.type = 'tag';6034 -1 var unmatchedTags = audit.rules.reduce(function(unmatchedTags, rule) {6035 -1 return unmatchedTags.length ? unmatchedTags.filter(function(tag) {6036 -1 return !rule.tags.includes(tag);6037 -1 }) : unmatchedTags;6038 -1 }, only.values);6039 -1 if (unmatchedTags.length !== 0) {6040 -1 throw new Error('Could not find tags `' + unmatchedTags.join('`, `') + '`');-1 5927 }; -1 5928 }, { -1 5929 '../cancel/isCancel': 7, -1 5930 '../defaults': 15, -1 5931 './../helpers/combineURLs': 19, -1 5932 './../helpers/isAbsoluteURL': 21, -1 5933 './../utils': 26, -1 5934 './transformData': 14 -1 5935 } ], -1 5936 12: [ function(_dereq_, module, exports) { -1 5937 'use strict'; -1 5938 module.exports = function enhanceError(error, config, code, request, response) { -1 5939 error.config = config; -1 5940 if (code) { -1 5941 error.code = code; 6041 5942 }6042 -1 } else {6043 -1 throw new Error('Unknown runOnly type \'' + only.type + '\'');-1 5943 error.request = request; -1 5944 error.response = response; -1 5945 return error; -1 5946 }; -1 5947 }, {} ], -1 5948 13: [ function(_dereq_, module, exports) { -1 5949 'use strict'; -1 5950 var createError = _dereq_('./createError'); -1 5951 module.exports = function settle(resolve, reject, response) { -1 5952 var validateStatus = response.config.validateStatus; -1 5953 if (!response.status || !validateStatus || validateStatus(response.status)) { -1 5954 resolve(response); -1 5955 } else { -1 5956 reject(createError('Request failed with status code ' + response.status, response.config, null, response.request, response)); -1 5957 } -1 5958 }; -1 5959 }, { -1 5960 './createError': 10 -1 5961 } ], -1 5962 14: [ function(_dereq_, module, exports) { -1 5963 'use strict'; -1 5964 var utils = _dereq_('./../utils'); -1 5965 module.exports = function transformData(data, headers, fns) { -1 5966 utils.forEach(fns, function transform(fn) { -1 5967 data = fn(data, headers); -1 5968 }); -1 5969 return data; -1 5970 }; -1 5971 }, { -1 5972 './../utils': 26 -1 5973 } ], -1 5974 15: [ function(_dereq_, module, exports) { -1 5975 (function(process) { -1 5976 'use strict'; -1 5977 var utils = _dereq_('./utils'); -1 5978 var normalizeHeaderName = _dereq_('./helpers/normalizeHeaderName'); -1 5979 var DEFAULT_CONTENT_TYPE = { -1 5980 'Content-Type': 'application/x-www-form-urlencoded' -1 5981 }; -1 5982 function setContentTypeIfUnset(headers, value) { -1 5983 if (!utils.isUndefined(headers) && utils.isUndefined(headers['Content-Type'])) { -1 5984 headers['Content-Type'] = value; -1 5985 } -1 5986 } -1 5987 function getDefaultAdapter() { -1 5988 var adapter; -1 5989 if (typeof XMLHttpRequest !== 'undefined') { -1 5990 adapter = _dereq_('./adapters/xhr'); -1 5991 } else if (typeof process !== 'undefined') { -1 5992 adapter = _dereq_('./adapters/http'); -1 5993 } -1 5994 return adapter; -1 5995 } -1 5996 var defaults = { -1 5997 adapter: getDefaultAdapter(), -1 5998 transformRequest: [ function transformRequest(data, headers) { -1 5999 normalizeHeaderName(headers, 'Content-Type'); -1 6000 if (utils.isFormData(data) || utils.isArrayBuffer(data) || utils.isBuffer(data) || utils.isStream(data) || utils.isFile(data) || utils.isBlob(data)) { -1 6001 return data; -1 6002 } -1 6003 if (utils.isArrayBufferView(data)) { -1 6004 return data.buffer; -1 6005 } -1 6006 if (utils.isURLSearchParams(data)) { -1 6007 setContentTypeIfUnset(headers, 'application/x-www-form-urlencoded;charset=utf-8'); -1 6008 return data.toString(); -1 6009 } -1 6010 if (utils.isObject(data)) { -1 6011 setContentTypeIfUnset(headers, 'application/json;charset=utf-8'); -1 6012 return JSON.stringify(data); -1 6013 } -1 6014 return data; -1 6015 } ], -1 6016 transformResponse: [ function transformResponse(data) { -1 6017 if (typeof data === 'string') { -1 6018 try { -1 6019 data = JSON.parse(data); -1 6020 } catch (e) {} -1 6021 } -1 6022 return data; -1 6023 } ], -1 6024 timeout: 0, -1 6025 xsrfCookieName: 'XSRF-TOKEN', -1 6026 xsrfHeaderName: 'X-XSRF-TOKEN', -1 6027 maxContentLength: -1, -1 6028 validateStatus: function validateStatus(status) { -1 6029 return status >= 200 && status < 300; -1 6030 } -1 6031 }; -1 6032 defaults.headers = { -1 6033 common: { -1 6034 Accept: 'application/json, text/plain, */*' -1 6035 } -1 6036 }; -1 6037 utils.forEach([ 'delete', 'get', 'head' ], function forEachMethodNoData(method) { -1 6038 defaults.headers[method] = {}; -1 6039 }); -1 6040 utils.forEach([ 'post', 'put', 'patch' ], function forEachMethodWithData(method) { -1 6041 defaults.headers[method] = utils.merge(DEFAULT_CONTENT_TYPE); -1 6042 }); -1 6043 module.exports = defaults; -1 6044 }).call(this, _dereq_('_process')); -1 6045 }, { -1 6046 './adapters/http': 3, -1 6047 './adapters/xhr': 3, -1 6048 './helpers/normalizeHeaderName': 23, -1 6049 './utils': 26, -1 6050 _process: 33 -1 6051 } ], -1 6052 16: [ function(_dereq_, module, exports) { -1 6053 'use strict'; -1 6054 module.exports = function bind(fn, thisArg) { -1 6055 return function wrap() { -1 6056 var args = new Array(arguments.length); -1 6057 for (var i = 0; i < args.length; i++) { -1 6058 args[i] = arguments[i]; -1 6059 } -1 6060 return fn.apply(thisArg, args); -1 6061 }; -1 6062 }; -1 6063 }, {} ], -1 6064 17: [ function(_dereq_, module, exports) { -1 6065 'use strict'; -1 6066 var chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/='; -1 6067 function E() { -1 6068 this.message = 'String contains an invalid character'; 6044 6069 }6045 -1 }6046 -1 if (_typeof(options.rules) === 'object') {6047 -1 Object.keys(options.rules).forEach(function(ruleId) {6048 -1 if (!audit.getRule(ruleId)) {6049 -1 throw new Error('unknown rule `' + ruleId + '` in options.rules');-1 6070 E.prototype = new Error(); -1 6071 E.prototype.code = 5; -1 6072 E.prototype.name = 'InvalidCharacterError'; -1 6073 function btoa(input) { -1 6074 var str = String(input); -1 6075 var output = ''; -1 6076 for (var block, charCode, idx = 0, map = chars; str.charAt(idx | 0) || (map = '=', -1 6077 idx % 1); output += map.charAt(63 & block >> 8 - idx % 1 * 8)) { -1 6078 charCode = str.charCodeAt(idx += 3 / 4); -1 6079 if (charCode > 255) { -1 6080 throw new E(); -1 6081 } -1 6082 block = block << 8 | charCode; 6050 6083 }6051 -1 });6052 -1 }6053 -1 return options;6054 -1 };6055 -1 Audit.prototype.setBranding = function(branding) {6056 -1 'use strict';6057 -1 var previous = {6058 -1 brand: this.brand,6059 -1 application: this.application6060 -1 };6061 -1 if (branding && branding.hasOwnProperty('brand') && branding.brand && typeof branding.brand === 'string') {6062 -1 this.brand = branding.brand;6063 -1 }6064 -1 if (branding && branding.hasOwnProperty('application') && branding.application && typeof branding.application === 'string') {6065 -1 this.application = branding.application;6066 -1 }6067 -1 this._constructHelpUrls(previous);6068 -1 };6069 -1 function getHelpUrl(_ref, ruleId, version) {6070 -1 var brand = _ref.brand, application = _ref.application;6071 -1 return axe.constants.helpUrlBase + brand + '/' + (version || axe.version.substring(0, axe.version.lastIndexOf('.'))) + '/' + ruleId + '?application=' + application;6072 -1 }6073 -1 Audit.prototype._constructHelpUrls = function() {6074 -1 var _this = this;6075 -1 var previous = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null;6076 -1 var version = (axe.version.match(/^[1-9][0-9]*\.[0-9]+/) || [ 'x.y' ])[0];6077 -1 this.rules.forEach(function(rule) {6078 -1 if (!_this.data.rules[rule.id]) {6079 -1 _this.data.rules[rule.id] = {};-1 6084 return output; 6080 6085 }6081 -1 var metaData = _this.data.rules[rule.id];6082 -1 if (typeof metaData.helpUrl !== 'string' || previous && metaData.helpUrl === getHelpUrl(previous, rule.id, version)) {6083 -1 metaData.helpUrl = getHelpUrl(_this, rule.id, version);-1 6086 module.exports = btoa; -1 6087 }, {} ], -1 6088 18: [ function(_dereq_, module, exports) { -1 6089 'use strict'; -1 6090 var utils = _dereq_('./../utils'); -1 6091 function encode(val) { -1 6092 return encodeURIComponent(val).replace(/%40/gi, '@').replace(/%3A/gi, ':').replace(/%24/g, '$').replace(/%2C/gi, ',').replace(/%20/g, '+').replace(/%5B/gi, '[').replace(/%5D/gi, ']'); 6084 6093 }6085 -1 });6086 -1 };6087 -1 Audit.prototype.resetRulesAndChecks = function() {6088 -1 'use strict';6089 -1 this._init();6090 -1 this._resetLocale();6091 -1 };6092 -1 'use strict';6093 -1 function CheckResult(check) {6094 -1 'use strict';6095 -1 this.id = check.id;6096 -1 this.data = null;6097 -1 this.relatedNodes = [];6098 -1 this.result = null;6099 -1 }6100 -1 'use strict';6101 -1 function createExecutionContext(spec) {6102 -1 'use strict';6103 -1 if (typeof spec === 'string') {6104 -1 return new Function('return ' + spec + ';')();6105 -1 }6106 -1 return spec;6107 -1 }6108 -1 function Check(spec) {6109 -1 if (spec) {6110 -1 this.id = spec.id;6111 -1 this.configure(spec);6112 -1 }6113 -1 }6114 -1 Check.prototype.enabled = true;6115 -1 Check.prototype.run = function(node, options, context, resolve, reject) {6116 -1 'use strict';6117 -1 options = options || {};6118 -1 var enabled = options.hasOwnProperty('enabled') ? options.enabled : this.enabled, checkOptions = options.options || this.options;6119 -1 if (enabled) {6120 -1 var checkResult = new CheckResult(this);6121 -1 var checkHelper = axe.utils.checkHelper(checkResult, options, resolve, reject);6122 -1 var result;6123 -1 try {6124 -1 result = this.evaluate.call(checkHelper, node.actualNode, checkOptions, node, context);6125 -1 } catch (e) {6126 -1 reject(e);6127 -1 return;6128 -1 }6129 -1 if (!checkHelper.isAsync) {6130 -1 checkResult.result = result;6131 -1 setTimeout(function() {6132 -1 resolve(checkResult);6133 -1 }, 0);6134 -1 }6135 -1 } else {6136 -1 resolve(null);6137 -1 }6138 -1 };6139 -1 Check.prototype.configure = function(spec) {6140 -1 var _this = this;6141 -1 [ 'options', 'enabled' ].filter(function(prop) {6142 -1 return spec.hasOwnProperty(prop);6143 -1 }).forEach(function(prop) {6144 -1 return _this[prop] = spec[prop];6145 -1 });6146 -1 [ 'evaluate', 'after' ].filter(function(prop) {6147 -1 return spec.hasOwnProperty(prop);6148 -1 }).forEach(function(prop) {6149 -1 return _this[prop] = createExecutionContext(spec[prop]);6150 -1 });6151 -1 };6152 -1 'use strict';6153 -1 var _typeof = typeof Symbol === 'function' && typeof Symbol.iterator === 'symbol' ? function(obj) {6154 -1 return typeof obj;6155 -1 } : function(obj) {6156 -1 return obj && typeof Symbol === 'function' && obj.constructor === Symbol && obj !== Symbol.prototype ? 'symbol' : typeof obj;6157 -1 };6158 -1 function pushUniqueFrame(collection, frame) {6159 -1 'use strict';6160 -1 if (axe.utils.isHidden(frame)) {6161 -1 return;6162 -1 }6163 -1 var fr = axe.utils.findBy(collection, 'node', frame);6164 -1 if (!fr) {6165 -1 collection.push({6166 -1 node: frame,6167 -1 include: [],6168 -1 exclude: []6169 -1 });6170 -1 }6171 -1 }6172 -1 function pushUniqueFrameSelector(context, type, selectorArray) {6173 -1 'use strict';6174 -1 context.frames = context.frames || [];6175 -1 var result, frame;6176 -1 var frames = document.querySelectorAll(selectorArray.shift());6177 -1 frameloop: for (var i = 0, l = frames.length; i < l; i++) {6178 -1 frame = frames[i];6179 -1 for (var j = 0, l2 = context.frames.length; j < l2; j++) {6180 -1 if (context.frames[j].node === frame) {6181 -1 context.frames[j][type].push(selectorArray);6182 -1 break frameloop;-1 6094 module.exports = function buildURL(url, params, paramsSerializer) { -1 6095 if (!params) { -1 6096 return url; 6183 6097 }6184 -1 }6185 -1 result = {6186 -1 node: frame,6187 -1 include: [],6188 -1 exclude: []-1 6098 var serializedParams; -1 6099 if (paramsSerializer) { -1 6100 serializedParams = paramsSerializer(params); -1 6101 } else if (utils.isURLSearchParams(params)) { -1 6102 serializedParams = params.toString(); -1 6103 } else { -1 6104 var parts = []; -1 6105 utils.forEach(params, function serialize(val, key) { -1 6106 if (val === null || typeof val === 'undefined') { -1 6107 return; -1 6108 } -1 6109 if (utils.isArray(val)) { -1 6110 key = key + '[]'; -1 6111 } else { -1 6112 val = [ val ]; -1 6113 } -1 6114 utils.forEach(val, function parseValue(v) { -1 6115 if (utils.isDate(v)) { -1 6116 v = v.toISOString(); -1 6117 } else if (utils.isObject(v)) { -1 6118 v = JSON.stringify(v); -1 6119 } -1 6120 parts.push(encode(key) + '=' + encode(v)); -1 6121 }); -1 6122 }); -1 6123 serializedParams = parts.join('&'); -1 6124 } -1 6125 if (serializedParams) { -1 6126 url += (url.indexOf('?') === -1 ? '?' : '&') + serializedParams; -1 6127 } -1 6128 return url; 6189 6129 };6190 -1 if (selectorArray) {6191 -1 result[type].push(selectorArray);6192 -1 }6193 -1 context.frames.push(result);6194 -1 }6195 -1 }6196 -1 function normalizeContext(context) {6197 -1 'use strict';6198 -1 if (context && (typeof context === 'undefined' ? 'undefined' : _typeof(context)) === 'object' || context instanceof NodeList) {6199 -1 if (context instanceof Node) {6200 -1 return {6201 -1 include: [ context ],6202 -1 exclude: []6203 -1 };6204 -1 }6205 -1 if (context.hasOwnProperty('include') || context.hasOwnProperty('exclude')) {-1 6130 }, { -1 6131 './../utils': 26 -1 6132 } ], -1 6133 19: [ function(_dereq_, module, exports) { -1 6134 'use strict'; -1 6135 module.exports = function combineURLs(baseURL, relativeURL) { -1 6136 return relativeURL ? baseURL.replace(/\/+$/, '') + '/' + relativeURL.replace(/^\/+/, '') : baseURL; -1 6137 }; -1 6138 }, {} ], -1 6139 20: [ function(_dereq_, module, exports) { -1 6140 'use strict'; -1 6141 var utils = _dereq_('./../utils'); -1 6142 module.exports = utils.isStandardBrowserEnv() ? function standardBrowserEnv() { 6206 6143 return {6207 -1 include: context.include && +context.include.length ? context.include : [ document ],6208 -1 exclude: context.exclude || []-1 6144 write: function write(name, value, expires, path, domain, secure) { -1 6145 var cookie = []; -1 6146 cookie.push(name + '=' + encodeURIComponent(value)); -1 6147 if (utils.isNumber(expires)) { -1 6148 cookie.push('expires=' + new Date(expires).toGMTString()); -1 6149 } -1 6150 if (utils.isString(path)) { -1 6151 cookie.push('path=' + path); -1 6152 } -1 6153 if (utils.isString(domain)) { -1 6154 cookie.push('domain=' + domain); -1 6155 } -1 6156 if (secure === true) { -1 6157 cookie.push('secure'); -1 6158 } -1 6159 document.cookie = cookie.join('; '); -1 6160 }, -1 6161 read: function read(name) { -1 6162 var match = document.cookie.match(new RegExp('(^|;\\s*)(' + name + ')=([^;]*)')); -1 6163 return match ? decodeURIComponent(match[3]) : null; -1 6164 }, -1 6165 remove: function remove(name) { -1 6166 this.write(name, '', Date.now() - 864e5); -1 6167 } 6209 6168 };6210 -1 }6211 -1 if (context.length === +context.length) {-1 6169 }() : function nonStandardBrowserEnv() { 6212 6170 return {6213 -1 include: context,6214 -1 exclude: []-1 6171 write: function write() {}, -1 6172 read: function read() { -1 6173 return null; -1 6174 }, -1 6175 remove: function remove() {} 6215 6176 };6216 -1 }6217 -1 }6218 -1 if (typeof context === 'string') {6219 -1 return {6220 -1 include: [ context ],6221 -1 exclude: []-1 6177 }(); -1 6178 }, { -1 6179 './../utils': 26 -1 6180 } ], -1 6181 21: [ function(_dereq_, module, exports) { -1 6182 'use strict'; -1 6183 module.exports = function isAbsoluteURL(url) { -1 6184 return /^([a-z][a-z\d\+\-\.]*:)?\/\//i.test(url); 6222 6185 };6223 -1 }6224 -1 return {6225 -1 include: [ document ],6226 -1 exclude: []6227 -1 };6228 -1 }6229 -1 function parseSelectorArray(context, type) {6230 -1 'use strict';6231 -1 var item, result = [], nodeList;6232 -1 for (var i = 0, l = context[type].length; i < l; i++) {6233 -1 item = context[type][i];6234 -1 if (typeof item === 'string') {6235 -1 nodeList = Array.from(document.querySelectorAll(item));6236 -1 result = result.concat(nodeList.map(function(node) {6237 -1 return axe.utils.getNodeFromTree(context.flatTree[0], node);6238 -1 }));6239 -1 break;6240 -1 } else if (item && item.length && !(item instanceof Node)) {6241 -1 if (item.length > 1) {6242 -1 pushUniqueFrameSelector(context, type, item);6243 -1 } else {6244 -1 nodeList = Array.from(document.querySelectorAll(item[0]));6245 -1 result = result.concat(nodeList.map(function(node) {6246 -1 return axe.utils.getNodeFromTree(context.flatTree[0], node);6247 -1 }));-1 6186 }, {} ], -1 6187 22: [ function(_dereq_, module, exports) { -1 6188 'use strict'; -1 6189 var utils = _dereq_('./../utils'); -1 6190 module.exports = utils.isStandardBrowserEnv() ? function standardBrowserEnv() { -1 6191 var msie = /(msie|trident)/i.test(navigator.userAgent); -1 6192 var urlParsingNode = document.createElement('a'); -1 6193 var originURL; -1 6194 function resolveURL(url) { -1 6195 var href = url; -1 6196 if (msie) { -1 6197 urlParsingNode.setAttribute('href', href); -1 6198 href = urlParsingNode.href; -1 6199 } -1 6200 urlParsingNode.setAttribute('href', href); -1 6201 return { -1 6202 href: urlParsingNode.href, -1 6203 protocol: urlParsingNode.protocol ? urlParsingNode.protocol.replace(/:$/, '') : '', -1 6204 host: urlParsingNode.host, -1 6205 search: urlParsingNode.search ? urlParsingNode.search.replace(/^\?/, '') : '', -1 6206 hash: urlParsingNode.hash ? urlParsingNode.hash.replace(/^#/, '') : '', -1 6207 hostname: urlParsingNode.hostname, -1 6208 port: urlParsingNode.port, -1 6209 pathname: urlParsingNode.pathname.charAt(0) === '/' ? urlParsingNode.pathname : '/' + urlParsingNode.pathname -1 6210 }; 6248 6211 }6249 -1 } else if (item instanceof Node) {6250 -1 if (item.documentElement instanceof Node) {6251 -1 result.push(context.flatTree[0]);-1 6212 originURL = resolveURL(window.location.href); -1 6213 return function isURLSameOrigin(requestURL) { -1 6214 var parsed = utils.isString(requestURL) ? resolveURL(requestURL) : requestURL; -1 6215 return parsed.protocol === originURL.protocol && parsed.host === originURL.host; -1 6216 }; -1 6217 }() : function nonStandardBrowserEnv() { -1 6218 return function isURLSameOrigin() { -1 6219 return true; -1 6220 }; -1 6221 }(); -1 6222 }, { -1 6223 './../utils': 26 -1 6224 } ], -1 6225 23: [ function(_dereq_, module, exports) { -1 6226 'use strict'; -1 6227 var utils = _dereq_('../utils'); -1 6228 module.exports = function normalizeHeaderName(headers, normalizedName) { -1 6229 utils.forEach(headers, function processHeader(value, name) { -1 6230 if (name !== normalizedName && name.toUpperCase() === normalizedName.toUpperCase()) { -1 6231 headers[normalizedName] = value; -1 6232 delete headers[name]; -1 6233 } -1 6234 }); -1 6235 }; -1 6236 }, { -1 6237 '../utils': 26 -1 6238 } ], -1 6239 24: [ function(_dereq_, module, exports) { -1 6240 'use strict'; -1 6241 var utils = _dereq_('./../utils'); -1 6242 var ignoreDuplicateOf = [ 'age', 'authorization', 'content-length', 'content-type', 'etag', 'expires', 'from', 'host', 'if-modified-since', 'if-unmodified-since', 'last-modified', 'location', 'max-forwards', 'proxy-authorization', 'referer', 'retry-after', 'user-agent' ]; -1 6243 module.exports = function parseHeaders(headers) { -1 6244 var parsed = {}; -1 6245 var key; -1 6246 var val; -1 6247 var i; -1 6248 if (!headers) { -1 6249 return parsed; -1 6250 } -1 6251 utils.forEach(headers.split('\n'), function parser(line) { -1 6252 i = line.indexOf(':'); -1 6253 key = utils.trim(line.substr(0, i)).toLowerCase(); -1 6254 val = utils.trim(line.substr(i + 1)); -1 6255 if (key) { -1 6256 if (parsed[key] && ignoreDuplicateOf.indexOf(key) >= 0) { -1 6257 return; -1 6258 } -1 6259 if (key === 'set-cookie') { -1 6260 parsed[key] = (parsed[key] ? parsed[key] : []).concat([ val ]); -1 6261 } else { -1 6262 parsed[key] = parsed[key] ? parsed[key] + ', ' + val : val; -1 6263 } -1 6264 } -1 6265 }); -1 6266 return parsed; -1 6267 }; -1 6268 }, { -1 6269 './../utils': 26 -1 6270 } ], -1 6271 25: [ function(_dereq_, module, exports) { -1 6272 'use strict'; -1 6273 module.exports = function spread(callback) { -1 6274 return function wrap(arr) { -1 6275 return callback.apply(null, arr); -1 6276 }; -1 6277 }; -1 6278 }, {} ], -1 6279 26: [ function(_dereq_, module, exports) { -1 6280 'use strict'; -1 6281 var bind = _dereq_('./helpers/bind'); -1 6282 var isBuffer = _dereq_('is-buffer'); -1 6283 var toString = Object.prototype.toString; -1 6284 function isArray(val) { -1 6285 return toString.call(val) === '[object Array]'; -1 6286 } -1 6287 function isArrayBuffer(val) { -1 6288 return toString.call(val) === '[object ArrayBuffer]'; -1 6289 } -1 6290 function isFormData(val) { -1 6291 return typeof FormData !== 'undefined' && val instanceof FormData; -1 6292 } -1 6293 function isArrayBufferView(val) { -1 6294 var result; -1 6295 if (typeof ArrayBuffer !== 'undefined' && ArrayBuffer.isView) { -1 6296 result = ArrayBuffer.isView(val); 6252 6297 } else {6253 -1 result.push(axe.utils.getNodeFromTree(context.flatTree[0], item));-1 6298 result = val && val.buffer && val.buffer instanceof ArrayBuffer; 6254 6299 } -1 6300 return result; 6255 6301 }6256 -1 }6257 -1 return result.filter(function(r) {6258 -1 return r;6259 -1 });6260 -1 }6261 -1 function validateContext(context) {6262 -1 'use strict';6263 -1 if (context.include.length === 0) {6264 -1 if (context.frames.length === 0) {6265 -1 var env = axe.utils.respondable.isInFrame() ? 'frame' : 'page';6266 -1 return new Error('No elements found for include in ' + env + ' Context');-1 6302 function isString(val) { -1 6303 return typeof val === 'string'; 6267 6304 }6268 -1 context.frames.forEach(function(frame, i) {6269 -1 if (frame.include.length === 0) {6270 -1 return new Error('No elements found for include in Context of frame ' + i);-1 6305 function isNumber(val) { -1 6306 return typeof val === 'number'; -1 6307 } -1 6308 function isUndefined(val) { -1 6309 return typeof val === 'undefined'; -1 6310 } -1 6311 function isObject(val) { -1 6312 return val !== null && typeof val === 'object'; -1 6313 } -1 6314 function isDate(val) { -1 6315 return toString.call(val) === '[object Date]'; -1 6316 } -1 6317 function isFile(val) { -1 6318 return toString.call(val) === '[object File]'; -1 6319 } -1 6320 function isBlob(val) { -1 6321 return toString.call(val) === '[object Blob]'; -1 6322 } -1 6323 function isFunction(val) { -1 6324 return toString.call(val) === '[object Function]'; -1 6325 } -1 6326 function isStream(val) { -1 6327 return isObject(val) && isFunction(val.pipe); -1 6328 } -1 6329 function isURLSearchParams(val) { -1 6330 return typeof URLSearchParams !== 'undefined' && val instanceof URLSearchParams; -1 6331 } -1 6332 function trim(str) { -1 6333 return str.replace(/^\s*/, '').replace(/\s*$/, ''); -1 6334 } -1 6335 function isStandardBrowserEnv() { -1 6336 if (typeof navigator !== 'undefined' && navigator.product === 'ReactNative') { -1 6337 return false; -1 6338 } -1 6339 return typeof window !== 'undefined' && typeof document !== 'undefined'; -1 6340 } -1 6341 function forEach(obj, fn) { -1 6342 if (obj === null || typeof obj === 'undefined') { -1 6343 return; -1 6344 } -1 6345 if (typeof obj !== 'object') { -1 6346 obj = [ obj ]; -1 6347 } -1 6348 if (isArray(obj)) { -1 6349 for (var i = 0, l = obj.length; i < l; i++) { -1 6350 fn.call(null, obj[i], i, obj); -1 6351 } -1 6352 } else { -1 6353 for (var key in obj) { -1 6354 if (Object.prototype.hasOwnProperty.call(obj, key)) { -1 6355 fn.call(null, obj[key], key, obj); -1 6356 } -1 6357 } -1 6358 } -1 6359 } -1 6360 function merge() { -1 6361 var result = {}; -1 6362 function assignValue(val, key) { -1 6363 if (typeof result[key] === 'object' && typeof val === 'object') { -1 6364 result[key] = merge(result[key], val); -1 6365 } else { -1 6366 result[key] = val; -1 6367 } -1 6368 } -1 6369 for (var i = 0, l = arguments.length; i < l; i++) { -1 6370 forEach(arguments[i], assignValue); 6271 6371 }6272 -1 });6273 -1 }6274 -1 }6275 -1 function getRootNode(_ref) {6276 -1 var include = _ref.include, exclude = _ref.exclude;6277 -1 var selectors = Array.from(include).concat(Array.from(exclude));6278 -1 var localDocument = selectors.reduce(function(result, item) {6279 -1 if (result) {6280 6372 return result;6281 -1 } else if (item instanceof Element) {6282 -1 return item.ownerDocument;6283 -1 } else if (item instanceof Document) {6284 -1 return item;6285 6373 }6286 -1 }, null);6287 -1 return (localDocument || document).documentElement;6288 -1 }6289 -1 function Context(spec) {6290 -1 'use strict';6291 -1 var _this = this;6292 -1 this.frames = [];6293 -1 this.initiator = spec && typeof spec.initiator === 'boolean' ? spec.initiator : true;6294 -1 this.page = false;6295 -1 spec = normalizeContext(spec);6296 -1 this.flatTree = axe.utils.getFlattenedTree(getRootNode(spec));6297 -1 this.exclude = spec.exclude;6298 -1 this.include = spec.include;6299 -1 this.include = parseSelectorArray(this, 'include');6300 -1 this.exclude = parseSelectorArray(this, 'exclude');6301 -1 axe.utils.select('frame, iframe', this).forEach(function(frame) {6302 -1 if (isNodeInContext(frame, _this)) {6303 -1 pushUniqueFrame(_this.frames, frame.actualNode);-1 6374 function extend(a, b, thisArg) { -1 6375 forEach(b, function assignValue(val, key) { -1 6376 if (thisArg && typeof val === 'function') { -1 6377 a[key] = bind(val, thisArg); -1 6378 } else { -1 6379 a[key] = val; -1 6380 } -1 6381 }); -1 6382 return a; 6304 6383 }6305 -1 });6306 -1 if (this.include.length === 1 && this.include[0].actualNode === document.documentElement) {6307 -1 this.page = true;6308 -1 }6309 -1 var err = validateContext(this);6310 -1 if (err instanceof Error) {6311 -1 throw err;6312 -1 }6313 -1 if (!Array.isArray(this.include)) {6314 -1 this.include = Array.from(this.include);6315 -1 }6316 -1 this.include.sort(axe.utils.nodeSorter);6317 -1 }6318 -1 'use strict';6319 -1 function RuleResult(rule) {6320 -1 'use strict';6321 -1 this.id = rule.id;6322 -1 this.result = axe.constants.NA;6323 -1 this.pageLevel = rule.pageLevel;6324 -1 this.impact = null;6325 -1 this.nodes = [];6326 -1 }6327 -1 'use strict';6328 -1 function Rule(spec, parentAudit) {6329 -1 'use strict';6330 -1 this._audit = parentAudit;6331 -1 this.id = spec.id;6332 -1 this.selector = spec.selector || '*';6333 -1 this.excludeHidden = typeof spec.excludeHidden === 'boolean' ? spec.excludeHidden : true;6334 -1 this.enabled = typeof spec.enabled === 'boolean' ? spec.enabled : true;6335 -1 this.pageLevel = typeof spec.pageLevel === 'boolean' ? spec.pageLevel : false;6336 -1 this.any = spec.any || [];6337 -1 this.all = spec.all || [];6338 -1 this.none = spec.none || [];6339 -1 this.tags = spec.tags || [];6340 -1 this.preload = spec.preload ? true : false;6341 -1 if (spec.matches) {6342 -1 this.matches = createExecutionContext(spec.matches);6343 -1 }6344 -1 }6345 -1 Rule.prototype.matches = function() {6346 -1 'use strict';6347 -1 return true;6348 -1 };6349 -1 Rule.prototype.gather = function(context) {6350 -1 'use strict';6351 -1 var elements = axe.utils.select(this.selector, context);6352 -1 if (this.excludeHidden) {6353 -1 return elements.filter(function(element) {6354 -1 return !axe.utils.isHidden(element.actualNode);6355 -1 });6356 -1 }6357 -1 return elements;6358 -1 };6359 -1 Rule.prototype.runChecks = function(type, node, options, context, resolve, reject) {6360 -1 'use strict';6361 -1 var self = this;6362 -1 var checkQueue = axe.utils.queue();6363 -1 this[type].forEach(function(c) {6364 -1 var check = self._audit.checks[c.id || c];6365 -1 var option = axe.utils.getCheckOption(check, self.id, options);6366 -1 checkQueue.defer(function(res, rej) {6367 -1 check.run(node, option, context, res, rej);6368 -1 });6369 -1 });6370 -1 checkQueue.then(function(results) {6371 -1 results = results.filter(function(check) {6372 -1 return check;6373 -1 });6374 -1 resolve({6375 -1 type: type,6376 -1 results: results6377 -1 });6378 -1 }).catch(reject);6379 -1 };6380 -1 Rule.prototype.run = function(context, options, resolve, reject) {6381 -1 var _this = this;6382 -1 var q = axe.utils.queue();6383 -1 var ruleResult = new RuleResult(this);6384 -1 var markStart = 'mark_runchecks_start_' + this.id;6385 -1 var markEnd = 'mark_runchecks_end_' + this.id;6386 -1 var nodes = void 0;6387 -1 try {6388 -1 nodes = this.gather(context).filter(function(node) {6389 -1 return _this.matches(node.actualNode, node);6390 -1 });6391 -1 } catch (error) {6392 -1 reject(new SupportError({6393 -1 cause: error,6394 -1 ruleId: this.id6395 -1 }));6396 -1 return;6397 -1 }6398 -1 if (options.performanceTimer) {6399 -1 axe.log('gather (', nodes.length, '):', axe.utils.performanceTimer.timeElapsed() + 'ms');6400 -1 axe.utils.performanceTimer.mark(markStart);6401 -1 }6402 -1 nodes.forEach(function(node) {6403 -1 q.defer(function(resolveNode, rejectNode) {6404 -1 var checkQueue = axe.utils.queue();6405 -1 [ 'any', 'all', 'none' ].forEach(function(type) {6406 -1 checkQueue.defer(function(res, rej) {6407 -1 _this.runChecks(type, node, options, context, res, rej);6408 -1 });6409 -1 });6410 -1 checkQueue.then(function(results) {6411 -1 if (results.length) {6412 -1 var hasResults = false, result = {};6413 -1 results.forEach(function(r) {6414 -1 var res = r.results.filter(function(result) {6415 -1 return result;6416 -1 });6417 -1 result[r.type] = res;6418 -1 if (res.length) {6419 -1 hasResults = true;6420 -1 }6421 -1 });6422 -1 if (hasResults) {6423 -1 result.node = new axe.utils.DqElement(node.actualNode, options);6424 -1 ruleResult.nodes.push(result);6425 -1 }6426 -1 }6427 -1 resolveNode();6428 -1 }).catch(function(err) {6429 -1 return rejectNode(err);6430 -1 });6431 -1 });6432 -1 });6433 -1 if (options.performanceTimer) {6434 -1 axe.utils.performanceTimer.mark(markEnd);6435 -1 axe.utils.performanceTimer.measure('runchecks_' + this.id, markStart, markEnd);6436 -1 }6437 -1 q.then(function() {6438 -1 return resolve(ruleResult);6439 -1 }).catch(function(error) {6440 -1 return reject(error);6441 -1 });6442 -1 };6443 -1 function findAfterChecks(rule) {6444 -1 'use strict';6445 -1 return axe.utils.getAllChecks(rule).map(function(c) {6446 -1 var check = rule._audit.checks[c.id || c];6447 -1 return check && typeof check.after === 'function' ? check : null;6448 -1 }).filter(Boolean);6449 -1 }6450 -1 function findCheckResults(nodes, checkID) {6451 -1 'use strict';6452 -1 var checkResults = [];6453 -1 nodes.forEach(function(nodeResult) {6454 -1 var checks = axe.utils.getAllChecks(nodeResult);6455 -1 checks.forEach(function(checkResult) {6456 -1 if (checkResult.id === checkID) {6457 -1 checkResults.push(checkResult);-1 6384 module.exports = { -1 6385 isArray: isArray, -1 6386 isArrayBuffer: isArrayBuffer, -1 6387 isBuffer: isBuffer, -1 6388 isFormData: isFormData, -1 6389 isArrayBufferView: isArrayBufferView, -1 6390 isString: isString, -1 6391 isNumber: isNumber, -1 6392 isObject: isObject, -1 6393 isUndefined: isUndefined, -1 6394 isDate: isDate, -1 6395 isFile: isFile, -1 6396 isBlob: isBlob, -1 6397 isFunction: isFunction, -1 6398 isStream: isStream, -1 6399 isURLSearchParams: isURLSearchParams, -1 6400 isStandardBrowserEnv: isStandardBrowserEnv, -1 6401 forEach: forEach, -1 6402 merge: merge, -1 6403 extend: extend, -1 6404 trim: trim -1 6405 }; -1 6406 }, { -1 6407 './helpers/bind': 16, -1 6408 'is-buffer': 32 -1 6409 } ], -1 6410 27: [ function(_dereq_, module, exports) { -1 6411 module.exports = { -1 6412 CssSelectorParser: _dereq_('./lib/css-selector-parser.js').CssSelectorParser -1 6413 }; -1 6414 }, { -1 6415 './lib/css-selector-parser.js': 28 -1 6416 } ], -1 6417 28: [ function(_dereq_, module, exports) { -1 6418 function CssSelectorParser() { -1 6419 this.pseudos = {}; -1 6420 this.attrEqualityMods = {}; -1 6421 this.ruleNestingOperators = {}; -1 6422 this.substitutesEnabled = false; -1 6423 } -1 6424 CssSelectorParser.prototype.registerSelectorPseudos = function(name) { -1 6425 for (var j = 0, len = arguments.length; j < len; j++) { -1 6426 name = arguments[j]; -1 6427 this.pseudos[name] = 'selector'; -1 6428 } -1 6429 return this; -1 6430 }; -1 6431 CssSelectorParser.prototype.unregisterSelectorPseudos = function(name) { -1 6432 for (var j = 0, len = arguments.length; j < len; j++) { -1 6433 name = arguments[j]; -1 6434 delete this.pseudos[name]; 6458 6435 }6459 -1 });6460 -1 });6461 -1 return checkResults;6462 -1 }6463 -1 function filterChecks(checks) {6464 -1 'use strict';6465 -1 return checks.filter(function(check) {6466 -1 return check.filtered !== true;6467 -1 });6468 -1 }6469 -1 function sanitizeNodes(result) {6470 -1 'use strict';6471 -1 var checkTypes = [ 'any', 'all', 'none' ];6472 -1 var nodes = result.nodes.filter(function(detail) {6473 -1 var length = 0;6474 -1 checkTypes.forEach(function(type) {6475 -1 detail[type] = filterChecks(detail[type]);6476 -1 length += detail[type].length;6477 -1 });6478 -1 return length > 0;6479 -1 });6480 -1 if (result.pageLevel && nodes.length) {6481 -1 nodes = [ nodes.reduce(function(a, b) {6482 -1 if (a) {6483 -1 checkTypes.forEach(function(type) {6484 -1 a[type].push.apply(a[type], b[type]);6485 -1 });6486 -1 return a;-1 6436 return this; -1 6437 }; -1 6438 CssSelectorParser.prototype.registerNumericPseudos = function(name) { -1 6439 for (var j = 0, len = arguments.length; j < len; j++) { -1 6440 name = arguments[j]; -1 6441 this.pseudos[name] = 'numeric'; 6487 6442 }6488 -1 }) ];6489 -1 }6490 -1 return nodes;6491 -1 }6492 -1 Rule.prototype.after = function(result, options) {6493 -1 'use strict';6494 -1 var afterChecks = findAfterChecks(this);6495 -1 var ruleID = this.id;6496 -1 afterChecks.forEach(function(check) {6497 -1 var beforeResults = findCheckResults(result.nodes, check.id);6498 -1 var option = axe.utils.getCheckOption(check, ruleID, options);6499 -1 var afterResults = check.after(beforeResults, option);6500 -1 beforeResults.forEach(function(item) {6501 -1 if (afterResults.indexOf(item) === -1) {6502 -1 item.filtered = true;-1 6443 return this; -1 6444 }; -1 6445 CssSelectorParser.prototype.unregisterNumericPseudos = function(name) { -1 6446 for (var j = 0, len = arguments.length; j < len; j++) { -1 6447 name = arguments[j]; -1 6448 delete this.pseudos[name]; 6503 6449 }6504 -1 });6505 -1 });6506 -1 result.nodes = sanitizeNodes(result);6507 -1 return result;6508 -1 };6509 -1 Rule.prototype.configure = function(spec) {6510 -1 'use strict';6511 -1 if (spec.hasOwnProperty('selector')) {6512 -1 this.selector = spec.selector;6513 -1 }6514 -1 if (spec.hasOwnProperty('excludeHidden')) {6515 -1 this.excludeHidden = typeof spec.excludeHidden === 'boolean' ? spec.excludeHidden : true;6516 -1 }6517 -1 if (spec.hasOwnProperty('enabled')) {6518 -1 this.enabled = typeof spec.enabled === 'boolean' ? spec.enabled : true;6519 -1 }6520 -1 if (spec.hasOwnProperty('pageLevel')) {6521 -1 this.pageLevel = typeof spec.pageLevel === 'boolean' ? spec.pageLevel : false;6522 -1 }6523 -1 if (spec.hasOwnProperty('any')) {6524 -1 this.any = spec.any;6525 -1 }6526 -1 if (spec.hasOwnProperty('all')) {6527 -1 this.all = spec.all;6528 -1 }6529 -1 if (spec.hasOwnProperty('none')) {6530 -1 this.none = spec.none;6531 -1 }6532 -1 if (spec.hasOwnProperty('tags')) {6533 -1 this.tags = spec.tags;6534 -1 }6535 -1 if (spec.hasOwnProperty('matches')) {6536 -1 if (typeof spec.matches === 'string') {6537 -1 this.matches = new Function('return ' + spec.matches + ';')();6538 -1 } else {6539 -1 this.matches = spec.matches;6540 -1 }6541 -1 }6542 -1 };6543 -1 'use strict';6544 -1 (function(axe) {6545 -1 var definitions = [ {6546 -1 name: 'NA',6547 -1 value: 'inapplicable',6548 -1 priority: 0,6549 -1 group: 'inapplicable'6550 -1 }, {6551 -1 name: 'PASS',6552 -1 value: 'passed',6553 -1 priority: 1,6554 -1 group: 'passes'6555 -1 }, {6556 -1 name: 'CANTTELL',6557 -1 value: 'cantTell',6558 -1 priority: 2,6559 -1 group: 'incomplete'6560 -1 }, {6561 -1 name: 'FAIL',6562 -1 value: 'failed',6563 -1 priority: 3,6564 -1 group: 'violations'6565 -1 } ];6566 -1 var constants = {6567 -1 helpUrlBase: 'https://dequeuniversity.com/rules/',6568 -1 results: [],6569 -1 resultGroups: [],6570 -1 resultGroupMap: {},6571 -1 impact: Object.freeze([ 'minor', 'moderate', 'serious', 'critical' ]),6572 -1 preloadAssets: Object.freeze([ 'cssom' ]),6573 -1 preloadAssetsTimeout: 1e46574 -1 };6575 -1 definitions.forEach(function(definition) {6576 -1 var name = definition.name;6577 -1 var value = definition.value;6578 -1 var priority = definition.priority;6579 -1 var group = definition.group;6580 -1 constants[name] = value;6581 -1 constants[name + '_PRIO'] = priority;6582 -1 constants[name + '_GROUP'] = group;6583 -1 constants.results[priority] = value;6584 -1 constants.resultGroups[priority] = group;6585 -1 constants.resultGroupMap[value] = group;6586 -1 });6587 -1 Object.freeze(constants.results);6588 -1 Object.freeze(constants.resultGroups);6589 -1 Object.freeze(constants.resultGroupMap);6590 -1 Object.freeze(constants);6591 -1 Object.defineProperty(axe, 'constants', {6592 -1 value: constants,6593 -1 enumerable: true,6594 -1 configurable: false,6595 -1 writable: false6596 -1 });6597 -1 })(axe);6598 -1 'use strict';6599 -1 var _typeof = typeof Symbol === 'function' && typeof Symbol.iterator === 'symbol' ? function(obj) {6600 -1 return typeof obj;6601 -1 } : function(obj) {6602 -1 return obj && typeof Symbol === 'function' && obj.constructor === Symbol && obj !== Symbol.prototype ? 'symbol' : typeof obj;6603 -1 };6604 -1 axe.imports['axios'] = function() {6605 -1 return function(modules) {6606 -1 var installedModules = {};6607 -1 function __webpack_require__(moduleId) {6608 -1 if (installedModules[moduleId]) {6609 -1 return installedModules[moduleId].exports;6610 -1 }6611 -1 var module = installedModules[moduleId] = {6612 -1 exports: {},6613 -1 id: moduleId,6614 -1 loaded: false-1 6450 return this; -1 6451 }; -1 6452 CssSelectorParser.prototype.registerNestingOperators = function(operator) { -1 6453 for (var j = 0, len = arguments.length; j < len; j++) { -1 6454 operator = arguments[j]; -1 6455 this.ruleNestingOperators[operator] = true; -1 6456 } -1 6457 return this; -1 6458 }; -1 6459 CssSelectorParser.prototype.unregisterNestingOperators = function(operator) { -1 6460 for (var j = 0, len = arguments.length; j < len; j++) { -1 6461 operator = arguments[j]; -1 6462 delete this.ruleNestingOperators[operator]; -1 6463 } -1 6464 return this; -1 6465 }; -1 6466 CssSelectorParser.prototype.registerAttrEqualityMods = function(mod) { -1 6467 for (var j = 0, len = arguments.length; j < len; j++) { -1 6468 mod = arguments[j]; -1 6469 this.attrEqualityMods[mod] = true; -1 6470 } -1 6471 return this; -1 6472 }; -1 6473 CssSelectorParser.prototype.unregisterAttrEqualityMods = function(mod) { -1 6474 for (var j = 0, len = arguments.length; j < len; j++) { -1 6475 mod = arguments[j]; -1 6476 delete this.attrEqualityMods[mod]; -1 6477 } -1 6478 return this; -1 6479 }; -1 6480 CssSelectorParser.prototype.enableSubstitutes = function() { -1 6481 this.substitutesEnabled = true; -1 6482 return this; -1 6483 }; -1 6484 CssSelectorParser.prototype.disableSubstitutes = function() { -1 6485 this.substitutesEnabled = false; -1 6486 return this; -1 6487 }; -1 6488 function isIdentStart(c) { -1 6489 return c >= 'a' && c <= 'z' || c >= 'A' && c <= 'Z' || c === '-' || c === '_'; -1 6490 } -1 6491 function isIdent(c) { -1 6492 return c >= 'a' && c <= 'z' || c >= 'A' && c <= 'Z' || c >= '0' && c <= '9' || c === '-' || c === '_'; -1 6493 } -1 6494 function isHex(c) { -1 6495 return c >= 'a' && c <= 'f' || c >= 'A' && c <= 'F' || c >= '0' && c <= '9'; -1 6496 } -1 6497 function isDecimal(c) { -1 6498 return c >= '0' && c <= '9'; -1 6499 } -1 6500 function isAttrMatchOperator(chr) { -1 6501 return chr === '=' || chr === '^' || chr === '$' || chr === '*' || chr === '~'; -1 6502 } -1 6503 var identSpecialChars = { -1 6504 '!': true, -1 6505 '"': true, -1 6506 '#': true, -1 6507 $: true, -1 6508 '%': true, -1 6509 '&': true, -1 6510 '\'': true, -1 6511 '(': true, -1 6512 ')': true, -1 6513 '*': true, -1 6514 '+': true, -1 6515 ',': true, -1 6516 '.': true, -1 6517 '/': true, -1 6518 ';': true, -1 6519 '<': true, -1 6520 '=': true, -1 6521 '>': true, -1 6522 '?': true, -1 6523 '@': true, -1 6524 '[': true, -1 6525 '\\': true, -1 6526 ']': true, -1 6527 '^': true, -1 6528 '`': true, -1 6529 '{': true, -1 6530 '|': true, -1 6531 '}': true, -1 6532 '~': true -1 6533 }; -1 6534 var strReplacementsRev = { -1 6535 '\n': '\\n', -1 6536 '\r': '\\r', -1 6537 '\t': '\\t', -1 6538 '\f': '\\f', -1 6539 '\v': '\\v' -1 6540 }; -1 6541 var singleQuoteEscapeChars = { -1 6542 n: '\n', -1 6543 r: '\r', -1 6544 t: '\t', -1 6545 f: '\f', -1 6546 '\\': '\\', -1 6547 '\'': '\'' -1 6548 }; -1 6549 var doubleQuotesEscapeChars = { -1 6550 n: '\n', -1 6551 r: '\r', -1 6552 t: '\t', -1 6553 f: '\f', -1 6554 '\\': '\\', -1 6555 '"': '"' -1 6556 }; -1 6557 function ParseContext(str, pos, pseudos, attrEqualityMods, ruleNestingOperators, substitutesEnabled) { -1 6558 var chr, getIdent, getStr, l, skipWhitespace; -1 6559 l = str.length; -1 6560 chr = null; -1 6561 getStr = function(quote, escapeTable) { -1 6562 var esc, hex, result; -1 6563 result = ''; -1 6564 pos++; -1 6565 chr = str.charAt(pos); -1 6566 while (pos < l) { -1 6567 if (chr === quote) { -1 6568 pos++; -1 6569 return result; -1 6570 } else if (chr === '\\') { -1 6571 pos++; -1 6572 chr = str.charAt(pos); -1 6573 if (chr === quote) { -1 6574 result += quote; -1 6575 } else if (esc = escapeTable[chr]) { -1 6576 result += esc; -1 6577 } else if (isHex(chr)) { -1 6578 hex = chr; -1 6579 pos++; -1 6580 chr = str.charAt(pos); -1 6581 while (isHex(chr)) { -1 6582 hex += chr; -1 6583 pos++; -1 6584 chr = str.charAt(pos); -1 6585 } -1 6586 if (chr === ' ') { -1 6587 pos++; -1 6588 chr = str.charAt(pos); -1 6589 } -1 6590 result += String.fromCharCode(parseInt(hex, 16)); -1 6591 continue; -1 6592 } else { -1 6593 result += chr; -1 6594 } -1 6595 } else { -1 6596 result += chr; -1 6597 } -1 6598 pos++; -1 6599 chr = str.charAt(pos); -1 6600 } -1 6601 return result; 6615 6602 };6616 -1 modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);6617 -1 module.loaded = true;6618 -1 return module.exports;6619 -1 }6620 -1 __webpack_require__.m = modules;6621 -1 __webpack_require__.c = installedModules;6622 -1 __webpack_require__.p = '';6623 -1 return __webpack_require__(0);6624 -1 }([ function(module, exports, __webpack_require__) {6625 -1 module.exports = __webpack_require__(1);6626 -1 }, function(module, exports, __webpack_require__) {6627 -1 'use strict';6628 -1 var utils = __webpack_require__(2);6629 -1 var bind = __webpack_require__(3);6630 -1 var Axios = __webpack_require__(5);6631 -1 var defaults = __webpack_require__(6);6632 -1 function createInstance(defaultConfig) {6633 -1 var context = new Axios(defaultConfig);6634 -1 var instance = bind(Axios.prototype.request, context);6635 -1 utils.extend(instance, Axios.prototype, context);6636 -1 utils.extend(instance, context);6637 -1 return instance;-1 6603 getIdent = function() { -1 6604 var result = ''; -1 6605 chr = str.charAt(pos); -1 6606 while (pos < l) { -1 6607 if (isIdent(chr)) { -1 6608 result += chr; -1 6609 } else if (chr === '\\') { -1 6610 pos++; -1 6611 if (pos >= l) { -1 6612 throw Error('Expected symbol but end of file reached.'); -1 6613 } -1 6614 chr = str.charAt(pos); -1 6615 if (identSpecialChars[chr]) { -1 6616 result += chr; -1 6617 } else if (isHex(chr)) { -1 6618 var hex = chr; -1 6619 pos++; -1 6620 chr = str.charAt(pos); -1 6621 while (isHex(chr)) { -1 6622 hex += chr; -1 6623 pos++; -1 6624 chr = str.charAt(pos); -1 6625 } -1 6626 if (chr === ' ') { -1 6627 pos++; -1 6628 chr = str.charAt(pos); -1 6629 } -1 6630 result += String.fromCharCode(parseInt(hex, 16)); -1 6631 continue; -1 6632 } else { -1 6633 result += chr; -1 6634 } -1 6635 } else { -1 6636 return result; -1 6637 } -1 6638 pos++; -1 6639 chr = str.charAt(pos); -1 6640 } -1 6641 return result; -1 6642 }; -1 6643 skipWhitespace = function() { -1 6644 chr = str.charAt(pos); -1 6645 var result = false; -1 6646 while (chr === ' ' || chr === '\t' || chr === '\n' || chr === '\r' || chr === '\f') { -1 6647 result = true; -1 6648 pos++; -1 6649 chr = str.charAt(pos); -1 6650 } -1 6651 return result; -1 6652 }; -1 6653 this.parse = function() { -1 6654 var res = this.parseSelector(); -1 6655 if (pos < l) { -1 6656 throw Error('Rule expected but "' + str.charAt(pos) + '" found.'); -1 6657 } -1 6658 return res; -1 6659 }; -1 6660 this.parseSelector = function() { -1 6661 var res; -1 6662 var selector = res = this.parseSingleSelector(); -1 6663 chr = str.charAt(pos); -1 6664 while (chr === ',') { -1 6665 pos++; -1 6666 skipWhitespace(); -1 6667 if (res.type !== 'selectors') { -1 6668 res = { -1 6669 type: 'selectors', -1 6670 selectors: [ selector ] -1 6671 }; -1 6672 } -1 6673 selector = this.parseSingleSelector(); -1 6674 if (!selector) { -1 6675 throw Error('Rule expected after ",".'); -1 6676 } -1 6677 res.selectors.push(selector); -1 6678 } -1 6679 return res; -1 6680 }; -1 6681 this.parseSingleSelector = function() { -1 6682 skipWhitespace(); -1 6683 var selector = { -1 6684 type: 'ruleSet' -1 6685 }; -1 6686 var rule = this.parseRule(); -1 6687 if (!rule) { -1 6688 return null; -1 6689 } -1 6690 var currentRule = selector; -1 6691 while (rule) { -1 6692 rule.type = 'rule'; -1 6693 currentRule.rule = rule; -1 6694 currentRule = rule; -1 6695 skipWhitespace(); -1 6696 chr = str.charAt(pos); -1 6697 if (pos >= l || chr === ',' || chr === ')') { -1 6698 break; -1 6699 } -1 6700 if (ruleNestingOperators[chr]) { -1 6701 var op = chr; -1 6702 pos++; -1 6703 skipWhitespace(); -1 6704 rule = this.parseRule(); -1 6705 if (!rule) { -1 6706 throw Error('Rule expected after "' + op + '".'); -1 6707 } -1 6708 rule.nestingOperator = op; -1 6709 } else { -1 6710 rule = this.parseRule(); -1 6711 if (rule) { -1 6712 rule.nestingOperator = null; -1 6713 } -1 6714 } -1 6715 } -1 6716 return selector; -1 6717 }; -1 6718 this.parseRule = function() { -1 6719 var rule = null; -1 6720 while (pos < l) { -1 6721 chr = str.charAt(pos); -1 6722 if (chr === '*') { -1 6723 pos++; -1 6724 (rule = rule || {}).tagName = '*'; -1 6725 } else if (isIdentStart(chr) || chr === '\\') { -1 6726 (rule = rule || {}).tagName = getIdent(); -1 6727 } else if (chr === '.') { -1 6728 pos++; -1 6729 rule = rule || {}; -1 6730 (rule.classNames = rule.classNames || []).push(getIdent()); -1 6731 } else if (chr === '#') { -1 6732 pos++; -1 6733 (rule = rule || {}).id = getIdent(); -1 6734 } else if (chr === '[') { -1 6735 pos++; -1 6736 skipWhitespace(); -1 6737 var attr = { -1 6738 name: getIdent() -1 6739 }; -1 6740 skipWhitespace(); -1 6741 if (chr === ']') { -1 6742 pos++; -1 6743 } else { -1 6744 var operator = ''; -1 6745 if (attrEqualityMods[chr]) { -1 6746 operator = chr; -1 6747 pos++; -1 6748 chr = str.charAt(pos); -1 6749 } -1 6750 if (pos >= l) { -1 6751 throw Error('Expected "=" but end of file reached.'); -1 6752 } -1 6753 if (chr !== '=') { -1 6754 throw Error('Expected "=" but "' + chr + '" found.'); -1 6755 } -1 6756 attr.operator = operator + '='; -1 6757 pos++; -1 6758 skipWhitespace(); -1 6759 var attrValue = ''; -1 6760 attr.valueType = 'string'; -1 6761 if (chr === '"') { -1 6762 attrValue = getStr('"', doubleQuotesEscapeChars); -1 6763 } else if (chr === '\'') { -1 6764 attrValue = getStr('\'', singleQuoteEscapeChars); -1 6765 } else if (substitutesEnabled && chr === '$') { -1 6766 pos++; -1 6767 attrValue = getIdent(); -1 6768 attr.valueType = 'substitute'; -1 6769 } else { -1 6770 while (pos < l) { -1 6771 if (chr === ']') { -1 6772 break; -1 6773 } -1 6774 attrValue += chr; -1 6775 pos++; -1 6776 chr = str.charAt(pos); -1 6777 } -1 6778 attrValue = attrValue.trim(); -1 6779 } -1 6780 skipWhitespace(); -1 6781 if (pos >= l) { -1 6782 throw Error('Expected "]" but end of file reached.'); -1 6783 } -1 6784 if (chr !== ']') { -1 6785 throw Error('Expected "]" but "' + chr + '" found.'); -1 6786 } -1 6787 pos++; -1 6788 attr.value = attrValue; -1 6789 } -1 6790 rule = rule || {}; -1 6791 (rule.attrs = rule.attrs || []).push(attr); -1 6792 } else if (chr === ':') { -1 6793 pos++; -1 6794 var pseudoName = getIdent(); -1 6795 var pseudo = { -1 6796 name: pseudoName -1 6797 }; -1 6798 if (chr === '(') { -1 6799 pos++; -1 6800 var value = ''; -1 6801 skipWhitespace(); -1 6802 if (pseudos[pseudoName] === 'selector') { -1 6803 pseudo.valueType = 'selector'; -1 6804 value = this.parseSelector(); -1 6805 } else { -1 6806 pseudo.valueType = pseudos[pseudoName] || 'string'; -1 6807 if (chr === '"') { -1 6808 value = getStr('"', doubleQuotesEscapeChars); -1 6809 } else if (chr === '\'') { -1 6810 value = getStr('\'', singleQuoteEscapeChars); -1 6811 } else if (substitutesEnabled && chr === '$') { -1 6812 pos++; -1 6813 value = getIdent(); -1 6814 pseudo.valueType = 'substitute'; -1 6815 } else { -1 6816 while (pos < l) { -1 6817 if (chr === ')') { -1 6818 break; -1 6819 } -1 6820 value += chr; -1 6821 pos++; -1 6822 chr = str.charAt(pos); -1 6823 } -1 6824 value = value.trim(); -1 6825 } -1 6826 skipWhitespace(); -1 6827 } -1 6828 if (pos >= l) { -1 6829 throw Error('Expected ")" but end of file reached.'); -1 6830 } -1 6831 if (chr !== ')') { -1 6832 throw Error('Expected ")" but "' + chr + '" found.'); -1 6833 } -1 6834 pos++; -1 6835 pseudo.value = value; -1 6836 } -1 6837 rule = rule || {}; -1 6838 (rule.pseudos = rule.pseudos || []).push(pseudo); -1 6839 } else { -1 6840 break; -1 6841 } -1 6842 } -1 6843 return rule; -1 6844 }; -1 6845 return this; 6638 6846 }6639 -1 var axios = createInstance(defaults);6640 -1 axios.Axios = Axios;6641 -1 axios.create = function create(instanceConfig) {6642 -1 return createInstance(utils.merge(defaults, instanceConfig));6643 -1 };6644 -1 axios.Cancel = __webpack_require__(23);6645 -1 axios.CancelToken = __webpack_require__(24);6646 -1 axios.isCancel = __webpack_require__(20);6647 -1 axios.all = function all(promises) {6648 -1 return Promise.all(promises);-1 6847 CssSelectorParser.prototype.parse = function(str) { -1 6848 var context = new ParseContext(str, 0, this.pseudos, this.attrEqualityMods, this.ruleNestingOperators, this.substitutesEnabled); -1 6849 return context.parse(); 6649 6850 };6650 -1 axios.spread = __webpack_require__(25);6651 -1 module.exports = axios;6652 -1 module.exports.default = axios;6653 -1 }, function(module, exports, __webpack_require__) {6654 -1 'use strict';6655 -1 var bind = __webpack_require__(3);6656 -1 var isBuffer = __webpack_require__(4);6657 -1 var toString = Object.prototype.toString;6658 -1 function isArray(val) {6659 -1 return toString.call(val) === '[object Array]';6660 -1 }6661 -1 function isArrayBuffer(val) {6662 -1 return toString.call(val) === '[object ArrayBuffer]';6663 -1 }6664 -1 function isFormData(val) {6665 -1 return typeof FormData !== 'undefined' && val instanceof FormData;6666 -1 }6667 -1 function isArrayBufferView(val) {6668 -1 var result;6669 -1 if (typeof ArrayBuffer !== 'undefined' && ArrayBuffer.isView) {6670 -1 result = ArrayBuffer.isView(val);6671 -1 } else {6672 -1 result = val && val.buffer && val.buffer instanceof ArrayBuffer;-1 6851 CssSelectorParser.prototype.escapeIdentifier = function(s) { -1 6852 var result = ''; -1 6853 var i = 0; -1 6854 var len = s.length; -1 6855 while (i < len) { -1 6856 var chr = s.charAt(i); -1 6857 if (identSpecialChars[chr]) { -1 6858 result += '\\' + chr; -1 6859 } else { -1 6860 if (!(chr === '_' || chr === '-' || chr >= 'A' && chr <= 'Z' || chr >= 'a' && chr <= 'z' || i !== 0 && chr >= '0' && chr <= '9')) { -1 6861 var charCode = chr.charCodeAt(0); -1 6862 if ((charCode & 63488) === 55296) { -1 6863 var extraCharCode = s.charCodeAt(i++); -1 6864 if ((charCode & 64512) !== 55296 || (extraCharCode & 64512) !== 56320) { -1 6865 throw Error('UCS-2(decode): illegal sequence'); -1 6866 } -1 6867 charCode = ((charCode & 1023) << 10) + (extraCharCode & 1023) + 65536; -1 6868 } -1 6869 result += '\\' + charCode.toString(16) + ' '; -1 6870 } else { -1 6871 result += chr; -1 6872 } -1 6873 } -1 6874 i++; 6673 6875 } 6674 6876 return result;6675 -1 }6676 -1 function isString(val) {6677 -1 return typeof val === 'string';6678 -1 }6679 -1 function isNumber(val) {6680 -1 return typeof val === 'number';6681 -1 }6682 -1 function isUndefined(val) {6683 -1 return typeof val === 'undefined';6684 -1 }6685 -1 function isObject(val) {6686 -1 return val !== null && (typeof val === 'undefined' ? 'undefined' : _typeof(val)) === 'object';6687 -1 }6688 -1 function isDate(val) {6689 -1 return toString.call(val) === '[object Date]';6690 -1 }6691 -1 function isFile(val) {6692 -1 return toString.call(val) === '[object File]';6693 -1 }6694 -1 function isBlob(val) {6695 -1 return toString.call(val) === '[object Blob]';6696 -1 }6697 -1 function isFunction(val) {6698 -1 return toString.call(val) === '[object Function]';6699 -1 }6700 -1 function isStream(val) {6701 -1 return isObject(val) && isFunction(val.pipe);6702 -1 }6703 -1 function isURLSearchParams(val) {6704 -1 return typeof URLSearchParams !== 'undefined' && val instanceof URLSearchParams;6705 -1 }6706 -1 function trim(str) {6707 -1 return str.replace(/^\s*/, '').replace(/\s*$/, '');6708 -1 }6709 -1 function isStandardBrowserEnv() {6710 -1 if (typeof navigator !== 'undefined' && navigator.product === 'ReactNative') {6711 -1 return false;-1 6877 }; -1 6878 CssSelectorParser.prototype.escapeStr = function(s) { -1 6879 var result = ''; -1 6880 var i = 0; -1 6881 var len = s.length; -1 6882 var chr, replacement; -1 6883 while (i < len) { -1 6884 chr = s.charAt(i); -1 6885 if (chr === '"') { -1 6886 chr = '\\"'; -1 6887 } else if (chr === '\\') { -1 6888 chr = '\\\\'; -1 6889 } else if (replacement = strReplacementsRev[chr]) { -1 6890 chr = replacement; -1 6891 } -1 6892 result += chr; -1 6893 i++; 6712 6894 }6713 -1 return typeof window !== 'undefined' && typeof document !== 'undefined';6714 -1 }6715 -1 function forEach(obj, fn) {6716 -1 if (obj === null || typeof obj === 'undefined') {6717 -1 return;-1 6895 return '"' + result + '"'; -1 6896 }; -1 6897 CssSelectorParser.prototype.render = function(path) { -1 6898 return this._renderEntity(path).trim(); -1 6899 }; -1 6900 CssSelectorParser.prototype._renderEntity = function(entity) { -1 6901 var currentEntity, parts, res; -1 6902 res = ''; -1 6903 switch (entity.type) { -1 6904 case 'ruleSet': -1 6905 currentEntity = entity.rule; -1 6906 parts = []; -1 6907 while (currentEntity) { -1 6908 if (currentEntity.nestingOperator) { -1 6909 parts.push(currentEntity.nestingOperator); -1 6910 } -1 6911 parts.push(this._renderEntity(currentEntity)); -1 6912 currentEntity = currentEntity.rule; -1 6913 } -1 6914 res = parts.join(' '); -1 6915 break; -1 6916 -1 6917 case 'selectors': -1 6918 res = entity.selectors.map(this._renderEntity, this).join(', '); -1 6919 break; -1 6920 -1 6921 case 'rule': -1 6922 if (entity.tagName) { -1 6923 if (entity.tagName === '*') { -1 6924 res = '*'; -1 6925 } else { -1 6926 res = this.escapeIdentifier(entity.tagName); -1 6927 } -1 6928 } -1 6929 if (entity.id) { -1 6930 res += '#' + this.escapeIdentifier(entity.id); -1 6931 } -1 6932 if (entity.classNames) { -1 6933 res += entity.classNames.map(function(cn) { -1 6934 return '.' + this.escapeIdentifier(cn); -1 6935 }, this).join(''); -1 6936 } -1 6937 if (entity.attrs) { -1 6938 res += entity.attrs.map(function(attr) { -1 6939 if (attr.operator) { -1 6940 if (attr.valueType === 'substitute') { -1 6941 return '[' + this.escapeIdentifier(attr.name) + attr.operator + '$' + attr.value + ']'; -1 6942 } else { -1 6943 return '[' + this.escapeIdentifier(attr.name) + attr.operator + this.escapeStr(attr.value) + ']'; -1 6944 } -1 6945 } else { -1 6946 return '[' + this.escapeIdentifier(attr.name) + ']'; -1 6947 } -1 6948 }, this).join(''); -1 6949 } -1 6950 if (entity.pseudos) { -1 6951 res += entity.pseudos.map(function(pseudo) { -1 6952 if (pseudo.valueType) { -1 6953 if (pseudo.valueType === 'selector') { -1 6954 return ':' + this.escapeIdentifier(pseudo.name) + '(' + this._renderEntity(pseudo.value) + ')'; -1 6955 } else if (pseudo.valueType === 'substitute') { -1 6956 return ':' + this.escapeIdentifier(pseudo.name) + '($' + pseudo.value + ')'; -1 6957 } else if (pseudo.valueType === 'numeric') { -1 6958 return ':' + this.escapeIdentifier(pseudo.name) + '(' + pseudo.value + ')'; -1 6959 } else { -1 6960 return ':' + this.escapeIdentifier(pseudo.name) + '(' + this.escapeIdentifier(pseudo.value) + ')'; -1 6961 } -1 6962 } else { -1 6963 return ':' + this.escapeIdentifier(pseudo.name); -1 6964 } -1 6965 }, this).join(''); -1 6966 } -1 6967 break; -1 6968 -1 6969 default: -1 6970 throw Error('Unknown entity type: "' + entity.type(+'".')); 6718 6971 }6719 -1 if ((typeof obj === 'undefined' ? 'undefined' : _typeof(obj)) !== 'object') {6720 -1 obj = [ obj ];-1 6972 return res; -1 6973 }; -1 6974 exports.CssSelectorParser = CssSelectorParser; -1 6975 }, {} ], -1 6976 29: [ function(_dereq_, module, exports) { -1 6977 (function() { -1 6978 'use strict'; -1 6979 var doT = { -1 6980 name: 'doT', -1 6981 version: '1.1.1', -1 6982 templateSettings: { -1 6983 evaluate: /\{\{([\s\S]+?(\}?)+)\}\}/g, -1 6984 interpolate: /\{\{=([\s\S]+?)\}\}/g, -1 6985 encode: /\{\{!([\s\S]+?)\}\}/g, -1 6986 use: /\{\{#([\s\S]+?)\}\}/g, -1 6987 useParams: /(^|[^\w$])def(?:\.|\[[\'\"])([\w$\.]+)(?:[\'\"]\])?\s*\:\s*([\w$\.]+|\"[^\"]+\"|\'[^\']+\'|\{[^\}]+\})/g, -1 6988 define: /\{\{##\s*([\w\.$]+)\s*(\:|=)([\s\S]+?)#\}\}/g, -1 6989 defineParams: /^\s*([\w$]+):([\s\S]+)/, -1 6990 conditional: /\{\{\?(\?)?\s*([\s\S]*?)\s*\}\}/g, -1 6991 iterate: /\{\{~\s*(?:\}\}|([\s\S]+?)\s*\:\s*([\w$]+)\s*(?:\:\s*([\w$]+))?\s*\}\})/g, -1 6992 varname: 'it', -1 6993 strip: true, -1 6994 append: true, -1 6995 selfcontained: false, -1 6996 doNotSkipEncoded: false -1 6997 }, -1 6998 template: undefined, -1 6999 compile: undefined, -1 7000 log: true -1 7001 }, _globals; -1 7002 doT.encodeHTMLSource = function(doNotSkipEncoded) { -1 7003 var encodeHTMLRules = { -1 7004 '&': '&', -1 7005 '<': '<', -1 7006 '>': '>', -1 7007 '"': '"', -1 7008 '\'': ''', -1 7009 '/': '/' -1 7010 }, matchHTML = doNotSkipEncoded ? /[&<>"'\/]/g : /&(?!#?\w+;)|<|>|"|'|\//g; -1 7011 return function(code) { -1 7012 return code ? code.toString().replace(matchHTML, function(m) { -1 7013 return encodeHTMLRules[m] || m; -1 7014 }) : ''; -1 7015 }; -1 7016 }; -1 7017 _globals = function() { -1 7018 return this || {}; -1 7019 }(); -1 7020 if (typeof module !== 'undefined' && module.exports) { -1 7021 module.exports = doT; -1 7022 } else if (typeof define === 'function' && define.amd) { -1 7023 define(function() { -1 7024 return doT; -1 7025 }); -1 7026 } else { -1 7027 _globals.doT = doT; 6721 7028 }6722 -1 if (isArray(obj)) {6723 -1 for (var i = 0, l = obj.length; i < l; i++) {6724 -1 fn.call(null, obj[i], i, obj);-1 7029 var startend = { -1 7030 append: { -1 7031 start: '\'+(', -1 7032 end: ')+\'', -1 7033 startencode: '\'+encodeHTML(' -1 7034 }, -1 7035 split: { -1 7036 start: '\';out+=(', -1 7037 end: ');out+=\'', -1 7038 startencode: '\';out+=encodeHTML(' -1 7039 } -1 7040 }, skip = /$^/; -1 7041 function resolveDefs(c, block, def) { -1 7042 return (typeof block === 'string' ? block : block.toString()).replace(c.define || skip, function(m, code, assign, value) { -1 7043 if (code.indexOf('def.') === 0) { -1 7044 code = code.substring(4); -1 7045 } -1 7046 if (!(code in def)) { -1 7047 if (assign === ':') { -1 7048 if (c.defineParams) { -1 7049 value.replace(c.defineParams, function(m, param, v) { -1 7050 def[code] = { -1 7051 arg: param, -1 7052 text: v -1 7053 }; -1 7054 }); -1 7055 } -1 7056 if (!(code in def)) { -1 7057 def[code] = value; -1 7058 } -1 7059 } else { -1 7060 new Function('def', 'def[\'' + code + '\']=' + value)(def); -1 7061 } -1 7062 } -1 7063 return ''; -1 7064 }).replace(c.use || skip, function(m, code) { -1 7065 if (c.useParams) { -1 7066 code = code.replace(c.useParams, function(m, s, d, param) { -1 7067 if (def[d] && def[d].arg && param) { -1 7068 var rw = (d + ':' + param).replace(/'|\\/g, '_'); -1 7069 def.__exp = def.__exp || {}; -1 7070 def.__exp[rw] = def[d].text.replace(new RegExp('(^|[^\\w$])' + def[d].arg + '([^\\w$])', 'g'), '$1' + param + '$2'); -1 7071 return s + 'def.__exp[\'' + rw + '\']'; -1 7072 } -1 7073 }); -1 7074 } -1 7075 var v = new Function('def', 'return ' + code)(def); -1 7076 return v ? resolveDefs(c, v, def) : v; -1 7077 }); -1 7078 } -1 7079 function unescape(code) { -1 7080 return code.replace(/\\('|\\)/g, '$1').replace(/[\r\t\n]/g, ' '); -1 7081 } -1 7082 doT.template = function(tmpl, c, def) { -1 7083 c = c || doT.templateSettings; -1 7084 var cse = c.append ? startend.append : startend.split, needhtmlencode, sid = 0, indv, str = c.use || c.define ? resolveDefs(c, tmpl, def || {}) : tmpl; -1 7085 str = ('var out=\'' + (c.strip ? str.replace(/(^|\r|\n)\t* +| +\t*(\r|\n|$)/g, ' ').replace(/\r|\n|\t|\/\*[\s\S]*?\*\//g, '') : str).replace(/'|\\/g, '\\$&').replace(c.interpolate || skip, function(m, code) { -1 7086 return cse.start + unescape(code) + cse.end; -1 7087 }).replace(c.encode || skip, function(m, code) { -1 7088 needhtmlencode = true; -1 7089 return cse.startencode + unescape(code) + cse.end; -1 7090 }).replace(c.conditional || skip, function(m, elsecase, code) { -1 7091 return elsecase ? code ? '\';}else if(' + unescape(code) + '){out+=\'' : '\';}else{out+=\'' : code ? '\';if(' + unescape(code) + '){out+=\'' : '\';}out+=\''; -1 7092 }).replace(c.iterate || skip, function(m, iterate, vname, iname) { -1 7093 if (!iterate) { -1 7094 return '\';} } out+=\''; -1 7095 } -1 7096 sid += 1; -1 7097 indv = iname || 'i' + sid; -1 7098 iterate = unescape(iterate); -1 7099 return '\';var arr' + sid + '=' + iterate + ';if(arr' + sid + '){var ' + vname + ',' + indv + '=-1,l' + sid + '=arr' + sid + '.length-1;while(' + indv + '<l' + sid + '){' + vname + '=arr' + sid + '[' + indv + '+=1];out+=\''; -1 7100 }).replace(c.evaluate || skip, function(m, code) { -1 7101 return '\';' + unescape(code) + 'out+=\''; -1 7102 }) + '\';return out;').replace(/\n/g, '\\n').replace(/\t/g, '\\t').replace(/\r/g, '\\r').replace(/(\s|;|\}|^|\{)out\+='';/g, '$1').replace(/\+''/g, ''); -1 7103 if (needhtmlencode) { -1 7104 if (!c.selfcontained && _globals && !_globals._encodeHTML) { -1 7105 _globals._encodeHTML = doT.encodeHTMLSource(c.doNotSkipEncoded); -1 7106 } -1 7107 str = 'var encodeHTML = typeof _encodeHTML !== \'undefined\' ? _encodeHTML : (' + doT.encodeHTMLSource.toString() + '(' + (c.doNotSkipEncoded || '') + '));' + str; 6725 7108 }6726 -1 } else {6727 -1 for (var key in obj) {6728 -1 if (Object.prototype.hasOwnProperty.call(obj, key)) {6729 -1 fn.call(null, obj[key], key, obj);-1 7109 try { -1 7110 return new Function(c.varname, str); -1 7111 } catch (e) { -1 7112 if (typeof console !== 'undefined') { -1 7113 console.log('Could not create a template function: ' + str); 6730 7114 } -1 7115 throw e; 6731 7116 }6732 -1 }6733 -1 }6734 -1 function merge() {6735 -1 var result = {};6736 -1 function assignValue(val, key) {6737 -1 if (_typeof(result[key]) === 'object' && (typeof val === 'undefined' ? 'undefined' : _typeof(val)) === 'object') {6738 -1 result[key] = merge(result[key], val);-1 7117 }; -1 7118 doT.compile = function(tmpl, def) { -1 7119 return doT.template(tmpl, null, def); -1 7120 }; -1 7121 })(); -1 7122 }, {} ], -1 7123 30: [ function(_dereq_, module, exports) { -1 7124 'use strict'; -1 7125 module.exports = function() { -1 7126 return /\uD83C\uDFF4\uDB40\uDC67\uDB40\uDC62(?:\uDB40\uDC65\uDB40\uDC6E\uDB40\uDC67|\uDB40\uDC73\uDB40\uDC63\uDB40\uDC74|\uDB40\uDC77\uDB40\uDC6C\uDB40\uDC73)\uDB40\uDC7F|\uD83D\uDC68(?:\uD83C\uDFFC\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68\uD83C\uDFFB|\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFF\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFB-\uDFFE])|\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFE\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFB-\uDFFD])|\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFD\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFB\uDFFC])|\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\u200D(?:\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D)?\uD83D\uDC68|(?:\uD83D[\uDC68\uDC69])\u200D(?:\uD83D\uDC66\u200D\uD83D\uDC66|\uD83D\uDC67\u200D(?:\uD83D[\uDC66\uDC67]))|\uD83D\uDC66\u200D\uD83D\uDC66|\uD83D\uDC67\u200D(?:\uD83D[\uDC66\uDC67])|(?:\uD83D[\uDC68\uDC69])\u200D(?:\uD83D[\uDC66\uDC67])|[\u2695\u2696\u2708]\uFE0F|\uD83D[\uDC66\uDC67]|\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|(?:\uD83C\uDFFB\u200D[\u2695\u2696\u2708]|\uD83C\uDFFF\u200D[\u2695\u2696\u2708]|\uD83C\uDFFE\u200D[\u2695\u2696\u2708]|\uD83C\uDFFD\u200D[\u2695\u2696\u2708]|\uD83C\uDFFC\u200D[\u2695\u2696\u2708])\uFE0F|\uD83C\uDFFB\u200D(?:\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C[\uDFFB-\uDFFF])|(?:\uD83E\uDDD1\uD83C\uDFFB\u200D\uD83E\uDD1D\u200D\uD83E\uDDD1|\uD83D\uDC69\uD83C\uDFFC\u200D\uD83E\uDD1D\u200D\uD83D\uDC69)\uD83C\uDFFB|\uD83E\uDDD1(?:\uD83C\uDFFF\u200D\uD83E\uDD1D\u200D\uD83E\uDDD1(?:\uD83C[\uDFFB-\uDFFF])|\u200D\uD83E\uDD1D\u200D\uD83E\uDDD1)|(?:\uD83E\uDDD1\uD83C\uDFFE\u200D\uD83E\uDD1D\u200D\uD83E\uDDD1|\uD83D\uDC69\uD83C\uDFFF\u200D\uD83E\uDD1D\u200D(?:\uD83D[\uDC68\uDC69]))(?:\uD83C[\uDFFB-\uDFFE])|(?:\uD83E\uDDD1\uD83C\uDFFC\u200D\uD83E\uDD1D\u200D\uD83E\uDDD1|\uD83D\uDC69\uD83C\uDFFD\u200D\uD83E\uDD1D\u200D\uD83D\uDC69)(?:\uD83C[\uDFFB\uDFFC])|\uD83D\uDC69(?:\uD83C\uDFFE\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFB-\uDFFD\uDFFF])|\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFC\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFB\uDFFD-\uDFFF])|\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFB\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFC-\uDFFF])|\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFD\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFB\uDFFC\uDFFE\uDFFF])|\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\u200D(?:\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D(?:\uD83D[\uDC68\uDC69])|\uD83D[\uDC68\uDC69])|\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFF\u200D(?:\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD]))|\uD83D\uDC69\u200D\uD83D\uDC69\u200D(?:\uD83D\uDC66\u200D\uD83D\uDC66|\uD83D\uDC67\u200D(?:\uD83D[\uDC66\uDC67]))|(?:\uD83E\uDDD1\uD83C\uDFFD\u200D\uD83E\uDD1D\u200D\uD83E\uDDD1|\uD83D\uDC69\uD83C\uDFFE\u200D\uD83E\uDD1D\u200D\uD83D\uDC69)(?:\uD83C[\uDFFB-\uDFFD])|\uD83D\uDC69\u200D\uD83D\uDC66\u200D\uD83D\uDC66|\uD83D\uDC69\u200D\uD83D\uDC69\u200D(?:\uD83D[\uDC66\uDC67])|(?:\uD83D\uDC41\uFE0F\u200D\uD83D\uDDE8|\uD83D\uDC69(?:\uD83C\uDFFF\u200D[\u2695\u2696\u2708]|\uD83C\uDFFE\u200D[\u2695\u2696\u2708]|\uD83C\uDFFC\u200D[\u2695\u2696\u2708]|\uD83C\uDFFB\u200D[\u2695\u2696\u2708]|\uD83C\uDFFD\u200D[\u2695\u2696\u2708]|\u200D[\u2695\u2696\u2708])|(?:(?:\u26F9|\uD83C[\uDFCB\uDFCC]|\uD83D\uDD75)\uFE0F|\uD83D\uDC6F|\uD83E[\uDD3C\uDDDE\uDDDF])\u200D[\u2640\u2642]|(?:\u26F9|\uD83C[\uDFCB\uDFCC]|\uD83D\uDD75)(?:\uD83C[\uDFFB-\uDFFF])\u200D[\u2640\u2642]|(?:\uD83C[\uDFC3\uDFC4\uDFCA]|\uD83D[\uDC6E\uDC71\uDC73\uDC77\uDC81\uDC82\uDC86\uDC87\uDE45-\uDE47\uDE4B\uDE4D\uDE4E\uDEA3\uDEB4-\uDEB6]|\uD83E[\uDD26\uDD37-\uDD39\uDD3D\uDD3E\uDDB8\uDDB9\uDDCD-\uDDCF\uDDD6-\uDDDD])(?:(?:\uD83C[\uDFFB-\uDFFF])\u200D[\u2640\u2642]|\u200D[\u2640\u2642])|\uD83C\uDFF4\u200D\u2620)\uFE0F|\uD83D\uDC69\u200D\uD83D\uDC67\u200D(?:\uD83D[\uDC66\uDC67])|\uD83C\uDFF3\uFE0F\u200D\uD83C\uDF08|\uD83D\uDC15\u200D\uD83E\uDDBA|\uD83D\uDC69\u200D\uD83D\uDC66|\uD83D\uDC69\u200D\uD83D\uDC67|\uD83C\uDDFD\uD83C\uDDF0|\uD83C\uDDF4\uD83C\uDDF2|\uD83C\uDDF6\uD83C\uDDE6|[#\*0-9]\uFE0F\u20E3|\uD83C\uDDE7(?:\uD83C[\uDDE6\uDDE7\uDDE9-\uDDEF\uDDF1-\uDDF4\uDDF6-\uDDF9\uDDFB\uDDFC\uDDFE\uDDFF])|\uD83C\uDDF9(?:\uD83C[\uDDE6\uDDE8\uDDE9\uDDEB-\uDDED\uDDEF-\uDDF4\uDDF7\uDDF9\uDDFB\uDDFC\uDDFF])|\uD83C\uDDEA(?:\uD83C[\uDDE6\uDDE8\uDDEA\uDDEC\uDDED\uDDF7-\uDDFA])|\uD83E\uDDD1(?:\uD83C[\uDFFB-\uDFFF])|\uD83C\uDDF7(?:\uD83C[\uDDEA\uDDF4\uDDF8\uDDFA\uDDFC])|\uD83D\uDC69(?:\uD83C[\uDFFB-\uDFFF])|\uD83C\uDDF2(?:\uD83C[\uDDE6\uDDE8-\uDDED\uDDF0-\uDDFF])|\uD83C\uDDE6(?:\uD83C[\uDDE8-\uDDEC\uDDEE\uDDF1\uDDF2\uDDF4\uDDF6-\uDDFA\uDDFC\uDDFD\uDDFF])|\uD83C\uDDF0(?:\uD83C[\uDDEA\uDDEC-\uDDEE\uDDF2\uDDF3\uDDF5\uDDF7\uDDFC\uDDFE\uDDFF])|\uD83C\uDDED(?:\uD83C[\uDDF0\uDDF2\uDDF3\uDDF7\uDDF9\uDDFA])|\uD83C\uDDE9(?:\uD83C[\uDDEA\uDDEC\uDDEF\uDDF0\uDDF2\uDDF4\uDDFF])|\uD83C\uDDFE(?:\uD83C[\uDDEA\uDDF9])|\uD83C\uDDEC(?:\uD83C[\uDDE6\uDDE7\uDDE9-\uDDEE\uDDF1-\uDDF3\uDDF5-\uDDFA\uDDFC\uDDFE])|\uD83C\uDDF8(?:\uD83C[\uDDE6-\uDDEA\uDDEC-\uDDF4\uDDF7-\uDDF9\uDDFB\uDDFD-\uDDFF])|\uD83C\uDDEB(?:\uD83C[\uDDEE-\uDDF0\uDDF2\uDDF4\uDDF7])|\uD83C\uDDF5(?:\uD83C[\uDDE6\uDDEA-\uDDED\uDDF0-\uDDF3\uDDF7-\uDDF9\uDDFC\uDDFE])|\uD83C\uDDFB(?:\uD83C[\uDDE6\uDDE8\uDDEA\uDDEC\uDDEE\uDDF3\uDDFA])|\uD83C\uDDF3(?:\uD83C[\uDDE6\uDDE8\uDDEA-\uDDEC\uDDEE\uDDF1\uDDF4\uDDF5\uDDF7\uDDFA\uDDFF])|\uD83C\uDDE8(?:\uD83C[\uDDE6\uDDE8\uDDE9\uDDEB-\uDDEE\uDDF0-\uDDF5\uDDF7\uDDFA-\uDDFF])|\uD83C\uDDF1(?:\uD83C[\uDDE6-\uDDE8\uDDEE\uDDF0\uDDF7-\uDDFB\uDDFE])|\uD83C\uDDFF(?:\uD83C[\uDDE6\uDDF2\uDDFC])|\uD83C\uDDFC(?:\uD83C[\uDDEB\uDDF8])|\uD83C\uDDFA(?:\uD83C[\uDDE6\uDDEC\uDDF2\uDDF3\uDDF8\uDDFE\uDDFF])|\uD83C\uDDEE(?:\uD83C[\uDDE8-\uDDEA\uDDF1-\uDDF4\uDDF6-\uDDF9])|\uD83C\uDDEF(?:\uD83C[\uDDEA\uDDF2\uDDF4\uDDF5])|(?:\uD83C[\uDFC3\uDFC4\uDFCA]|\uD83D[\uDC6E\uDC71\uDC73\uDC77\uDC81\uDC82\uDC86\uDC87\uDE45-\uDE47\uDE4B\uDE4D\uDE4E\uDEA3\uDEB4-\uDEB6]|\uD83E[\uDD26\uDD37-\uDD39\uDD3D\uDD3E\uDDB8\uDDB9\uDDCD-\uDDCF\uDDD6-\uDDDD])(?:\uD83C[\uDFFB-\uDFFF])|(?:\u26F9|\uD83C[\uDFCB\uDFCC]|\uD83D\uDD75)(?:\uD83C[\uDFFB-\uDFFF])|(?:[\u261D\u270A-\u270D]|\uD83C[\uDF85\uDFC2\uDFC7]|\uD83D[\uDC42\uDC43\uDC46-\uDC50\uDC66\uDC67\uDC6B-\uDC6D\uDC70\uDC72\uDC74-\uDC76\uDC78\uDC7C\uDC83\uDC85\uDCAA\uDD74\uDD7A\uDD90\uDD95\uDD96\uDE4C\uDE4F\uDEC0\uDECC]|\uD83E[\uDD0F\uDD18-\uDD1C\uDD1E\uDD1F\uDD30-\uDD36\uDDB5\uDDB6\uDDBB\uDDD2-\uDDD5])(?:\uD83C[\uDFFB-\uDFFF])|(?:[\u231A\u231B\u23E9-\u23EC\u23F0\u23F3\u25FD\u25FE\u2614\u2615\u2648-\u2653\u267F\u2693\u26A1\u26AA\u26AB\u26BD\u26BE\u26C4\u26C5\u26CE\u26D4\u26EA\u26F2\u26F3\u26F5\u26FA\u26FD\u2705\u270A\u270B\u2728\u274C\u274E\u2753-\u2755\u2757\u2795-\u2797\u27B0\u27BF\u2B1B\u2B1C\u2B50\u2B55]|\uD83C[\uDC04\uDCCF\uDD8E\uDD91-\uDD9A\uDDE6-\uDDFF\uDE01\uDE1A\uDE2F\uDE32-\uDE36\uDE38-\uDE3A\uDE50\uDE51\uDF00-\uDF20\uDF2D-\uDF35\uDF37-\uDF7C\uDF7E-\uDF93\uDFA0-\uDFCA\uDFCF-\uDFD3\uDFE0-\uDFF0\uDFF4\uDFF8-\uDFFF]|\uD83D[\uDC00-\uDC3E\uDC40\uDC42-\uDCFC\uDCFF-\uDD3D\uDD4B-\uDD4E\uDD50-\uDD67\uDD7A\uDD95\uDD96\uDDA4\uDDFB-\uDE4F\uDE80-\uDEC5\uDECC\uDED0-\uDED2\uDED5\uDEEB\uDEEC\uDEF4-\uDEFA\uDFE0-\uDFEB]|\uD83E[\uDD0D-\uDD3A\uDD3C-\uDD45\uDD47-\uDD71\uDD73-\uDD76\uDD7A-\uDDA2\uDDA5-\uDDAA\uDDAE-\uDDCA\uDDCD-\uDDFF\uDE70-\uDE73\uDE78-\uDE7A\uDE80-\uDE82\uDE90-\uDE95])|(?:[#\*0-9\xA9\xAE\u203C\u2049\u2122\u2139\u2194-\u2199\u21A9\u21AA\u231A\u231B\u2328\u23CF\u23E9-\u23F3\u23F8-\u23FA\u24C2\u25AA\u25AB\u25B6\u25C0\u25FB-\u25FE\u2600-\u2604\u260E\u2611\u2614\u2615\u2618\u261D\u2620\u2622\u2623\u2626\u262A\u262E\u262F\u2638-\u263A\u2640\u2642\u2648-\u2653\u265F\u2660\u2663\u2665\u2666\u2668\u267B\u267E\u267F\u2692-\u2697\u2699\u269B\u269C\u26A0\u26A1\u26AA\u26AB\u26B0\u26B1\u26BD\u26BE\u26C4\u26C5\u26C8\u26CE\u26CF\u26D1\u26D3\u26D4\u26E9\u26EA\u26F0-\u26F5\u26F7-\u26FA\u26FD\u2702\u2705\u2708-\u270D\u270F\u2712\u2714\u2716\u271D\u2721\u2728\u2733\u2734\u2744\u2747\u274C\u274E\u2753-\u2755\u2757\u2763\u2764\u2795-\u2797\u27A1\u27B0\u27BF\u2934\u2935\u2B05-\u2B07\u2B1B\u2B1C\u2B50\u2B55\u3030\u303D\u3297\u3299]|\uD83C[\uDC04\uDCCF\uDD70\uDD71\uDD7E\uDD7F\uDD8E\uDD91-\uDD9A\uDDE6-\uDDFF\uDE01\uDE02\uDE1A\uDE2F\uDE32-\uDE3A\uDE50\uDE51\uDF00-\uDF21\uDF24-\uDF93\uDF96\uDF97\uDF99-\uDF9B\uDF9E-\uDFF0\uDFF3-\uDFF5\uDFF7-\uDFFF]|\uD83D[\uDC00-\uDCFD\uDCFF-\uDD3D\uDD49-\uDD4E\uDD50-\uDD67\uDD6F\uDD70\uDD73-\uDD7A\uDD87\uDD8A-\uDD8D\uDD90\uDD95\uDD96\uDDA4\uDDA5\uDDA8\uDDB1\uDDB2\uDDBC\uDDC2-\uDDC4\uDDD1-\uDDD3\uDDDC-\uDDDE\uDDE1\uDDE3\uDDE8\uDDEF\uDDF3\uDDFA-\uDE4F\uDE80-\uDEC5\uDECB-\uDED2\uDED5\uDEE0-\uDEE5\uDEE9\uDEEB\uDEEC\uDEF0\uDEF3-\uDEFA\uDFE0-\uDFEB]|\uD83E[\uDD0D-\uDD3A\uDD3C-\uDD45\uDD47-\uDD71\uDD73-\uDD76\uDD7A-\uDDA2\uDDA5-\uDDAA\uDDAE-\uDDCA\uDDCD-\uDDFF\uDE70-\uDE73\uDE78-\uDE7A\uDE80-\uDE82\uDE90-\uDE95])\uFE0F|(?:[\u261D\u26F9\u270A-\u270D]|\uD83C[\uDF85\uDFC2-\uDFC4\uDFC7\uDFCA-\uDFCC]|\uD83D[\uDC42\uDC43\uDC46-\uDC50\uDC66-\uDC78\uDC7C\uDC81-\uDC83\uDC85-\uDC87\uDC8F\uDC91\uDCAA\uDD74\uDD75\uDD7A\uDD90\uDD95\uDD96\uDE45-\uDE47\uDE4B-\uDE4F\uDEA3\uDEB4-\uDEB6\uDEC0\uDECC]|\uD83E[\uDD0F\uDD18-\uDD1F\uDD26\uDD30-\uDD39\uDD3C-\uDD3E\uDDB5\uDDB6\uDDB8\uDDB9\uDDBB\uDDCD-\uDDCF\uDDD1-\uDDDD])/g; -1 7127 }; -1 7128 }, {} ], -1 7129 31: [ function(_dereq_, module, exports) { -1 7130 (function(process, global) { -1 7131 (function(global, factory) { -1 7132 typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() : typeof define === 'function' && define.amd ? define(factory) : global.ES6Promise = factory(); -1 7133 })(this, function() { -1 7134 'use strict'; -1 7135 function objectOrFunction(x) { -1 7136 var type = typeof x; -1 7137 return x !== null && (type === 'object' || type === 'function'); -1 7138 } -1 7139 function isFunction(x) { -1 7140 return typeof x === 'function'; -1 7141 } -1 7142 var _isArray = void 0; -1 7143 if (Array.isArray) { -1 7144 _isArray = Array.isArray; 6739 7145 } else {6740 -1 result[key] = val;-1 7146 _isArray = function(x) { -1 7147 return Object.prototype.toString.call(x) === '[object Array]'; -1 7148 }; 6741 7149 }6742 -1 }6743 -1 for (var i = 0, l = arguments.length; i < l; i++) {6744 -1 forEach(arguments[i], assignValue);6745 -1 }6746 -1 return result;6747 -1 }6748 -1 function extend(a, b, thisArg) {6749 -1 forEach(b, function assignValue(val, key) {6750 -1 if (thisArg && typeof val === 'function') {6751 -1 a[key] = bind(val, thisArg);-1 7150 var isArray = _isArray; -1 7151 var len = 0; -1 7152 var vertxNext = void 0; -1 7153 var customSchedulerFn = void 0; -1 7154 var asap = function asap(callback, arg) { -1 7155 queue[len] = callback; -1 7156 queue[len + 1] = arg; -1 7157 len += 2; -1 7158 if (len === 2) { -1 7159 if (customSchedulerFn) { -1 7160 customSchedulerFn(flush); -1 7161 } else { -1 7162 scheduleFlush(); -1 7163 } -1 7164 } -1 7165 }; -1 7166 function setScheduler(scheduleFn) { -1 7167 customSchedulerFn = scheduleFn; -1 7168 } -1 7169 function setAsap(asapFn) { -1 7170 asap = asapFn; -1 7171 } -1 7172 var browserWindow = typeof window !== 'undefined' ? window : undefined; -1 7173 var browserGlobal = browserWindow || {}; -1 7174 var BrowserMutationObserver = browserGlobal.MutationObserver || browserGlobal.WebKitMutationObserver; -1 7175 var isNode = typeof self === 'undefined' && typeof process !== 'undefined' && {}.toString.call(process) === '[object process]'; -1 7176 var isWorker = typeof Uint8ClampedArray !== 'undefined' && typeof importScripts !== 'undefined' && typeof MessageChannel !== 'undefined'; -1 7177 function useNextTick() { -1 7178 return function() { -1 7179 return process.nextTick(flush); -1 7180 }; -1 7181 } -1 7182 function useVertxTimer() { -1 7183 if (typeof vertxNext !== 'undefined') { -1 7184 return function() { -1 7185 vertxNext(flush); -1 7186 }; -1 7187 } -1 7188 return useSetTimeout(); -1 7189 } -1 7190 function useMutationObserver() { -1 7191 var iterations = 0; -1 7192 var observer = new BrowserMutationObserver(flush); -1 7193 var node = document.createTextNode(''); -1 7194 observer.observe(node, { -1 7195 characterData: true -1 7196 }); -1 7197 return function() { -1 7198 node.data = iterations = ++iterations % 2; -1 7199 }; -1 7200 } -1 7201 function useMessageChannel() { -1 7202 var channel = new MessageChannel(); -1 7203 channel.port1.onmessage = flush; -1 7204 return function() { -1 7205 return channel.port2.postMessage(0); -1 7206 }; -1 7207 } -1 7208 function useSetTimeout() { -1 7209 var globalSetTimeout = setTimeout; -1 7210 return function() { -1 7211 return globalSetTimeout(flush, 1); -1 7212 }; -1 7213 } -1 7214 var queue = new Array(1e3); -1 7215 function flush() { -1 7216 for (var i = 0; i < len; i += 2) { -1 7217 var callback = queue[i]; -1 7218 var arg = queue[i + 1]; -1 7219 callback(arg); -1 7220 queue[i] = undefined; -1 7221 queue[i + 1] = undefined; -1 7222 } -1 7223 len = 0; -1 7224 } -1 7225 function attemptVertx() { -1 7226 try { -1 7227 var vertx = Function('return this')().require('vertx'); -1 7228 vertxNext = vertx.runOnLoop || vertx.runOnContext; -1 7229 return useVertxTimer(); -1 7230 } catch (e) { -1 7231 return useSetTimeout(); -1 7232 } -1 7233 } -1 7234 var scheduleFlush = void 0; -1 7235 if (isNode) { -1 7236 scheduleFlush = useNextTick(); -1 7237 } else if (BrowserMutationObserver) { -1 7238 scheduleFlush = useMutationObserver(); -1 7239 } else if (isWorker) { -1 7240 scheduleFlush = useMessageChannel(); -1 7241 } else if (browserWindow === undefined && typeof _dereq_ === 'function') { -1 7242 scheduleFlush = attemptVertx(); 6752 7243 } else {6753 -1 a[key] = val;-1 7244 scheduleFlush = useSetTimeout(); 6754 7245 }6755 -1 });6756 -1 return a;6757 -1 }6758 -1 module.exports = {6759 -1 isArray: isArray,6760 -1 isArrayBuffer: isArrayBuffer,6761 -1 isBuffer: isBuffer,6762 -1 isFormData: isFormData,6763 -1 isArrayBufferView: isArrayBufferView,6764 -1 isString: isString,6765 -1 isNumber: isNumber,6766 -1 isObject: isObject,6767 -1 isUndefined: isUndefined,6768 -1 isDate: isDate,6769 -1 isFile: isFile,6770 -1 isBlob: isBlob,6771 -1 isFunction: isFunction,6772 -1 isStream: isStream,6773 -1 isURLSearchParams: isURLSearchParams,6774 -1 isStandardBrowserEnv: isStandardBrowserEnv,6775 -1 forEach: forEach,6776 -1 merge: merge,6777 -1 extend: extend,6778 -1 trim: trim6779 -1 };6780 -1 }, function(module, exports) {6781 -1 'use strict';6782 -1 module.exports = function bind(fn, thisArg) {6783 -1 return function wrap() {6784 -1 var args = new Array(arguments.length);6785 -1 for (var i = 0; i < args.length; i++) {6786 -1 args[i] = arguments[i];-1 7246 function then(onFulfillment, onRejection) { -1 7247 var parent = this; -1 7248 var child = new this.constructor(noop); -1 7249 if (child[PROMISE_ID] === undefined) { -1 7250 makePromise(child); -1 7251 } -1 7252 var _state = parent._state; -1 7253 if (_state) { -1 7254 var callback = arguments[_state - 1]; -1 7255 asap(function() { -1 7256 return invokeCallback(_state, child, callback, parent._result); -1 7257 }); -1 7258 } else { -1 7259 subscribe(parent, child, onFulfillment, onRejection); -1 7260 } -1 7261 return child; 6787 7262 }6788 -1 return fn.apply(thisArg, args);6789 -1 };6790 -1 };6791 -1 }, function(module, exports) {-1 7263 function resolve$1(object) { -1 7264 var Constructor = this; -1 7265 if (object && typeof object === 'object' && object.constructor === Constructor) { -1 7266 return object; -1 7267 } -1 7268 var promise = new Constructor(noop); -1 7269 resolve(promise, object); -1 7270 return promise; -1 7271 } -1 7272 var PROMISE_ID = Math.random().toString(36).substring(2); -1 7273 function noop() {} -1 7274 var PENDING = void 0; -1 7275 var FULFILLED = 1; -1 7276 var REJECTED = 2; -1 7277 var TRY_CATCH_ERROR = { -1 7278 error: null -1 7279 }; -1 7280 function selfFulfillment() { -1 7281 return new TypeError('You cannot resolve a promise with itself'); -1 7282 } -1 7283 function cannotReturnOwn() { -1 7284 return new TypeError('A promises callback cannot return that same promise.'); -1 7285 } -1 7286 function getThen(promise) { -1 7287 try { -1 7288 return promise.then; -1 7289 } catch (error) { -1 7290 TRY_CATCH_ERROR.error = error; -1 7291 return TRY_CATCH_ERROR; -1 7292 } -1 7293 } -1 7294 function tryThen(then$$1, value, fulfillmentHandler, rejectionHandler) { -1 7295 try { -1 7296 then$$1.call(value, fulfillmentHandler, rejectionHandler); -1 7297 } catch (e) { -1 7298 return e; -1 7299 } -1 7300 } -1 7301 function handleForeignThenable(promise, thenable, then$$1) { -1 7302 asap(function(promise) { -1 7303 var sealed = false; -1 7304 var error = tryThen(then$$1, thenable, function(value) { -1 7305 if (sealed) { -1 7306 return; -1 7307 } -1 7308 sealed = true; -1 7309 if (thenable !== value) { -1 7310 resolve(promise, value); -1 7311 } else { -1 7312 fulfill(promise, value); -1 7313 } -1 7314 }, function(reason) { -1 7315 if (sealed) { -1 7316 return; -1 7317 } -1 7318 sealed = true; -1 7319 reject(promise, reason); -1 7320 }, 'Settle: ' + (promise._label || ' unknown promise')); -1 7321 if (!sealed && error) { -1 7322 sealed = true; -1 7323 reject(promise, error); -1 7324 } -1 7325 }, promise); -1 7326 } -1 7327 function handleOwnThenable(promise, thenable) { -1 7328 if (thenable._state === FULFILLED) { -1 7329 fulfill(promise, thenable._result); -1 7330 } else if (thenable._state === REJECTED) { -1 7331 reject(promise, thenable._result); -1 7332 } else { -1 7333 subscribe(thenable, undefined, function(value) { -1 7334 return resolve(promise, value); -1 7335 }, function(reason) { -1 7336 return reject(promise, reason); -1 7337 }); -1 7338 } -1 7339 } -1 7340 function handleMaybeThenable(promise, maybeThenable, then$$1) { -1 7341 if (maybeThenable.constructor === promise.constructor && then$$1 === then && maybeThenable.constructor.resolve === resolve$1) { -1 7342 handleOwnThenable(promise, maybeThenable); -1 7343 } else { -1 7344 if (then$$1 === TRY_CATCH_ERROR) { -1 7345 reject(promise, TRY_CATCH_ERROR.error); -1 7346 TRY_CATCH_ERROR.error = null; -1 7347 } else if (then$$1 === undefined) { -1 7348 fulfill(promise, maybeThenable); -1 7349 } else if (isFunction(then$$1)) { -1 7350 handleForeignThenable(promise, maybeThenable, then$$1); -1 7351 } else { -1 7352 fulfill(promise, maybeThenable); -1 7353 } -1 7354 } -1 7355 } -1 7356 function resolve(promise, value) { -1 7357 if (promise === value) { -1 7358 reject(promise, selfFulfillment()); -1 7359 } else if (objectOrFunction(value)) { -1 7360 handleMaybeThenable(promise, value, getThen(value)); -1 7361 } else { -1 7362 fulfill(promise, value); -1 7363 } -1 7364 } -1 7365 function publishRejection(promise) { -1 7366 if (promise._onerror) { -1 7367 promise._onerror(promise._result); -1 7368 } -1 7369 publish(promise); -1 7370 } -1 7371 function fulfill(promise, value) { -1 7372 if (promise._state !== PENDING) { -1 7373 return; -1 7374 } -1 7375 promise._result = value; -1 7376 promise._state = FULFILLED; -1 7377 if (promise._subscribers.length !== 0) { -1 7378 asap(publish, promise); -1 7379 } -1 7380 } -1 7381 function reject(promise, reason) { -1 7382 if (promise._state !== PENDING) { -1 7383 return; -1 7384 } -1 7385 promise._state = REJECTED; -1 7386 promise._result = reason; -1 7387 asap(publishRejection, promise); -1 7388 } -1 7389 function subscribe(parent, child, onFulfillment, onRejection) { -1 7390 var _subscribers = parent._subscribers; -1 7391 var length = _subscribers.length; -1 7392 parent._onerror = null; -1 7393 _subscribers[length] = child; -1 7394 _subscribers[length + FULFILLED] = onFulfillment; -1 7395 _subscribers[length + REJECTED] = onRejection; -1 7396 if (length === 0 && parent._state) { -1 7397 asap(publish, parent); -1 7398 } -1 7399 } -1 7400 function publish(promise) { -1 7401 var subscribers = promise._subscribers; -1 7402 var settled = promise._state; -1 7403 if (subscribers.length === 0) { -1 7404 return; -1 7405 } -1 7406 var child = void 0, callback = void 0, detail = promise._result; -1 7407 for (var i = 0; i < subscribers.length; i += 3) { -1 7408 child = subscribers[i]; -1 7409 callback = subscribers[i + settled]; -1 7410 if (child) { -1 7411 invokeCallback(settled, child, callback, detail); -1 7412 } else { -1 7413 callback(detail); -1 7414 } -1 7415 } -1 7416 promise._subscribers.length = 0; -1 7417 } -1 7418 function tryCatch(callback, detail) { -1 7419 try { -1 7420 return callback(detail); -1 7421 } catch (e) { -1 7422 TRY_CATCH_ERROR.error = e; -1 7423 return TRY_CATCH_ERROR; -1 7424 } -1 7425 } -1 7426 function invokeCallback(settled, promise, callback, detail) { -1 7427 var hasCallback = isFunction(callback), value = void 0, error = void 0, succeeded = void 0, failed = void 0; -1 7428 if (hasCallback) { -1 7429 value = tryCatch(callback, detail); -1 7430 if (value === TRY_CATCH_ERROR) { -1 7431 failed = true; -1 7432 error = value.error; -1 7433 value.error = null; -1 7434 } else { -1 7435 succeeded = true; -1 7436 } -1 7437 if (promise === value) { -1 7438 reject(promise, cannotReturnOwn()); -1 7439 return; -1 7440 } -1 7441 } else { -1 7442 value = detail; -1 7443 succeeded = true; -1 7444 } -1 7445 if (promise._state !== PENDING) {} else if (hasCallback && succeeded) { -1 7446 resolve(promise, value); -1 7447 } else if (failed) { -1 7448 reject(promise, error); -1 7449 } else if (settled === FULFILLED) { -1 7450 fulfill(promise, value); -1 7451 } else if (settled === REJECTED) { -1 7452 reject(promise, value); -1 7453 } -1 7454 } -1 7455 function initializePromise(promise, resolver) { -1 7456 try { -1 7457 resolver(function resolvePromise(value) { -1 7458 resolve(promise, value); -1 7459 }, function rejectPromise(reason) { -1 7460 reject(promise, reason); -1 7461 }); -1 7462 } catch (e) { -1 7463 reject(promise, e); -1 7464 } -1 7465 } -1 7466 var id = 0; -1 7467 function nextId() { -1 7468 return id++; -1 7469 } -1 7470 function makePromise(promise) { -1 7471 promise[PROMISE_ID] = id++; -1 7472 promise._state = undefined; -1 7473 promise._result = undefined; -1 7474 promise._subscribers = []; -1 7475 } -1 7476 function validationError() { -1 7477 return new Error('Array Methods must be provided an Array'); -1 7478 } -1 7479 var Enumerator = function() { -1 7480 function Enumerator(Constructor, input) { -1 7481 this._instanceConstructor = Constructor; -1 7482 this.promise = new Constructor(noop); -1 7483 if (!this.promise[PROMISE_ID]) { -1 7484 makePromise(this.promise); -1 7485 } -1 7486 if (isArray(input)) { -1 7487 this.length = input.length; -1 7488 this._remaining = input.length; -1 7489 this._result = new Array(this.length); -1 7490 if (this.length === 0) { -1 7491 fulfill(this.promise, this._result); -1 7492 } else { -1 7493 this.length = this.length || 0; -1 7494 this._enumerate(input); -1 7495 if (this._remaining === 0) { -1 7496 fulfill(this.promise, this._result); -1 7497 } -1 7498 } -1 7499 } else { -1 7500 reject(this.promise, validationError()); -1 7501 } -1 7502 } -1 7503 Enumerator.prototype._enumerate = function _enumerate(input) { -1 7504 for (var i = 0; this._state === PENDING && i < input.length; i++) { -1 7505 this._eachEntry(input[i], i); -1 7506 } -1 7507 }; -1 7508 Enumerator.prototype._eachEntry = function _eachEntry(entry, i) { -1 7509 var c = this._instanceConstructor; -1 7510 var resolve$$1 = c.resolve; -1 7511 if (resolve$$1 === resolve$1) { -1 7512 var _then = getThen(entry); -1 7513 if (_then === then && entry._state !== PENDING) { -1 7514 this._settledAt(entry._state, i, entry._result); -1 7515 } else if (typeof _then !== 'function') { -1 7516 this._remaining--; -1 7517 this._result[i] = entry; -1 7518 } else if (c === Promise$1) { -1 7519 var promise = new c(noop); -1 7520 handleMaybeThenable(promise, entry, _then); -1 7521 this._willSettleAt(promise, i); -1 7522 } else { -1 7523 this._willSettleAt(new c(function(resolve$$1) { -1 7524 return resolve$$1(entry); -1 7525 }), i); -1 7526 } -1 7527 } else { -1 7528 this._willSettleAt(resolve$$1(entry), i); -1 7529 } -1 7530 }; -1 7531 Enumerator.prototype._settledAt = function _settledAt(state, i, value) { -1 7532 var promise = this.promise; -1 7533 if (promise._state === PENDING) { -1 7534 this._remaining--; -1 7535 if (state === REJECTED) { -1 7536 reject(promise, value); -1 7537 } else { -1 7538 this._result[i] = value; -1 7539 } -1 7540 } -1 7541 if (this._remaining === 0) { -1 7542 fulfill(promise, this._result); -1 7543 } -1 7544 }; -1 7545 Enumerator.prototype._willSettleAt = function _willSettleAt(promise, i) { -1 7546 var enumerator = this; -1 7547 subscribe(promise, undefined, function(value) { -1 7548 return enumerator._settledAt(FULFILLED, i, value); -1 7549 }, function(reason) { -1 7550 return enumerator._settledAt(REJECTED, i, reason); -1 7551 }); -1 7552 }; -1 7553 return Enumerator; -1 7554 }(); -1 7555 function all(entries) { -1 7556 return new Enumerator(this, entries).promise; -1 7557 } -1 7558 function race(entries) { -1 7559 var Constructor = this; -1 7560 if (!isArray(entries)) { -1 7561 return new Constructor(function(_, reject) { -1 7562 return reject(new TypeError('You must pass an array to race.')); -1 7563 }); -1 7564 } else { -1 7565 return new Constructor(function(resolve, reject) { -1 7566 var length = entries.length; -1 7567 for (var i = 0; i < length; i++) { -1 7568 Constructor.resolve(entries[i]).then(resolve, reject); -1 7569 } -1 7570 }); -1 7571 } -1 7572 } -1 7573 function reject$1(reason) { -1 7574 var Constructor = this; -1 7575 var promise = new Constructor(noop); -1 7576 reject(promise, reason); -1 7577 return promise; -1 7578 } -1 7579 function needsResolver() { -1 7580 throw new TypeError('You must pass a resolver function as the first argument to the promise constructor'); -1 7581 } -1 7582 function needsNew() { -1 7583 throw new TypeError('Failed to construct \'Promise\': Please use the \'new\' operator, this object constructor cannot be called as a function.'); -1 7584 } -1 7585 var Promise$1 = function() { -1 7586 function Promise(resolver) { -1 7587 this[PROMISE_ID] = nextId(); -1 7588 this._result = this._state = undefined; -1 7589 this._subscribers = []; -1 7590 if (noop !== resolver) { -1 7591 typeof resolver !== 'function' && needsResolver(); -1 7592 this instanceof Promise ? initializePromise(this, resolver) : needsNew(); -1 7593 } -1 7594 } -1 7595 Promise.prototype.catch = function _catch(onRejection) { -1 7596 return this.then(null, onRejection); -1 7597 }; -1 7598 Promise.prototype.finally = function _finally(callback) { -1 7599 var promise = this; -1 7600 var constructor = promise.constructor; -1 7601 if (isFunction(callback)) { -1 7602 return promise.then(function(value) { -1 7603 return constructor.resolve(callback()).then(function() { -1 7604 return value; -1 7605 }); -1 7606 }, function(reason) { -1 7607 return constructor.resolve(callback()).then(function() { -1 7608 throw reason; -1 7609 }); -1 7610 }); -1 7611 } -1 7612 return promise.then(callback, callback); -1 7613 }; -1 7614 return Promise; -1 7615 }(); -1 7616 Promise$1.prototype.then = then; -1 7617 Promise$1.all = all; -1 7618 Promise$1.race = race; -1 7619 Promise$1.resolve = resolve$1; -1 7620 Promise$1.reject = reject$1; -1 7621 Promise$1._setScheduler = setScheduler; -1 7622 Promise$1._setAsap = setAsap; -1 7623 Promise$1._asap = asap; -1 7624 function polyfill() { -1 7625 var local = void 0; -1 7626 if (typeof global !== 'undefined') { -1 7627 local = global; -1 7628 } else if (typeof self !== 'undefined') { -1 7629 local = self; -1 7630 } else { -1 7631 try { -1 7632 local = Function('return this')(); -1 7633 } catch (e) { -1 7634 throw new Error('polyfill failed because global object is unavailable in this environment'); -1 7635 } -1 7636 } -1 7637 var P = local.Promise; -1 7638 if (P) { -1 7639 var promiseToString = null; -1 7640 try { -1 7641 promiseToString = Object.prototype.toString.call(P.resolve()); -1 7642 } catch (e) {} -1 7643 if (promiseToString === '[object Promise]' && !P.cast) { -1 7644 return; -1 7645 } -1 7646 } -1 7647 local.Promise = Promise$1; -1 7648 } -1 7649 Promise$1.polyfill = polyfill; -1 7650 Promise$1.Promise = Promise$1; -1 7651 return Promise$1; -1 7652 }); -1 7653 }).call(this, _dereq_('_process'), typeof global !== 'undefined' ? global : typeof self !== 'undefined' ? self : typeof window !== 'undefined' ? window : {}); -1 7654 }, { -1 7655 _process: 33 -1 7656 } ], -1 7657 32: [ function(_dereq_, module, exports) { 6792 7658 module.exports = function(obj) { 6793 7659 return obj != null && (isBuffer(obj) || isSlowBuffer(obj) || !!obj._isBuffer); 6794 7660 }; @@ -6798,748 +7664,1081 @@ module.exports = { 6798 7664 function isSlowBuffer(obj) { 6799 7665 return typeof obj.readFloatLE === 'function' && typeof obj.slice === 'function' && isBuffer(obj.slice(0, 0)); 6800 7666 }6801 -1 }, function(module, exports, __webpack_require__) {6802 -1 'use strict';6803 -1 var defaults = __webpack_require__(6);6804 -1 var utils = __webpack_require__(2);6805 -1 var InterceptorManager = __webpack_require__(17);6806 -1 var dispatchRequest = __webpack_require__(18);6807 -1 function Axios(instanceConfig) {6808 -1 this.defaults = instanceConfig;6809 -1 this.interceptors = {6810 -1 request: new InterceptorManager(),6811 -1 response: new InterceptorManager()6812 -1 };-1 7667 }, {} ], -1 7668 33: [ function(_dereq_, module, exports) { -1 7669 var process = module.exports = {}; -1 7670 var cachedSetTimeout; -1 7671 var cachedClearTimeout; -1 7672 function defaultSetTimout() { -1 7673 throw new Error('setTimeout has not been defined'); 6813 7674 }6814 -1 Axios.prototype.request = function request(config) {6815 -1 if (typeof config === 'string') {6816 -1 config = utils.merge({6817 -1 url: arguments[0]6818 -1 }, arguments[1]);6819 -1 }6820 -1 config = utils.merge(defaults, {6821 -1 method: 'get'6822 -1 }, this.defaults, config);6823 -1 config.method = config.method.toLowerCase();6824 -1 var chain = [ dispatchRequest, undefined ];6825 -1 var promise = Promise.resolve(config);6826 -1 this.interceptors.request.forEach(function unshiftRequestInterceptors(interceptor) {6827 -1 chain.unshift(interceptor.fulfilled, interceptor.rejected);6828 -1 });6829 -1 this.interceptors.response.forEach(function pushResponseInterceptors(interceptor) {6830 -1 chain.push(interceptor.fulfilled, interceptor.rejected);6831 -1 });6832 -1 while (chain.length) {6833 -1 promise = promise.then(chain.shift(), chain.shift());-1 7675 function defaultClearTimeout() { -1 7676 throw new Error('clearTimeout has not been defined'); -1 7677 } -1 7678 (function() { -1 7679 try { -1 7680 if (typeof setTimeout === 'function') { -1 7681 cachedSetTimeout = setTimeout; -1 7682 } else { -1 7683 cachedSetTimeout = defaultSetTimout; -1 7684 } -1 7685 } catch (e) { -1 7686 cachedSetTimeout = defaultSetTimout; 6834 7687 }6835 -1 return promise;6836 -1 };6837 -1 utils.forEach([ 'delete', 'get', 'head', 'options' ], function forEachMethodNoData(method) {6838 -1 Axios.prototype[method] = function(url, config) {6839 -1 return this.request(utils.merge(config || {}, {6840 -1 method: method,6841 -1 url: url6842 -1 }));6843 -1 };6844 -1 });6845 -1 utils.forEach([ 'post', 'put', 'patch' ], function forEachMethodWithData(method) {6846 -1 Axios.prototype[method] = function(url, data, config) {6847 -1 return this.request(utils.merge(config || {}, {6848 -1 method: method,6849 -1 url: url,6850 -1 data: data6851 -1 }));6852 -1 };6853 -1 });6854 -1 module.exports = Axios;6855 -1 }, function(module, exports, __webpack_require__) {6856 -1 'use strict';6857 -1 var utils = __webpack_require__(2);6858 -1 var normalizeHeaderName = __webpack_require__(7);6859 -1 var DEFAULT_CONTENT_TYPE = {6860 -1 'Content-Type': 'application/x-www-form-urlencoded'6861 -1 };6862 -1 function setContentTypeIfUnset(headers, value) {6863 -1 if (!utils.isUndefined(headers) && utils.isUndefined(headers['Content-Type'])) {6864 -1 headers['Content-Type'] = value;-1 7688 try { -1 7689 if (typeof clearTimeout === 'function') { -1 7690 cachedClearTimeout = clearTimeout; -1 7691 } else { -1 7692 cachedClearTimeout = defaultClearTimeout; -1 7693 } -1 7694 } catch (e) { -1 7695 cachedClearTimeout = defaultClearTimeout; 6865 7696 }6866 -1 }6867 -1 function getDefaultAdapter() {6868 -1 var adapter;6869 -1 if (typeof XMLHttpRequest !== 'undefined') {6870 -1 adapter = __webpack_require__(8);6871 -1 } else if (typeof process !== 'undefined') {6872 -1 adapter = __webpack_require__(8);-1 7697 })(); -1 7698 function runTimeout(fun) { -1 7699 if (cachedSetTimeout === setTimeout) { -1 7700 return setTimeout(fun, 0); 6873 7701 }6874 -1 return adapter;6875 -1 }6876 -1 var defaults = {6877 -1 adapter: getDefaultAdapter(),6878 -1 transformRequest: [ function transformRequest(data, headers) {6879 -1 normalizeHeaderName(headers, 'Content-Type');6880 -1 if (utils.isFormData(data) || utils.isArrayBuffer(data) || utils.isBuffer(data) || utils.isStream(data) || utils.isFile(data) || utils.isBlob(data)) {6881 -1 return data;6882 -1 }6883 -1 if (utils.isArrayBufferView(data)) {6884 -1 return data.buffer;-1 7702 if ((cachedSetTimeout === defaultSetTimout || !cachedSetTimeout) && setTimeout) { -1 7703 cachedSetTimeout = setTimeout; -1 7704 return setTimeout(fun, 0); -1 7705 } -1 7706 try { -1 7707 return cachedSetTimeout(fun, 0); -1 7708 } catch (e) { -1 7709 try { -1 7710 return cachedSetTimeout.call(null, fun, 0); -1 7711 } catch (e) { -1 7712 return cachedSetTimeout.call(this, fun, 0); 6885 7713 }6886 -1 if (utils.isURLSearchParams(data)) {6887 -1 setContentTypeIfUnset(headers, 'application/x-www-form-urlencoded;charset=utf-8');6888 -1 return data.toString();-1 7714 } -1 7715 } -1 7716 function runClearTimeout(marker) { -1 7717 if (cachedClearTimeout === clearTimeout) { -1 7718 return clearTimeout(marker); -1 7719 } -1 7720 if ((cachedClearTimeout === defaultClearTimeout || !cachedClearTimeout) && clearTimeout) { -1 7721 cachedClearTimeout = clearTimeout; -1 7722 return clearTimeout(marker); -1 7723 } -1 7724 try { -1 7725 return cachedClearTimeout(marker); -1 7726 } catch (e) { -1 7727 try { -1 7728 return cachedClearTimeout.call(null, marker); -1 7729 } catch (e) { -1 7730 return cachedClearTimeout.call(this, marker); 6889 7731 }6890 -1 if (utils.isObject(data)) {6891 -1 setContentTypeIfUnset(headers, 'application/json;charset=utf-8');6892 -1 return JSON.stringify(data);-1 7732 } -1 7733 } -1 7734 var queue = []; -1 7735 var draining = false; -1 7736 var currentQueue; -1 7737 var queueIndex = -1; -1 7738 function cleanUpNextTick() { -1 7739 if (!draining || !currentQueue) { -1 7740 return; -1 7741 } -1 7742 draining = false; -1 7743 if (currentQueue.length) { -1 7744 queue = currentQueue.concat(queue); -1 7745 } else { -1 7746 queueIndex = -1; -1 7747 } -1 7748 if (queue.length) { -1 7749 drainQueue(); -1 7750 } -1 7751 } -1 7752 function drainQueue() { -1 7753 if (draining) { -1 7754 return; -1 7755 } -1 7756 var timeout = runTimeout(cleanUpNextTick); -1 7757 draining = true; -1 7758 var len = queue.length; -1 7759 while (len) { -1 7760 currentQueue = queue; -1 7761 queue = []; -1 7762 while (++queueIndex < len) { -1 7763 if (currentQueue) { -1 7764 currentQueue[queueIndex].run(); -1 7765 } 6893 7766 }6894 -1 return data;6895 -1 } ],6896 -1 transformResponse: [ function transformResponse(data) {6897 -1 if (typeof data === 'string') {6898 -1 try {6899 -1 data = JSON.parse(data);6900 -1 } catch (e) {}-1 7767 queueIndex = -1; -1 7768 len = queue.length; -1 7769 } -1 7770 currentQueue = null; -1 7771 draining = false; -1 7772 runClearTimeout(timeout); -1 7773 } -1 7774 process.nextTick = function(fun) { -1 7775 var args = new Array(arguments.length - 1); -1 7776 if (arguments.length > 1) { -1 7777 for (var i = 1; i < arguments.length; i++) { -1 7778 args[i - 1] = arguments[i]; 6901 7779 }6902 -1 return data;6903 -1 } ],6904 -1 timeout: 0,6905 -1 xsrfCookieName: 'XSRF-TOKEN',6906 -1 xsrfHeaderName: 'X-XSRF-TOKEN',6907 -1 maxContentLength: -1,6908 -1 validateStatus: function validateStatus(status) {6909 -1 return status >= 200 && status < 300;6910 7780 } -1 7781 queue.push(new Item(fun, args)); -1 7782 if (queue.length === 1 && !draining) { -1 7783 runTimeout(drainQueue); -1 7784 } -1 7785 }; -1 7786 function Item(fun, array) { -1 7787 this.fun = fun; -1 7788 this.array = array; -1 7789 } -1 7790 Item.prototype.run = function() { -1 7791 this.fun.apply(null, this.array); -1 7792 }; -1 7793 process.title = 'browser'; -1 7794 process.browser = true; -1 7795 process.env = {}; -1 7796 process.argv = []; -1 7797 process.version = ''; -1 7798 process.versions = {}; -1 7799 function noop() {} -1 7800 process.on = noop; -1 7801 process.addListener = noop; -1 7802 process.once = noop; -1 7803 process.off = noop; -1 7804 process.removeListener = noop; -1 7805 process.removeAllListeners = noop; -1 7806 process.emit = noop; -1 7807 process.prependListener = noop; -1 7808 process.prependOnceListener = noop; -1 7809 process.listeners = function(name) { -1 7810 return []; -1 7811 }; -1 7812 process.binding = function(name) { -1 7813 throw new Error('process.binding is not supported'); -1 7814 }; -1 7815 process.cwd = function() { -1 7816 return '/'; -1 7817 }; -1 7818 process.chdir = function(dir) { -1 7819 throw new Error('process.chdir is not supported'); 6911 7820 };6912 -1 defaults.headers = {6913 -1 common: {6914 -1 Accept: 'application/json, text/plain, */*'-1 7821 process.umask = function() { -1 7822 return 0; -1 7823 }; -1 7824 }, {} ] -1 7825 }, {}, [ 1 ]); -1 7826 'use strict'; -1 7827 var utils = axe.utils = {}; -1 7828 'use strict'; -1 7829 var helpers = {}; -1 7830 'use strict'; -1 7831 var _typeof = typeof Symbol === 'function' && typeof Symbol.iterator === 'symbol' ? function(obj) { -1 7832 return typeof obj; -1 7833 } : function(obj) { -1 7834 return obj && typeof Symbol === 'function' && obj.constructor === Symbol && obj !== Symbol.prototype ? 'symbol' : typeof obj; -1 7835 }; -1 7836 var _extends = Object.assign || function(target) { -1 7837 for (var i = 1; i < arguments.length; i++) { -1 7838 var source = arguments[i]; -1 7839 for (var key in source) { -1 7840 if (Object.prototype.hasOwnProperty.call(source, key)) { -1 7841 target[key] = source[key]; 6915 7842 } -1 7843 } -1 7844 } -1 7845 return target; -1 7846 }; -1 7847 function getDefaultConfiguration(audit) { -1 7848 'use strict'; -1 7849 var config; -1 7850 if (audit) { -1 7851 config = axe.utils.clone(audit); -1 7852 config.commons = audit.commons; -1 7853 } else { -1 7854 config = {}; -1 7855 } -1 7856 config.reporter = config.reporter || null; -1 7857 config.rules = config.rules || []; -1 7858 config.checks = config.checks || []; -1 7859 config.data = _extends({ -1 7860 checks: {}, -1 7861 rules: {} -1 7862 }, config.data); -1 7863 return config; -1 7864 } -1 7865 function unpackToObject(collection, audit, method) { -1 7866 'use strict'; -1 7867 var i, l; -1 7868 for (i = 0, l = collection.length; i < l; i++) { -1 7869 audit[method](collection[i]); -1 7870 } -1 7871 } -1 7872 function Audit(audit) { -1 7873 this.brand = 'axe'; -1 7874 this.application = 'axeAPI'; -1 7875 this.tagExclude = [ 'experimental' ]; -1 7876 this.defaultConfig = audit; -1 7877 this._init(); -1 7878 this._defaultLocale = null; -1 7879 } -1 7880 Audit.prototype._setDefaultLocale = function() { -1 7881 if (this._defaultLocale) { -1 7882 return; -1 7883 } -1 7884 var locale = { -1 7885 checks: {}, -1 7886 rules: {} -1 7887 }; -1 7888 var checkIDs = Object.keys(this.data.checks); -1 7889 for (var i = 0; i < checkIDs.length; i++) { -1 7890 var id = checkIDs[i]; -1 7891 var check = this.data.checks[id]; -1 7892 var _check$messages = check.messages, pass = _check$messages.pass, fail = _check$messages.fail, incomplete = _check$messages.incomplete; -1 7893 locale.checks[id] = { -1 7894 pass: pass, -1 7895 fail: fail, -1 7896 incomplete: incomplete 6916 7897 };6917 -1 utils.forEach([ 'delete', 'get', 'head' ], function forEachMethodNoData(method) {6918 -1 defaults.headers[method] = {};6919 -1 });6920 -1 utils.forEach([ 'post', 'put', 'patch' ], function forEachMethodWithData(method) {6921 -1 defaults.headers[method] = utils.merge(DEFAULT_CONTENT_TYPE);6922 -1 });6923 -1 module.exports = defaults;6924 -1 }, function(module, exports, __webpack_require__) {6925 -1 'use strict';6926 -1 var utils = __webpack_require__(2);6927 -1 module.exports = function normalizeHeaderName(headers, normalizedName) {6928 -1 utils.forEach(headers, function processHeader(value, name) {6929 -1 if (name !== normalizedName && name.toUpperCase() === normalizedName.toUpperCase()) {6930 -1 headers[normalizedName] = value;6931 -1 delete headers[name];6932 -1 }6933 -1 });-1 7898 } -1 7899 var ruleIDs = Object.keys(this.data.rules); -1 7900 for (var _i = 0; _i < ruleIDs.length; _i++) { -1 7901 var _id = ruleIDs[_i]; -1 7902 var rule = this.data.rules[_id]; -1 7903 var description = rule.description, help = rule.help; -1 7904 locale.rules[_id] = { -1 7905 description: description, -1 7906 help: help 6934 7907 };6935 -1 }, function(module, exports, __webpack_require__) {6936 -1 'use strict';6937 -1 var utils = __webpack_require__(2);6938 -1 var settle = __webpack_require__(9);6939 -1 var buildURL = __webpack_require__(12);6940 -1 var parseHeaders = __webpack_require__(13);6941 -1 var isURLSameOrigin = __webpack_require__(14);6942 -1 var createError = __webpack_require__(10);6943 -1 var btoa = typeof window !== 'undefined' && window.btoa && window.btoa.bind(window) || __webpack_require__(15);6944 -1 module.exports = function xhrAdapter(config) {6945 -1 return new Promise(function dispatchXhrRequest(resolve, reject) {6946 -1 var requestData = config.data;6947 -1 var requestHeaders = config.headers;6948 -1 if (utils.isFormData(requestData)) {6949 -1 delete requestHeaders['Content-Type'];6950 -1 }6951 -1 var request = new XMLHttpRequest();6952 -1 var loadEvent = 'onreadystatechange';6953 -1 var xDomain = false;6954 -1 if ('production' !== 'test' && typeof window !== 'undefined' && window.XDomainRequest && !('withCredentials' in request) && !isURLSameOrigin(config.url)) {6955 -1 request = new window.XDomainRequest();6956 -1 loadEvent = 'onload';6957 -1 xDomain = true;6958 -1 request.onprogress = function handleProgress() {};6959 -1 request.ontimeout = function handleTimeout() {};6960 -1 }6961 -1 if (config.auth) {6962 -1 var username = config.auth.username || '';6963 -1 var password = config.auth.password || '';6964 -1 requestHeaders.Authorization = 'Basic ' + btoa(username + ':' + password);6965 -1 }6966 -1 request.open(config.method.toUpperCase(), buildURL(config.url, config.params, config.paramsSerializer), true);6967 -1 request.timeout = config.timeout;6968 -1 request[loadEvent] = function handleLoad() {6969 -1 if (!request || request.readyState !== 4 && !xDomain) {6970 -1 return;6971 -1 }6972 -1 if (request.status === 0 && !(request.responseURL && request.responseURL.indexOf('file:') === 0)) {6973 -1 return;6974 -1 }6975 -1 var responseHeaders = 'getAllResponseHeaders' in request ? parseHeaders(request.getAllResponseHeaders()) : null;6976 -1 var responseData = !config.responseType || config.responseType === 'text' ? request.responseText : request.response;6977 -1 var response = {6978 -1 data: responseData,6979 -1 status: request.status === 1223 ? 204 : request.status,6980 -1 statusText: request.status === 1223 ? 'No Content' : request.statusText,6981 -1 headers: responseHeaders,6982 -1 config: config,6983 -1 request: request6984 -1 };6985 -1 settle(resolve, reject, response);6986 -1 request = null;6987 -1 };6988 -1 request.onerror = function handleError() {6989 -1 reject(createError('Network Error', config, null, request));6990 -1 request = null;6991 -1 };6992 -1 request.ontimeout = function handleTimeout() {6993 -1 reject(createError('timeout of ' + config.timeout + 'ms exceeded', config, 'ECONNABORTED', request));6994 -1 request = null;6995 -1 };6996 -1 if (utils.isStandardBrowserEnv()) {6997 -1 var cookies = __webpack_require__(16);6998 -1 var xsrfValue = (config.withCredentials || isURLSameOrigin(config.url)) && config.xsrfCookieName ? cookies.read(config.xsrfCookieName) : undefined;6999 -1 if (xsrfValue) {7000 -1 requestHeaders[config.xsrfHeaderName] = xsrfValue;7001 -1 }7002 -1 }7003 -1 if ('setRequestHeader' in request) {7004 -1 utils.forEach(requestHeaders, function setRequestHeader(val, key) {7005 -1 if (typeof requestData === 'undefined' && key.toLowerCase() === 'content-type') {7006 -1 delete requestHeaders[key];7007 -1 } else {7008 -1 request.setRequestHeader(key, val);7009 -1 }7010 -1 });7011 -1 }7012 -1 if (config.withCredentials) {7013 -1 request.withCredentials = true;7014 -1 }7015 -1 if (config.responseType) {7016 -1 try {7017 -1 request.responseType = config.responseType;7018 -1 } catch (e) {7019 -1 if (config.responseType !== 'json') {7020 -1 throw e;7021 -1 }7022 -1 }7023 -1 }7024 -1 if (typeof config.onDownloadProgress === 'function') {7025 -1 request.addEventListener('progress', config.onDownloadProgress);7026 -1 }7027 -1 if (typeof config.onUploadProgress === 'function' && request.upload) {7028 -1 request.upload.addEventListener('progress', config.onUploadProgress);7029 -1 }7030 -1 if (config.cancelToken) {7031 -1 config.cancelToken.promise.then(function onCanceled(cancel) {7032 -1 if (!request) {7033 -1 return;7034 -1 }7035 -1 request.abort();7036 -1 reject(cancel);7037 -1 request = null;7038 -1 });7039 -1 }7040 -1 if (requestData === undefined) {7041 -1 requestData = null;-1 7908 } -1 7909 this._defaultLocale = locale; -1 7910 }; -1 7911 Audit.prototype._resetLocale = function() { -1 7912 var defaultLocale = this._defaultLocale; -1 7913 if (!defaultLocale) { -1 7914 return; -1 7915 } -1 7916 this.applyLocale(defaultLocale); -1 7917 }; -1 7918 var mergeCheckLocale = function mergeCheckLocale(a, b) { -1 7919 var pass = b.pass, fail = b.fail; -1 7920 if (typeof pass === 'string') { -1 7921 pass = axe.imports.doT.compile(pass); -1 7922 } -1 7923 if (typeof fail === 'string') { -1 7924 fail = axe.imports.doT.compile(fail); -1 7925 } -1 7926 return _extends({}, a, { -1 7927 messages: { -1 7928 pass: pass || a.messages.pass, -1 7929 fail: fail || a.messages.fail, -1 7930 incomplete: _typeof(a.messages.incomplete) === 'object' ? _extends({}, a.messages.incomplete, b.incomplete) : b.incomplete -1 7931 } -1 7932 }); -1 7933 }; -1 7934 var mergeRuleLocale = function mergeRuleLocale(a, b) { -1 7935 var help = b.help, description = b.description; -1 7936 if (typeof help === 'string') { -1 7937 help = axe.imports.doT.compile(help); -1 7938 } -1 7939 if (typeof description === 'string') { -1 7940 description = axe.imports.doT.compile(description); -1 7941 } -1 7942 return _extends({}, a, { -1 7943 help: help || a.help, -1 7944 description: description || a.description -1 7945 }); -1 7946 }; -1 7947 Audit.prototype._applyCheckLocale = function(checks) { -1 7948 var keys = Object.keys(checks); -1 7949 for (var i = 0; i < keys.length; i++) { -1 7950 var id = keys[i]; -1 7951 if (!this.data.checks[id]) { -1 7952 throw new Error('Locale provided for unknown check: "' + id + '"'); -1 7953 } -1 7954 this.data.checks[id] = mergeCheckLocale(this.data.checks[id], checks[id]); -1 7955 } -1 7956 }; -1 7957 Audit.prototype._applyRuleLocale = function(rules) { -1 7958 var keys = Object.keys(rules); -1 7959 for (var i = 0; i < keys.length; i++) { -1 7960 var id = keys[i]; -1 7961 if (!this.data.rules[id]) { -1 7962 throw new Error('Locale provided for unknown rule: "' + id + '"'); -1 7963 } -1 7964 this.data.rules[id] = mergeRuleLocale(this.data.rules[id], rules[id]); -1 7965 } -1 7966 }; -1 7967 Audit.prototype.applyLocale = function(locale) { -1 7968 this._setDefaultLocale(); -1 7969 if (locale.checks) { -1 7970 this._applyCheckLocale(locale.checks); -1 7971 } -1 7972 if (locale.rules) { -1 7973 this._applyRuleLocale(locale.rules); -1 7974 } -1 7975 }; -1 7976 Audit.prototype._init = function() { -1 7977 var audit = getDefaultConfiguration(this.defaultConfig); -1 7978 axe.commons = commons = audit.commons; -1 7979 this.reporter = audit.reporter; -1 7980 this.commands = {}; -1 7981 this.rules = []; -1 7982 this.checks = {}; -1 7983 unpackToObject(audit.rules, this, 'addRule'); -1 7984 unpackToObject(audit.checks, this, 'addCheck'); -1 7985 this.data = {}; -1 7986 this.data.checks = audit.data && audit.data.checks || {}; -1 7987 this.data.rules = audit.data && audit.data.rules || {}; -1 7988 this.data.failureSummaries = audit.data && audit.data.failureSummaries || {}; -1 7989 this.data.incompleteFallbackMessage = audit.data && audit.data.incompleteFallbackMessage || ''; -1 7990 this._constructHelpUrls(); -1 7991 }; -1 7992 Audit.prototype.registerCommand = function(command) { -1 7993 'use strict'; -1 7994 this.commands[command.id] = command.callback; -1 7995 }; -1 7996 Audit.prototype.addRule = function(spec) { -1 7997 'use strict'; -1 7998 if (spec.metadata) { -1 7999 this.data.rules[spec.id] = spec.metadata; -1 8000 } -1 8001 var rule = this.getRule(spec.id); -1 8002 if (rule) { -1 8003 rule.configure(spec); -1 8004 } else { -1 8005 this.rules.push(new Rule(spec, this)); -1 8006 } -1 8007 }; -1 8008 Audit.prototype.addCheck = function(spec) { -1 8009 'use strict'; -1 8010 var metadata = spec.metadata; -1 8011 if ((typeof metadata === 'undefined' ? 'undefined' : _typeof(metadata)) === 'object') { -1 8012 this.data.checks[spec.id] = metadata; -1 8013 if (_typeof(metadata.messages) === 'object') { -1 8014 Object.keys(metadata.messages).filter(function(prop) { -1 8015 return metadata.messages.hasOwnProperty(prop) && typeof metadata.messages[prop] === 'string'; -1 8016 }).forEach(function(prop) { -1 8017 if (metadata.messages[prop].indexOf('function') === 0) { -1 8018 metadata.messages[prop] = new Function('return ' + metadata.messages[prop] + ';')(); 7042 8019 }7043 -1 request.send(requestData);7044 8020 });7045 -1 };7046 -1 }, function(module, exports, __webpack_require__) {7047 -1 'use strict';7048 -1 var createError = __webpack_require__(10);7049 -1 module.exports = function settle(resolve, reject, response) {7050 -1 var validateStatus = response.config.validateStatus;7051 -1 if (!response.status || !validateStatus || validateStatus(response.status)) {7052 -1 resolve(response);7053 -1 } else {7054 -1 reject(createError('Request failed with status code ' + response.status, response.config, null, response.request, response));7055 -1 }7056 -1 };7057 -1 }, function(module, exports, __webpack_require__) {7058 -1 'use strict';7059 -1 var enhanceError = __webpack_require__(11);7060 -1 module.exports = function createError(message, config, code, request, response) {7061 -1 var error = new Error(message);7062 -1 return enhanceError(error, config, code, request, response);7063 -1 };7064 -1 }, function(module, exports) {7065 -1 'use strict';7066 -1 module.exports = function enhanceError(error, config, code, request, response) {7067 -1 error.config = config;7068 -1 if (code) {7069 -1 error.code = code;7070 -1 }7071 -1 error.request = request;7072 -1 error.response = response;7073 -1 return error;7074 -1 };7075 -1 }, function(module, exports, __webpack_require__) {7076 -1 'use strict';7077 -1 var utils = __webpack_require__(2);7078 -1 function encode(val) {7079 -1 return encodeURIComponent(val).replace(/%40/gi, '@').replace(/%3A/gi, ':').replace(/%24/g, '$').replace(/%2C/gi, ',').replace(/%20/g, '+').replace(/%5B/gi, '[').replace(/%5D/gi, ']');7080 8021 }7081 -1 module.exports = function buildURL(url, params, paramsSerializer) {7082 -1 if (!params) {7083 -1 return url;7084 -1 }7085 -1 var serializedParams;7086 -1 if (paramsSerializer) {7087 -1 serializedParams = paramsSerializer(params);7088 -1 } else if (utils.isURLSearchParams(params)) {7089 -1 serializedParams = params.toString();7090 -1 } else {7091 -1 var parts = [];7092 -1 utils.forEach(params, function serialize(val, key) {7093 -1 if (val === null || typeof val === 'undefined') {7094 -1 return;7095 -1 }7096 -1 if (utils.isArray(val)) {7097 -1 key = key + '[]';7098 -1 } else {7099 -1 val = [ val ];7100 -1 }7101 -1 utils.forEach(val, function parseValue(v) {7102 -1 if (utils.isDate(v)) {7103 -1 v = v.toISOString();7104 -1 } else if (utils.isObject(v)) {7105 -1 v = JSON.stringify(v);7106 -1 }7107 -1 parts.push(encode(key) + '=' + encode(v));7108 -1 });-1 8022 } -1 8023 if (this.checks[spec.id]) { -1 8024 this.checks[spec.id].configure(spec); -1 8025 } else { -1 8026 this.checks[spec.id] = new Check(spec); -1 8027 } -1 8028 }; -1 8029 function getRulesToRun(rules, context, options) { -1 8030 var base = { -1 8031 now: [], -1 8032 later: [] -1 8033 }; -1 8034 var splitRules = rules.reduce(function(out, rule) { -1 8035 if (!axe.utils.ruleShouldRun(rule, context, options)) { -1 8036 return out; -1 8037 } -1 8038 if (rule.preload) { -1 8039 out.later.push(rule); -1 8040 return out; -1 8041 } -1 8042 out.now.push(rule); -1 8043 return out; -1 8044 }, base); -1 8045 return splitRules; -1 8046 } -1 8047 function getDefferedRule(rule, context, options) { -1 8048 if (options.performanceTimer) { -1 8049 axe.utils.performanceTimer.mark('mark_rule_start_' + rule.id); -1 8050 } -1 8051 return function(resolve, reject) { -1 8052 rule.run(context, options, function(ruleResult) { -1 8053 resolve(ruleResult); -1 8054 }, function(err) { -1 8055 if (!options.debug) { -1 8056 var errResult = Object.assign(new RuleResult(rule), { -1 8057 result: axe.constants.CANTTELL, -1 8058 description: 'An error occured while running this rule', -1 8059 message: err.message, -1 8060 stack: err.stack, -1 8061 error: err, -1 8062 errorNode: err.errorNode 7109 8063 });7110 -1 serializedParams = parts.join('&');7111 -1 }7112 -1 if (serializedParams) {7113 -1 url += (url.indexOf('?') === -1 ? '?' : '&') + serializedParams;7114 -1 }7115 -1 return url;7116 -1 };7117 -1 }, function(module, exports, __webpack_require__) {7118 -1 'use strict';7119 -1 var utils = __webpack_require__(2);7120 -1 var ignoreDuplicateOf = [ 'age', 'authorization', 'content-length', 'content-type', 'etag', 'expires', 'from', 'host', 'if-modified-since', 'if-unmodified-since', 'last-modified', 'location', 'max-forwards', 'proxy-authorization', 'referer', 'retry-after', 'user-agent' ];7121 -1 module.exports = function parseHeaders(headers) {7122 -1 var parsed = {};7123 -1 var key;7124 -1 var val;7125 -1 var i;7126 -1 if (!headers) {7127 -1 return parsed;-1 8064 resolve(errResult); -1 8065 } else { -1 8066 reject(err); 7128 8067 }7129 -1 utils.forEach(headers.split('\n'), function parser(line) {7130 -1 i = line.indexOf(':');7131 -1 key = utils.trim(line.substr(0, i)).toLowerCase();7132 -1 val = utils.trim(line.substr(i + 1));7133 -1 if (key) {7134 -1 if (parsed[key] && ignoreDuplicateOf.indexOf(key) >= 0) {7135 -1 return;7136 -1 }7137 -1 if (key === 'set-cookie') {7138 -1 parsed[key] = (parsed[key] ? parsed[key] : []).concat([ val ]);7139 -1 } else {7140 -1 parsed[key] = parsed[key] ? parsed[key] + ', ' + val : val;7141 -1 }7142 -1 }-1 8068 }); -1 8069 }; -1 8070 } -1 8071 Audit.prototype.run = function(context, options, resolve, reject) { -1 8072 'use strict'; -1 8073 this.normalizeOptions(options); -1 8074 axe._selectCache = []; -1 8075 var allRulesToRun = getRulesToRun(this.rules, context, options); -1 8076 var runNowRules = allRulesToRun.now; -1 8077 var runLaterRules = allRulesToRun.later; -1 8078 var nowRulesQueue = axe.utils.queue(); -1 8079 runNowRules.forEach(function(rule) { -1 8080 nowRulesQueue.defer(getDefferedRule(rule, context, options)); -1 8081 }); -1 8082 var preloaderQueue = axe.utils.queue(); -1 8083 if (runLaterRules.length) { -1 8084 preloaderQueue.defer(function(res, rej) { -1 8085 axe.utils.preload(options).then(function(preloadResults) { -1 8086 var assets = preloadResults[0]; -1 8087 res(assets); -1 8088 }).catch(function(err) { -1 8089 console.warn('Couldn\'t load preload assets: ', err); -1 8090 var assets = undefined; -1 8091 res(assets); 7143 8092 });7144 -1 return parsed;7145 -1 };7146 -1 }, function(module, exports, __webpack_require__) {7147 -1 'use strict';7148 -1 var utils = __webpack_require__(2);7149 -1 module.exports = utils.isStandardBrowserEnv() ? function standardBrowserEnv() {7150 -1 var msie = /(msie|trident)/i.test(navigator.userAgent);7151 -1 var urlParsingNode = document.createElement('a');7152 -1 var originURL;7153 -1 function resolveURL(url) {7154 -1 var href = url;7155 -1 if (msie) {7156 -1 urlParsingNode.setAttribute('href', href);7157 -1 href = urlParsingNode.href;7158 -1 }7159 -1 urlParsingNode.setAttribute('href', href);7160 -1 return {7161 -1 href: urlParsingNode.href,7162 -1 protocol: urlParsingNode.protocol ? urlParsingNode.protocol.replace(/:$/, '') : '',7163 -1 host: urlParsingNode.host,7164 -1 search: urlParsingNode.search ? urlParsingNode.search.replace(/^\?/, '') : '',7165 -1 hash: urlParsingNode.hash ? urlParsingNode.hash.replace(/^#/, '') : '',7166 -1 hostname: urlParsingNode.hostname,7167 -1 port: urlParsingNode.port,7168 -1 pathname: urlParsingNode.pathname.charAt(0) === '/' ? urlParsingNode.pathname : '/' + urlParsingNode.pathname7169 -1 };-1 8093 }); -1 8094 } -1 8095 var queueForNowRulesAndPreloader = axe.utils.queue(); -1 8096 queueForNowRulesAndPreloader.defer(nowRulesQueue); -1 8097 queueForNowRulesAndPreloader.defer(preloaderQueue); -1 8098 queueForNowRulesAndPreloader.then(function(nowRulesAndPreloaderResults) { -1 8099 var assetsFromQueue = nowRulesAndPreloaderResults.pop(); -1 8100 if (assetsFromQueue && assetsFromQueue.length) { -1 8101 var assets = assetsFromQueue[0]; -1 8102 if (assets) { -1 8103 context = _extends({}, context, assets); 7170 8104 }7171 -1 originURL = resolveURL(window.location.href);7172 -1 return function isURLSameOrigin(requestURL) {7173 -1 var parsed = utils.isString(requestURL) ? resolveURL(requestURL) : requestURL;7174 -1 return parsed.protocol === originURL.protocol && parsed.host === originURL.host;7175 -1 };7176 -1 }() : function nonStandardBrowserEnv() {7177 -1 return function isURLSameOrigin() {7178 -1 return true;-1 8105 } -1 8106 var nowRulesResults = nowRulesAndPreloaderResults[0]; -1 8107 if (!runLaterRules.length) { -1 8108 axe._selectCache = undefined; -1 8109 resolve(nowRulesResults.filter(function(result) { -1 8110 return !!result; -1 8111 })); -1 8112 return; -1 8113 } -1 8114 var laterRulesQueue = axe.utils.queue(); -1 8115 runLaterRules.forEach(function(rule) { -1 8116 var deferredRule = getDefferedRule(rule, context, options); -1 8117 laterRulesQueue.defer(deferredRule); -1 8118 }); -1 8119 laterRulesQueue.then(function(laterRuleResults) { -1 8120 axe._selectCache = undefined; -1 8121 resolve(nowRulesResults.concat(laterRuleResults).filter(function(result) { -1 8122 return !!result; -1 8123 })); -1 8124 }).catch(reject); -1 8125 }).catch(reject); -1 8126 }; -1 8127 Audit.prototype.after = function(results, options) { -1 8128 'use strict'; -1 8129 var rules = this.rules; -1 8130 return results.map(function(ruleResult) { -1 8131 var rule = axe.utils.findBy(rules, 'id', ruleResult.id); -1 8132 if (!rule) { -1 8133 throw new Error('Result for unknown rule. You may be running mismatch aXe-core versions'); -1 8134 } -1 8135 return rule.after(ruleResult, options); -1 8136 }); -1 8137 }; -1 8138 Audit.prototype.getRule = function(ruleId) { -1 8139 return this.rules.find(function(rule) { -1 8140 return rule.id === ruleId; -1 8141 }); -1 8142 }; -1 8143 Audit.prototype.normalizeOptions = function(options) { -1 8144 'use strict'; -1 8145 var audit = this; -1 8146 if (_typeof(options.runOnly) === 'object') { -1 8147 if (Array.isArray(options.runOnly)) { -1 8148 options.runOnly = { -1 8149 type: 'tag', -1 8150 values: options.runOnly 7179 8151 };7180 -1 }();7181 -1 }, function(module, exports) {7182 -1 'use strict';7183 -1 var chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=';7184 -1 function E() {7185 -1 this.message = 'String contains an invalid character';7186 8152 }7187 -1 E.prototype = new Error();7188 -1 E.prototype.code = 5;7189 -1 E.prototype.name = 'InvalidCharacterError';7190 -1 function btoa(input) {7191 -1 var str = String(input);7192 -1 var output = '';7193 -1 for (var block, charCode, idx = 0, map = chars; str.charAt(idx | 0) || (map = '=',7194 -1 idx % 1); output += map.charAt(63 & block >> 8 - idx % 1 * 8)) {7195 -1 charCode = str.charCodeAt(idx += 3 / 4);7196 -1 if (charCode > 255) {7197 -1 throw new E();7198 -1 }7199 -1 block = block << 8 | charCode;7200 -1 }7201 -1 return output;-1 8153 var only = options.runOnly; -1 8154 if (only.value && !only.values) { -1 8155 only.values = only.value; -1 8156 delete only.value; 7202 8157 }7203 -1 module.exports = btoa;7204 -1 }, function(module, exports, __webpack_require__) {7205 -1 'use strict';7206 -1 var utils = __webpack_require__(2);7207 -1 module.exports = utils.isStandardBrowserEnv() ? function standardBrowserEnv() {7208 -1 return {7209 -1 write: function write(name, value, expires, path, domain, secure) {7210 -1 var cookie = [];7211 -1 cookie.push(name + '=' + encodeURIComponent(value));7212 -1 if (utils.isNumber(expires)) {7213 -1 cookie.push('expires=' + new Date(expires).toGMTString());7214 -1 }7215 -1 if (utils.isString(path)) {7216 -1 cookie.push('path=' + path);7217 -1 }7218 -1 if (utils.isString(domain)) {7219 -1 cookie.push('domain=' + domain);7220 -1 }7221 -1 if (secure === true) {7222 -1 cookie.push('secure');7223 -1 }7224 -1 document.cookie = cookie.join('; ');7225 -1 },7226 -1 read: function read(name) {7227 -1 var match = document.cookie.match(new RegExp('(^|;\\s*)(' + name + ')=([^;]*)'));7228 -1 return match ? decodeURIComponent(match[3]) : null;7229 -1 },7230 -1 remove: function remove(name) {7231 -1 this.write(name, '', Date.now() - 864e5);7232 -1 }7233 -1 };7234 -1 }() : function nonStandardBrowserEnv() {7235 -1 return {7236 -1 write: function write() {},7237 -1 read: function read() {7238 -1 return null;7239 -1 },7240 -1 remove: function remove() {}7241 -1 };7242 -1 }();7243 -1 }, function(module, exports, __webpack_require__) {7244 -1 'use strict';7245 -1 var utils = __webpack_require__(2);7246 -1 function InterceptorManager() {7247 -1 this.handlers = [];-1 8158 if (!Array.isArray(only.values) || only.values.length === 0) { -1 8159 throw new Error('runOnly.values must be a non-empty array'); 7248 8160 }7249 -1 InterceptorManager.prototype.use = function use(fulfilled, rejected) {7250 -1 this.handlers.push({7251 -1 fulfilled: fulfilled,7252 -1 rejected: rejected7253 -1 });7254 -1 return this.handlers.length - 1;7255 -1 };7256 -1 InterceptorManager.prototype.eject = function eject(id) {7257 -1 if (this.handlers[id]) {7258 -1 this.handlers[id] = null;7259 -1 }7260 -1 };7261 -1 InterceptorManager.prototype.forEach = function forEach(fn) {7262 -1 utils.forEach(this.handlers, function forEachHandler(h) {7263 -1 if (h !== null) {7264 -1 fn(h);-1 8161 if ([ 'rule', 'rules' ].includes(only.type)) { -1 8162 only.type = 'rule'; -1 8163 only.values.forEach(function(ruleId) { -1 8164 if (!audit.getRule(ruleId)) { -1 8165 throw new Error('unknown rule `' + ruleId + '` in options.runOnly'); 7265 8166 } 7266 8167 });7267 -1 };7268 -1 module.exports = InterceptorManager;7269 -1 }, function(module, exports, __webpack_require__) {7270 -1 'use strict';7271 -1 var utils = __webpack_require__(2);7272 -1 var transformData = __webpack_require__(19);7273 -1 var isCancel = __webpack_require__(20);7274 -1 var defaults = __webpack_require__(6);7275 -1 var isAbsoluteURL = __webpack_require__(21);7276 -1 var combineURLs = __webpack_require__(22);7277 -1 function throwIfCancellationRequested(config) {7278 -1 if (config.cancelToken) {7279 -1 config.cancelToken.throwIfRequested();-1 8168 } else if ([ 'tag', 'tags', undefined ].includes(only.type)) { -1 8169 only.type = 'tag'; -1 8170 var unmatchedTags = audit.rules.reduce(function(unmatchedTags, rule) { -1 8171 return unmatchedTags.length ? unmatchedTags.filter(function(tag) { -1 8172 return !rule.tags.includes(tag); -1 8173 }) : unmatchedTags; -1 8174 }, only.values); -1 8175 if (unmatchedTags.length !== 0) { -1 8176 axe.log('Could not find tags `' + unmatchedTags.join('`, `') + '`'); 7280 8177 } -1 8178 } else { -1 8179 throw new Error('Unknown runOnly type \'' + only.type + '\''); 7281 8180 }7282 -1 module.exports = function dispatchRequest(config) {7283 -1 throwIfCancellationRequested(config);7284 -1 if (config.baseURL && !isAbsoluteURL(config.url)) {7285 -1 config.url = combineURLs(config.baseURL, config.url);-1 8181 } -1 8182 if (_typeof(options.rules) === 'object') { -1 8183 Object.keys(options.rules).forEach(function(ruleId) { -1 8184 if (!audit.getRule(ruleId)) { -1 8185 throw new Error('unknown rule `' + ruleId + '` in options.rules'); 7286 8186 }7287 -1 config.headers = config.headers || {};7288 -1 config.data = transformData(config.data, config.headers, config.transformRequest);7289 -1 config.headers = utils.merge(config.headers.common || {}, config.headers[config.method] || {}, config.headers || {});7290 -1 utils.forEach([ 'delete', 'get', 'head', 'post', 'put', 'patch', 'common' ], function cleanHeaderConfig(method) {7291 -1 delete config.headers[method];7292 -1 });7293 -1 var adapter = config.adapter || defaults.adapter;7294 -1 return adapter(config).then(function onAdapterResolution(response) {7295 -1 throwIfCancellationRequested(config);7296 -1 response.data = transformData(response.data, response.headers, config.transformResponse);7297 -1 return response;7298 -1 }, function onAdapterRejection(reason) {7299 -1 if (!isCancel(reason)) {7300 -1 throwIfCancellationRequested(config);7301 -1 if (reason && reason.response) {7302 -1 reason.response.data = transformData(reason.response.data, reason.response.headers, config.transformResponse);7303 -1 }7304 -1 }7305 -1 return Promise.reject(reason);7306 -1 });7307 -1 };7308 -1 }, function(module, exports, __webpack_require__) {7309 -1 'use strict';7310 -1 var utils = __webpack_require__(2);7311 -1 module.exports = function transformData(data, headers, fns) {7312 -1 utils.forEach(fns, function transform(fn) {7313 -1 data = fn(data, headers);7314 -1 });7315 -1 return data;7316 -1 };7317 -1 }, function(module, exports) {7318 -1 'use strict';7319 -1 module.exports = function isCancel(value) {7320 -1 return !!(value && value.__CANCEL__);7321 -1 };7322 -1 }, function(module, exports) {7323 -1 'use strict';7324 -1 module.exports = function isAbsoluteURL(url) {7325 -1 return /^([a-z][a-z\d\+\-\.]*:)?\/\//i.test(url);7326 -1 };7327 -1 }, function(module, exports) {7328 -1 'use strict';7329 -1 module.exports = function combineURLs(baseURL, relativeURL) {7330 -1 return relativeURL ? baseURL.replace(/\/+$/, '') + '/' + relativeURL.replace(/^\/+/, '') : baseURL;7331 -1 };7332 -1 }, function(module, exports) {7333 -1 'use strict';7334 -1 function Cancel(message) {7335 -1 this.message = message;-1 8187 }); -1 8188 } -1 8189 return options; -1 8190 }; -1 8191 Audit.prototype.setBranding = function(branding) { -1 8192 'use strict'; -1 8193 var previous = { -1 8194 brand: this.brand, -1 8195 application: this.application -1 8196 }; -1 8197 if (branding && branding.hasOwnProperty('brand') && branding.brand && typeof branding.brand === 'string') { -1 8198 this.brand = branding.brand; -1 8199 } -1 8200 if (branding && branding.hasOwnProperty('application') && branding.application && typeof branding.application === 'string') { -1 8201 this.application = branding.application; -1 8202 } -1 8203 this._constructHelpUrls(previous); -1 8204 }; -1 8205 function getHelpUrl(_ref, ruleId, version) { -1 8206 var brand = _ref.brand, application = _ref.application; -1 8207 return axe.constants.helpUrlBase + brand + '/' + (version || axe.version.substring(0, axe.version.lastIndexOf('.'))) + '/' + ruleId + '?application=' + application; -1 8208 } -1 8209 Audit.prototype._constructHelpUrls = function() { -1 8210 var _this = this; -1 8211 var previous = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null; -1 8212 var version = (axe.version.match(/^[1-9][0-9]*\.[0-9]+/) || [ 'x.y' ])[0]; -1 8213 this.rules.forEach(function(rule) { -1 8214 if (!_this.data.rules[rule.id]) { -1 8215 _this.data.rules[rule.id] = {}; 7336 8216 }7337 -1 Cancel.prototype.toString = function toString() {7338 -1 return 'Cancel' + (this.message ? ': ' + this.message : '');7339 -1 };7340 -1 Cancel.prototype.__CANCEL__ = true;7341 -1 module.exports = Cancel;7342 -1 }, function(module, exports, __webpack_require__) {7343 -1 'use strict';7344 -1 var Cancel = __webpack_require__(23);7345 -1 function CancelToken(executor) {7346 -1 if (typeof executor !== 'function') {7347 -1 throw new TypeError('executor must be a function.');7348 -1 }7349 -1 var resolvePromise;7350 -1 this.promise = new Promise(function promiseExecutor(resolve) {7351 -1 resolvePromise = resolve;7352 -1 });7353 -1 var token = this;7354 -1 executor(function cancel(message) {7355 -1 if (token.reason) {7356 -1 return;7357 -1 }7358 -1 token.reason = new Cancel(message);7359 -1 resolvePromise(token.reason);7360 -1 });-1 8217 var metaData = _this.data.rules[rule.id]; -1 8218 if (typeof metaData.helpUrl !== 'string' || previous && metaData.helpUrl === getHelpUrl(previous, rule.id, version)) { -1 8219 metaData.helpUrl = getHelpUrl(_this, rule.id, version); -1 8220 } -1 8221 }); -1 8222 }; -1 8223 Audit.prototype.resetRulesAndChecks = function() { -1 8224 'use strict'; -1 8225 this._init(); -1 8226 this._resetLocale(); -1 8227 }; -1 8228 'use strict'; -1 8229 function CheckResult(check) { -1 8230 'use strict'; -1 8231 this.id = check.id; -1 8232 this.data = null; -1 8233 this.relatedNodes = []; -1 8234 this.result = null; -1 8235 } -1 8236 'use strict'; -1 8237 function createExecutionContext(spec) { -1 8238 'use strict'; -1 8239 if (typeof spec === 'string') { -1 8240 return new Function('return ' + spec + ';')(); -1 8241 } -1 8242 return spec; -1 8243 } -1 8244 function Check(spec) { -1 8245 if (spec) { -1 8246 this.id = spec.id; -1 8247 this.configure(spec); -1 8248 } -1 8249 } -1 8250 Check.prototype.enabled = true; -1 8251 Check.prototype.run = function(node, options, context, resolve, reject) { -1 8252 'use strict'; -1 8253 options = options || {}; -1 8254 var enabled = options.hasOwnProperty('enabled') ? options.enabled : this.enabled, checkOptions = options.options || this.options; -1 8255 if (enabled) { -1 8256 var checkResult = new CheckResult(this); -1 8257 var checkHelper = axe.utils.checkHelper(checkResult, options, resolve, reject); -1 8258 var result; -1 8259 try { -1 8260 result = this.evaluate.call(checkHelper, node.actualNode, checkOptions, node, context); -1 8261 } catch (e) { -1 8262 if (node && node.actualNode) { -1 8263 e.errorNode = new DqElement(node.actualNode).toJSON(); -1 8264 } -1 8265 reject(e); -1 8266 return; 7361 8267 }7362 -1 CancelToken.prototype.throwIfRequested = function throwIfRequested() {7363 -1 if (this.reason) {7364 -1 throw this.reason;-1 8268 if (!checkHelper.isAsync) { -1 8269 checkResult.result = result; -1 8270 resolve(checkResult); -1 8271 } -1 8272 } else { -1 8273 resolve(null); -1 8274 } -1 8275 }; -1 8276 Check.prototype.configure = function(spec) { -1 8277 var _this = this; -1 8278 [ 'options', 'enabled' ].filter(function(prop) { -1 8279 return spec.hasOwnProperty(prop); -1 8280 }).forEach(function(prop) { -1 8281 return _this[prop] = spec[prop]; -1 8282 }); -1 8283 [ 'evaluate', 'after' ].filter(function(prop) { -1 8284 return spec.hasOwnProperty(prop); -1 8285 }).forEach(function(prop) { -1 8286 return _this[prop] = createExecutionContext(spec[prop]); -1 8287 }); -1 8288 }; -1 8289 'use strict'; -1 8290 var _typeof = typeof Symbol === 'function' && typeof Symbol.iterator === 'symbol' ? function(obj) { -1 8291 return typeof obj; -1 8292 } : function(obj) { -1 8293 return obj && typeof Symbol === 'function' && obj.constructor === Symbol && obj !== Symbol.prototype ? 'symbol' : typeof obj; -1 8294 }; -1 8295 function pushUniqueFrame(collection, frame) { -1 8296 'use strict'; -1 8297 if (axe.utils.isHidden(frame)) { -1 8298 return; -1 8299 } -1 8300 var fr = axe.utils.findBy(collection, 'node', frame); -1 8301 if (!fr) { -1 8302 collection.push({ -1 8303 node: frame, -1 8304 include: [], -1 8305 exclude: [] -1 8306 }); -1 8307 } -1 8308 } -1 8309 function pushUniqueFrameSelector(context, type, selectorArray) { -1 8310 'use strict'; -1 8311 context.frames = context.frames || []; -1 8312 var result, frame; -1 8313 var frames = document.querySelectorAll(selectorArray.shift()); -1 8314 frameloop: for (var i = 0, l = frames.length; i < l; i++) { -1 8315 frame = frames[i]; -1 8316 for (var j = 0, l2 = context.frames.length; j < l2; j++) { -1 8317 if (context.frames[j].node === frame) { -1 8318 context.frames[j][type].push(selectorArray); -1 8319 break frameloop; 7365 8320 } -1 8321 } -1 8322 result = { -1 8323 node: frame, -1 8324 include: [], -1 8325 exclude: [] 7366 8326 };7367 -1 CancelToken.source = function source() {7368 -1 var cancel;7369 -1 var token = new CancelToken(function executor(c) {7370 -1 cancel = c;7371 -1 });-1 8327 if (selectorArray) { -1 8328 result[type].push(selectorArray); -1 8329 } -1 8330 context.frames.push(result); -1 8331 } -1 8332 } -1 8333 function normalizeContext(context) { -1 8334 'use strict'; -1 8335 if (context && (typeof context === 'undefined' ? 'undefined' : _typeof(context)) === 'object' || context instanceof NodeList) { -1 8336 if (context instanceof Node) { 7372 8337 return {7373 -1 token: token,7374 -1 cancel: cancel-1 8338 include: [ context ], -1 8339 exclude: [] 7375 8340 };7376 -1 };7377 -1 module.exports = CancelToken;7378 -1 }, function(module, exports) {7379 -1 'use strict';7380 -1 module.exports = function spread(callback) {7381 -1 return function wrap(arr) {7382 -1 return callback.apply(null, arr);-1 8341 } -1 8342 if (context.hasOwnProperty('include') || context.hasOwnProperty('exclude')) { -1 8343 return { -1 8344 include: context.include && +context.include.length ? context.include : [ document ], -1 8345 exclude: context.exclude || [] 7383 8346 };7384 -1 };7385 -1 } ]);7386 -1 }();7387 -1 'use strict';7388 -1 axe.imports['doT'] = function(module, exports, define, require, process) {7389 -1 var global = {};7390 -1 var __old_global__ = global['doT'];7391 -1 (function() {7392 -1 'use strict';7393 -1 var doT = {7394 -1 name: 'doT',7395 -1 version: '1.1.1',7396 -1 templateSettings: {7397 -1 evaluate: /\{\{([\s\S]+?(\}?)+)\}\}/g,7398 -1 interpolate: /\{\{=([\s\S]+?)\}\}/g,7399 -1 encode: /\{\{!([\s\S]+?)\}\}/g,7400 -1 use: /\{\{#([\s\S]+?)\}\}/g,7401 -1 useParams: /(^|[^\w$])def(?:\.|\[[\'\"])([\w$\.]+)(?:[\'\"]\])?\s*\:\s*([\w$\.]+|\"[^\"]+\"|\'[^\']+\'|\{[^\}]+\})/g,7402 -1 define: /\{\{##\s*([\w\.$]+)\s*(\:|=)([\s\S]+?)#\}\}/g,7403 -1 defineParams: /^\s*([\w$]+):([\s\S]+)/,7404 -1 conditional: /\{\{\?(\?)?\s*([\s\S]*?)\s*\}\}/g,7405 -1 iterate: /\{\{~\s*(?:\}\}|([\s\S]+?)\s*\:\s*([\w$]+)\s*(?:\:\s*([\w$]+))?\s*\}\})/g,7406 -1 varname: 'it',7407 -1 strip: true,7408 -1 append: true,7409 -1 selfcontained: false,7410 -1 doNotSkipEncoded: false7411 -1 },7412 -1 template: undefined,7413 -1 compile: undefined,7414 -1 log: true7415 -1 }, _globals;7416 -1 doT.encodeHTMLSource = function(doNotSkipEncoded) {7417 -1 var encodeHTMLRules = {7418 -1 '&': '&',7419 -1 '<': '<',7420 -1 '>': '>',7421 -1 '"': '"',7422 -1 '\'': ''',7423 -1 '/': '/'7424 -1 }, matchHTML = doNotSkipEncoded ? /[&<>"'\/]/g : /&(?!#?\w+;)|<|>|"|'|\//g;7425 -1 return function(code) {7426 -1 return code ? code.toString().replace(matchHTML, function(m) {7427 -1 return encodeHTMLRules[m] || m;7428 -1 }) : '';-1 8347 } -1 8348 if (context.length === +context.length) { -1 8349 return { -1 8350 include: context, -1 8351 exclude: [] 7429 8352 }; -1 8353 } -1 8354 } -1 8355 if (typeof context === 'string') { -1 8356 return { -1 8357 include: [ context ], -1 8358 exclude: [] 7430 8359 };7431 -1 _globals = function() {7432 -1 return this || {};7433 -1 }();7434 -1 if (typeof module !== 'undefined' && module.exports) {7435 -1 module.exports = doT;7436 -1 } else if (typeof define === 'function' && define.amd) {7437 -1 define(function() {7438 -1 return doT;-1 8360 } -1 8361 return { -1 8362 include: [ document ], -1 8363 exclude: [] -1 8364 }; -1 8365 } -1 8366 function parseSelectorArray(context, type) { -1 8367 'use strict'; -1 8368 var item, result = [], nodeList; -1 8369 for (var i = 0, l = context[type].length; i < l; i++) { -1 8370 item = context[type][i]; -1 8371 if (typeof item === 'string') { -1 8372 nodeList = Array.from(document.querySelectorAll(item)); -1 8373 result = result.concat(nodeList.map(function(node) { -1 8374 return axe.utils.getNodeFromTree(context.flatTree[0], node); -1 8375 })); -1 8376 break; -1 8377 } else if (item && item.length && !(item instanceof Node)) { -1 8378 if (item.length > 1) { -1 8379 pushUniqueFrameSelector(context, type, item); -1 8380 } else { -1 8381 nodeList = Array.from(document.querySelectorAll(item[0])); -1 8382 result = result.concat(nodeList.map(function(node) { -1 8383 return axe.utils.getNodeFromTree(context.flatTree[0], node); -1 8384 })); -1 8385 } -1 8386 } else if (item instanceof Node) { -1 8387 if (item.documentElement instanceof Node) { -1 8388 result.push(context.flatTree[0]); -1 8389 } else { -1 8390 result.push(axe.utils.getNodeFromTree(context.flatTree[0], item)); -1 8391 } -1 8392 } -1 8393 } -1 8394 return result.filter(function(r) { -1 8395 return r; -1 8396 }); -1 8397 } -1 8398 function validateContext(context) { -1 8399 'use strict'; -1 8400 if (context.include.length === 0) { -1 8401 if (context.frames.length === 0) { -1 8402 var env = axe.utils.respondable.isInFrame() ? 'frame' : 'page'; -1 8403 return new Error('No elements found for include in ' + env + ' Context'); -1 8404 } -1 8405 context.frames.forEach(function(frame, i) { -1 8406 if (frame.include.length === 0) { -1 8407 return new Error('No elements found for include in Context of frame ' + i); -1 8408 } -1 8409 }); -1 8410 } -1 8411 } -1 8412 function getRootNode(_ref) { -1 8413 var include = _ref.include, exclude = _ref.exclude; -1 8414 var selectors = Array.from(include).concat(Array.from(exclude)); -1 8415 var localDocument = selectors.reduce(function(result, item) { -1 8416 if (result) { -1 8417 return result; -1 8418 } else if (item instanceof Element) { -1 8419 return item.ownerDocument; -1 8420 } else if (item instanceof Document) { -1 8421 return item; -1 8422 } -1 8423 }, null); -1 8424 return (localDocument || document).documentElement; -1 8425 } -1 8426 function Context(spec) { -1 8427 'use strict'; -1 8428 var _this = this; -1 8429 this.frames = []; -1 8430 this.initiator = spec && typeof spec.initiator === 'boolean' ? spec.initiator : true; -1 8431 this.page = false; -1 8432 spec = normalizeContext(spec); -1 8433 this.flatTree = axe.utils.getFlattenedTree(getRootNode(spec)); -1 8434 this.exclude = spec.exclude; -1 8435 this.include = spec.include; -1 8436 this.include = parseSelectorArray(this, 'include'); -1 8437 this.exclude = parseSelectorArray(this, 'exclude'); -1 8438 axe.utils.select('frame, iframe', this).forEach(function(frame) { -1 8439 if (isNodeInContext(frame, _this)) { -1 8440 pushUniqueFrame(_this.frames, frame.actualNode); -1 8441 } -1 8442 }); -1 8443 if (this.include.length === 1 && this.include[0].actualNode === document.documentElement) { -1 8444 this.page = true; -1 8445 } -1 8446 var err = validateContext(this); -1 8447 if (err instanceof Error) { -1 8448 throw err; -1 8449 } -1 8450 if (!Array.isArray(this.include)) { -1 8451 this.include = Array.from(this.include); -1 8452 } -1 8453 this.include.sort(axe.utils.nodeSorter); -1 8454 } -1 8455 'use strict'; -1 8456 function RuleResult(rule) { -1 8457 'use strict'; -1 8458 this.id = rule.id; -1 8459 this.result = axe.constants.NA; -1 8460 this.pageLevel = rule.pageLevel; -1 8461 this.impact = null; -1 8462 this.nodes = []; -1 8463 } -1 8464 'use strict'; -1 8465 function Rule(spec, parentAudit) { -1 8466 'use strict'; -1 8467 this._audit = parentAudit; -1 8468 this.id = spec.id; -1 8469 this.selector = spec.selector || '*'; -1 8470 this.excludeHidden = typeof spec.excludeHidden === 'boolean' ? spec.excludeHidden : true; -1 8471 this.enabled = typeof spec.enabled === 'boolean' ? spec.enabled : true; -1 8472 this.pageLevel = typeof spec.pageLevel === 'boolean' ? spec.pageLevel : false; -1 8473 this.any = spec.any || []; -1 8474 this.all = spec.all || []; -1 8475 this.none = spec.none || []; -1 8476 this.tags = spec.tags || []; -1 8477 this.preload = spec.preload ? true : false; -1 8478 if (spec.matches) { -1 8479 this.matches = createExecutionContext(spec.matches); -1 8480 } -1 8481 } -1 8482 Rule.prototype.matches = function() { -1 8483 'use strict'; -1 8484 return true; -1 8485 }; -1 8486 Rule.prototype.gather = function(context) { -1 8487 'use strict'; -1 8488 var elements = axe.utils.select(this.selector, context); -1 8489 if (this.excludeHidden) { -1 8490 return elements.filter(function(element) { -1 8491 return !axe.utils.isHidden(element.actualNode); -1 8492 }); -1 8493 } -1 8494 return elements; -1 8495 }; -1 8496 Rule.prototype.runChecks = function(type, node, options, context, resolve, reject) { -1 8497 'use strict'; -1 8498 var self = this; -1 8499 var checkQueue = axe.utils.queue(); -1 8500 this[type].forEach(function(c) { -1 8501 var check = self._audit.checks[c.id || c]; -1 8502 var option = axe.utils.getCheckOption(check, self.id, options); -1 8503 checkQueue.defer(function(res, rej) { -1 8504 check.run(node, option, context, res, rej); -1 8505 }); -1 8506 }); -1 8507 checkQueue.then(function(results) { -1 8508 results = results.filter(function(check) { -1 8509 return check; -1 8510 }); -1 8511 resolve({ -1 8512 type: type, -1 8513 results: results -1 8514 }); -1 8515 }).catch(reject); -1 8516 }; -1 8517 Rule.prototype.run = function(context, options, resolve, reject) { -1 8518 var _this = this; -1 8519 var q = axe.utils.queue(); -1 8520 var ruleResult = new RuleResult(this); -1 8521 var markStart = 'mark_rule_start_' + this.id; -1 8522 var markEnd = 'mark_rule_end_' + this.id; -1 8523 var markChecksStart = 'mark_runchecks_start_' + this.id; -1 8524 var markChecksEnd = 'mark_runchecks_end_' + this.id; -1 8525 var nodes = void 0; -1 8526 try { -1 8527 nodes = this.gather(context).filter(function(node) { -1 8528 return _this.matches(node.actualNode, node, context); -1 8529 }); -1 8530 } catch (error) { -1 8531 reject(new SupportError({ -1 8532 cause: error, -1 8533 ruleId: this.id -1 8534 })); -1 8535 return; -1 8536 } -1 8537 if (options.performanceTimer) { -1 8538 axe.log('gather (', nodes.length, '):', axe.utils.performanceTimer.timeElapsed() + 'ms'); -1 8539 axe.utils.performanceTimer.mark(markChecksStart); -1 8540 } -1 8541 nodes.forEach(function(node) { -1 8542 q.defer(function(resolveNode, rejectNode) { -1 8543 var checkQueue = axe.utils.queue(); -1 8544 [ 'any', 'all', 'none' ].forEach(function(type) { -1 8545 checkQueue.defer(function(res, rej) { -1 8546 _this.runChecks(type, node, options, context, res, rej); -1 8547 }); 7439 8548 });7440 -1 } else {7441 -1 _globals.doT = doT;7442 -1 }7443 -1 var startend = {7444 -1 append: {7445 -1 start: '\'+(',7446 -1 end: ')+\'',7447 -1 startencode: '\'+encodeHTML('7448 -1 },7449 -1 split: {7450 -1 start: '\';out+=(',7451 -1 end: ');out+=\'',7452 -1 startencode: '\';out+=encodeHTML('7453 -1 }7454 -1 }, skip = /$^/;7455 -1 function resolveDefs(c, block, def) {7456 -1 return (typeof block === 'string' ? block : block.toString()).replace(c.define || skip, function(m, code, assign, value) {7457 -1 if (code.indexOf('def.') === 0) {7458 -1 code = code.substring(4);7459 -1 }7460 -1 if (!(code in def)) {7461 -1 if (assign === ':') {7462 -1 if (c.defineParams) {7463 -1 value.replace(c.defineParams, function(m, param, v) {7464 -1 def[code] = {7465 -1 arg: param,7466 -1 text: v7467 -1 };7468 -1 });7469 -1 }7470 -1 if (!(code in def)) {7471 -1 def[code] = value;7472 -1 }7473 -1 } else {7474 -1 new Function('def', 'def[\'' + code + '\']=' + value)(def);7475 -1 }7476 -1 }7477 -1 return '';7478 -1 }).replace(c.use || skip, function(m, code) {7479 -1 if (c.useParams) {7480 -1 code = code.replace(c.useParams, function(m, s, d, param) {7481 -1 if (def[d] && def[d].arg && param) {7482 -1 var rw = (d + ':' + param).replace(/'|\\/g, '_');7483 -1 def.__exp = def.__exp || {};7484 -1 def.__exp[rw] = def[d].text.replace(new RegExp('(^|[^\\w$])' + def[d].arg + '([^\\w$])', 'g'), '$1' + param + '$2');7485 -1 return s + 'def.__exp[\'' + rw + '\']';-1 8549 checkQueue.then(function(results) { -1 8550 if (results.length) { -1 8551 var hasResults = false, result = {}; -1 8552 results.forEach(function(r) { -1 8553 var res = r.results.filter(function(result) { -1 8554 return result; -1 8555 }); -1 8556 result[r.type] = res; -1 8557 if (res.length) { -1 8558 hasResults = true; 7486 8559 } 7487 8560 }); -1 8561 if (hasResults) { -1 8562 result.node = new axe.utils.DqElement(node.actualNode, options); -1 8563 ruleResult.nodes.push(result); -1 8564 } 7488 8565 }7489 -1 var v = new Function('def', 'return ' + code)(def);7490 -1 return v ? resolveDefs(c, v, def) : v;-1 8566 resolveNode(); -1 8567 }).catch(function(err) { -1 8568 return rejectNode(err); 7491 8569 });7492 -1 }7493 -1 function unescape(code) {7494 -1 return code.replace(/\\('|\\)/g, '$1').replace(/[\r\t\n]/g, ' ');7495 -1 }7496 -1 doT.template = function(tmpl, c, def) {7497 -1 c = c || doT.templateSettings;7498 -1 var cse = c.append ? startend.append : startend.split, needhtmlencode, sid = 0, indv, str = c.use || c.define ? resolveDefs(c, tmpl, def || {}) : tmpl;7499 -1 str = ('var out=\'' + (c.strip ? str.replace(/(^|\r|\n)\t* +| +\t*(\r|\n|$)/g, ' ').replace(/\r|\n|\t|\/\*[\s\S]*?\*\//g, '') : str).replace(/'|\\/g, '\\$&').replace(c.interpolate || skip, function(m, code) {7500 -1 return cse.start + unescape(code) + cse.end;7501 -1 }).replace(c.encode || skip, function(m, code) {7502 -1 needhtmlencode = true;7503 -1 return cse.startencode + unescape(code) + cse.end;7504 -1 }).replace(c.conditional || skip, function(m, elsecase, code) {7505 -1 return elsecase ? code ? '\';}else if(' + unescape(code) + '){out+=\'' : '\';}else{out+=\'' : code ? '\';if(' + unescape(code) + '){out+=\'' : '\';}out+=\'';7506 -1 }).replace(c.iterate || skip, function(m, iterate, vname, iname) {7507 -1 if (!iterate) {7508 -1 return '\';} } out+=\'';7509 -1 }7510 -1 sid += 1;7511 -1 indv = iname || 'i' + sid;7512 -1 iterate = unescape(iterate);7513 -1 return '\';var arr' + sid + '=' + iterate + ';if(arr' + sid + '){var ' + vname + ',' + indv + '=-1,l' + sid + '=arr' + sid + '.length-1;while(' + indv + '<l' + sid + '){' + vname + '=arr' + sid + '[' + indv + '+=1];out+=\'';7514 -1 }).replace(c.evaluate || skip, function(m, code) {7515 -1 return '\';' + unescape(code) + 'out+=\'';7516 -1 }) + '\';return out;').replace(/\n/g, '\\n').replace(/\t/g, '\\t').replace(/\r/g, '\\r').replace(/(\s|;|\}|^|\{)out\+='';/g, '$1').replace(/\+''/g, '');7517 -1 if (needhtmlencode) {7518 -1 if (!c.selfcontained && _globals && !_globals._encodeHTML) {7519 -1 _globals._encodeHTML = doT.encodeHTMLSource(c.doNotSkipEncoded);7520 -1 }7521 -1 str = 'var encodeHTML = typeof _encodeHTML !== \'undefined\' ? _encodeHTML : (' + doT.encodeHTMLSource.toString() + '(' + (c.doNotSkipEncoded || '') + '));' + str;-1 8570 }); -1 8571 }); -1 8572 q.defer(function(resolve) { -1 8573 return setTimeout(resolve, 0); -1 8574 }); -1 8575 if (options.performanceTimer) { -1 8576 axe.utils.performanceTimer.mark(markChecksEnd); -1 8577 axe.utils.performanceTimer.mark(markEnd); -1 8578 axe.utils.performanceTimer.measure('runchecks_' + this.id, markChecksStart, markChecksEnd); -1 8579 axe.utils.performanceTimer.measure('rule_' + this.id, markStart, markEnd); -1 8580 } -1 8581 q.then(function() { -1 8582 return resolve(ruleResult); -1 8583 }).catch(function(error) { -1 8584 return reject(error); -1 8585 }); -1 8586 }; -1 8587 function findAfterChecks(rule) { -1 8588 'use strict'; -1 8589 return axe.utils.getAllChecks(rule).map(function(c) { -1 8590 var check = rule._audit.checks[c.id || c]; -1 8591 return check && typeof check.after === 'function' ? check : null; -1 8592 }).filter(Boolean); -1 8593 } -1 8594 function findCheckResults(nodes, checkID) { -1 8595 'use strict'; -1 8596 var checkResults = []; -1 8597 nodes.forEach(function(nodeResult) { -1 8598 var checks = axe.utils.getAllChecks(nodeResult); -1 8599 checks.forEach(function(checkResult) { -1 8600 if (checkResult.id === checkID) { -1 8601 checkResults.push(checkResult); 7522 8602 }7523 -1 try {7524 -1 return new Function(c.varname, str);7525 -1 } catch (e) {7526 -1 if (typeof console !== 'undefined') {7527 -1 console.log('Could not create a template function: ' + str);7528 -1 }7529 -1 throw e;-1 8603 }); -1 8604 }); -1 8605 return checkResults; -1 8606 } -1 8607 function filterChecks(checks) { -1 8608 'use strict'; -1 8609 return checks.filter(function(check) { -1 8610 return check.filtered !== true; -1 8611 }); -1 8612 } -1 8613 function sanitizeNodes(result) { -1 8614 'use strict'; -1 8615 var checkTypes = [ 'any', 'all', 'none' ]; -1 8616 var nodes = result.nodes.filter(function(detail) { -1 8617 var length = 0; -1 8618 checkTypes.forEach(function(type) { -1 8619 detail[type] = filterChecks(detail[type]); -1 8620 length += detail[type].length; -1 8621 }); -1 8622 return length > 0; -1 8623 }); -1 8624 if (result.pageLevel && nodes.length) { -1 8625 nodes = [ nodes.reduce(function(a, b) { -1 8626 if (a) { -1 8627 checkTypes.forEach(function(type) { -1 8628 a[type].push.apply(a[type], b[type]); -1 8629 }); -1 8630 return a; 7530 8631 }7531 -1 };7532 -1 doT.compile = function(tmpl, def) {7533 -1 return doT.template(tmpl, null, def);7534 -1 };7535 -1 })();7536 -1 var lib = global['doT'];7537 -1 delete global['doT'];7538 -1 if (__old_global__) {7539 -1 global['doT'] = __old_global__;-1 8632 }) ]; 7540 8633 }7541 -1 return lib;7542 -1 }();-1 8634 return nodes; -1 8635 } -1 8636 Rule.prototype.after = function(result, options) { -1 8637 'use strict'; -1 8638 var afterChecks = findAfterChecks(this); -1 8639 var ruleID = this.id; -1 8640 afterChecks.forEach(function(check) { -1 8641 var beforeResults = findCheckResults(result.nodes, check.id); -1 8642 var option = axe.utils.getCheckOption(check, ruleID, options); -1 8643 var afterResults = check.after(beforeResults, option); -1 8644 beforeResults.forEach(function(item) { -1 8645 if (afterResults.indexOf(item) === -1) { -1 8646 item.filtered = true; -1 8647 } -1 8648 }); -1 8649 }); -1 8650 result.nodes = sanitizeNodes(result); -1 8651 return result; -1 8652 }; -1 8653 Rule.prototype.configure = function(spec) { -1 8654 'use strict'; -1 8655 if (spec.hasOwnProperty('selector')) { -1 8656 this.selector = spec.selector; -1 8657 } -1 8658 if (spec.hasOwnProperty('excludeHidden')) { -1 8659 this.excludeHidden = typeof spec.excludeHidden === 'boolean' ? spec.excludeHidden : true; -1 8660 } -1 8661 if (spec.hasOwnProperty('enabled')) { -1 8662 this.enabled = typeof spec.enabled === 'boolean' ? spec.enabled : true; -1 8663 } -1 8664 if (spec.hasOwnProperty('pageLevel')) { -1 8665 this.pageLevel = typeof spec.pageLevel === 'boolean' ? spec.pageLevel : false; -1 8666 } -1 8667 if (spec.hasOwnProperty('any')) { -1 8668 this.any = spec.any; -1 8669 } -1 8670 if (spec.hasOwnProperty('all')) { -1 8671 this.all = spec.all; -1 8672 } -1 8673 if (spec.hasOwnProperty('none')) { -1 8674 this.none = spec.none; -1 8675 } -1 8676 if (spec.hasOwnProperty('tags')) { -1 8677 this.tags = spec.tags; -1 8678 } -1 8679 if (spec.hasOwnProperty('matches')) { -1 8680 if (typeof spec.matches === 'string') { -1 8681 this.matches = new Function('return ' + spec.matches + ';')(); -1 8682 } else { -1 8683 this.matches = spec.matches; -1 8684 } -1 8685 } -1 8686 }; -1 8687 'use strict'; -1 8688 (function(axe) { -1 8689 var definitions = [ { -1 8690 name: 'NA', -1 8691 value: 'inapplicable', -1 8692 priority: 0, -1 8693 group: 'inapplicable' -1 8694 }, { -1 8695 name: 'PASS', -1 8696 value: 'passed', -1 8697 priority: 1, -1 8698 group: 'passes' -1 8699 }, { -1 8700 name: 'CANTTELL', -1 8701 value: 'cantTell', -1 8702 priority: 2, -1 8703 group: 'incomplete' -1 8704 }, { -1 8705 name: 'FAIL', -1 8706 value: 'failed', -1 8707 priority: 3, -1 8708 group: 'violations' -1 8709 } ]; -1 8710 var constants = { -1 8711 helpUrlBase: 'https://dequeuniversity.com/rules/', -1 8712 results: [], -1 8713 resultGroups: [], -1 8714 resultGroupMap: {}, -1 8715 impact: Object.freeze([ 'minor', 'moderate', 'serious', 'critical' ]), -1 8716 preloadAssets: Object.freeze([ 'cssom' ]), -1 8717 preloadAssetsTimeout: 1e4 -1 8718 }; -1 8719 definitions.forEach(function(definition) { -1 8720 var name = definition.name; -1 8721 var value = definition.value; -1 8722 var priority = definition.priority; -1 8723 var group = definition.group; -1 8724 constants[name] = value; -1 8725 constants[name + '_PRIO'] = priority; -1 8726 constants[name + '_GROUP'] = group; -1 8727 constants.results[priority] = value; -1 8728 constants.resultGroups[priority] = group; -1 8729 constants.resultGroupMap[value] = group; -1 8730 }); -1 8731 Object.freeze(constants.results); -1 8732 Object.freeze(constants.resultGroups); -1 8733 Object.freeze(constants.resultGroupMap); -1 8734 Object.freeze(constants); -1 8735 Object.defineProperty(axe, 'constants', { -1 8736 value: constants, -1 8737 enumerable: true, -1 8738 configurable: false, -1 8739 writable: false -1 8740 }); -1 8741 })(axe); 7543 8742 'use strict'; 7544 8743 var _typeof = typeof Symbol === 'function' && typeof Symbol.iterator === 'symbol' ? function(obj) { 7545 8744 return typeof obj; @@ -7962,6 +9161,30 @@ module.exports = { 7962 9161 }).join('\n\n'); 7963 9162 }; 7964 9163 'use strict'; -1 9164 helpers.getEnvironmentData = function getEnvironmentData() { -1 9165 var win = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : window; -1 9166 var _win$screen = win.screen, screen = _win$screen === undefined ? {} : _win$screen, _win$navigator = win.navigator, navigator = _win$navigator === undefined ? {} : _win$navigator, _win$location = win.location, location = _win$location === undefined ? {} : _win$location, innerHeight = win.innerHeight, innerWidth = win.innerWidth; -1 9167 var orientation = screen.msOrientation || screen.orientation || screen.mozOrientation || {}; -1 9168 return { -1 9169 testEngine: { -1 9170 name: 'axe-core', -1 9171 version: axe.version -1 9172 }, -1 9173 testRunner: { -1 9174 name: axe._audit.brand -1 9175 }, -1 9176 testEnvironment: { -1 9177 userAgent: navigator.userAgent, -1 9178 windowWidth: innerWidth, -1 9179 windowHeight: innerHeight, -1 9180 orientationAngle: orientation.angle, -1 9181 orientationType: orientation.type -1 9182 }, -1 9183 timestamp: new Date().toISOString(), -1 9184 url: location.href -1 9185 }; -1 9186 }; -1 9187 'use strict'; 7965 9188 helpers.incompleteFallbackMessage = function incompleteFallbackMessage() { 7966 9189 'use strict'; 7967 9190 return axe._audit.data.incompleteFallbackMessage(); @@ -8002,8 +9225,6 @@ module.exports = { 8002 9225 var resultKeys = axe.constants.resultGroups; 8003 9226 helpers.processAggregate = function(results, options) { 8004 9227 var resultObject = axe.utils.aggregateResult(results);8005 -1 resultObject.timestamp = new Date().toISOString();8006 -1 resultObject.url = window.location.href;8007 9228 resultKeys.forEach(function(key) { 8008 9229 if (options.resultTypes && !options.resultTypes.includes(key)) { 8009 9230 (resultObject[key] || []).forEach(function(ruleResult) { @@ -8045,6 +9266,17 @@ module.exports = { 8045 9266 return resultObject; 8046 9267 }; 8047 9268 'use strict'; -1 9269 var _extends = Object.assign || function(target) { -1 9270 for (var i = 1; i < arguments.length; i++) { -1 9271 var source = arguments[i]; -1 9272 for (var key in source) { -1 9273 if (Object.prototype.hasOwnProperty.call(source, key)) { -1 9274 target[key] = source[key]; -1 9275 } -1 9276 } -1 9277 } -1 9278 return target; -1 9279 }; 8048 9280 axe.addReporter('na', function(results, options, callback) { 8049 9281 'use strict'; 8050 9282 if (typeof options === 'function') { @@ -8052,16 +9284,26 @@ module.exports = { 8052 9284 options = {}; 8053 9285 } 8054 9286 var out = helpers.processAggregate(results, options);8055 -1 callback({-1 9287 callback(_extends({}, helpers.getEnvironmentData(), { -1 9288 toolOptions: options, 8056 9289 violations: out.violations, 8057 9290 passes: out.passes, 8058 9291 incomplete: out.incomplete,8059 -1 inapplicable: out.inapplicable,8060 -1 timestamp: out.timestamp,8061 -1 url: out.url8062 -1 });-1 9292 inapplicable: out.inapplicable -1 9293 })); 8063 9294 }); 8064 9295 'use strict'; -1 9296 var _extends = Object.assign || function(target) { -1 9297 for (var i = 1; i < arguments.length; i++) { -1 9298 var source = arguments[i]; -1 9299 for (var key in source) { -1 9300 if (Object.prototype.hasOwnProperty.call(source, key)) { -1 9301 target[key] = source[key]; -1 9302 } -1 9303 } -1 9304 } -1 9305 return target; -1 9306 }; 8065 9307 axe.addReporter('no-passes', function(results, options, callback) { 8066 9308 'use strict'; 8067 9309 if (typeof options === 'function') { @@ -8070,11 +9312,10 @@ module.exports = { 8070 9312 } 8071 9313 options.resultTypes = [ 'violations' ]; 8072 9314 var out = helpers.processAggregate(results, options);8073 -1 callback({8074 -1 violations: out.violations,8075 -1 timestamp: out.timestamp,8076 -1 url: out.url8077 -1 });-1 9315 callback(_extends({}, helpers.getEnvironmentData(), { -1 9316 toolOptions: options, -1 9317 violations: out.violations -1 9318 })); 8078 9319 }); 8079 9320 'use strict'; 8080 9321 axe.addReporter('raw', function(results, options, callback) { @@ -8086,6 +9327,17 @@ module.exports = { 8086 9327 callback(results); 8087 9328 }); 8088 9329 'use strict'; -1 9330 var _extends = Object.assign || function(target) { -1 9331 for (var i = 1; i < arguments.length; i++) { -1 9332 var source = arguments[i]; -1 9333 for (var key in source) { -1 9334 if (Object.prototype.hasOwnProperty.call(source, key)) { -1 9335 target[key] = source[key]; -1 9336 } -1 9337 } -1 9338 } -1 9339 return target; -1 9340 }; 8089 9341 axe.addReporter('v1', function(results, options, callback) { 8090 9342 'use strict'; 8091 9343 if (typeof options === 'function') { @@ -8098,16 +9350,26 @@ module.exports = { 8098 9350 nodeResult.failureSummary = helpers.failureSummary(nodeResult); 8099 9351 }); 8100 9352 });8101 -1 callback({-1 9353 callback(_extends({}, helpers.getEnvironmentData(), { -1 9354 toolOptions: options, 8102 9355 violations: out.violations, 8103 9356 passes: out.passes, 8104 9357 incomplete: out.incomplete,8105 -1 inapplicable: out.inapplicable,8106 -1 timestamp: out.timestamp,8107 -1 url: out.url8108 -1 });-1 9358 inapplicable: out.inapplicable -1 9359 })); 8109 9360 }); 8110 9361 'use strict'; -1 9362 var _extends = Object.assign || function(target) { -1 9363 for (var i = 1; i < arguments.length; i++) { -1 9364 var source = arguments[i]; -1 9365 for (var key in source) { -1 9366 if (Object.prototype.hasOwnProperty.call(source, key)) { -1 9367 target[key] = source[key]; -1 9368 } -1 9369 } -1 9370 } -1 9371 return target; -1 9372 }; 8111 9373 axe.addReporter('v2', function(results, options, callback) { 8112 9374 'use strict'; 8113 9375 if (typeof options === 'function') { @@ -8115,14 +9377,13 @@ module.exports = { 8115 9377 options = {}; 8116 9378 } 8117 9379 var out = helpers.processAggregate(results, options);8118 -1 callback({-1 9380 callback(_extends({}, helpers.getEnvironmentData(), { -1 9381 toolOptions: options, 8119 9382 violations: out.violations, 8120 9383 passes: out.passes, 8121 9384 incomplete: out.incomplete,8122 -1 inapplicable: out.inapplicable,8123 -1 timestamp: out.timestamp,8124 -1 url: out.url8125 -1 });-1 9385 inapplicable: out.inapplicable -1 9386 })); 8126 9387 }, true); 8127 9388 'use strict'; 8128 9389 axe.utils.aggregate = function(map, values, initial) { @@ -8426,577 +9687,21 @@ module.exports = { 8426 9687 if (node.shadowId === otherNode.shadowId) { 8427 9688 return true; 8428 9689 }8429 -1 return !!node.children.find(function(child) {8430 -1 return containsShadowChild(child, otherNode);8431 -1 });8432 -1 }8433 -1 if (node.shadowId || otherNode.shadowId) {8434 -1 return containsShadowChild(node, otherNode);8435 -1 }8436 -1 if (typeof node.actualNode.contains === 'function') {8437 -1 return node.actualNode.contains(otherNode.actualNode);8438 -1 }8439 -1 return !!(node.actualNode.compareDocumentPosition(otherNode.actualNode) & 16);8440 -1 };8441 -1 'use strict';8442 -1 (function(axe) {8443 -1 function CssSelectorParser() {8444 -1 this.pseudos = {};8445 -1 this.attrEqualityMods = {};8446 -1 this.ruleNestingOperators = {};8447 -1 this.substitutesEnabled = false;8448 -1 }8449 -1 CssSelectorParser.prototype.registerSelectorPseudos = function(name) {8450 -1 for (var j = 0, len = arguments.length; j < len; j++) {8451 -1 name = arguments[j];8452 -1 this.pseudos[name] = 'selector';8453 -1 }8454 -1 return this;8455 -1 };8456 -1 CssSelectorParser.prototype.unregisterSelectorPseudos = function(name) {8457 -1 for (var j = 0, len = arguments.length; j < len; j++) {8458 -1 name = arguments[j];8459 -1 delete this.pseudos[name];8460 -1 }8461 -1 return this;8462 -1 };8463 -1 CssSelectorParser.prototype.registerNumericPseudos = function(name) {8464 -1 for (var j = 0, len = arguments.length; j < len; j++) {8465 -1 name = arguments[j];8466 -1 this.pseudos[name] = 'numeric';8467 -1 }8468 -1 return this;8469 -1 };8470 -1 CssSelectorParser.prototype.unregisterNumericPseudos = function(name) {8471 -1 for (var j = 0, len = arguments.length; j < len; j++) {8472 -1 name = arguments[j];8473 -1 delete this.pseudos[name];8474 -1 }8475 -1 return this;8476 -1 };8477 -1 CssSelectorParser.prototype.registerNestingOperators = function(operator) {8478 -1 for (var j = 0, len = arguments.length; j < len; j++) {8479 -1 operator = arguments[j];8480 -1 this.ruleNestingOperators[operator] = true;8481 -1 }8482 -1 return this;8483 -1 };8484 -1 CssSelectorParser.prototype.unregisterNestingOperators = function(operator) {8485 -1 for (var j = 0, len = arguments.length; j < len; j++) {8486 -1 operator = arguments[j];8487 -1 delete this.ruleNestingOperators[operator];8488 -1 }8489 -1 return this;8490 -1 };8491 -1 CssSelectorParser.prototype.registerAttrEqualityMods = function(mod) {8492 -1 for (var j = 0, len = arguments.length; j < len; j++) {8493 -1 mod = arguments[j];8494 -1 this.attrEqualityMods[mod] = true;8495 -1 }8496 -1 return this;8497 -1 };8498 -1 CssSelectorParser.prototype.unregisterAttrEqualityMods = function(mod) {8499 -1 for (var j = 0, len = arguments.length; j < len; j++) {8500 -1 mod = arguments[j];8501 -1 delete this.attrEqualityMods[mod];8502 -1 }8503 -1 return this;8504 -1 };8505 -1 CssSelectorParser.prototype.enableSubstitutes = function() {8506 -1 this.substitutesEnabled = true;8507 -1 return this;8508 -1 };8509 -1 CssSelectorParser.prototype.disableSubstitutes = function() {8510 -1 this.substitutesEnabled = false;8511 -1 return this;8512 -1 };8513 -1 function isIdentStart(c) {8514 -1 return c >= 'a' && c <= 'z' || c >= 'A' && c <= 'Z' || c === '-' || c === '_';8515 -1 }8516 -1 function isIdent(c) {8517 -1 return c >= 'a' && c <= 'z' || c >= 'A' && c <= 'Z' || c >= '0' && c <= '9' || c === '-' || c === '_';8518 -1 }8519 -1 function isHex(c) {8520 -1 return c >= 'a' && c <= 'f' || c >= 'A' && c <= 'F' || c >= '0' && c <= '9';8521 -1 }8522 -1 function isDecimal(c) {8523 -1 return c >= '0' && c <= '9';8524 -1 }8525 -1 function isAttrMatchOperator(chr) {8526 -1 return chr === '=' || chr === '^' || chr === '$' || chr === '*' || chr === '~';8527 -1 }8528 -1 var identSpecialChars = {8529 -1 '!': true,8530 -1 '"': true,8531 -1 '#': true,8532 -1 $: true,8533 -1 '%': true,8534 -1 '&': true,8535 -1 '\'': true,8536 -1 '(': true,8537 -1 ')': true,8538 -1 '*': true,8539 -1 '+': true,8540 -1 ',': true,8541 -1 '.': true,8542 -1 '/': true,8543 -1 ';': true,8544 -1 '<': true,8545 -1 '=': true,8546 -1 '>': true,8547 -1 '?': true,8548 -1 '@': true,8549 -1 '[': true,8550 -1 '\\': true,8551 -1 ']': true,8552 -1 '^': true,8553 -1 '`': true,8554 -1 '{': true,8555 -1 '|': true,8556 -1 '}': true,8557 -1 '~': true8558 -1 };8559 -1 var strReplacementsRev = {8560 -1 '\n': '\\n',8561 -1 '\r': '\\r',8562 -1 '\t': '\\t',8563 -1 '\f': '\\f',8564 -1 '\v': '\\v'8565 -1 };8566 -1 var singleQuoteEscapeChars = {8567 -1 n: '\n',8568 -1 r: '\r',8569 -1 t: '\t',8570 -1 f: '\f',8571 -1 '\\': '\\',8572 -1 '\'': '\''8573 -1 };8574 -1 var doubleQuotesEscapeChars = {8575 -1 n: '\n',8576 -1 r: '\r',8577 -1 t: '\t',8578 -1 f: '\f',8579 -1 '\\': '\\',8580 -1 '"': '"'8581 -1 };8582 -1 function ParseContext(str, pos, pseudos, attrEqualityMods, ruleNestingOperators, substitutesEnabled) {8583 -1 var chr, getIdent, getStr, l, skipWhitespace;8584 -1 l = str.length;8585 -1 chr = null;8586 -1 getStr = function getStr(quote, escapeTable) {8587 -1 var esc, hex, result;8588 -1 result = '';8589 -1 pos++;8590 -1 chr = str.charAt(pos);8591 -1 while (pos < l) {8592 -1 if (chr === quote) {8593 -1 pos++;8594 -1 return result;8595 -1 } else if (chr === '\\') {8596 -1 pos++;8597 -1 chr = str.charAt(pos);8598 -1 if (chr === quote) {8599 -1 result += quote;8600 -1 } else if (esc = escapeTable[chr]) {8601 -1 result += esc;8602 -1 } else if (isHex(chr)) {8603 -1 hex = chr;8604 -1 pos++;8605 -1 chr = str.charAt(pos);8606 -1 while (isHex(chr)) {8607 -1 hex += chr;8608 -1 pos++;8609 -1 chr = str.charAt(pos);8610 -1 }8611 -1 if (chr === ' ') {8612 -1 pos++;8613 -1 chr = str.charAt(pos);8614 -1 }8615 -1 result += String.fromCharCode(parseInt(hex, 16));8616 -1 continue;8617 -1 } else {8618 -1 result += chr;8619 -1 }8620 -1 } else {8621 -1 result += chr;8622 -1 }8623 -1 pos++;8624 -1 chr = str.charAt(pos);8625 -1 }8626 -1 return result;8627 -1 };8628 -1 getIdent = function getIdent() {8629 -1 var result = '';8630 -1 chr = str.charAt(pos);8631 -1 while (pos < l) {8632 -1 if (isIdent(chr)) {8633 -1 result += chr;8634 -1 } else if (chr === '\\') {8635 -1 pos++;8636 -1 if (pos >= l) {8637 -1 throw Error('Expected symbol but end of file reached.');8638 -1 }8639 -1 chr = str.charAt(pos);8640 -1 if (identSpecialChars[chr]) {8641 -1 result += chr;8642 -1 } else if (isHex(chr)) {8643 -1 var hex = chr;8644 -1 pos++;8645 -1 chr = str.charAt(pos);8646 -1 while (isHex(chr)) {8647 -1 hex += chr;8648 -1 pos++;8649 -1 chr = str.charAt(pos);8650 -1 }8651 -1 if (chr === ' ') {8652 -1 pos++;8653 -1 chr = str.charAt(pos);8654 -1 }8655 -1 result += String.fromCharCode(parseInt(hex, 16));8656 -1 continue;8657 -1 } else {8658 -1 result += chr;8659 -1 }8660 -1 } else {8661 -1 return result;8662 -1 }8663 -1 pos++;8664 -1 chr = str.charAt(pos);8665 -1 }8666 -1 return result;8667 -1 };8668 -1 skipWhitespace = function skipWhitespace() {8669 -1 chr = str.charAt(pos);8670 -1 var result = false;8671 -1 while (chr === ' ' || chr === '\t' || chr === '\n' || chr === '\r' || chr === '\f') {8672 -1 result = true;8673 -1 pos++;8674 -1 chr = str.charAt(pos);8675 -1 }8676 -1 return result;8677 -1 };8678 -1 this.parse = function() {8679 -1 var res = this.parseSelector();8680 -1 if (pos < l) {8681 -1 throw Error('Rule expected but "' + str.charAt(pos) + '" found.');8682 -1 }8683 -1 return res;8684 -1 };8685 -1 this.parseSelector = function() {8686 -1 var res;8687 -1 var selector = res = this.parseSingleSelector();8688 -1 chr = str.charAt(pos);8689 -1 while (chr === ',') {8690 -1 pos++;8691 -1 skipWhitespace();8692 -1 if (res.type !== 'selectors') {8693 -1 res = {8694 -1 type: 'selectors',8695 -1 selectors: [ selector ]8696 -1 };8697 -1 }8698 -1 selector = this.parseSingleSelector();8699 -1 if (!selector) {8700 -1 throw Error('Rule expected after ",".');8701 -1 }8702 -1 res.selectors.push(selector);8703 -1 }8704 -1 return res;8705 -1 };8706 -1 this.parseSingleSelector = function() {8707 -1 skipWhitespace();8708 -1 var selector = {8709 -1 type: 'ruleSet'8710 -1 };8711 -1 var rule = this.parseRule();8712 -1 if (!rule) {8713 -1 return null;8714 -1 }8715 -1 var currentRule = selector;8716 -1 while (rule) {8717 -1 rule.type = 'rule';8718 -1 currentRule.rule = rule;8719 -1 currentRule = rule;8720 -1 skipWhitespace();8721 -1 chr = str.charAt(pos);8722 -1 if (pos >= l || chr === ',' || chr === ')') {8723 -1 break;8724 -1 }8725 -1 if (ruleNestingOperators[chr]) {8726 -1 var op = chr;8727 -1 pos++;8728 -1 skipWhitespace();8729 -1 rule = this.parseRule();8730 -1 if (!rule) {8731 -1 throw Error('Rule expected after "' + op + '".');8732 -1 }8733 -1 rule.nestingOperator = op;8734 -1 } else {8735 -1 rule = this.parseRule();8736 -1 if (rule) {8737 -1 rule.nestingOperator = null;8738 -1 }8739 -1 }8740 -1 }8741 -1 return selector;8742 -1 };8743 -1 this.parseRule = function() {8744 -1 var rule = null;8745 -1 while (pos < l) {8746 -1 chr = str.charAt(pos);8747 -1 if (chr === '*') {8748 -1 pos++;8749 -1 (rule = rule || {}).tagName = '*';8750 -1 } else if (isIdentStart(chr) || chr === '\\') {8751 -1 (rule = rule || {}).tagName = getIdent();8752 -1 } else if (chr === '.') {8753 -1 pos++;8754 -1 rule = rule || {};8755 -1 (rule.classNames = rule.classNames || []).push(getIdent());8756 -1 } else if (chr === '#') {8757 -1 pos++;8758 -1 (rule = rule || {}).id = getIdent();8759 -1 } else if (chr === '[') {8760 -1 pos++;8761 -1 skipWhitespace();8762 -1 var attr = {8763 -1 name: getIdent()8764 -1 };8765 -1 skipWhitespace();8766 -1 if (chr === ']') {8767 -1 pos++;8768 -1 } else {8769 -1 var operator = '';8770 -1 if (attrEqualityMods[chr]) {8771 -1 operator = chr;8772 -1 pos++;8773 -1 chr = str.charAt(pos);8774 -1 }8775 -1 if (pos >= l) {8776 -1 throw Error('Expected "=" but end of file reached.');8777 -1 }8778 -1 if (chr !== '=') {8779 -1 throw Error('Expected "=" but "' + chr + '" found.');8780 -1 }8781 -1 attr.operator = operator + '=';8782 -1 pos++;8783 -1 skipWhitespace();8784 -1 var attrValue = '';8785 -1 attr.valueType = 'string';8786 -1 if (chr === '"') {8787 -1 attrValue = getStr('"', doubleQuotesEscapeChars);8788 -1 } else if (chr === '\'') {8789 -1 attrValue = getStr('\'', singleQuoteEscapeChars);8790 -1 } else if (substitutesEnabled && chr === '$') {8791 -1 pos++;8792 -1 attrValue = getIdent();8793 -1 attr.valueType = 'substitute';8794 -1 } else {8795 -1 while (pos < l) {8796 -1 if (chr === ']') {8797 -1 break;8798 -1 }8799 -1 attrValue += chr;8800 -1 pos++;8801 -1 chr = str.charAt(pos);8802 -1 }8803 -1 attrValue = attrValue.trim();8804 -1 }8805 -1 skipWhitespace();8806 -1 if (pos >= l) {8807 -1 throw Error('Expected "]" but end of file reached.');8808 -1 }8809 -1 if (chr !== ']') {8810 -1 throw Error('Expected "]" but "' + chr + '" found.');8811 -1 }8812 -1 pos++;8813 -1 attr.value = attrValue;8814 -1 }8815 -1 rule = rule || {};8816 -1 (rule.attrs = rule.attrs || []).push(attr);8817 -1 } else if (chr === ':') {8818 -1 pos++;8819 -1 var pseudoName = getIdent();8820 -1 var pseudo = {8821 -1 name: pseudoName8822 -1 };8823 -1 if (chr === '(') {8824 -1 pos++;8825 -1 var value = '';8826 -1 skipWhitespace();8827 -1 if (pseudos[pseudoName] === 'selector') {8828 -1 pseudo.valueType = 'selector';8829 -1 value = this.parseSelector();8830 -1 } else {8831 -1 pseudo.valueType = pseudos[pseudoName] || 'string';8832 -1 if (chr === '"') {8833 -1 value = getStr('"', doubleQuotesEscapeChars);8834 -1 } else if (chr === '\'') {8835 -1 value = getStr('\'', singleQuoteEscapeChars);8836 -1 } else if (substitutesEnabled && chr === '$') {8837 -1 pos++;8838 -1 value = getIdent();8839 -1 pseudo.valueType = 'substitute';8840 -1 } else {8841 -1 while (pos < l) {8842 -1 if (chr === ')') {8843 -1 break;8844 -1 }8845 -1 value += chr;8846 -1 pos++;8847 -1 chr = str.charAt(pos);8848 -1 }8849 -1 value = value.trim();8850 -1 }8851 -1 skipWhitespace();8852 -1 }8853 -1 if (pos >= l) {8854 -1 throw Error('Expected ")" but end of file reached.');8855 -1 }8856 -1 if (chr !== ')') {8857 -1 throw Error('Expected ")" but "' + chr + '" found.');8858 -1 }8859 -1 pos++;8860 -1 pseudo.value = value;8861 -1 }8862 -1 rule = rule || {};8863 -1 (rule.pseudos = rule.pseudos || []).push(pseudo);8864 -1 } else {8865 -1 break;8866 -1 }8867 -1 }8868 -1 return rule;8869 -1 };8870 -1 return this;8871 -1 }8872 -1 CssSelectorParser.prototype.parse = function(str) {8873 -1 var context = new ParseContext(str, 0, this.pseudos, this.attrEqualityMods, this.ruleNestingOperators, this.substitutesEnabled);8874 -1 return context.parse();8875 -1 };8876 -1 CssSelectorParser.prototype.escapeIdentifier = function(s) {8877 -1 var result = '';8878 -1 var i = 0;8879 -1 var len = s.length;8880 -1 while (i < len) {8881 -1 var chr = s.charAt(i);8882 -1 if (identSpecialChars[chr]) {8883 -1 result += '\\' + chr;8884 -1 } else {8885 -1 if (!(chr === '_' || chr === '-' || chr >= 'A' && chr <= 'Z' || chr >= 'a' && chr <= 'z' || i !== 0 && chr >= '0' && chr <= '9')) {8886 -1 var charCode = chr.charCodeAt(0);8887 -1 if ((charCode & 63488) === 55296) {8888 -1 var extraCharCode = s.charCodeAt(i++);8889 -1 if ((charCode & 64512) !== 55296 || (extraCharCode & 64512) !== 56320) {8890 -1 throw Error('UCS-2(decode): illegal sequence');8891 -1 }8892 -1 charCode = ((charCode & 1023) << 10) + (extraCharCode & 1023) + 65536;8893 -1 }8894 -1 result += '\\' + charCode.toString(16) + ' ';8895 -1 } else {8896 -1 result += chr;8897 -1 }8898 -1 }8899 -1 i++;8900 -1 }8901 -1 return result;8902 -1 };8903 -1 CssSelectorParser.prototype.escapeStr = function(s) {8904 -1 var result = '';8905 -1 var i = 0;8906 -1 var len = s.length;8907 -1 var chr, replacement;8908 -1 while (i < len) {8909 -1 chr = s.charAt(i);8910 -1 if (chr === '"') {8911 -1 chr = '\\"';8912 -1 } else if (chr === '\\') {8913 -1 chr = '\\\\';8914 -1 } else if (replacement = strReplacementsRev[chr]) {8915 -1 chr = replacement;8916 -1 }8917 -1 result += chr;8918 -1 i++;8919 -1 }8920 -1 return '"' + result + '"';8921 -1 };8922 -1 CssSelectorParser.prototype.render = function(path) {8923 -1 return this._renderEntity(path).trim();8924 -1 };8925 -1 CssSelectorParser.prototype._renderEntity = function(entity) {8926 -1 var currentEntity, parts, res;8927 -1 res = '';8928 -1 switch (entity.type) {8929 -1 case 'ruleSet':8930 -1 currentEntity = entity.rule;8931 -1 parts = [];8932 -1 while (currentEntity) {8933 -1 if (currentEntity.nestingOperator) {8934 -1 parts.push(currentEntity.nestingOperator);8935 -1 }8936 -1 parts.push(this._renderEntity(currentEntity));8937 -1 currentEntity = currentEntity.rule;8938 -1 }8939 -1 res = parts.join(' ');8940 -1 break;8941 -18942 -1 case 'selectors':8943 -1 res = entity.selectors.map(this._renderEntity, this).join(', ');8944 -1 break;8945 -18946 -1 case 'rule':8947 -1 if (entity.tagName) {8948 -1 if (entity.tagName === '*') {8949 -1 res = '*';8950 -1 } else {8951 -1 res = this.escapeIdentifier(entity.tagName);8952 -1 }8953 -1 }8954 -1 if (entity.id) {8955 -1 res += '#' + this.escapeIdentifier(entity.id);8956 -1 }8957 -1 if (entity.classNames) {8958 -1 res += entity.classNames.map(function(cn) {8959 -1 return '.' + this.escapeIdentifier(cn);8960 -1 }, this).join('');8961 -1 }8962 -1 if (entity.attrs) {8963 -1 res += entity.attrs.map(function(attr) {8964 -1 if (attr.operator) {8965 -1 if (attr.valueType === 'substitute') {8966 -1 return '[' + this.escapeIdentifier(attr.name) + attr.operator + '$' + attr.value + ']';8967 -1 } else {8968 -1 return '[' + this.escapeIdentifier(attr.name) + attr.operator + this.escapeStr(attr.value) + ']';8969 -1 }8970 -1 } else {8971 -1 return '[' + this.escapeIdentifier(attr.name) + ']';8972 -1 }8973 -1 }, this).join('');8974 -1 }8975 -1 if (entity.pseudos) {8976 -1 res += entity.pseudos.map(function(pseudo) {8977 -1 if (pseudo.valueType) {8978 -1 if (pseudo.valueType === 'selector') {8979 -1 return ':' + this.escapeIdentifier(pseudo.name) + '(' + this._renderEntity(pseudo.value) + ')';8980 -1 } else if (pseudo.valueType === 'substitute') {8981 -1 return ':' + this.escapeIdentifier(pseudo.name) + '($' + pseudo.value + ')';8982 -1 } else if (pseudo.valueType === 'numeric') {8983 -1 return ':' + this.escapeIdentifier(pseudo.name) + '(' + pseudo.value + ')';8984 -1 } else {8985 -1 return ':' + this.escapeIdentifier(pseudo.name) + '(' + this.escapeIdentifier(pseudo.value) + ')';8986 -1 }8987 -1 } else {8988 -1 return ':' + this.escapeIdentifier(pseudo.name);8989 -1 }8990 -1 }, this).join('');8991 -1 }8992 -1 break;8993 -18994 -1 default:8995 -1 throw Error('Unknown entity type: "' + entity.type(+'".'));8996 -1 }8997 -1 return res;8998 -1 };8999 -1 var parser = new CssSelectorParser();-1 9690 return !!node.children.find(function(child) { -1 9691 return containsShadowChild(child, otherNode); -1 9692 }); -1 9693 } -1 9694 if (node.shadowId || otherNode.shadowId) { -1 9695 return containsShadowChild(node, otherNode); -1 9696 } -1 9697 if (typeof node.actualNode.contains === 'function') { -1 9698 return node.actualNode.contains(otherNode.actualNode); -1 9699 } -1 9700 return !!(node.actualNode.compareDocumentPosition(otherNode.actualNode) & 16); -1 9701 }; -1 9702 'use strict'; -1 9703 (function(axe) { -1 9704 var parser = new axe.imports.CssSelectorParser(); 9000 9705 parser.registerNestingOperators('>'); 9001 9706 axe.utils.cssParser = parser; 9002 9707 })(axe); @@ -9142,10 +9847,23 @@ module.exports = { 9142 9847 utils: {} 9143 9848 }; 9144 9849 function virtualDOMfromNode(node, shadowId) { -1 9850 var vNodeCache = {}; 9145 9851 return { 9146 9852 shadowId: shadowId, 9147 9853 children: [],9148 -1 actualNode: node-1 9854 actualNode: node, -1 9855 get isFocusable() { -1 9856 if (!vNodeCache._isFocusable) { -1 9857 vNodeCache._isFocusable = axe.commons.dom.isFocusable(node); -1 9858 } -1 9859 return vNodeCache._isFocusable; -1 9860 }, -1 9861 get tabbableElements() { -1 9862 if (!vNodeCache._tabbableElements) { -1 9863 vNodeCache._tabbableElements = axe.commons.dom.getTabbableElements(this); -1 9864 } -1 9865 return vNodeCache._tabbableElements; -1 9866 } 9149 9867 }; 9150 9868 } 9151 9869 function getSlotChildren(node) { @@ -9212,14 +9930,13 @@ module.exports = { 9212 9930 return vNode; 9213 9931 } 9214 9932 vNode.children.forEach(function(candidate) {9215 -1 var retVal;-1 9933 if (found) { -1 9934 return; -1 9935 } 9216 9936 if (candidate.actualNode === node) { 9217 9937 found = candidate; 9218 9938 } else {9219 -1 retVal = axe.utils.getNodeFromTree(candidate, node);9220 -1 if (retVal) {9221 -1 found = retVal;9222 -1 }-1 9939 found = axe.utils.getNodeFromTree(candidate, node); 9223 9940 } 9224 9941 }); 9225 9942 return found; @@ -9231,6 +9948,13 @@ module.exports = { 9231 9948 return result.concat(object.any || []).concat(object.all || []).concat(object.none || []); 9232 9949 }; 9233 9950 'use strict'; -1 9951 axe.utils.getBaseLang = function getBaseLang(lang) { -1 9952 if (!lang) { -1 9953 return ''; -1 9954 } -1 9955 return lang.trim().split('-')[0].toLowerCase(); -1 9956 }; -1 9957 'use strict'; 9234 9958 axe.utils.getCheckOption = function(check, ruleID, options) { 9235 9959 var ruleCheckOption = ((options.rules && options.rules[ruleID] || {}).checks || {})[check.id]; 9236 9960 var checkOption = (options.checks || {})[check.id]; @@ -9408,12 +10132,12 @@ module.exports = { 9408 10132 if (friendly) { 9409 10133 var value = encodeURI(friendly); 9410 10134 if (value) {9411 -1 atnv = escapeSelector(at.name) + '$="' + value + '"';-1 10135 atnv = escapeSelector(at.name) + '$="' + escapeSelector(value) + '"'; 9412 10136 } else { 9413 10137 return; 9414 10138 } 9415 10139 } else {9416 -1 atnv = escapeSelector(at.name) + '="' + node.getAttribute(name) + '"';-1 10140 atnv = escapeSelector(at.name) + '="' + escapeSelector(node.getAttribute(name)) + '"'; 9417 10141 } 9418 10142 } else { 9419 10143 atnv = escapeSelector(name) + '="' + escapeSelector(at.value) + '"'; @@ -9753,6 +10477,12 @@ module.exports = { 9753 10477 return axe.utils.isHidden(parent, true); 9754 10478 }; 9755 10479 'use strict'; -1 10480 var htmlTags = [ 'a', 'abbr', 'address', 'area', 'article', 'aside', 'audio', 'b', 'base', 'bdi', 'bdo', 'blockquote', 'body', 'br', 'button', 'canvas', 'caption', 'cite', 'code', 'col', 'colgroup', 'data', 'datalist', 'dd', 'del', 'details', 'dfn', 'dialog', 'div', 'dl', 'dt', 'em', 'embed', 'fieldset', 'figcaption', 'figure', 'footer', 'form', 'h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'head', 'header', 'hgroup', 'hr', 'html', 'i', 'iframe', 'img', 'input', 'ins', 'kbd', 'keygen', 'label', 'legend', 'li', 'link', 'main', 'map', 'mark', 'math', 'menu', 'menuitem', 'meta', 'meter', 'nav', 'noscript', 'object', 'ol', 'optgroup', 'option', 'output', 'p', 'param', 'picture', 'pre', 'progress', 'q', 'rb', 'rp', 'rt', 'rtc', 'ruby', 's', 'samp', 'script', 'section', 'select', 'slot', 'small', 'source', 'span', 'strong', 'style', 'sub', 'summary', 'sup', 'svg', 'table', 'tbody', 'td', 'template', 'textarea', 'tfoot', 'th', 'thead', 'time', 'title', 'tr', 'track', 'u', 'ul', 'var', 'video', 'wbr' ]; -1 10481 axe.utils.isHtmlElement = function isHtmlElement(node) { -1 10482 var tagName = node.nodeName.toLowerCase(); -1 10483 return htmlTags.includes(tagName) && node.namespaceURI !== 'http://www.w3.org/2000/svg'; -1 10484 }; -1 10485 'use strict'; 9756 10486 var possibleShadowRoots = [ 'article', 'aside', 'blockquote', 'body', 'div', 'footer', 'h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'header', 'main', 'nav', 'p', 'section', 'span' ]; 9757 10487 axe.utils.isShadowRoot = function isShadowRoot(node) { 9758 10488 var nodeName = node.nodeName.toLowerCase(); @@ -9847,15 +10577,17 @@ module.exports = { 9847 10577 return result; 9848 10578 }; 9849 10579 'use strict';9850 -1 axe.utils.nodeSorter = function nodeSorter(a, b) {9851 -1 'use strict';9852 -1 if (a.actualNode === b.actualNode) {-1 10580 axe.utils.nodeSorter = function nodeSorter(nodeA, nodeB) { -1 10581 nodeA = nodeA.actualNode || nodeA; -1 10582 nodeB = nodeB.actualNode || nodeB; -1 10583 if (nodeA === nodeB) { 9853 10584 return 0; 9854 10585 }9855 -1 if (a.actualNode.compareDocumentPosition(b.actualNode) & 4) {-1 10586 if (nodeA.compareDocumentPosition(nodeB) & 4) { 9856 10587 return -1; -1 10588 } else { -1 10589 return 1; 9857 10590 }9858 -1 return 1;9859 10591 }; 9860 10592 'use strict'; 9861 10593 utils.performanceTimer = function() { @@ -10133,100 +10865,36 @@ module.exports = { 10133 10865 }; 10134 10866 } 10135 10867 'use strict';10136 -1 function loadCssom(_ref, timeout, convertTextToStylesheetFn) {10137 -1 var root = _ref.root, shadowId = _ref.shadowId;10138 -1 function getExternalStylesheet(_ref2) {10139 -1 var resolve = _ref2.resolve, reject = _ref2.reject, url = _ref2.url;10140 -1 axe.imports.axios({10141 -1 method: 'get',10142 -1 url: url,10143 -1 timeout: timeout10144 -1 }).then(function(_ref3) {10145 -1 var data = _ref3.data;10146 -1 var sheet = convertTextToStylesheetFn({10147 -1 data: data,10148 -1 isExternal: true,10149 -1 shadowId: shadowId,10150 -1 root: root10151 -1 });10152 -1 resolve(sheet);10153 -1 }).catch(reject);-1 10868 function _toConsumableArray(arr) { -1 10869 if (Array.isArray(arr)) { -1 10870 for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) { -1 10871 arr2[i] = arr[i]; -1 10872 } -1 10873 return arr2; -1 10874 } else { -1 10875 return Array.from(arr); 10154 10876 } -1 10877 } -1 10878 axe.utils.preloadCssom = function preloadCssom(_ref) { -1 10879 var timeout = _ref.timeout, _ref$treeRoot = _ref.treeRoot, treeRoot = _ref$treeRoot === undefined ? axe._tree[0] : _ref$treeRoot; -1 10880 var rootNodes = getAllRootNodesInTree(treeRoot); 10155 10881 var q = axe.utils.queue();10156 -1 var rootStyleSheets = root.styleSheets ? Array.from(root.styleSheets) : null;10157 -1 if (!rootStyleSheets) {-1 10882 if (!rootNodes.length) { 10158 10883 return q; 10159 10884 }10160 -1 var sheetHrefs = [];10161 -1 var sheets = rootStyleSheets.filter(function(sheet) {10162 -1 var sheetAlreadyExists = false;10163 -1 if (sheet.href) {10164 -1 if (!sheetHrefs.includes(sheet.href)) {10165 -1 sheetHrefs.push(sheet.href);10166 -1 } else {10167 -1 sheetAlreadyExists = true;10168 -1 }10169 -1 }10170 -1 var isPrintMedia = Array.from(sheet.media).includes('print');10171 -1 return !isPrintMedia && !sheetAlreadyExists;-1 10885 var dynamicDoc = document.implementation.createHTMLDocument(); -1 10886 var convertDataToStylesheet = getStyleSheetFactory(dynamicDoc); -1 10887 q.defer(function(resolve, reject) { -1 10888 getCssomForAllRootNodes(rootNodes, convertDataToStylesheet, timeout).then(function(assets) { -1 10889 var cssom = processCssomAssets(assets); -1 10890 resolve(cssom); -1 10891 }).catch(reject); 10172 10892 });10173 -1 sheets.forEach(function(sheet) {10174 -1 try {10175 -1 var cssRules = sheet.cssRules;10176 -1 var rules = Array.from(cssRules);10177 -1 var importRules = rules.filter(function(r) {10178 -1 return r.href;10179 -1 });10180 -1 if (!importRules.length) {10181 -1 q.defer(function(resolve) {10182 -1 return resolve({10183 -1 sheet: sheet,10184 -1 isExternal: false,10185 -1 shadowId: shadowId,10186 -1 root: root10187 -1 });10188 -1 });10189 -1 return;10190 -1 }10191 -1 importRules.forEach(function(rule) {10192 -1 q.defer(function(resolve, reject) {10193 -1 getExternalStylesheet({10194 -1 resolve: resolve,10195 -1 reject: reject,10196 -1 url: rule.href10197 -1 });10198 -1 });10199 -1 });10200 -1 var inlineRules = rules.filter(function(rule) {10201 -1 return !rule.href;10202 -1 });10203 -1 var inlineRulesCssText = inlineRules.reduce(function(out, rule) {10204 -1 out.push(rule.cssText);10205 -1 return out;10206 -1 }, []).join();10207 -1 q.defer(function(resolve) {10208 -1 return resolve(convertTextToStylesheetFn({10209 -1 data: inlineRulesCssText,10210 -1 shadowId: shadowId,10211 -1 root: root,10212 -1 isExternal: false10213 -1 }));10214 -1 });10215 -1 } catch (e) {10216 -1 q.defer(function(resolve, reject) {10217 -1 getExternalStylesheet({10218 -1 resolve: resolve,10219 -1 reject: reject,10220 -1 url: sheet.href10221 -1 });10222 -1 });10223 -1 }10224 -1 }, []);10225 10893 return q;10226 -1 }10227 -1 function getAllRootsInTree(tree) {-1 10894 }; -1 10895 function getAllRootNodesInTree(tree) { 10228 10896 var ids = [];10229 -1 var documents = axe.utils.querySelectorAllFilter(tree, '*', function(node) {-1 10897 var rootNodes = axe.utils.querySelectorAllFilter(tree, '*', function(node) { 10230 10898 if (ids.includes(node.shadowId)) { 10231 10899 return false; 10232 10900 } @@ -10235,46 +10903,220 @@ module.exports = { 10235 10903 }).map(function(node) { 10236 10904 return { 10237 10905 shadowId: node.shadowId,10238 -1 root: axe.utils.getRootNode(node.actualNode)-1 10906 rootNode: axe.utils.getRootNode(node.actualNode) 10239 10907 }; 10240 10908 });10241 -1 return documents;-1 10909 return axe.utils.uniqueArray(rootNodes, []); 10242 10910 }10243 -1 axe.utils.preloadCssom = function preloadCssom(_ref4) {10244 -1 var timeout = _ref4.timeout, _ref4$treeRoot = _ref4.treeRoot, treeRoot = _ref4$treeRoot === undefined ? axe._tree[0] : _ref4$treeRoot;10245 -1 var roots = axe.utils.uniqueArray(getAllRootsInTree(treeRoot), []);10246 -1 var q = axe.utils.queue();10247 -1 if (!roots.length) {10248 -1 return q;10249 -1 }10250 -1 var dynamicDoc = document.implementation.createHTMLDocument();10251 -1 function convertTextToStylesheet(_ref5) {10252 -1 var data = _ref5.data, isExternal = _ref5.isExternal, shadowId = _ref5.shadowId, root = _ref5.root;-1 10911 var getStyleSheetFactory = function getStyleSheetFactory(dynamicDoc) { -1 10912 return function(_ref2) { -1 10913 var data = _ref2.data, isExternal = _ref2.isExternal, shadowId = _ref2.shadowId, root = _ref2.root, priority = _ref2.priority, _ref2$isLink = _ref2.isLink, isLink = _ref2$isLink === undefined ? false : _ref2$isLink; 10253 10914 var style = dynamicDoc.createElement('style');10254 -1 style.type = 'text/css';10255 -1 style.appendChild(dynamicDoc.createTextNode(data));-1 10915 if (isLink) { -1 10916 var text = dynamicDoc.createTextNode('@import "' + data.href + '"'); -1 10917 style.appendChild(text); -1 10918 } else { -1 10919 style.appendChild(dynamicDoc.createTextNode(data)); -1 10920 } 10256 10921 dynamicDoc.head.appendChild(style); 10257 10922 return { 10258 10923 sheet: style.sheet, 10259 10924 isExternal: isExternal, 10260 10925 shadowId: shadowId,10261 -1 root: root-1 10926 root: root, -1 10927 priority: priority 10262 10928 }; -1 10929 }; -1 10930 }; -1 10931 function getCssomForAllRootNodes(rootNodes, convertDataToStylesheet, timeout) { -1 10932 var q = axe.utils.queue(); -1 10933 rootNodes.forEach(function(_ref3, index) { -1 10934 var rootNode = _ref3.rootNode, shadowId = _ref3.shadowId; -1 10935 return q.defer(function(resolve, reject) { -1 10936 return loadCssom({ -1 10937 rootNode: rootNode, -1 10938 shadowId: shadowId, -1 10939 timeout: timeout, -1 10940 convertDataToStylesheet: convertDataToStylesheet, -1 10941 rootIndex: index + 1 -1 10942 }).then(resolve).catch(reject); -1 10943 }); -1 10944 }); -1 10945 return q; -1 10946 } -1 10947 function processCssomAssets(nestedAssets) { -1 10948 var result = []; -1 10949 nestedAssets.forEach(function(item) { -1 10950 if (Array.isArray(item)) { -1 10951 result.push.apply(result, _toConsumableArray(processCssomAssets(item))); -1 10952 } else { -1 10953 result.push(item); -1 10954 } -1 10955 }); -1 10956 return result; -1 10957 } -1 10958 function loadCssom(options) { -1 10959 var rootIndex = options.rootIndex; -1 10960 var q = axe.utils.queue(); -1 10961 var sheets = getStylesheetsOfRootNode(options); -1 10962 if (!sheets) { -1 10963 return q; 10263 10964 }10264 -1 q.defer(function(resolve, reject) {10265 -1 roots.reduce(function(out, root) {10266 -1 out.defer(function(resolve, reject) {10267 -1 loadCssom(root, timeout, convertTextToStylesheet).then(resolve).catch(reject);-1 10965 sheets.forEach(function(sheet, sheetIndex) { -1 10966 var priority = [ rootIndex, sheetIndex ]; -1 10967 try { -1 10968 var deferredQ = parseNonCrossOriginStylesheet(sheet, options, priority); -1 10969 q.defer(deferredQ); -1 10970 } catch (e) { -1 10971 var _deferredQ = parseCrossOriginStylesheet(sheet.href, options, priority); -1 10972 q.defer(_deferredQ); -1 10973 } -1 10974 }); -1 10975 return q; -1 10976 } -1 10977 function parseNonCrossOriginStylesheet(sheet, options, priority) { -1 10978 var q = axe.utils.queue(); -1 10979 var cssRules = sheet.cssRules; -1 10980 var rules = Array.from(cssRules); -1 10981 if (!rules) { -1 10982 return q; -1 10983 } -1 10984 var cssImportRules = rules.filter(function(r) { -1 10985 return r.type === 3; -1 10986 }); -1 10987 if (!cssImportRules.length) { -1 10988 q.defer(function(resolve) { -1 10989 return resolve({ -1 10990 isExternal: false, -1 10991 priority: priority, -1 10992 root: options.rootNode, -1 10993 shadowId: options.shadowId, -1 10994 sheet: sheet 10268 10995 });10269 -1 return out;10270 -1 }, axe.utils.queue()).then(function(assets) {10271 -1 resolve(assets.reduce(function(out, cssomSheets) {10272 -1 return out.concat(cssomSheets);10273 -1 }, []));-1 10996 }); -1 10997 return q; -1 10998 } -1 10999 cssImportRules.forEach(function(importRule, cssRuleIndex) { -1 11000 return q.defer(function(resolve, reject) { -1 11001 var importUrl = importRule.href; -1 11002 var newPriority = [].concat(_toConsumableArray(priority), [ cssRuleIndex ]); -1 11003 var axiosOptions = { -1 11004 method: 'get', -1 11005 url: importUrl, -1 11006 timeout: options.timeout -1 11007 }; -1 11008 axe.imports.axios(axiosOptions).then(function(_ref4) { -1 11009 var data = _ref4.data; -1 11010 return resolve(options.convertDataToStylesheet({ -1 11011 data: data, -1 11012 isExternal: true, -1 11013 priority: newPriority, -1 11014 root: options.rootNode, -1 11015 shadowId: options.shadowId -1 11016 })); -1 11017 }).catch(reject); -1 11018 }); -1 11019 }); -1 11020 var nonImportCSSRules = rules.filter(function(r) { -1 11021 return r.type !== 3; -1 11022 }); -1 11023 if (!nonImportCSSRules.length) { -1 11024 return q; -1 11025 } -1 11026 q.defer(function(resolve) { -1 11027 return resolve(options.convertDataToStylesheet({ -1 11028 data: nonImportCSSRules.map(function(rule) { -1 11029 return rule.cssText; -1 11030 }).join(), -1 11031 isExternal: false, -1 11032 priority: priority, -1 11033 root: options.rootNode, -1 11034 shadowId: options.shadowId -1 11035 })); -1 11036 }); -1 11037 return q; -1 11038 } -1 11039 function parseCrossOriginStylesheet(url, options, priority) { -1 11040 var q = axe.utils.queue(); -1 11041 if (!url) { -1 11042 return q; -1 11043 } -1 11044 var axiosOptions = { -1 11045 method: 'get', -1 11046 url: url, -1 11047 timeout: options.timeout -1 11048 }; -1 11049 q.defer(function(resolve, reject) { -1 11050 axe.imports.axios(axiosOptions).then(function(_ref5) { -1 11051 var data = _ref5.data; -1 11052 return resolve(options.convertDataToStylesheet({ -1 11053 data: data, -1 11054 isExternal: true, -1 11055 priority: priority, -1 11056 root: options.rootNode, -1 11057 shadowId: options.shadowId -1 11058 })); 10274 11059 }).catch(reject); 10275 11060 }); 10276 11061 return q;10277 -1 };-1 11062 } -1 11063 function getStylesheetsOfRootNode(options) { -1 11064 var rootNode = options.rootNode, shadowId = options.shadowId; -1 11065 var sheets = void 0; -1 11066 if (rootNode.nodeType === 11 && shadowId) { -1 11067 sheets = getStylesheetsFromDocumentFragment(options); -1 11068 } else { -1 11069 sheets = getStylesheetsFromDocument(rootNode); -1 11070 } -1 11071 return filterStylesheetsWithSameHref(sheets); -1 11072 } -1 11073 function getStylesheetsFromDocumentFragment(options) { -1 11074 var rootNode = options.rootNode, convertDataToStylesheet = options.convertDataToStylesheet; -1 11075 return Array.from(rootNode.children).filter(filerStyleAndLinkAttributesInDocumentFragment).reduce(function(out, node) { -1 11076 var nodeName = node.nodeName.toUpperCase(); -1 11077 var data = nodeName === 'STYLE' ? node.textContent : node; -1 11078 var isLink = nodeName === 'LINK'; -1 11079 var stylesheet = convertDataToStylesheet({ -1 11080 data: data, -1 11081 isLink: isLink, -1 11082 root: rootNode -1 11083 }); -1 11084 out.push(stylesheet.sheet); -1 11085 return out; -1 11086 }, []); -1 11087 } -1 11088 function getStylesheetsFromDocument(rootNode) { -1 11089 return Array.from(rootNode.styleSheets).filter(function(sheet) { -1 11090 return filterMediaIsPrint(sheet.media.mediaText); -1 11091 }); -1 11092 } -1 11093 function filerStyleAndLinkAttributesInDocumentFragment(node) { -1 11094 var nodeName = node.nodeName.toUpperCase(); -1 11095 var linkHref = node.getAttribute('href'); -1 11096 var linkRel = node.getAttribute('rel'); -1 11097 var isLink = nodeName === 'LINK' && linkHref && linkRel && node.rel.toUpperCase().includes('STYLESHEET'); -1 11098 var isStyle = nodeName === 'STYLE'; -1 11099 return isStyle || isLink && filterMediaIsPrint(node.media); -1 11100 } -1 11101 function filterMediaIsPrint(media) { -1 11102 if (!media) { -1 11103 return true; -1 11104 } -1 11105 return !media.toUpperCase().includes('PRINT'); -1 11106 } -1 11107 function filterStylesheetsWithSameHref(sheets) { -1 11108 var hrefs = []; -1 11109 return sheets.filter(function(sheet) { -1 11110 if (!sheet.href) { -1 11111 return true; -1 11112 } -1 11113 if (hrefs.includes(sheet.href)) { -1 11114 return false; -1 11115 } -1 11116 hrefs.push(sheet.href); -1 11117 return true; -1 11118 }); -1 11119 } 10278 11120 'use strict'; 10279 11121 var _typeof = typeof Symbol === 'function' && typeof Symbol.iterator === 'symbol' ? function(obj) { 10280 11122 return typeof obj; @@ -10298,8 +11140,8 @@ module.exports = { 10298 11140 return (typeof preload === 'undefined' ? 'undefined' : _typeof(preload)) === 'object' && Array.isArray(preload.assets); 10299 11141 } 10300 11142 axe.utils.shouldPreload = function shouldPreload(options) {10301 -1 if (!options || !options.preload) {10302 -1 return false;-1 11143 if (!options || options.preload === undefined || options.preload === null) { -1 11144 return true; 10303 11145 } 10304 11146 if (typeof options.preload === 'boolean') { 10305 11147 return options.preload; @@ -10311,6 +11153,9 @@ module.exports = { 10311 11153 assets: axe.constants.preloadAssets, 10312 11154 timeout: axe.constants.preloadAssetsTimeout 10313 11155 }; -1 11156 if (!options.preload) { -1 11157 return config; -1 11158 } 10314 11159 if (typeof options.preload === 'boolean') { 10315 11160 return config; 10316 11161 } @@ -11061,6 +11906,11 @@ module.exports = { 11061 11906 }); 11062 11907 }; 11063 11908 'use strict'; -1 11909 axe.utils.tokenList = function(str) { -1 11910 'use strict'; -1 11911 return str.trim().replace(/\s{2,}/g, ' ').split(' '); -1 11912 }; -1 11913 'use strict'; 11064 11914 var uuid; 11065 11915 (function(_global) { 11066 11916 var _rng; @@ -11176,11 +12026,43 @@ module.exports = { 11176 12026 uuid.BufferClass = BufferClass; 11177 12027 })(window); 11178 12028 'use strict'; -1 12029 axe.utils.validInputTypes = function validInputTypes() { -1 12030 'use strict'; -1 12031 return [ 'hidden', 'text', 'search', 'tel', 'url', 'email', 'password', 'date', 'month', 'week', 'time', 'datetime-local', 'number', 'range', 'color', 'checkbox', 'radio', 'file', 'submit', 'image', 'reset', 'button' ]; -1 12032 }; -1 12033 'use strict'; -1 12034 var langs = [ 'aa', 'ab', 'ae', 'af', 'ak', 'am', 'an', 'ar', 'as', 'av', 'ay', 'az', 'ba', 'be', 'bg', 'bh', 'bi', 'bm', 'bn', 'bo', 'br', 'bs', 'ca', 'ce', 'ch', 'co', 'cr', 'cs', 'cu', 'cv', 'cy', 'da', 'de', 'dv', 'dz', 'ee', 'el', 'en', 'eo', 'es', 'et', 'eu', 'fa', 'ff', 'fi', 'fj', 'fo', 'fr', 'fy', 'ga', 'gd', 'gl', 'gn', 'gu', 'gv', 'ha', 'he', 'hi', 'ho', 'hr', 'ht', 'hu', 'hy', 'hz', 'ia', 'id', 'ie', 'ig', 'ii', 'ik', 'in', 'io', 'is', 'it', 'iu', 'iw', 'ja', 'ji', 'jv', 'jw', 'ka', 'kg', 'ki', 'kj', 'kk', 'kl', 'km', 'kn', 'ko', 'kr', 'ks', 'ku', 'kv', 'kw', 'ky', 'la', 'lb', 'lg', 'li', 'ln', 'lo', 'lt', 'lu', 'lv', 'mg', 'mh', 'mi', 'mk', 'ml', 'mn', 'mo', 'mr', 'ms', 'mt', 'my', 'na', 'nb', 'nd', 'ne', 'ng', 'nl', 'nn', 'no', 'nr', 'nv', 'ny', 'oc', 'oj', 'om', 'or', 'os', 'pa', 'pi', 'pl', 'ps', 'pt', 'qu', 'rm', 'rn', 'ro', 'ru', 'rw', 'sa', 'sc', 'sd', 'se', 'sg', 'sh', 'si', 'sk', 'sl', 'sm', 'sn', 'so', 'sq', 'sr', 'ss', 'st', 'su', 'sv', 'sw', 'ta', 'te', 'tg', 'th', 'ti', 'tk', 'tl', 'tn', 'to', 'tr', 'ts', 'tt', 'tw', 'ty', 'ug', 'uk', 'ur', 'uz', 've', 'vi', 'vo', 'wa', 'wo', 'xh', 'yi', 'yo', 'za', 'zh', 'zu', 'aaa', 'aab', 'aac', 'aad', 'aae', 'aaf', 'aag', 'aah', 'aai', 'aak', 'aal', 'aam', 'aan', 'aao', 'aap', 'aaq', 'aas', 'aat', 'aau', 'aav', 'aaw', 'aax', 'aaz', 'aba', 'abb', 'abc', 'abd', 'abe', 'abf', 'abg', 'abh', 'abi', 'abj', 'abl', 'abm', 'abn', 'abo', 'abp', 'abq', 'abr', 'abs', 'abt', 'abu', 'abv', 'abw', 'abx', 'aby', 'abz', 'aca', 'acb', 'acd', 'ace', 'acf', 'ach', 'aci', 'ack', 'acl', 'acm', 'acn', 'acp', 'acq', 'acr', 'acs', 'act', 'acu', 'acv', 'acw', 'acx', 'acy', 'acz', 'ada', 'adb', 'add', 'ade', 'adf', 'adg', 'adh', 'adi', 'adj', 'adl', 'adn', 'ado', 'adp', 'adq', 'adr', 'ads', 'adt', 'adu', 'adw', 'adx', 'ady', 'adz', 'aea', 'aeb', 'aec', 'aed', 'aee', 'aek', 'ael', 'aem', 'aen', 'aeq', 'aer', 'aes', 'aeu', 'aew', 'aey', 'aez', 'afa', 'afb', 'afd', 'afe', 'afg', 'afh', 'afi', 'afk', 'afn', 'afo', 'afp', 'afs', 'aft', 'afu', 'afz', 'aga', 'agb', 'agc', 'agd', 'age', 'agf', 'agg', 'agh', 'agi', 'agj', 'agk', 'agl', 'agm', 'agn', 'ago', 'agp', 'agq', 'agr', 'ags', 'agt', 'agu', 'agv', 'agw', 'agx', 'agy', 'agz', 'aha', 'ahb', 'ahg', 'ahh', 'ahi', 'ahk', 'ahl', 'ahm', 'ahn', 'aho', 'ahp', 'ahr', 'ahs', 'aht', 'aia', 'aib', 'aic', 'aid', 'aie', 'aif', 'aig', 'aih', 'aii', 'aij', 'aik', 'ail', 'aim', 'ain', 'aio', 'aip', 'aiq', 'air', 'ais', 'ait', 'aiw', 'aix', 'aiy', 'aja', 'ajg', 'aji', 'ajn', 'ajp', 'ajt', 'aju', 'ajw', 'ajz', 'akb', 'akc', 'akd', 'ake', 'akf', 'akg', 'akh', 'aki', 'akj', 'akk', 'akl', 'akm', 'ako', 'akp', 'akq', 'akr', 'aks', 'akt', 'aku', 'akv', 'akw', 'akx', 'aky', 'akz', 'ala', 'alc', 'ald', 'ale', 'alf', 'alg', 'alh', 'ali', 'alj', 'alk', 'all', 'alm', 'aln', 'alo', 'alp', 'alq', 'alr', 'als', 'alt', 'alu', 'alv', 'alw', 'alx', 'aly', 'alz', 'ama', 'amb', 'amc', 'ame', 'amf', 'amg', 'ami', 'amj', 'amk', 'aml', 'amm', 'amn', 'amo', 'amp', 'amq', 'amr', 'ams', 'amt', 'amu', 'amv', 'amw', 'amx', 'amy', 'amz', 'ana', 'anb', 'anc', 'and', 'ane', 'anf', 'ang', 'anh', 'ani', 'anj', 'ank', 'anl', 'anm', 'ann', 'ano', 'anp', 'anq', 'anr', 'ans', 'ant', 'anu', 'anv', 'anw', 'anx', 'any', 'anz', 'aoa', 'aob', 'aoc', 'aod', 'aoe', 'aof', 'aog', 'aoh', 'aoi', 'aoj', 'aok', 'aol', 'aom', 'aon', 'aor', 'aos', 'aot', 'aou', 'aox', 'aoz', 'apa', 'apb', 'apc', 'apd', 'ape', 'apf', 'apg', 'aph', 'api', 'apj', 'apk', 'apl', 'apm', 'apn', 'apo', 'app', 'apq', 'apr', 'aps', 'apt', 'apu', 'apv', 'apw', 'apx', 'apy', 'apz', 'aqa', 'aqc', 'aqd', 'aqg', 'aql', 'aqm', 'aqn', 'aqp', 'aqr', 'aqt', 'aqz', 'arb', 'arc', 'ard', 'are', 'arh', 'ari', 'arj', 'ark', 'arl', 'arn', 'aro', 'arp', 'arq', 'arr', 'ars', 'art', 'aru', 'arv', 'arw', 'arx', 'ary', 'arz', 'asa', 'asb', 'asc', 'asd', 'ase', 'asf', 'asg', 'ash', 'asi', 'asj', 'ask', 'asl', 'asn', 'aso', 'asp', 'asq', 'asr', 'ass', 'ast', 'asu', 'asv', 'asw', 'asx', 'asy', 'asz', 'ata', 'atb', 'atc', 'atd', 'ate', 'atg', 'ath', 'ati', 'atj', 'atk', 'atl', 'atm', 'atn', 'ato', 'atp', 'atq', 'atr', 'ats', 'att', 'atu', 'atv', 'atw', 'atx', 'aty', 'atz', 'aua', 'aub', 'auc', 'aud', 'aue', 'auf', 'aug', 'auh', 'aui', 'auj', 'auk', 'aul', 'aum', 'aun', 'auo', 'aup', 'auq', 'aur', 'aus', 'aut', 'auu', 'auw', 'aux', 'auy', 'auz', 'avb', 'avd', 'avi', 'avk', 'avl', 'avm', 'avn', 'avo', 'avs', 'avt', 'avu', 'avv', 'awa', 'awb', 'awc', 'awd', 'awe', 'awg', 'awh', 'awi', 'awk', 'awm', 'awn', 'awo', 'awr', 'aws', 'awt', 'awu', 'awv', 'aww', 'awx', 'awy', 'axb', 'axe', 'axg', 'axk', 'axl', 'axm', 'axx', 'aya', 'ayb', 'ayc', 'ayd', 'aye', 'ayg', 'ayh', 'ayi', 'ayk', 'ayl', 'ayn', 'ayo', 'ayp', 'ayq', 'ayr', 'ays', 'ayt', 'ayu', 'ayx', 'ayy', 'ayz', 'aza', 'azb', 'azc', 'azd', 'azg', 'azj', 'azm', 'azn', 'azo', 'azt', 'azz', 'baa', 'bab', 'bac', 'bad', 'bae', 'baf', 'bag', 'bah', 'bai', 'baj', 'bal', 'ban', 'bao', 'bap', 'bar', 'bas', 'bat', 'bau', 'bav', 'baw', 'bax', 'bay', 'baz', 'bba', 'bbb', 'bbc', 'bbd', 'bbe', 'bbf', 'bbg', 'bbh', 'bbi', 'bbj', 'bbk', 'bbl', 'bbm', 'bbn', 'bbo', 'bbp', 'bbq', 'bbr', 'bbs', 'bbt', 'bbu', 'bbv', 'bbw', 'bbx', 'bby', 'bbz', 'bca', 'bcb', 'bcc', 'bcd', 'bce', 'bcf', 'bcg', 'bch', 'bci', 'bcj', 'bck', 'bcl', 'bcm', 'bcn', 'bco', 'bcp', 'bcq', 'bcr', 'bcs', 'bct', 'bcu', 'bcv', 'bcw', 'bcy', 'bcz', 'bda', 'bdb', 'bdc', 'bdd', 'bde', 'bdf', 'bdg', 'bdh', 'bdi', 'bdj', 'bdk', 'bdl', 'bdm', 'bdn', 'bdo', 'bdp', 'bdq', 'bdr', 'bds', 'bdt', 'bdu', 'bdv', 'bdw', 'bdx', 'bdy', 'bdz', 'bea', 'beb', 'bec', 'bed', 'bee', 'bef', 'beg', 'beh', 'bei', 'bej', 'bek', 'bem', 'beo', 'bep', 'beq', 'ber', 'bes', 'bet', 'beu', 'bev', 'bew', 'bex', 'bey', 'bez', 'bfa', 'bfb', 'bfc', 'bfd', 'bfe', 'bff', 'bfg', 'bfh', 'bfi', 'bfj', 'bfk', 'bfl', 'bfm', 'bfn', 'bfo', 'bfp', 'bfq', 'bfr', 'bfs', 'bft', 'bfu', 'bfw', 'bfx', 'bfy', 'bfz', 'bga', 'bgb', 'bgc', 'bgd', 'bge', 'bgf', 'bgg', 'bgi', 'bgj', 'bgk', 'bgl', 'bgm', 'bgn', 'bgo', 'bgp', 'bgq', 'bgr', 'bgs', 'bgt', 'bgu', 'bgv', 'bgw', 'bgx', 'bgy', 'bgz', 'bha', 'bhb', 'bhc', 'bhd', 'bhe', 'bhf', 'bhg', 'bhh', 'bhi', 'bhj', 'bhk', 'bhl', 'bhm', 'bhn', 'bho', 'bhp', 'bhq', 'bhr', 'bhs', 'bht', 'bhu', 'bhv', 'bhw', 'bhx', 'bhy', 'bhz', 'bia', 'bib', 'bic', 'bid', 'bie', 'bif', 'big', 'bij', 'bik', 'bil', 'bim', 'bin', 'bio', 'bip', 'biq', 'bir', 'bit', 'biu', 'biv', 'biw', 'bix', 'biy', 'biz', 'bja', 'bjb', 'bjc', 'bjd', 'bje', 'bjf', 'bjg', 'bjh', 'bji', 'bjj', 'bjk', 'bjl', 'bjm', 'bjn', 'bjo', 'bjp', 'bjq', 'bjr', 'bjs', 'bjt', 'bju', 'bjv', 'bjw', 'bjx', 'bjy', 'bjz', 'bka', 'bkb', 'bkc', 'bkd', 'bkf', 'bkg', 'bkh', 'bki', 'bkj', 'bkk', 'bkl', 'bkm', 'bkn', 'bko', 'bkp', 'bkq', 'bkr', 'bks', 'bkt', 'bku', 'bkv', 'bkw', 'bkx', 'bky', 'bkz', 'bla', 'blb', 'blc', 'bld', 'ble', 'blf', 'blg', 'blh', 'bli', 'blj', 'blk', 'bll', 'blm', 'bln', 'blo', 'blp', 'blq', 'blr', 'bls', 'blt', 'blv', 'blw', 'blx', 'bly', 'blz', 'bma', 'bmb', 'bmc', 'bmd', 'bme', 'bmf', 'bmg', 'bmh', 'bmi', 'bmj', 'bmk', 'bml', 'bmm', 'bmn', 'bmo', 'bmp', 'bmq', 'bmr', 'bms', 'bmt', 'bmu', 'bmv', 'bmw', 'bmx', 'bmy', 'bmz', 'bna', 'bnb', 'bnc', 'bnd', 'bne', 'bnf', 'bng', 'bni', 'bnj', 'bnk', 'bnl', 'bnm', 'bnn', 'bno', 'bnp', 'bnq', 'bnr', 'bns', 'bnt', 'bnu', 'bnv', 'bnw', 'bnx', 'bny', 'bnz', 'boa', 'bob', 'boe', 'bof', 'bog', 'boh', 'boi', 'boj', 'bok', 'bol', 'bom', 'bon', 'boo', 'bop', 'boq', 'bor', 'bot', 'bou', 'bov', 'bow', 'box', 'boy', 'boz', 'bpa', 'bpb', 'bpd', 'bpg', 'bph', 'bpi', 'bpj', 'bpk', 'bpl', 'bpm', 'bpn', 'bpo', 'bpp', 'bpq', 'bpr', 'bps', 'bpt', 'bpu', 'bpv', 'bpw', 'bpx', 'bpy', 'bpz', 'bqa', 'bqb', 'bqc', 'bqd', 'bqf', 'bqg', 'bqh', 'bqi', 'bqj', 'bqk', 'bql', 'bqm', 'bqn', 'bqo', 'bqp', 'bqq', 'bqr', 'bqs', 'bqt', 'bqu', 'bqv', 'bqw', 'bqx', 'bqy', 'bqz', 'bra', 'brb', 'brc', 'brd', 'brf', 'brg', 'brh', 'bri', 'brj', 'brk', 'brl', 'brm', 'brn', 'bro', 'brp', 'brq', 'brr', 'brs', 'brt', 'bru', 'brv', 'brw', 'brx', 'bry', 'brz', 'bsa', 'bsb', 'bsc', 'bse', 'bsf', 'bsg', 'bsh', 'bsi', 'bsj', 'bsk', 'bsl', 'bsm', 'bsn', 'bso', 'bsp', 'bsq', 'bsr', 'bss', 'bst', 'bsu', 'bsv', 'bsw', 'bsx', 'bsy', 'bta', 'btb', 'btc', 'btd', 'bte', 'btf', 'btg', 'bth', 'bti', 'btj', 'btk', 'btl', 'btm', 'btn', 'bto', 'btp', 'btq', 'btr', 'bts', 'btt', 'btu', 'btv', 'btw', 'btx', 'bty', 'btz', 'bua', 'bub', 'buc', 'bud', 'bue', 'buf', 'bug', 'buh', 'bui', 'buj', 'buk', 'bum', 'bun', 'buo', 'bup', 'buq', 'bus', 'but', 'buu', 'buv', 'buw', 'bux', 'buy', 'buz', 'bva', 'bvb', 'bvc', 'bvd', 'bve', 'bvf', 'bvg', 'bvh', 'bvi', 'bvj', 'bvk', 'bvl', 'bvm', 'bvn', 'bvo', 'bvp', 'bvq', 'bvr', 'bvt', 'bvu', 'bvv', 'bvw', 'bvx', 'bvy', 'bvz', 'bwa', 'bwb', 'bwc', 'bwd', 'bwe', 'bwf', 'bwg', 'bwh', 'bwi', 'bwj', 'bwk', 'bwl', 'bwm', 'bwn', 'bwo', 'bwp', 'bwq', 'bwr', 'bws', 'bwt', 'bwu', 'bww', 'bwx', 'bwy', 'bwz', 'bxa', 'bxb', 'bxc', 'bxd', 'bxe', 'bxf', 'bxg', 'bxh', 'bxi', 'bxj', 'bxk', 'bxl', 'bxm', 'bxn', 'bxo', 'bxp', 'bxq', 'bxr', 'bxs', 'bxu', 'bxv', 'bxw', 'bxx', 'bxz', 'bya', 'byb', 'byc', 'byd', 'bye', 'byf', 'byg', 'byh', 'byi', 'byj', 'byk', 'byl', 'bym', 'byn', 'byo', 'byp', 'byq', 'byr', 'bys', 'byt', 'byv', 'byw', 'byx', 'byy', 'byz', 'bza', 'bzb', 'bzc', 'bzd', 'bze', 'bzf', 'bzg', 'bzh', 'bzi', 'bzj', 'bzk', 'bzl', 'bzm', 'bzn', 'bzo', 'bzp', 'bzq', 'bzr', 'bzs', 'bzt', 'bzu', 'bzv', 'bzw', 'bzx', 'bzy', 'bzz', 'caa', 'cab', 'cac', 'cad', 'cae', 'caf', 'cag', 'cah', 'cai', 'caj', 'cak', 'cal', 'cam', 'can', 'cao', 'cap', 'caq', 'car', 'cas', 'cau', 'cav', 'caw', 'cax', 'cay', 'caz', 'cba', 'cbb', 'cbc', 'cbd', 'cbe', 'cbg', 'cbh', 'cbi', 'cbj', 'cbk', 'cbl', 'cbn', 'cbo', 'cbq', 'cbr', 'cbs', 'cbt', 'cbu', 'cbv', 'cbw', 'cby', 'cca', 'ccc', 'ccd', 'cce', 'ccg', 'cch', 'ccj', 'ccl', 'ccm', 'ccn', 'cco', 'ccp', 'ccq', 'ccr', 'ccs', 'cda', 'cdc', 'cdd', 'cde', 'cdf', 'cdg', 'cdh', 'cdi', 'cdj', 'cdm', 'cdn', 'cdo', 'cdr', 'cds', 'cdy', 'cdz', 'cea', 'ceb', 'ceg', 'cek', 'cel', 'cen', 'cet', 'cfa', 'cfd', 'cfg', 'cfm', 'cga', 'cgc', 'cgg', 'cgk', 'chb', 'chc', 'chd', 'chf', 'chg', 'chh', 'chj', 'chk', 'chl', 'chm', 'chn', 'cho', 'chp', 'chq', 'chr', 'cht', 'chw', 'chx', 'chy', 'chz', 'cia', 'cib', 'cic', 'cid', 'cie', 'cih', 'cik', 'cim', 'cin', 'cip', 'cir', 'ciw', 'ciy', 'cja', 'cje', 'cjh', 'cji', 'cjk', 'cjm', 'cjn', 'cjo', 'cjp', 'cjr', 'cjs', 'cjv', 'cjy', 'cka', 'ckb', 'ckh', 'ckl', 'ckn', 'cko', 'ckq', 'ckr', 'cks', 'ckt', 'cku', 'ckv', 'ckx', 'cky', 'ckz', 'cla', 'clc', 'cld', 'cle', 'clh', 'cli', 'clj', 'clk', 'cll', 'clm', 'clo', 'clt', 'clu', 'clw', 'cly', 'cma', 'cmc', 'cme', 'cmg', 'cmi', 'cmk', 'cml', 'cmm', 'cmn', 'cmo', 'cmr', 'cms', 'cmt', 'cna', 'cnb', 'cnc', 'cng', 'cnh', 'cni', 'cnk', 'cnl', 'cno', 'cnr', 'cns', 'cnt', 'cnu', 'cnw', 'cnx', 'coa', 'cob', 'coc', 'cod', 'coe', 'cof', 'cog', 'coh', 'coj', 'cok', 'col', 'com', 'con', 'coo', 'cop', 'coq', 'cot', 'cou', 'cov', 'cow', 'cox', 'coy', 'coz', 'cpa', 'cpb', 'cpc', 'cpe', 'cpf', 'cpg', 'cpi', 'cpn', 'cpo', 'cpp', 'cps', 'cpu', 'cpx', 'cpy', 'cqd', 'cqu', 'cra', 'crb', 'crc', 'crd', 'crf', 'crg', 'crh', 'cri', 'crj', 'crk', 'crl', 'crm', 'crn', 'cro', 'crp', 'crq', 'crr', 'crs', 'crt', 'crv', 'crw', 'crx', 'cry', 'crz', 'csa', 'csb', 'csc', 'csd', 'cse', 'csf', 'csg', 'csh', 'csi', 'csj', 'csk', 'csl', 'csm', 'csn', 'cso', 'csq', 'csr', 'css', 'cst', 'csu', 'csv', 'csw', 'csy', 'csz', 'cta', 'ctc', 'ctd', 'cte', 'ctg', 'cth', 'ctl', 'ctm', 'ctn', 'cto', 'ctp', 'cts', 'ctt', 'ctu', 'ctz', 'cua', 'cub', 'cuc', 'cug', 'cuh', 'cui', 'cuj', 'cuk', 'cul', 'cum', 'cuo', 'cup', 'cuq', 'cur', 'cus', 'cut', 'cuu', 'cuv', 'cuw', 'cux', 'cuy', 'cvg', 'cvn', 'cwa', 'cwb', 'cwd', 'cwe', 'cwg', 'cwt', 'cya', 'cyb', 'cyo', 'czh', 'czk', 'czn', 'czo', 'czt', 'daa', 'dac', 'dad', 'dae', 'daf', 'dag', 'dah', 'dai', 'daj', 'dak', 'dal', 'dam', 'dao', 'dap', 'daq', 'dar', 'das', 'dau', 'dav', 'daw', 'dax', 'day', 'daz', 'dba', 'dbb', 'dbd', 'dbe', 'dbf', 'dbg', 'dbi', 'dbj', 'dbl', 'dbm', 'dbn', 'dbo', 'dbp', 'dbq', 'dbr', 'dbt', 'dbu', 'dbv', 'dbw', 'dby', 'dcc', 'dcr', 'dda', 'ddd', 'dde', 'ddg', 'ddi', 'ddj', 'ddn', 'ddo', 'ddr', 'dds', 'ddw', 'dec', 'ded', 'dee', 'def', 'deg', 'deh', 'dei', 'dek', 'del', 'dem', 'den', 'dep', 'deq', 'der', 'des', 'dev', 'dez', 'dga', 'dgb', 'dgc', 'dgd', 'dge', 'dgg', 'dgh', 'dgi', 'dgk', 'dgl', 'dgn', 'dgo', 'dgr', 'dgs', 'dgt', 'dgu', 'dgw', 'dgx', 'dgz', 'dha', 'dhd', 'dhg', 'dhi', 'dhl', 'dhm', 'dhn', 'dho', 'dhr', 'dhs', 'dhu', 'dhv', 'dhw', 'dhx', 'dia', 'dib', 'dic', 'did', 'dif', 'dig', 'dih', 'dii', 'dij', 'dik', 'dil', 'dim', 'din', 'dio', 'dip', 'diq', 'dir', 'dis', 'dit', 'diu', 'diw', 'dix', 'diy', 'diz', 'dja', 'djb', 'djc', 'djd', 'dje', 'djf', 'dji', 'djj', 'djk', 'djl', 'djm', 'djn', 'djo', 'djr', 'dju', 'djw', 'dka', 'dkk', 'dkl', 'dkr', 'dks', 'dkx', 'dlg', 'dlk', 'dlm', 'dln', 'dma', 'dmb', 'dmc', 'dmd', 'dme', 'dmg', 'dmk', 'dml', 'dmm', 'dmn', 'dmo', 'dmr', 'dms', 'dmu', 'dmv', 'dmw', 'dmx', 'dmy', 'dna', 'dnd', 'dne', 'dng', 'dni', 'dnj', 'dnk', 'dnn', 'dnr', 'dnt', 'dnu', 'dnv', 'dnw', 'dny', 'doa', 'dob', 'doc', 'doe', 'dof', 'doh', 'doi', 'dok', 'dol', 'don', 'doo', 'dop', 'doq', 'dor', 'dos', 'dot', 'dov', 'dow', 'dox', 'doy', 'doz', 'dpp', 'dra', 'drb', 'drc', 'drd', 'dre', 'drg', 'drh', 'dri', 'drl', 'drn', 'dro', 'drq', 'drr', 'drs', 'drt', 'dru', 'drw', 'dry', 'dsb', 'dse', 'dsh', 'dsi', 'dsl', 'dsn', 'dso', 'dsq', 'dta', 'dtb', 'dtd', 'dth', 'dti', 'dtk', 'dtm', 'dtn', 'dto', 'dtp', 'dtr', 'dts', 'dtt', 'dtu', 'dty', 'dua', 'dub', 'duc', 'dud', 'due', 'duf', 'dug', 'duh', 'dui', 'duj', 'duk', 'dul', 'dum', 'dun', 'duo', 'dup', 'duq', 'dur', 'dus', 'duu', 'duv', 'duw', 'dux', 'duy', 'duz', 'dva', 'dwa', 'dwl', 'dwr', 'dws', 'dwu', 'dww', 'dwy', 'dya', 'dyb', 'dyd', 'dyg', 'dyi', 'dym', 'dyn', 'dyo', 'dyu', 'dyy', 'dza', 'dzd', 'dze', 'dzg', 'dzl', 'dzn', 'eaa', 'ebg', 'ebk', 'ebo', 'ebr', 'ebu', 'ecr', 'ecs', 'ecy', 'eee', 'efa', 'efe', 'efi', 'ega', 'egl', 'ego', 'egx', 'egy', 'ehu', 'eip', 'eit', 'eiv', 'eja', 'eka', 'ekc', 'eke', 'ekg', 'eki', 'ekk', 'ekl', 'ekm', 'eko', 'ekp', 'ekr', 'eky', 'ele', 'elh', 'eli', 'elk', 'elm', 'elo', 'elp', 'elu', 'elx', 'ema', 'emb', 'eme', 'emg', 'emi', 'emk', 'emm', 'emn', 'emo', 'emp', 'ems', 'emu', 'emw', 'emx', 'emy', 'ena', 'enb', 'enc', 'end', 'enf', 'enh', 'enl', 'enm', 'enn', 'eno', 'enq', 'enr', 'enu', 'env', 'enw', 'enx', 'eot', 'epi', 'era', 'erg', 'erh', 'eri', 'erk', 'ero', 'err', 'ers', 'ert', 'erw', 'ese', 'esg', 'esh', 'esi', 'esk', 'esl', 'esm', 'esn', 'eso', 'esq', 'ess', 'esu', 'esx', 'esy', 'etb', 'etc', 'eth', 'etn', 'eto', 'etr', 'ets', 'ett', 'etu', 'etx', 'etz', 'euq', 'eve', 'evh', 'evn', 'ewo', 'ext', 'eya', 'eyo', 'eza', 'eze', 'faa', 'fab', 'fad', 'faf', 'fag', 'fah', 'fai', 'faj', 'fak', 'fal', 'fam', 'fan', 'fap', 'far', 'fat', 'fau', 'fax', 'fay', 'faz', 'fbl', 'fcs', 'fer', 'ffi', 'ffm', 'fgr', 'fia', 'fie', 'fil', 'fip', 'fir', 'fit', 'fiu', 'fiw', 'fkk', 'fkv', 'fla', 'flh', 'fli', 'fll', 'fln', 'flr', 'fly', 'fmp', 'fmu', 'fnb', 'fng', 'fni', 'fod', 'foi', 'fom', 'fon', 'for', 'fos', 'fox', 'fpe', 'fqs', 'frc', 'frd', 'frk', 'frm', 'fro', 'frp', 'frq', 'frr', 'frs', 'frt', 'fse', 'fsl', 'fss', 'fub', 'fuc', 'fud', 'fue', 'fuf', 'fuh', 'fui', 'fuj', 'fum', 'fun', 'fuq', 'fur', 'fut', 'fuu', 'fuv', 'fuy', 'fvr', 'fwa', 'fwe', 'gaa', 'gab', 'gac', 'gad', 'gae', 'gaf', 'gag', 'gah', 'gai', 'gaj', 'gak', 'gal', 'gam', 'gan', 'gao', 'gap', 'gaq', 'gar', 'gas', 'gat', 'gau', 'gav', 'gaw', 'gax', 'gay', 'gaz', 'gba', 'gbb', 'gbc', 'gbd', 'gbe', 'gbf', 'gbg', 'gbh', 'gbi', 'gbj', 'gbk', 'gbl', 'gbm', 'gbn', 'gbo', 'gbp', 'gbq', 'gbr', 'gbs', 'gbu', 'gbv', 'gbw', 'gbx', 'gby', 'gbz', 'gcc', 'gcd', 'gce', 'gcf', 'gcl', 'gcn', 'gcr', 'gct', 'gda', 'gdb', 'gdc', 'gdd', 'gde', 'gdf', 'gdg', 'gdh', 'gdi', 'gdj', 'gdk', 'gdl', 'gdm', 'gdn', 'gdo', 'gdq', 'gdr', 'gds', 'gdt', 'gdu', 'gdx', 'gea', 'geb', 'gec', 'ged', 'geg', 'geh', 'gei', 'gej', 'gek', 'gel', 'gem', 'geq', 'ges', 'gev', 'gew', 'gex', 'gey', 'gez', 'gfk', 'gft', 'gfx', 'gga', 'ggb', 'ggd', 'gge', 'ggg', 'ggk', 'ggl', 'ggn', 'ggo', 'ggr', 'ggt', 'ggu', 'ggw', 'gha', 'ghc', 'ghe', 'ghh', 'ghk', 'ghl', 'ghn', 'gho', 'ghr', 'ghs', 'ght', 'gia', 'gib', 'gic', 'gid', 'gie', 'gig', 'gih', 'gil', 'gim', 'gin', 'gio', 'gip', 'giq', 'gir', 'gis', 'git', 'giu', 'giw', 'gix', 'giy', 'giz', 'gji', 'gjk', 'gjm', 'gjn', 'gjr', 'gju', 'gka', 'gkd', 'gke', 'gkn', 'gko', 'gkp', 'gku', 'glc', 'gld', 'glh', 'gli', 'glj', 'glk', 'gll', 'glo', 'glr', 'glu', 'glw', 'gly', 'gma', 'gmb', 'gmd', 'gme', 'gmg', 'gmh', 'gml', 'gmm', 'gmn', 'gmq', 'gmu', 'gmv', 'gmw', 'gmx', 'gmy', 'gmz', 'gna', 'gnb', 'gnc', 'gnd', 'gne', 'gng', 'gnh', 'gni', 'gnj', 'gnk', 'gnl', 'gnm', 'gnn', 'gno', 'gnq', 'gnr', 'gnt', 'gnu', 'gnw', 'gnz', 'goa', 'gob', 'goc', 'god', 'goe', 'gof', 'gog', 'goh', 'goi', 'goj', 'gok', 'gol', 'gom', 'gon', 'goo', 'gop', 'goq', 'gor', 'gos', 'got', 'gou', 'gow', 'gox', 'goy', 'goz', 'gpa', 'gpe', 'gpn', 'gqa', 'gqi', 'gqn', 'gqr', 'gqu', 'gra', 'grb', 'grc', 'grd', 'grg', 'grh', 'gri', 'grj', 'grk', 'grm', 'gro', 'grq', 'grr', 'grs', 'grt', 'gru', 'grv', 'grw', 'grx', 'gry', 'grz', 'gse', 'gsg', 'gsl', 'gsm', 'gsn', 'gso', 'gsp', 'gss', 'gsw', 'gta', 'gti', 'gtu', 'gua', 'gub', 'guc', 'gud', 'gue', 'guf', 'gug', 'guh', 'gui', 'guk', 'gul', 'gum', 'gun', 'guo', 'gup', 'guq', 'gur', 'gus', 'gut', 'guu', 'guv', 'guw', 'gux', 'guz', 'gva', 'gvc', 'gve', 'gvf', 'gvj', 'gvl', 'gvm', 'gvn', 'gvo', 'gvp', 'gvr', 'gvs', 'gvy', 'gwa', 'gwb', 'gwc', 'gwd', 'gwe', 'gwf', 'gwg', 'gwi', 'gwj', 'gwm', 'gwn', 'gwr', 'gwt', 'gwu', 'gww', 'gwx', 'gxx', 'gya', 'gyb', 'gyd', 'gye', 'gyf', 'gyg', 'gyi', 'gyl', 'gym', 'gyn', 'gyo', 'gyr', 'gyy', 'gza', 'gzi', 'gzn', 'haa', 'hab', 'hac', 'had', 'hae', 'haf', 'hag', 'hah', 'hai', 'haj', 'hak', 'hal', 'ham', 'han', 'hao', 'hap', 'haq', 'har', 'has', 'hav', 'haw', 'hax', 'hay', 'haz', 'hba', 'hbb', 'hbn', 'hbo', 'hbu', 'hca', 'hch', 'hdn', 'hds', 'hdy', 'hea', 'hed', 'heg', 'heh', 'hei', 'hem', 'hgm', 'hgw', 'hhi', 'hhr', 'hhy', 'hia', 'hib', 'hid', 'hif', 'hig', 'hih', 'hii', 'hij', 'hik', 'hil', 'him', 'hio', 'hir', 'hit', 'hiw', 'hix', 'hji', 'hka', 'hke', 'hkk', 'hkn', 'hks', 'hla', 'hlb', 'hld', 'hle', 'hlt', 'hlu', 'hma', 'hmb', 'hmc', 'hmd', 'hme', 'hmf', 'hmg', 'hmh', 'hmi', 'hmj', 'hmk', 'hml', 'hmm', 'hmn', 'hmp', 'hmq', 'hmr', 'hms', 'hmt', 'hmu', 'hmv', 'hmw', 'hmx', 'hmy', 'hmz', 'hna', 'hnd', 'hne', 'hnh', 'hni', 'hnj', 'hnn', 'hno', 'hns', 'hnu', 'hoa', 'hob', 'hoc', 'hod', 'hoe', 'hoh', 'hoi', 'hoj', 'hok', 'hol', 'hom', 'hoo', 'hop', 'hor', 'hos', 'hot', 'hov', 'how', 'hoy', 'hoz', 'hpo', 'hps', 'hra', 'hrc', 'hre', 'hrk', 'hrm', 'hro', 'hrp', 'hrr', 'hrt', 'hru', 'hrw', 'hrx', 'hrz', 'hsb', 'hsh', 'hsl', 'hsn', 'hss', 'hti', 'hto', 'hts', 'htu', 'htx', 'hub', 'huc', 'hud', 'hue', 'huf', 'hug', 'huh', 'hui', 'huj', 'huk', 'hul', 'hum', 'huo', 'hup', 'huq', 'hur', 'hus', 'hut', 'huu', 'huv', 'huw', 'hux', 'huy', 'huz', 'hvc', 'hve', 'hvk', 'hvn', 'hvv', 'hwa', 'hwc', 'hwo', 'hya', 'hyw', 'hyx', 'iai', 'ian', 'iap', 'iar', 'iba', 'ibb', 'ibd', 'ibe', 'ibg', 'ibh', 'ibi', 'ibl', 'ibm', 'ibn', 'ibr', 'ibu', 'iby', 'ica', 'ich', 'icl', 'icr', 'ida', 'idb', 'idc', 'idd', 'ide', 'idi', 'idr', 'ids', 'idt', 'idu', 'ifa', 'ifb', 'ife', 'iff', 'ifk', 'ifm', 'ifu', 'ify', 'igb', 'ige', 'igg', 'igl', 'igm', 'ign', 'igo', 'igs', 'igw', 'ihb', 'ihi', 'ihp', 'ihw', 'iin', 'iir', 'ijc', 'ije', 'ijj', 'ijn', 'ijo', 'ijs', 'ike', 'iki', 'ikk', 'ikl', 'iko', 'ikp', 'ikr', 'iks', 'ikt', 'ikv', 'ikw', 'ikx', 'ikz', 'ila', 'ilb', 'ilg', 'ili', 'ilk', 'ill', 'ilm', 'ilo', 'ilp', 'ils', 'ilu', 'ilv', 'ilw', 'ima', 'ime', 'imi', 'iml', 'imn', 'imo', 'imr', 'ims', 'imy', 'inb', 'inc', 'ine', 'ing', 'inh', 'inj', 'inl', 'inm', 'inn', 'ino', 'inp', 'ins', 'int', 'inz', 'ior', 'iou', 'iow', 'ipi', 'ipo', 'iqu', 'iqw', 'ira', 'ire', 'irh', 'iri', 'irk', 'irn', 'iro', 'irr', 'iru', 'irx', 'iry', 'isa', 'isc', 'isd', 'ise', 'isg', 'ish', 'isi', 'isk', 'ism', 'isn', 'iso', 'isr', 'ist', 'isu', 'itb', 'itc', 'itd', 'ite', 'iti', 'itk', 'itl', 'itm', 'ito', 'itr', 'its', 'itt', 'itv', 'itw', 'itx', 'ity', 'itz', 'ium', 'ivb', 'ivv', 'iwk', 'iwm', 'iwo', 'iws', 'ixc', 'ixl', 'iya', 'iyo', 'iyx', 'izh', 'izi', 'izr', 'izz', 'jaa', 'jab', 'jac', 'jad', 'jae', 'jaf', 'jah', 'jaj', 'jak', 'jal', 'jam', 'jan', 'jao', 'jaq', 'jar', 'jas', 'jat', 'jau', 'jax', 'jay', 'jaz', 'jbe', 'jbi', 'jbj', 'jbk', 'jbn', 'jbo', 'jbr', 'jbt', 'jbu', 'jbw', 'jcs', 'jct', 'jda', 'jdg', 'jdt', 'jeb', 'jee', 'jeg', 'jeh', 'jei', 'jek', 'jel', 'jen', 'jer', 'jet', 'jeu', 'jgb', 'jge', 'jgk', 'jgo', 'jhi', 'jhs', 'jia', 'jib', 'jic', 'jid', 'jie', 'jig', 'jih', 'jii', 'jil', 'jim', 'jio', 'jiq', 'jit', 'jiu', 'jiv', 'jiy', 'jje', 'jjr', 'jka', 'jkm', 'jko', 'jkp', 'jkr', 'jku', 'jle', 'jls', 'jma', 'jmb', 'jmc', 'jmd', 'jmi', 'jml', 'jmn', 'jmr', 'jms', 'jmw', 'jmx', 'jna', 'jnd', 'jng', 'jni', 'jnj', 'jnl', 'jns', 'job', 'jod', 'jog', 'jor', 'jos', 'jow', 'jpa', 'jpr', 'jpx', 'jqr', 'jra', 'jrb', 'jrr', 'jrt', 'jru', 'jsl', 'jua', 'jub', 'juc', 'jud', 'juh', 'jui', 'juk', 'jul', 'jum', 'jun', 'juo', 'jup', 'jur', 'jus', 'jut', 'juu', 'juw', 'juy', 'jvd', 'jvn', 'jwi', 'jya', 'jye', 'jyy', 'kaa', 'kab', 'kac', 'kad', 'kae', 'kaf', 'kag', 'kah', 'kai', 'kaj', 'kak', 'kam', 'kao', 'kap', 'kaq', 'kar', 'kav', 'kaw', 'kax', 'kay', 'kba', 'kbb', 'kbc', 'kbd', 'kbe', 'kbf', 'kbg', 'kbh', 'kbi', 'kbj', 'kbk', 'kbl', 'kbm', 'kbn', 'kbo', 'kbp', 'kbq', 'kbr', 'kbs', 'kbt', 'kbu', 'kbv', 'kbw', 'kbx', 'kby', 'kbz', 'kca', 'kcb', 'kcc', 'kcd', 'kce', 'kcf', 'kcg', 'kch', 'kci', 'kcj', 'kck', 'kcl', 'kcm', 'kcn', 'kco', 'kcp', 'kcq', 'kcr', 'kcs', 'kct', 'kcu', 'kcv', 'kcw', 'kcx', 'kcy', 'kcz', 'kda', 'kdc', 'kdd', 'kde', 'kdf', 'kdg', 'kdh', 'kdi', 'kdj', 'kdk', 'kdl', 'kdm', 'kdn', 'kdo', 'kdp', 'kdq', 'kdr', 'kdt', 'kdu', 'kdv', 'kdw', 'kdx', 'kdy', 'kdz', 'kea', 'keb', 'kec', 'ked', 'kee', 'kef', 'keg', 'keh', 'kei', 'kej', 'kek', 'kel', 'kem', 'ken', 'keo', 'kep', 'keq', 'ker', 'kes', 'ket', 'keu', 'kev', 'kew', 'kex', 'key', 'kez', 'kfa', 'kfb', 'kfc', 'kfd', 'kfe', 'kff', 'kfg', 'kfh', 'kfi', 'kfj', 'kfk', 'kfl', 'kfm', 'kfn', 'kfo', 'kfp', 'kfq', 'kfr', 'kfs', 'kft', 'kfu', 'kfv', 'kfw', 'kfx', 'kfy', 'kfz', 'kga', 'kgb', 'kgc', 'kgd', 'kge', 'kgf', 'kgg', 'kgh', 'kgi', 'kgj', 'kgk', 'kgl', 'kgm', 'kgn', 'kgo', 'kgp', 'kgq', 'kgr', 'kgs', 'kgt', 'kgu', 'kgv', 'kgw', 'kgx', 'kgy', 'kha', 'khb', 'khc', 'khd', 'khe', 'khf', 'khg', 'khh', 'khi', 'khj', 'khk', 'khl', 'khn', 'kho', 'khp', 'khq', 'khr', 'khs', 'kht', 'khu', 'khv', 'khw', 'khx', 'khy', 'khz', 'kia', 'kib', 'kic', 'kid', 'kie', 'kif', 'kig', 'kih', 'kii', 'kij', 'kil', 'kim', 'kio', 'kip', 'kiq', 'kis', 'kit', 'kiu', 'kiv', 'kiw', 'kix', 'kiy', 'kiz', 'kja', 'kjb', 'kjc', 'kjd', 'kje', 'kjf', 'kjg', 'kjh', 'kji', 'kjj', 'kjk', 'kjl', 'kjm', 'kjn', 'kjo', 'kjp', 'kjq', 'kjr', 'kjs', 'kjt', 'kju', 'kjv', 'kjx', 'kjy', 'kjz', 'kka', 'kkb', 'kkc', 'kkd', 'kke', 'kkf', 'kkg', 'kkh', 'kki', 'kkj', 'kkk', 'kkl', 'kkm', 'kkn', 'kko', 'kkp', 'kkq', 'kkr', 'kks', 'kkt', 'kku', 'kkv', 'kkw', 'kkx', 'kky', 'kkz', 'kla', 'klb', 'klc', 'kld', 'kle', 'klf', 'klg', 'klh', 'kli', 'klj', 'klk', 'kll', 'klm', 'kln', 'klo', 'klp', 'klq', 'klr', 'kls', 'klt', 'klu', 'klv', 'klw', 'klx', 'kly', 'klz', 'kma', 'kmb', 'kmc', 'kmd', 'kme', 'kmf', 'kmg', 'kmh', 'kmi', 'kmj', 'kmk', 'kml', 'kmm', 'kmn', 'kmo', 'kmp', 'kmq', 'kmr', 'kms', 'kmt', 'kmu', 'kmv', 'kmw', 'kmx', 'kmy', 'kmz', 'kna', 'knb', 'knc', 'knd', 'kne', 'knf', 'kng', 'kni', 'knj', 'knk', 'knl', 'knm', 'knn', 'kno', 'knp', 'knq', 'knr', 'kns', 'knt', 'knu', 'knv', 'knw', 'knx', 'kny', 'knz', 'koa', 'koc', 'kod', 'koe', 'kof', 'kog', 'koh', 'koi', 'koj', 'kok', 'kol', 'koo', 'kop', 'koq', 'kos', 'kot', 'kou', 'kov', 'kow', 'kox', 'koy', 'koz', 'kpa', 'kpb', 'kpc', 'kpd', 'kpe', 'kpf', 'kpg', 'kph', 'kpi', 'kpj', 'kpk', 'kpl', 'kpm', 'kpn', 'kpo', 'kpp', 'kpq', 'kpr', 'kps', 'kpt', 'kpu', 'kpv', 'kpw', 'kpx', 'kpy', 'kpz', 'kqa', 'kqb', 'kqc', 'kqd', 'kqe', 'kqf', 'kqg', 'kqh', 'kqi', 'kqj', 'kqk', 'kql', 'kqm', 'kqn', 'kqo', 'kqp', 'kqq', 'kqr', 'kqs', 'kqt', 'kqu', 'kqv', 'kqw', 'kqx', 'kqy', 'kqz', 'kra', 'krb', 'krc', 'krd', 'kre', 'krf', 'krh', 'kri', 'krj', 'krk', 'krl', 'krm', 'krn', 'kro', 'krp', 'krr', 'krs', 'krt', 'kru', 'krv', 'krw', 'krx', 'kry', 'krz', 'ksa', 'ksb', 'ksc', 'ksd', 'kse', 'ksf', 'ksg', 'ksh', 'ksi', 'ksj', 'ksk', 'ksl', 'ksm', 'ksn', 'kso', 'ksp', 'ksq', 'ksr', 'kss', 'kst', 'ksu', 'ksv', 'ksw', 'ksx', 'ksy', 'ksz', 'kta', 'ktb', 'ktc', 'ktd', 'kte', 'ktf', 'ktg', 'kth', 'kti', 'ktj', 'ktk', 'ktl', 'ktm', 'ktn', 'kto', 'ktp', 'ktq', 'ktr', 'kts', 'ktt', 'ktu', 'ktv', 'ktw', 'ktx', 'kty', 'ktz', 'kub', 'kuc', 'kud', 'kue', 'kuf', 'kug', 'kuh', 'kui', 'kuj', 'kuk', 'kul', 'kum', 'kun', 'kuo', 'kup', 'kuq', 'kus', 'kut', 'kuu', 'kuv', 'kuw', 'kux', 'kuy', 'kuz', 'kva', 'kvb', 'kvc', 'kvd', 'kve', 'kvf', 'kvg', 'kvh', 'kvi', 'kvj', 'kvk', 'kvl', 'kvm', 'kvn', 'kvo', 'kvp', 'kvq', 'kvr', 'kvs', 'kvt', 'kvu', 'kvv', 'kvw', 'kvx', 'kvy', 'kvz', 'kwa', 'kwb', 'kwc', 'kwd', 'kwe', 'kwf', 'kwg', 'kwh', 'kwi', 'kwj', 'kwk', 'kwl', 'kwm', 'kwn', 'kwo', 'kwp', 'kwq', 'kwr', 'kws', 'kwt', 'kwu', 'kwv', 'kww', 'kwx', 'kwy', 'kwz', 'kxa', 'kxb', 'kxc', 'kxd', 'kxe', 'kxf', 'kxh', 'kxi', 'kxj', 'kxk', 'kxl', 'kxm', 'kxn', 'kxo', 'kxp', 'kxq', 'kxr', 'kxs', 'kxt', 'kxu', 'kxv', 'kxw', 'kxx', 'kxy', 'kxz', 'kya', 'kyb', 'kyc', 'kyd', 'kye', 'kyf', 'kyg', 'kyh', 'kyi', 'kyj', 'kyk', 'kyl', 'kym', 'kyn', 'kyo', 'kyp', 'kyq', 'kyr', 'kys', 'kyt', 'kyu', 'kyv', 'kyw', 'kyx', 'kyy', 'kyz', 'kza', 'kzb', 'kzc', 'kzd', 'kze', 'kzf', 'kzg', 'kzh', 'kzi', 'kzj', 'kzk', 'kzl', 'kzm', 'kzn', 'kzo', 'kzp', 'kzq', 'kzr', 'kzs', 'kzt', 'kzu', 'kzv', 'kzw', 'kzx', 'kzy', 'kzz', 'laa', 'lab', 'lac', 'lad', 'lae', 'laf', 'lag', 'lah', 'lai', 'laj', 'lak', 'lal', 'lam', 'lan', 'lap', 'laq', 'lar', 'las', 'lau', 'law', 'lax', 'lay', 'laz', 'lba', 'lbb', 'lbc', 'lbe', 'lbf', 'lbg', 'lbi', 'lbj', 'lbk', 'lbl', 'lbm', 'lbn', 'lbo', 'lbq', 'lbr', 'lbs', 'lbt', 'lbu', 'lbv', 'lbw', 'lbx', 'lby', 'lbz', 'lcc', 'lcd', 'lce', 'lcf', 'lch', 'lcl', 'lcm', 'lcp', 'lcq', 'lcs', 'lda', 'ldb', 'ldd', 'ldg', 'ldh', 'ldi', 'ldj', 'ldk', 'ldl', 'ldm', 'ldn', 'ldo', 'ldp', 'ldq', 'lea', 'leb', 'lec', 'led', 'lee', 'lef', 'leg', 'leh', 'lei', 'lej', 'lek', 'lel', 'lem', 'len', 'leo', 'lep', 'leq', 'ler', 'les', 'let', 'leu', 'lev', 'lew', 'lex', 'ley', 'lez', 'lfa', 'lfn', 'lga', 'lgb', 'lgg', 'lgh', 'lgi', 'lgk', 'lgl', 'lgm', 'lgn', 'lgq', 'lgr', 'lgt', 'lgu', 'lgz', 'lha', 'lhh', 'lhi', 'lhl', 'lhm', 'lhn', 'lhp', 'lhs', 'lht', 'lhu', 'lia', 'lib', 'lic', 'lid', 'lie', 'lif', 'lig', 'lih', 'lii', 'lij', 'lik', 'lil', 'lio', 'lip', 'liq', 'lir', 'lis', 'liu', 'liv', 'liw', 'lix', 'liy', 'liz', 'lja', 'lje', 'lji', 'ljl', 'ljp', 'ljw', 'ljx', 'lka', 'lkb', 'lkc', 'lkd', 'lke', 'lkh', 'lki', 'lkj', 'lkl', 'lkm', 'lkn', 'lko', 'lkr', 'lks', 'lkt', 'lku', 'lky', 'lla', 'llb', 'llc', 'lld', 'lle', 'llf', 'llg', 'llh', 'lli', 'llj', 'llk', 'lll', 'llm', 'lln', 'llo', 'llp', 'llq', 'lls', 'llu', 'llx', 'lma', 'lmb', 'lmc', 'lmd', 'lme', 'lmf', 'lmg', 'lmh', 'lmi', 'lmj', 'lmk', 'lml', 'lmm', 'lmn', 'lmo', 'lmp', 'lmq', 'lmr', 'lmu', 'lmv', 'lmw', 'lmx', 'lmy', 'lmz', 'lna', 'lnb', 'lnd', 'lng', 'lnh', 'lni', 'lnj', 'lnl', 'lnm', 'lnn', 'lno', 'lns', 'lnu', 'lnw', 'lnz', 'loa', 'lob', 'loc', 'loe', 'lof', 'log', 'loh', 'loi', 'loj', 'lok', 'lol', 'lom', 'lon', 'loo', 'lop', 'loq', 'lor', 'los', 'lot', 'lou', 'lov', 'low', 'lox', 'loy', 'loz', 'lpa', 'lpe', 'lpn', 'lpo', 'lpx', 'lra', 'lrc', 'lre', 'lrg', 'lri', 'lrk', 'lrl', 'lrm', 'lrn', 'lro', 'lrr', 'lrt', 'lrv', 'lrz', 'lsa', 'lsd', 'lse', 'lsg', 'lsh', 'lsi', 'lsl', 'lsm', 'lso', 'lsp', 'lsr', 'lss', 'lst', 'lsy', 'ltc', 'ltg', 'lth', 'lti', 'ltn', 'lto', 'lts', 'ltu', 'lua', 'luc', 'lud', 'lue', 'luf', 'lui', 'luj', 'luk', 'lul', 'lum', 'lun', 'luo', 'lup', 'luq', 'lur', 'lus', 'lut', 'luu', 'luv', 'luw', 'luy', 'luz', 'lva', 'lvk', 'lvs', 'lvu', 'lwa', 'lwe', 'lwg', 'lwh', 'lwl', 'lwm', 'lwo', 'lws', 'lwt', 'lwu', 'lww', 'lya', 'lyg', 'lyn', 'lzh', 'lzl', 'lzn', 'lzz', 'maa', 'mab', 'mad', 'mae', 'maf', 'mag', 'mai', 'maj', 'mak', 'mam', 'man', 'map', 'maq', 'mas', 'mat', 'mau', 'mav', 'maw', 'max', 'maz', 'mba', 'mbb', 'mbc', 'mbd', 'mbe', 'mbf', 'mbh', 'mbi', 'mbj', 'mbk', 'mbl', 'mbm', 'mbn', 'mbo', 'mbp', 'mbq', 'mbr', 'mbs', 'mbt', 'mbu', 'mbv', 'mbw', 'mbx', 'mby', 'mbz', 'mca', 'mcb', 'mcc', 'mcd', 'mce', 'mcf', 'mcg', 'mch', 'mci', 'mcj', 'mck', 'mcl', 'mcm', 'mcn', 'mco', 'mcp', 'mcq', 'mcr', 'mcs', 'mct', 'mcu', 'mcv', 'mcw', 'mcx', 'mcy', 'mcz', 'mda', 'mdb', 'mdc', 'mdd', 'mde', 'mdf', 'mdg', 'mdh', 'mdi', 'mdj', 'mdk', 'mdl', 'mdm', 'mdn', 'mdp', 'mdq', 'mdr', 'mds', 'mdt', 'mdu', 'mdv', 'mdw', 'mdx', 'mdy', 'mdz', 'mea', 'meb', 'mec', 'med', 'mee', 'mef', 'meg', 'meh', 'mei', 'mej', 'mek', 'mel', 'mem', 'men', 'meo', 'mep', 'meq', 'mer', 'mes', 'met', 'meu', 'mev', 'mew', 'mey', 'mez', 'mfa', 'mfb', 'mfc', 'mfd', 'mfe', 'mff', 'mfg', 'mfh', 'mfi', 'mfj', 'mfk', 'mfl', 'mfm', 'mfn', 'mfo', 'mfp', 'mfq', 'mfr', 'mfs', 'mft', 'mfu', 'mfv', 'mfw', 'mfx', 'mfy', 'mfz', 'mga', 'mgb', 'mgc', 'mgd', 'mge', 'mgf', 'mgg', 'mgh', 'mgi', 'mgj', 'mgk', 'mgl', 'mgm', 'mgn', 'mgo', 'mgp', 'mgq', 'mgr', 'mgs', 'mgt', 'mgu', 'mgv', 'mgw', 'mgx', 'mgy', 'mgz', 'mha', 'mhb', 'mhc', 'mhd', 'mhe', 'mhf', 'mhg', 'mhh', 'mhi', 'mhj', 'mhk', 'mhl', 'mhm', 'mhn', 'mho', 'mhp', 'mhq', 'mhr', 'mhs', 'mht', 'mhu', 'mhw', 'mhx', 'mhy', 'mhz', 'mia', 'mib', 'mic', 'mid', 'mie', 'mif', 'mig', 'mih', 'mii', 'mij', 'mik', 'mil', 'mim', 'min', 'mio', 'mip', 'miq', 'mir', 'mis', 'mit', 'miu', 'miw', 'mix', 'miy', 'miz', 'mja', 'mjb', 'mjc', 'mjd', 'mje', 'mjg', 'mjh', 'mji', 'mjj', 'mjk', 'mjl', 'mjm', 'mjn', 'mjo', 'mjp', 'mjq', 'mjr', 'mjs', 'mjt', 'mju', 'mjv', 'mjw', 'mjx', 'mjy', 'mjz', 'mka', 'mkb', 'mkc', 'mke', 'mkf', 'mkg', 'mkh', 'mki', 'mkj', 'mkk', 'mkl', 'mkm', 'mkn', 'mko', 'mkp', 'mkq', 'mkr', 'mks', 'mkt', 'mku', 'mkv', 'mkw', 'mkx', 'mky', 'mkz', 'mla', 'mlb', 'mlc', 'mld', 'mle', 'mlf', 'mlh', 'mli', 'mlj', 'mlk', 'mll', 'mlm', 'mln', 'mlo', 'mlp', 'mlq', 'mlr', 'mls', 'mlu', 'mlv', 'mlw', 'mlx', 'mlz', 'mma', 'mmb', 'mmc', 'mmd', 'mme', 'mmf', 'mmg', 'mmh', 'mmi', 'mmj', 'mmk', 'mml', 'mmm', 'mmn', 'mmo', 'mmp', 'mmq', 'mmr', 'mmt', 'mmu', 'mmv', 'mmw', 'mmx', 'mmy', 'mmz', 'mna', 'mnb', 'mnc', 'mnd', 'mne', 'mnf', 'mng', 'mnh', 'mni', 'mnj', 'mnk', 'mnl', 'mnm', 'mnn', 'mno', 'mnp', 'mnq', 'mnr', 'mns', 'mnt', 'mnu', 'mnv', 'mnw', 'mnx', 'mny', 'mnz', 'moa', 'moc', 'mod', 'moe', 'mof', 'mog', 'moh', 'moi', 'moj', 'mok', 'mom', 'moo', 'mop', 'moq', 'mor', 'mos', 'mot', 'mou', 'mov', 'mow', 'mox', 'moy', 'moz', 'mpa', 'mpb', 'mpc', 'mpd', 'mpe', 'mpg', 'mph', 'mpi', 'mpj', 'mpk', 'mpl', 'mpm', 'mpn', 'mpo', 'mpp', 'mpq', 'mpr', 'mps', 'mpt', 'mpu', 'mpv', 'mpw', 'mpx', 'mpy', 'mpz', 'mqa', 'mqb', 'mqc', 'mqe', 'mqf', 'mqg', 'mqh', 'mqi', 'mqj', 'mqk', 'mql', 'mqm', 'mqn', 'mqo', 'mqp', 'mqq', 'mqr', 'mqs', 'mqt', 'mqu', 'mqv', 'mqw', 'mqx', 'mqy', 'mqz', 'mra', 'mrb', 'mrc', 'mrd', 'mre', 'mrf', 'mrg', 'mrh', 'mrj', 'mrk', 'mrl', 'mrm', 'mrn', 'mro', 'mrp', 'mrq', 'mrr', 'mrs', 'mrt', 'mru', 'mrv', 'mrw', 'mrx', 'mry', 'mrz', 'msb', 'msc', 'msd', 'mse', 'msf', 'msg', 'msh', 'msi', 'msj', 'msk', 'msl', 'msm', 'msn', 'mso', 'msp', 'msq', 'msr', 'mss', 'mst', 'msu', 'msv', 'msw', 'msx', 'msy', 'msz', 'mta', 'mtb', 'mtc', 'mtd', 'mte', 'mtf', 'mtg', 'mth', 'mti', 'mtj', 'mtk', 'mtl', 'mtm', 'mtn', 'mto', 'mtp', 'mtq', 'mtr', 'mts', 'mtt', 'mtu', 'mtv', 'mtw', 'mtx', 'mty', 'mua', 'mub', 'muc', 'mud', 'mue', 'mug', 'muh', 'mui', 'muj', 'muk', 'mul', 'mum', 'mun', 'muo', 'mup', 'muq', 'mur', 'mus', 'mut', 'muu', 'muv', 'mux', 'muy', 'muz', 'mva', 'mvb', 'mvd', 'mve', 'mvf', 'mvg', 'mvh', 'mvi', 'mvk', 'mvl', 'mvm', 'mvn', 'mvo', 'mvp', 'mvq', 'mvr', 'mvs', 'mvt', 'mvu', 'mvv', 'mvw', 'mvx', 'mvy', 'mvz', 'mwa', 'mwb', 'mwc', 'mwd', 'mwe', 'mwf', 'mwg', 'mwh', 'mwi', 'mwj', 'mwk', 'mwl', 'mwm', 'mwn', 'mwo', 'mwp', 'mwq', 'mwr', 'mws', 'mwt', 'mwu', 'mwv', 'mww', 'mwx', 'mwy', 'mwz', 'mxa', 'mxb', 'mxc', 'mxd', 'mxe', 'mxf', 'mxg', 'mxh', 'mxi', 'mxj', 'mxk', 'mxl', 'mxm', 'mxn', 'mxo', 'mxp', 'mxq', 'mxr', 'mxs', 'mxt', 'mxu', 'mxv', 'mxw', 'mxx', 'mxy', 'mxz', 'myb', 'myc', 'myd', 'mye', 'myf', 'myg', 'myh', 'myi', 'myj', 'myk', 'myl', 'mym', 'myn', 'myo', 'myp', 'myq', 'myr', 'mys', 'myt', 'myu', 'myv', 'myw', 'myx', 'myy', 'myz', 'mza', 'mzb', 'mzc', 'mzd', 'mze', 'mzg', 'mzh', 'mzi', 'mzj', 'mzk', 'mzl', 'mzm', 'mzn', 'mzo', 'mzp', 'mzq', 'mzr', 'mzs', 'mzt', 'mzu', 'mzv', 'mzw', 'mzx', 'mzy', 'mzz', 'naa', 'nab', 'nac', 'nad', 'nae', 'naf', 'nag', 'nah', 'nai', 'naj', 'nak', 'nal', 'nam', 'nan', 'nao', 'nap', 'naq', 'nar', 'nas', 'nat', 'naw', 'nax', 'nay', 'naz', 'nba', 'nbb', 'nbc', 'nbd', 'nbe', 'nbf', 'nbg', 'nbh', 'nbi', 'nbj', 'nbk', 'nbm', 'nbn', 'nbo', 'nbp', 'nbq', 'nbr', 'nbs', 'nbt', 'nbu', 'nbv', 'nbw', 'nbx', 'nby', 'nca', 'ncb', 'ncc', 'ncd', 'nce', 'ncf', 'ncg', 'nch', 'nci', 'ncj', 'nck', 'ncl', 'ncm', 'ncn', 'nco', 'ncp', 'ncq', 'ncr', 'ncs', 'nct', 'ncu', 'ncx', 'ncz', 'nda', 'ndb', 'ndc', 'ndd', 'ndf', 'ndg', 'ndh', 'ndi', 'ndj', 'ndk', 'ndl', 'ndm', 'ndn', 'ndp', 'ndq', 'ndr', 'nds', 'ndt', 'ndu', 'ndv', 'ndw', 'ndx', 'ndy', 'ndz', 'nea', 'neb', 'nec', 'ned', 'nee', 'nef', 'neg', 'neh', 'nei', 'nej', 'nek', 'nem', 'nen', 'neo', 'neq', 'ner', 'nes', 'net', 'neu', 'nev', 'new', 'nex', 'ney', 'nez', 'nfa', 'nfd', 'nfl', 'nfr', 'nfu', 'nga', 'ngb', 'ngc', 'ngd', 'nge', 'ngf', 'ngg', 'ngh', 'ngi', 'ngj', 'ngk', 'ngl', 'ngm', 'ngn', 'ngo', 'ngp', 'ngq', 'ngr', 'ngs', 'ngt', 'ngu', 'ngv', 'ngw', 'ngx', 'ngy', 'ngz', 'nha', 'nhb', 'nhc', 'nhd', 'nhe', 'nhf', 'nhg', 'nhh', 'nhi', 'nhk', 'nhm', 'nhn', 'nho', 'nhp', 'nhq', 'nhr', 'nht', 'nhu', 'nhv', 'nhw', 'nhx', 'nhy', 'nhz', 'nia', 'nib', 'nic', 'nid', 'nie', 'nif', 'nig', 'nih', 'nii', 'nij', 'nik', 'nil', 'nim', 'nin', 'nio', 'niq', 'nir', 'nis', 'nit', 'niu', 'niv', 'niw', 'nix', 'niy', 'niz', 'nja', 'njb', 'njd', 'njh', 'nji', 'njj', 'njl', 'njm', 'njn', 'njo', 'njr', 'njs', 'njt', 'nju', 'njx', 'njy', 'njz', 'nka', 'nkb', 'nkc', 'nkd', 'nke', 'nkf', 'nkg', 'nkh', 'nki', 'nkj', 'nkk', 'nkm', 'nkn', 'nko', 'nkp', 'nkq', 'nkr', 'nks', 'nkt', 'nku', 'nkv', 'nkw', 'nkx', 'nkz', 'nla', 'nlc', 'nle', 'nlg', 'nli', 'nlj', 'nlk', 'nll', 'nlm', 'nln', 'nlo', 'nlq', 'nlr', 'nlu', 'nlv', 'nlw', 'nlx', 'nly', 'nlz', 'nma', 'nmb', 'nmc', 'nmd', 'nme', 'nmf', 'nmg', 'nmh', 'nmi', 'nmj', 'nmk', 'nml', 'nmm', 'nmn', 'nmo', 'nmp', 'nmq', 'nmr', 'nms', 'nmt', 'nmu', 'nmv', 'nmw', 'nmx', 'nmy', 'nmz', 'nna', 'nnb', 'nnc', 'nnd', 'nne', 'nnf', 'nng', 'nnh', 'nni', 'nnj', 'nnk', 'nnl', 'nnm', 'nnn', 'nnp', 'nnq', 'nnr', 'nns', 'nnt', 'nnu', 'nnv', 'nnw', 'nnx', 'nny', 'nnz', 'noa', 'noc', 'nod', 'noe', 'nof', 'nog', 'noh', 'noi', 'noj', 'nok', 'nol', 'nom', 'non', 'noo', 'nop', 'noq', 'nos', 'not', 'nou', 'nov', 'now', 'noy', 'noz', 'npa', 'npb', 'npg', 'nph', 'npi', 'npl', 'npn', 'npo', 'nps', 'npu', 'npx', 'npy', 'nqg', 'nqk', 'nql', 'nqm', 'nqn', 'nqo', 'nqq', 'nqy', 'nra', 'nrb', 'nrc', 'nre', 'nrf', 'nrg', 'nri', 'nrk', 'nrl', 'nrm', 'nrn', 'nrp', 'nrr', 'nrt', 'nru', 'nrx', 'nrz', 'nsa', 'nsc', 'nsd', 'nse', 'nsf', 'nsg', 'nsh', 'nsi', 'nsk', 'nsl', 'nsm', 'nsn', 'nso', 'nsp', 'nsq', 'nsr', 'nss', 'nst', 'nsu', 'nsv', 'nsw', 'nsx', 'nsy', 'nsz', 'ntd', 'nte', 'ntg', 'nti', 'ntj', 'ntk', 'ntm', 'nto', 'ntp', 'ntr', 'nts', 'ntu', 'ntw', 'ntx', 'nty', 'ntz', 'nua', 'nub', 'nuc', 'nud', 'nue', 'nuf', 'nug', 'nuh', 'nui', 'nuj', 'nuk', 'nul', 'num', 'nun', 'nuo', 'nup', 'nuq', 'nur', 'nus', 'nut', 'nuu', 'nuv', 'nuw', 'nux', 'nuy', 'nuz', 'nvh', 'nvm', 'nvo', 'nwa', 'nwb', 'nwc', 'nwe', 'nwg', 'nwi', 'nwm', 'nwo', 'nwr', 'nwx', 'nwy', 'nxa', 'nxd', 'nxe', 'nxg', 'nxi', 'nxk', 'nxl', 'nxm', 'nxn', 'nxo', 'nxq', 'nxr', 'nxu', 'nxx', 'nyb', 'nyc', 'nyd', 'nye', 'nyf', 'nyg', 'nyh', 'nyi', 'nyj', 'nyk', 'nyl', 'nym', 'nyn', 'nyo', 'nyp', 'nyq', 'nyr', 'nys', 'nyt', 'nyu', 'nyv', 'nyw', 'nyx', 'nyy', 'nza', 'nzb', 'nzd', 'nzi', 'nzk', 'nzm', 'nzs', 'nzu', 'nzy', 'nzz', 'oaa', 'oac', 'oar', 'oav', 'obi', 'obk', 'obl', 'obm', 'obo', 'obr', 'obt', 'obu', 'oca', 'och', 'oco', 'ocu', 'oda', 'odk', 'odt', 'odu', 'ofo', 'ofs', 'ofu', 'ogb', 'ogc', 'oge', 'ogg', 'ogo', 'ogu', 'oht', 'ohu', 'oia', 'oin', 'ojb', 'ojc', 'ojg', 'ojp', 'ojs', 'ojv', 'ojw', 'oka', 'okb', 'okd', 'oke', 'okg', 'okh', 'oki', 'okj', 'okk', 'okl', 'okm', 'okn', 'oko', 'okr', 'oks', 'oku', 'okv', 'okx', 'ola', 'old', 'ole', 'olk', 'olm', 'olo', 'olr', 'olt', 'olu', 'oma', 'omb', 'omc', 'ome', 'omg', 'omi', 'omk', 'oml', 'omn', 'omo', 'omp', 'omq', 'omr', 'omt', 'omu', 'omv', 'omw', 'omx', 'ona', 'onb', 'one', 'ong', 'oni', 'onj', 'onk', 'onn', 'ono', 'onp', 'onr', 'ons', 'ont', 'onu', 'onw', 'onx', 'ood', 'oog', 'oon', 'oor', 'oos', 'opa', 'opk', 'opm', 'opo', 'opt', 'opy', 'ora', 'orc', 'ore', 'org', 'orh', 'orn', 'oro', 'orr', 'ors', 'ort', 'oru', 'orv', 'orw', 'orx', 'ory', 'orz', 'osa', 'osc', 'osi', 'oso', 'osp', 'ost', 'osu', 'osx', 'ota', 'otb', 'otd', 'ote', 'oti', 'otk', 'otl', 'otm', 'otn', 'oto', 'otq', 'otr', 'ots', 'ott', 'otu', 'otw', 'otx', 'oty', 'otz', 'oua', 'oub', 'oue', 'oui', 'oum', 'oun', 'ovd', 'owi', 'owl', 'oyb', 'oyd', 'oym', 'oyy', 'ozm', 'paa', 'pab', 'pac', 'pad', 'pae', 'paf', 'pag', 'pah', 'pai', 'pak', 'pal', 'pam', 'pao', 'pap', 'paq', 'par', 'pas', 'pat', 'pau', 'pav', 'paw', 'pax', 'pay', 'paz', 'pbb', 'pbc', 'pbe', 'pbf', 'pbg', 'pbh', 'pbi', 'pbl', 'pbm', 'pbn', 'pbo', 'pbp', 'pbr', 'pbs', 'pbt', 'pbu', 'pbv', 'pby', 'pbz', 'pca', 'pcb', 'pcc', 'pcd', 'pce', 'pcf', 'pcg', 'pch', 'pci', 'pcj', 'pck', 'pcl', 'pcm', 'pcn', 'pcp', 'pcr', 'pcw', 'pda', 'pdc', 'pdi', 'pdn', 'pdo', 'pdt', 'pdu', 'pea', 'peb', 'ped', 'pee', 'pef', 'peg', 'peh', 'pei', 'pej', 'pek', 'pel', 'pem', 'peo', 'pep', 'peq', 'pes', 'pev', 'pex', 'pey', 'pez', 'pfa', 'pfe', 'pfl', 'pga', 'pgd', 'pgg', 'pgi', 'pgk', 'pgl', 'pgn', 'pgs', 'pgu', 'pgy', 'pgz', 'pha', 'phd', 'phg', 'phh', 'phi', 'phk', 'phl', 'phm', 'phn', 'pho', 'phq', 'phr', 'pht', 'phu', 'phv', 'phw', 'pia', 'pib', 'pic', 'pid', 'pie', 'pif', 'pig', 'pih', 'pii', 'pij', 'pil', 'pim', 'pin', 'pio', 'pip', 'pir', 'pis', 'pit', 'piu', 'piv', 'piw', 'pix', 'piy', 'piz', 'pjt', 'pka', 'pkb', 'pkc', 'pkg', 'pkh', 'pkn', 'pko', 'pkp', 'pkr', 'pks', 'pkt', 'pku', 'pla', 'plb', 'plc', 'pld', 'ple', 'plf', 'plg', 'plh', 'plj', 'plk', 'pll', 'pln', 'plo', 'plp', 'plq', 'plr', 'pls', 'plt', 'plu', 'plv', 'plw', 'ply', 'plz', 'pma', 'pmb', 'pmc', 'pmd', 'pme', 'pmf', 'pmh', 'pmi', 'pmj', 'pmk', 'pml', 'pmm', 'pmn', 'pmo', 'pmq', 'pmr', 'pms', 'pmt', 'pmu', 'pmw', 'pmx', 'pmy', 'pmz', 'pna', 'pnb', 'pnc', 'pne', 'png', 'pnh', 'pni', 'pnj', 'pnk', 'pnl', 'pnm', 'pnn', 'pno', 'pnp', 'pnq', 'pnr', 'pns', 'pnt', 'pnu', 'pnv', 'pnw', 'pnx', 'pny', 'pnz', 'poc', 'pod', 'poe', 'pof', 'pog', 'poh', 'poi', 'pok', 'pom', 'pon', 'poo', 'pop', 'poq', 'pos', 'pot', 'pov', 'pow', 'pox', 'poy', 'poz', 'ppa', 'ppe', 'ppi', 'ppk', 'ppl', 'ppm', 'ppn', 'ppo', 'ppp', 'ppq', 'ppr', 'pps', 'ppt', 'ppu', 'pqa', 'pqe', 'pqm', 'pqw', 'pra', 'prb', 'prc', 'prd', 'pre', 'prf', 'prg', 'prh', 'pri', 'prk', 'prl', 'prm', 'prn', 'pro', 'prp', 'prq', 'prr', 'prs', 'prt', 'pru', 'prw', 'prx', 'pry', 'prz', 'psa', 'psc', 'psd', 'pse', 'psg', 'psh', 'psi', 'psl', 'psm', 'psn', 'pso', 'psp', 'psq', 'psr', 'pss', 'pst', 'psu', 'psw', 'psy', 'pta', 'pth', 'pti', 'ptn', 'pto', 'ptp', 'ptq', 'ptr', 'ptt', 'ptu', 'ptv', 'ptw', 'pty', 'pua', 'pub', 'puc', 'pud', 'pue', 'puf', 'pug', 'pui', 'puj', 'puk', 'pum', 'puo', 'pup', 'puq', 'pur', 'put', 'puu', 'puw', 'pux', 'puy', 'puz', 'pwa', 'pwb', 'pwg', 'pwi', 'pwm', 'pwn', 'pwo', 'pwr', 'pww', 'pxm', 'pye', 'pym', 'pyn', 'pys', 'pyu', 'pyx', 'pyy', 'pzn', 'qaa..qtz', 'qua', 'qub', 'quc', 'qud', 'quf', 'qug', 'quh', 'qui', 'quk', 'qul', 'qum', 'qun', 'qup', 'quq', 'qur', 'qus', 'quv', 'quw', 'qux', 'quy', 'quz', 'qva', 'qvc', 'qve', 'qvh', 'qvi', 'qvj', 'qvl', 'qvm', 'qvn', 'qvo', 'qvp', 'qvs', 'qvw', 'qvy', 'qvz', 'qwa', 'qwc', 'qwe', 'qwh', 'qwm', 'qws', 'qwt', 'qxa', 'qxc', 'qxh', 'qxl', 'qxn', 'qxo', 'qxp', 'qxq', 'qxr', 'qxs', 'qxt', 'qxu', 'qxw', 'qya', 'qyp', 'raa', 'rab', 'rac', 'rad', 'raf', 'rag', 'rah', 'rai', 'raj', 'rak', 'ral', 'ram', 'ran', 'rao', 'rap', 'raq', 'rar', 'ras', 'rat', 'rau', 'rav', 'raw', 'rax', 'ray', 'raz', 'rbb', 'rbk', 'rbl', 'rbp', 'rcf', 'rdb', 'rea', 'reb', 'ree', 'reg', 'rei', 'rej', 'rel', 'rem', 'ren', 'rer', 'res', 'ret', 'rey', 'rga', 'rge', 'rgk', 'rgn', 'rgr', 'rgs', 'rgu', 'rhg', 'rhp', 'ria', 'rie', 'rif', 'ril', 'rim', 'rin', 'rir', 'rit', 'riu', 'rjg', 'rji', 'rjs', 'rka', 'rkb', 'rkh', 'rki', 'rkm', 'rkt', 'rkw', 'rma', 'rmb', 'rmc', 'rmd', 'rme', 'rmf', 'rmg', 'rmh', 'rmi', 'rmk', 'rml', 'rmm', 'rmn', 'rmo', 'rmp', 'rmq', 'rmr', 'rms', 'rmt', 'rmu', 'rmv', 'rmw', 'rmx', 'rmy', 'rmz', 'rna', 'rnd', 'rng', 'rnl', 'rnn', 'rnp', 'rnr', 'rnw', 'roa', 'rob', 'roc', 'rod', 'roe', 'rof', 'rog', 'rol', 'rom', 'roo', 'rop', 'ror', 'rou', 'row', 'rpn', 'rpt', 'rri', 'rro', 'rrt', 'rsb', 'rsi', 'rsl', 'rsm', 'rtc', 'rth', 'rtm', 'rts', 'rtw', 'rub', 'ruc', 'rue', 'ruf', 'rug', 'ruh', 'rui', 'ruk', 'ruo', 'rup', 'ruq', 'rut', 'ruu', 'ruy', 'ruz', 'rwa', 'rwk', 'rwm', 'rwo', 'rwr', 'rxd', 'rxw', 'ryn', 'rys', 'ryu', 'rzh', 'saa', 'sab', 'sac', 'sad', 'sae', 'saf', 'sah', 'sai', 'saj', 'sak', 'sal', 'sam', 'sao', 'sap', 'saq', 'sar', 'sas', 'sat', 'sau', 'sav', 'saw', 'sax', 'say', 'saz', 'sba', 'sbb', 'sbc', 'sbd', 'sbe', 'sbf', 'sbg', 'sbh', 'sbi', 'sbj', 'sbk', 'sbl', 'sbm', 'sbn', 'sbo', 'sbp', 'sbq', 'sbr', 'sbs', 'sbt', 'sbu', 'sbv', 'sbw', 'sbx', 'sby', 'sbz', 'sca', 'scb', 'sce', 'scf', 'scg', 'sch', 'sci', 'sck', 'scl', 'scn', 'sco', 'scp', 'scq', 'scs', 'sct', 'scu', 'scv', 'scw', 'scx', 'sda', 'sdb', 'sdc', 'sde', 'sdf', 'sdg', 'sdh', 'sdj', 'sdk', 'sdl', 'sdm', 'sdn', 'sdo', 'sdp', 'sdr', 'sds', 'sdt', 'sdu', 'sdv', 'sdx', 'sdz', 'sea', 'seb', 'sec', 'sed', 'see', 'sef', 'seg', 'seh', 'sei', 'sej', 'sek', 'sel', 'sem', 'sen', 'seo', 'sep', 'seq', 'ser', 'ses', 'set', 'seu', 'sev', 'sew', 'sey', 'sez', 'sfb', 'sfe', 'sfm', 'sfs', 'sfw', 'sga', 'sgb', 'sgc', 'sgd', 'sge', 'sgg', 'sgh', 'sgi', 'sgj', 'sgk', 'sgl', 'sgm', 'sgn', 'sgo', 'sgp', 'sgr', 'sgs', 'sgt', 'sgu', 'sgw', 'sgx', 'sgy', 'sgz', 'sha', 'shb', 'shc', 'shd', 'she', 'shg', 'shh', 'shi', 'shj', 'shk', 'shl', 'shm', 'shn', 'sho', 'shp', 'shq', 'shr', 'shs', 'sht', 'shu', 'shv', 'shw', 'shx', 'shy', 'shz', 'sia', 'sib', 'sid', 'sie', 'sif', 'sig', 'sih', 'sii', 'sij', 'sik', 'sil', 'sim', 'sio', 'sip', 'siq', 'sir', 'sis', 'sit', 'siu', 'siv', 'siw', 'six', 'siy', 'siz', 'sja', 'sjb', 'sjd', 'sje', 'sjg', 'sjk', 'sjl', 'sjm', 'sjn', 'sjo', 'sjp', 'sjr', 'sjs', 'sjt', 'sju', 'sjw', 'ska', 'skb', 'skc', 'skd', 'ske', 'skf', 'skg', 'skh', 'ski', 'skj', 'skk', 'skm', 'skn', 'sko', 'skp', 'skq', 'skr', 'sks', 'skt', 'sku', 'skv', 'skw', 'skx', 'sky', 'skz', 'sla', 'slc', 'sld', 'sle', 'slf', 'slg', 'slh', 'sli', 'slj', 'sll', 'slm', 'sln', 'slp', 'slq', 'slr', 'sls', 'slt', 'slu', 'slw', 'slx', 'sly', 'slz', 'sma', 'smb', 'smc', 'smd', 'smf', 'smg', 'smh', 'smi', 'smj', 'smk', 'sml', 'smm', 'smn', 'smp', 'smq', 'smr', 'sms', 'smt', 'smu', 'smv', 'smw', 'smx', 'smy', 'smz', 'snb', 'snc', 'sne', 'snf', 'sng', 'snh', 'sni', 'snj', 'snk', 'snl', 'snm', 'snn', 'sno', 'snp', 'snq', 'snr', 'sns', 'snu', 'snv', 'snw', 'snx', 'sny', 'snz', 'soa', 'sob', 'soc', 'sod', 'soe', 'sog', 'soh', 'soi', 'soj', 'sok', 'sol', 'son', 'soo', 'sop', 'soq', 'sor', 'sos', 'sou', 'sov', 'sow', 'sox', 'soy', 'soz', 'spb', 'spc', 'spd', 'spe', 'spg', 'spi', 'spk', 'spl', 'spm', 'spn', 'spo', 'spp', 'spq', 'spr', 'sps', 'spt', 'spu', 'spv', 'spx', 'spy', 'sqa', 'sqh', 'sqj', 'sqk', 'sqm', 'sqn', 'sqo', 'sqq', 'sqr', 'sqs', 'sqt', 'squ', 'sra', 'srb', 'src', 'sre', 'srf', 'srg', 'srh', 'sri', 'srk', 'srl', 'srm', 'srn', 'sro', 'srq', 'srr', 'srs', 'srt', 'sru', 'srv', 'srw', 'srx', 'sry', 'srz', 'ssa', 'ssb', 'ssc', 'ssd', 'sse', 'ssf', 'ssg', 'ssh', 'ssi', 'ssj', 'ssk', 'ssl', 'ssm', 'ssn', 'sso', 'ssp', 'ssq', 'ssr', 'sss', 'sst', 'ssu', 'ssv', 'ssx', 'ssy', 'ssz', 'sta', 'stb', 'std', 'ste', 'stf', 'stg', 'sth', 'sti', 'stj', 'stk', 'stl', 'stm', 'stn', 'sto', 'stp', 'stq', 'str', 'sts', 'stt', 'stu', 'stv', 'stw', 'sty', 'sua', 'sub', 'suc', 'sue', 'sug', 'sui', 'suj', 'suk', 'sul', 'sum', 'suq', 'sur', 'sus', 'sut', 'suv', 'suw', 'sux', 'suy', 'suz', 'sva', 'svb', 'svc', 'sve', 'svk', 'svm', 'svr', 'svs', 'svx', 'swb', 'swc', 'swf', 'swg', 'swh', 'swi', 'swj', 'swk', 'swl', 'swm', 'swn', 'swo', 'swp', 'swq', 'swr', 'sws', 'swt', 'swu', 'swv', 'sww', 'swx', 'swy', 'sxb', 'sxc', 'sxe', 'sxg', 'sxk', 'sxl', 'sxm', 'sxn', 'sxo', 'sxr', 'sxs', 'sxu', 'sxw', 'sya', 'syb', 'syc', 'syd', 'syi', 'syk', 'syl', 'sym', 'syn', 'syo', 'syr', 'sys', 'syw', 'syx', 'syy', 'sza', 'szb', 'szc', 'szd', 'sze', 'szg', 'szl', 'szn', 'szp', 'szs', 'szv', 'szw', 'taa', 'tab', 'tac', 'tad', 'tae', 'taf', 'tag', 'tai', 'taj', 'tak', 'tal', 'tan', 'tao', 'tap', 'taq', 'tar', 'tas', 'tau', 'tav', 'taw', 'tax', 'tay', 'taz', 'tba', 'tbb', 'tbc', 'tbd', 'tbe', 'tbf', 'tbg', 'tbh', 'tbi', 'tbj', 'tbk', 'tbl', 'tbm', 'tbn', 'tbo', 'tbp', 'tbq', 'tbr', 'tbs', 'tbt', 'tbu', 'tbv', 'tbw', 'tbx', 'tby', 'tbz', 'tca', 'tcb', 'tcc', 'tcd', 'tce', 'tcf', 'tcg', 'tch', 'tci', 'tck', 'tcl', 'tcm', 'tcn', 'tco', 'tcp', 'tcq', 'tcs', 'tct', 'tcu', 'tcw', 'tcx', 'tcy', 'tcz', 'tda', 'tdb', 'tdc', 'tdd', 'tde', 'tdf', 'tdg', 'tdh', 'tdi', 'tdj', 'tdk', 'tdl', 'tdm', 'tdn', 'tdo', 'tdq', 'tdr', 'tds', 'tdt', 'tdu', 'tdv', 'tdx', 'tdy', 'tea', 'teb', 'tec', 'ted', 'tee', 'tef', 'teg', 'teh', 'tei', 'tek', 'tem', 'ten', 'teo', 'tep', 'teq', 'ter', 'tes', 'tet', 'teu', 'tev', 'tew', 'tex', 'tey', 'tez', 'tfi', 'tfn', 'tfo', 'tfr', 'tft', 'tga', 'tgb', 'tgc', 'tgd', 'tge', 'tgf', 'tgg', 'tgh', 'tgi', 'tgj', 'tgn', 'tgo', 'tgp', 'tgq', 'tgr', 'tgs', 'tgt', 'tgu', 'tgv', 'tgw', 'tgx', 'tgy', 'tgz', 'thc', 'thd', 'the', 'thf', 'thh', 'thi', 'thk', 'thl', 'thm', 'thn', 'thp', 'thq', 'thr', 'ths', 'tht', 'thu', 'thv', 'thw', 'thx', 'thy', 'thz', 'tia', 'tic', 'tid', 'tie', 'tif', 'tig', 'tih', 'tii', 'tij', 'tik', 'til', 'tim', 'tin', 'tio', 'tip', 'tiq', 'tis', 'tit', 'tiu', 'tiv', 'tiw', 'tix', 'tiy', 'tiz', 'tja', 'tjg', 'tji', 'tjl', 'tjm', 'tjn', 'tjo', 'tjs', 'tju', 'tjw', 'tka', 'tkb', 'tkd', 'tke', 'tkf', 'tkg', 'tkk', 'tkl', 'tkm', 'tkn', 'tkp', 'tkq', 'tkr', 'tks', 'tkt', 'tku', 'tkv', 'tkw', 'tkx', 'tkz', 'tla', 'tlb', 'tlc', 'tld', 'tlf', 'tlg', 'tlh', 'tli', 'tlj', 'tlk', 'tll', 'tlm', 'tln', 'tlo', 'tlp', 'tlq', 'tlr', 'tls', 'tlt', 'tlu', 'tlv', 'tlw', 'tlx', 'tly', 'tma', 'tmb', 'tmc', 'tmd', 'tme', 'tmf', 'tmg', 'tmh', 'tmi', 'tmj', 'tmk', 'tml', 'tmm', 'tmn', 'tmo', 'tmp', 'tmq', 'tmr', 'tms', 'tmt', 'tmu', 'tmv', 'tmw', 'tmy', 'tmz', 'tna', 'tnb', 'tnc', 'tnd', 'tne', 'tnf', 'tng', 'tnh', 'tni', 'tnk', 'tnl', 'tnm', 'tnn', 'tno', 'tnp', 'tnq', 'tnr', 'tns', 'tnt', 'tnu', 'tnv', 'tnw', 'tnx', 'tny', 'tnz', 'tob', 'toc', 'tod', 'toe', 'tof', 'tog', 'toh', 'toi', 'toj', 'tol', 'tom', 'too', 'top', 'toq', 'tor', 'tos', 'tou', 'tov', 'tow', 'tox', 'toy', 'toz', 'tpa', 'tpc', 'tpe', 'tpf', 'tpg', 'tpi', 'tpj', 'tpk', 'tpl', 'tpm', 'tpn', 'tpo', 'tpp', 'tpq', 'tpr', 'tpt', 'tpu', 'tpv', 'tpw', 'tpx', 'tpy', 'tpz', 'tqb', 'tql', 'tqm', 'tqn', 'tqo', 'tqp', 'tqq', 'tqr', 'tqt', 'tqu', 'tqw', 'tra', 'trb', 'trc', 'trd', 'tre', 'trf', 'trg', 'trh', 'tri', 'trj', 'trk', 'trl', 'trm', 'trn', 'tro', 'trp', 'trq', 'trr', 'trs', 'trt', 'tru', 'trv', 'trw', 'trx', 'try', 'trz', 'tsa', 'tsb', 'tsc', 'tsd', 'tse', 'tsf', 'tsg', 'tsh', 'tsi', 'tsj', 'tsk', 'tsl', 'tsm', 'tsp', 'tsq', 'tsr', 'tss', 'tst', 'tsu', 'tsv', 'tsw', 'tsx', 'tsy', 'tsz', 'tta', 'ttb', 'ttc', 'ttd', 'tte', 'ttf', 'ttg', 'tth', 'tti', 'ttj', 'ttk', 'ttl', 'ttm', 'ttn', 'tto', 'ttp', 'ttq', 'ttr', 'tts', 'ttt', 'ttu', 'ttv', 'ttw', 'tty', 'ttz', 'tua', 'tub', 'tuc', 'tud', 'tue', 'tuf', 'tug', 'tuh', 'tui', 'tuj', 'tul', 'tum', 'tun', 'tuo', 'tup', 'tuq', 'tus', 'tut', 'tuu', 'tuv', 'tuw', 'tux', 'tuy', 'tuz', 'tva', 'tvd', 'tve', 'tvk', 'tvl', 'tvm', 'tvn', 'tvo', 'tvs', 'tvt', 'tvu', 'tvw', 'tvy', 'twa', 'twb', 'twc', 'twd', 'twe', 'twf', 'twg', 'twh', 'twl', 'twm', 'twn', 'two', 'twp', 'twq', 'twr', 'twt', 'twu', 'tww', 'twx', 'twy', 'txa', 'txb', 'txc', 'txe', 'txg', 'txh', 'txi', 'txj', 'txm', 'txn', 'txo', 'txq', 'txr', 'txs', 'txt', 'txu', 'txx', 'txy', 'tya', 'tye', 'tyh', 'tyi', 'tyj', 'tyl', 'tyn', 'typ', 'tyr', 'tys', 'tyt', 'tyu', 'tyv', 'tyx', 'tyz', 'tza', 'tzh', 'tzj', 'tzl', 'tzm', 'tzn', 'tzo', 'tzx', 'uam', 'uan', 'uar', 'uba', 'ubi', 'ubl', 'ubr', 'ubu', 'uby', 'uda', 'ude', 'udg', 'udi', 'udj', 'udl', 'udm', 'udu', 'ues', 'ufi', 'uga', 'ugb', 'uge', 'ugn', 'ugo', 'ugy', 'uha', 'uhn', 'uis', 'uiv', 'uji', 'uka', 'ukg', 'ukh', 'ukk', 'ukl', 'ukp', 'ukq', 'uks', 'uku', 'ukw', 'uky', 'ula', 'ulb', 'ulc', 'ule', 'ulf', 'uli', 'ulk', 'ull', 'ulm', 'uln', 'ulu', 'ulw', 'uma', 'umb', 'umc', 'umd', 'umg', 'umi', 'umm', 'umn', 'umo', 'ump', 'umr', 'ums', 'umu', 'una', 'und', 'une', 'ung', 'unk', 'unm', 'unn', 'unp', 'unr', 'unu', 'unx', 'unz', 'uok', 'upi', 'upv', 'ura', 'urb', 'urc', 'ure', 'urf', 'urg', 'urh', 'uri', 'urj', 'urk', 'url', 'urm', 'urn', 'uro', 'urp', 'urr', 'urt', 'uru', 'urv', 'urw', 'urx', 'ury', 'urz', 'usa', 'ush', 'usi', 'usk', 'usp', 'usu', 'uta', 'ute', 'utp', 'utr', 'utu', 'uum', 'uun', 'uur', 'uuu', 'uve', 'uvh', 'uvl', 'uwa', 'uya', 'uzn', 'uzs', 'vaa', 'vae', 'vaf', 'vag', 'vah', 'vai', 'vaj', 'val', 'vam', 'van', 'vao', 'vap', 'var', 'vas', 'vau', 'vav', 'vay', 'vbb', 'vbk', 'vec', 'ved', 'vel', 'vem', 'veo', 'vep', 'ver', 'vgr', 'vgt', 'vic', 'vid', 'vif', 'vig', 'vil', 'vin', 'vis', 'vit', 'viv', 'vka', 'vki', 'vkj', 'vkk', 'vkl', 'vkm', 'vko', 'vkp', 'vkt', 'vku', 'vlp', 'vls', 'vma', 'vmb', 'vmc', 'vmd', 'vme', 'vmf', 'vmg', 'vmh', 'vmi', 'vmj', 'vmk', 'vml', 'vmm', 'vmp', 'vmq', 'vmr', 'vms', 'vmu', 'vmv', 'vmw', 'vmx', 'vmy', 'vmz', 'vnk', 'vnm', 'vnp', 'vor', 'vot', 'vra', 'vro', 'vrs', 'vrt', 'vsi', 'vsl', 'vsv', 'vto', 'vum', 'vun', 'vut', 'vwa', 'waa', 'wab', 'wac', 'wad', 'wae', 'waf', 'wag', 'wah', 'wai', 'waj', 'wak', 'wal', 'wam', 'wan', 'wao', 'wap', 'waq', 'war', 'was', 'wat', 'wau', 'wav', 'waw', 'wax', 'way', 'waz', 'wba', 'wbb', 'wbe', 'wbf', 'wbh', 'wbi', 'wbj', 'wbk', 'wbl', 'wbm', 'wbp', 'wbq', 'wbr', 'wbs', 'wbt', 'wbv', 'wbw', 'wca', 'wci', 'wdd', 'wdg', 'wdj', 'wdk', 'wdu', 'wdy', 'wea', 'wec', 'wed', 'weg', 'weh', 'wei', 'wem', 'wen', 'weo', 'wep', 'wer', 'wes', 'wet', 'weu', 'wew', 'wfg', 'wga', 'wgb', 'wgg', 'wgi', 'wgo', 'wgu', 'wgw', 'wgy', 'wha', 'whg', 'whk', 'whu', 'wib', 'wic', 'wie', 'wif', 'wig', 'wih', 'wii', 'wij', 'wik', 'wil', 'wim', 'win', 'wir', 'wit', 'wiu', 'wiv', 'wiw', 'wiy', 'wja', 'wji', 'wka', 'wkb', 'wkd', 'wkl', 'wku', 'wkw', 'wky', 'wla', 'wlc', 'wle', 'wlg', 'wli', 'wlk', 'wll', 'wlm', 'wlo', 'wlr', 'wls', 'wlu', 'wlv', 'wlw', 'wlx', 'wly', 'wma', 'wmb', 'wmc', 'wmd', 'wme', 'wmh', 'wmi', 'wmm', 'wmn', 'wmo', 'wms', 'wmt', 'wmw', 'wmx', 'wnb', 'wnc', 'wnd', 'wne', 'wng', 'wni', 'wnk', 'wnm', 'wnn', 'wno', 'wnp', 'wnu', 'wnw', 'wny', 'woa', 'wob', 'woc', 'wod', 'woe', 'wof', 'wog', 'woi', 'wok', 'wom', 'won', 'woo', 'wor', 'wos', 'wow', 'woy', 'wpc', 'wra', 'wrb', 'wrd', 'wrg', 'wrh', 'wri', 'wrk', 'wrl', 'wrm', 'wrn', 'wro', 'wrp', 'wrr', 'wrs', 'wru', 'wrv', 'wrw', 'wrx', 'wry', 'wrz', 'wsa', 'wsg', 'wsi', 'wsk', 'wsr', 'wss', 'wsu', 'wsv', 'wtf', 'wth', 'wti', 'wtk', 'wtm', 'wtw', 'wua', 'wub', 'wud', 'wuh', 'wul', 'wum', 'wun', 'wur', 'wut', 'wuu', 'wuv', 'wux', 'wuy', 'wwa', 'wwb', 'wwo', 'wwr', 'www', 'wxa', 'wxw', 'wya', 'wyb', 'wyi', 'wym', 'wyr', 'wyy', 'xaa', 'xab', 'xac', 'xad', 'xae', 'xag', 'xai', 'xaj', 'xak', 'xal', 'xam', 'xan', 'xao', 'xap', 'xaq', 'xar', 'xas', 'xat', 'xau', 'xav', 'xaw', 'xay', 'xba', 'xbb', 'xbc', 'xbd', 'xbe', 'xbg', 'xbi', 'xbj', 'xbm', 'xbn', 'xbo', 'xbp', 'xbr', 'xbw', 'xbx', 'xby', 'xcb', 'xcc', 'xce', 'xcg', 'xch', 'xcl', 'xcm', 'xcn', 'xco', 'xcr', 'xct', 'xcu', 'xcv', 'xcw', 'xcy', 'xda', 'xdc', 'xdk', 'xdm', 'xdo', 'xdy', 'xeb', 'xed', 'xeg', 'xel', 'xem', 'xep', 'xer', 'xes', 'xet', 'xeu', 'xfa', 'xga', 'xgb', 'xgd', 'xgf', 'xgg', 'xgi', 'xgl', 'xgm', 'xgn', 'xgr', 'xgu', 'xgw', 'xha', 'xhc', 'xhd', 'xhe', 'xhr', 'xht', 'xhu', 'xhv', 'xia', 'xib', 'xii', 'xil', 'xin', 'xip', 'xir', 'xis', 'xiv', 'xiy', 'xjb', 'xjt', 'xka', 'xkb', 'xkc', 'xkd', 'xke', 'xkf', 'xkg', 'xkh', 'xki', 'xkj', 'xkk', 'xkl', 'xkn', 'xko', 'xkp', 'xkq', 'xkr', 'xks', 'xkt', 'xku', 'xkv', 'xkw', 'xkx', 'xky', 'xkz', 'xla', 'xlb', 'xlc', 'xld', 'xle', 'xlg', 'xli', 'xln', 'xlo', 'xlp', 'xls', 'xlu', 'xly', 'xma', 'xmb', 'xmc', 'xmd', 'xme', 'xmf', 'xmg', 'xmh', 'xmj', 'xmk', 'xml', 'xmm', 'xmn', 'xmo', 'xmp', 'xmq', 'xmr', 'xms', 'xmt', 'xmu', 'xmv', 'xmw', 'xmx', 'xmy', 'xmz', 'xna', 'xnb', 'xnd', 'xng', 'xnh', 'xni', 'xnk', 'xnn', 'xno', 'xnr', 'xns', 'xnt', 'xnu', 'xny', 'xnz', 'xoc', 'xod', 'xog', 'xoi', 'xok', 'xom', 'xon', 'xoo', 'xop', 'xor', 'xow', 'xpa', 'xpc', 'xpe', 'xpg', 'xpi', 'xpj', 'xpk', 'xpm', 'xpn', 'xpo', 'xpp', 'xpq', 'xpr', 'xps', 'xpt', 'xpu', 'xpy', 'xqa', 'xqt', 'xra', 'xrb', 'xrd', 'xre', 'xrg', 'xri', 'xrm', 'xrn', 'xrq', 'xrr', 'xrt', 'xru', 'xrw', 'xsa', 'xsb', 'xsc', 'xsd', 'xse', 'xsh', 'xsi', 'xsj', 'xsl', 'xsm', 'xsn', 'xso', 'xsp', 'xsq', 'xsr', 'xss', 'xsu', 'xsv', 'xsy', 'xta', 'xtb', 'xtc', 'xtd', 'xte', 'xtg', 'xth', 'xti', 'xtj', 'xtl', 'xtm', 'xtn', 'xto', 'xtp', 'xtq', 'xtr', 'xts', 'xtt', 'xtu', 'xtv', 'xtw', 'xty', 'xtz', 'xua', 'xub', 'xud', 'xug', 'xuj', 'xul', 'xum', 'xun', 'xuo', 'xup', 'xur', 'xut', 'xuu', 'xve', 'xvi', 'xvn', 'xvo', 'xvs', 'xwa', 'xwc', 'xwd', 'xwe', 'xwg', 'xwj', 'xwk', 'xwl', 'xwo', 'xwr', 'xwt', 'xww', 'xxb', 'xxk', 'xxm', 'xxr', 'xxt', 'xya', 'xyb', 'xyj', 'xyk', 'xyl', 'xyt', 'xyy', 'xzh', 'xzm', 'xzp', 'yaa', 'yab', 'yac', 'yad', 'yae', 'yaf', 'yag', 'yah', 'yai', 'yaj', 'yak', 'yal', 'yam', 'yan', 'yao', 'yap', 'yaq', 'yar', 'yas', 'yat', 'yau', 'yav', 'yaw', 'yax', 'yay', 'yaz', 'yba', 'ybb', 'ybd', 'ybe', 'ybh', 'ybi', 'ybj', 'ybk', 'ybl', 'ybm', 'ybn', 'ybo', 'ybx', 'yby', 'ych', 'ycl', 'ycn', 'ycp', 'yda', 'ydd', 'yde', 'ydg', 'ydk', 'yds', 'yea', 'yec', 'yee', 'yei', 'yej', 'yel', 'yen', 'yer', 'yes', 'yet', 'yeu', 'yev', 'yey', 'yga', 'ygi', 'ygl', 'ygm', 'ygp', 'ygr', 'ygs', 'ygu', 'ygw', 'yha', 'yhd', 'yhl', 'yhs', 'yia', 'yif', 'yig', 'yih', 'yii', 'yij', 'yik', 'yil', 'yim', 'yin', 'yip', 'yiq', 'yir', 'yis', 'yit', 'yiu', 'yiv', 'yix', 'yiy', 'yiz', 'yka', 'ykg', 'yki', 'ykk', 'ykl', 'ykm', 'ykn', 'yko', 'ykr', 'ykt', 'yku', 'yky', 'yla', 'ylb', 'yle', 'ylg', 'yli', 'yll', 'ylm', 'yln', 'ylo', 'ylr', 'ylu', 'yly', 'yma', 'ymb', 'ymc', 'ymd', 'yme', 'ymg', 'ymh', 'ymi', 'ymk', 'yml', 'ymm', 'ymn', 'ymo', 'ymp', 'ymq', 'ymr', 'yms', 'ymt', 'ymx', 'ymz', 'yna', 'ynd', 'yne', 'yng', 'ynh', 'ynk', 'ynl', 'ynn', 'yno', 'ynq', 'yns', 'ynu', 'yob', 'yog', 'yoi', 'yok', 'yol', 'yom', 'yon', 'yos', 'yot', 'yox', 'yoy', 'ypa', 'ypb', 'ypg', 'yph', 'ypk', 'ypm', 'ypn', 'ypo', 'ypp', 'ypz', 'yra', 'yrb', 'yre', 'yri', 'yrk', 'yrl', 'yrm', 'yrn', 'yro', 'yrs', 'yrw', 'yry', 'ysc', 'ysd', 'ysg', 'ysl', 'ysn', 'yso', 'ysp', 'ysr', 'yss', 'ysy', 'yta', 'ytl', 'ytp', 'ytw', 'yty', 'yua', 'yub', 'yuc', 'yud', 'yue', 'yuf', 'yug', 'yui', 'yuj', 'yuk', 'yul', 'yum', 'yun', 'yup', 'yuq', 'yur', 'yut', 'yuu', 'yuw', 'yux', 'yuy', 'yuz', 'yva', 'yvt', 'ywa', 'ywg', 'ywl', 'ywn', 'ywq', 'ywr', 'ywt', 'ywu', 'yww', 'yxa', 'yxg', 'yxl', 'yxm', 'yxu', 'yxy', 'yyr', 'yyu', 'yyz', 'yzg', 'yzk', 'zaa', 'zab', 'zac', 'zad', 'zae', 'zaf', 'zag', 'zah', 'zai', 'zaj', 'zak', 'zal', 'zam', 'zao', 'zap', 'zaq', 'zar', 'zas', 'zat', 'zau', 'zav', 'zaw', 'zax', 'zay', 'zaz', 'zbc', 'zbe', 'zbl', 'zbt', 'zbw', 'zca', 'zch', 'zdj', 'zea', 'zeg', 'zeh', 'zen', 'zga', 'zgb', 'zgh', 'zgm', 'zgn', 'zgr', 'zhb', 'zhd', 'zhi', 'zhn', 'zhw', 'zhx', 'zia', 'zib', 'zik', 'zil', 'zim', 'zin', 'zir', 'ziw', 'ziz', 'zka', 'zkb', 'zkd', 'zkg', 'zkh', 'zkk', 'zkn', 'zko', 'zkp', 'zkr', 'zkt', 'zku', 'zkv', 'zkz', 'zle', 'zlj', 'zlm', 'zln', 'zlq', 'zls', 'zlw', 'zma', 'zmb', 'zmc', 'zmd', 'zme', 'zmf', 'zmg', 'zmh', 'zmi', 'zmj', 'zmk', 'zml', 'zmm', 'zmn', 'zmo', 'zmp', 'zmq', 'zmr', 'zms', 'zmt', 'zmu', 'zmv', 'zmw', 'zmx', 'zmy', 'zmz', 'zna', 'znd', 'zne', 'zng', 'znk', 'zns', 'zoc', 'zoh', 'zom', 'zoo', 'zoq', 'zor', 'zos', 'zpa', 'zpb', 'zpc', 'zpd', 'zpe', 'zpf', 'zpg', 'zph', 'zpi', 'zpj', 'zpk', 'zpl', 'zpm', 'zpn', 'zpo', 'zpp', 'zpq', 'zpr', 'zps', 'zpt', 'zpu', 'zpv', 'zpw', 'zpx', 'zpy', 'zpz', 'zqe', 'zra', 'zrg', 'zrn', 'zro', 'zrp', 'zrs', 'zsa', 'zsk', 'zsl', 'zsm', 'zsr', 'zsu', 'zte', 'ztg', 'ztl', 'ztm', 'ztn', 'ztp', 'ztq', 'zts', 'ztt', 'ztu', 'ztx', 'zty', 'zua', 'zuh', 'zum', 'zun', 'zuy', 'zwa', 'zxx', 'zyb', 'zyg', 'zyj', 'zyn', 'zyp', 'zza', 'zzj' ]; -1 12035 axe.utils.validLangs = function() { -1 12036 'use strict'; -1 12037 return langs; -1 12038 }; -1 12039 'use strict'; -1 12040 var _extends = Object.assign || function(target) { -1 12041 for (var i = 1; i < arguments.length; i++) { -1 12042 var source = arguments[i]; -1 12043 for (var key in source) { -1 12044 if (Object.prototype.hasOwnProperty.call(source, key)) { -1 12045 target[key] = source[key]; -1 12046 } -1 12047 } -1 12048 } -1 12049 return target; -1 12050 }; 11179 12051 var _typeof = typeof Symbol === 'function' && typeof Symbol.iterator === 'symbol' ? function(obj) { 11180 12052 return typeof obj; 11181 12053 } : function(obj) { 11182 12054 return obj && typeof Symbol === 'function' && obj.constructor === Symbol && obj !== Symbol.prototype ? 'symbol' : typeof obj; 11183 12055 }; -1 12056 function _toConsumableArray(arr) { -1 12057 if (Array.isArray(arr)) { -1 12058 for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) { -1 12059 arr2[i] = arr[i]; -1 12060 } -1 12061 return arr2; -1 12062 } else { -1 12063 return Array.from(arr); -1 12064 } -1 12065 } 11184 12066 axe._load({ 11185 12067 data: { 11186 12068 rules: { @@ -11208,6 +12090,10 @@ module.exports = { 11208 12090 description: 'Ensures aria-hidden=\'true\' is not present on the document body.', 11209 12091 help: 'aria-hidden=\'true\' must not be present on the document body' 11210 12092 }, -1 12093 'aria-hidden-focus': { -1 12094 description: 'Ensures aria-hidden elements do not contain focusable elements', -1 12095 help: 'ARIA hidden element must not contain focusable elements' -1 12096 }, 11211 12097 'aria-required-attr': { 11212 12098 description: 'Ensures elements with ARIA roles have all required ARIA attributes', 11213 12099 help: 'Required ARIA attributes must be provided' @@ -11296,6 +12182,10 @@ module.exports = { 11296 12182 description: 'Ensures elements in the focus order have an appropriate role', 11297 12183 help: 'Elements in the focus order need a role appropriate for interactive content' 11298 12184 }, -1 12185 'form-field-multiple-labels': { -1 12186 description: 'Ensures form field does not have multiple label elements', -1 12187 help: 'Form field must not have multiple label elements' -1 12188 }, 11299 12189 'frame-tested': { 11300 12190 description: 'Ensures <iframe> and <frame> elements contain the axe-core script', 11301 12191 help: 'Frames must be tested with axe-core' @@ -11340,6 +12230,10 @@ module.exports = { 11340 12230 description: 'Ensures <input type="image"> elements have alternate text', 11341 12231 help: 'Image buttons must have alternate text' 11342 12232 }, -1 12233 'label-content-name-mismatch': { -1 12234 description: 'Ensures that elements labelled through their content must have their visible text as part of their accessible name', -1 12235 help: 'Elements must have their visible text as part of their accessible name' -1 12236 }, 11343 12237 'label-title-only': { 11344 12238 description: 'Ensures that every form element is not solely labeled using the title or aria-describedby attributes', 11345 12239 help: 'Form elements should have a visible label' @@ -11352,6 +12246,10 @@ module.exports = { 11352 12246 description: 'Ensures the banner landmark is at top level', 11353 12247 help: 'Banner landmark must not be contained in another landmark' 11354 12248 }, -1 12249 'landmark-complementary-is-top-level': { -1 12250 description: 'Ensures the complementary landmark or aside is at top level', -1 12251 help: 'Aside must not be contained in another landmark' -1 12252 }, 11355 12253 'landmark-contentinfo-is-top-level': { 11356 12254 description: 'Ensures the contentinfo landmark is at top level', 11357 12255 help: 'Contentinfo landmark must not be contained in another landmark' @@ -11361,16 +12259,16 @@ module.exports = { 11361 12259 help: 'Main landmark must not be contained in another landmark' 11362 12260 }, 11363 12261 'landmark-no-duplicate-banner': {11364 -1 description: 'Ensures the page has at most one banner landmark',11365 -1 help: 'Page must not have more than one banner landmark'-1 12262 description: 'Ensures the document has at most one banner landmark', -1 12263 help: 'Document must not have more than one banner landmark' 11366 12264 }, 11367 12265 'landmark-no-duplicate-contentinfo': {11368 -1 description: 'Ensures the page has at most one contentinfo landmark',11369 -1 help: 'Page must not have more than one contentinfo landmark'-1 12266 description: 'Ensures the document has at most one contentinfo landmark', -1 12267 help: 'Document must not have more than one contentinfo landmark' 11370 12268 }, 11371 12269 'landmark-one-main': {11372 -1 description: 'Ensures the page has only one main landmark and each iframe in the page has at most one main landmark',11373 -1 help: 'Page must have one main landmark'-1 12270 description: 'Ensures the document has only one main landmark and each iframe in the page has at most one main landmark', -1 12271 help: 'Document must have one main landmark' 11374 12272 }, 11375 12273 'layout-table': { 11376 12274 description: 'Ensures presentational <table> elements do not use <th>, <caption> elements or the summary attribute', @@ -11564,6 +12462,27 @@ module.exports = { 11564 12462 } 11565 12463 } 11566 12464 }, -1 12465 'aria-unsupported-attr': { -1 12466 impact: 'critical', -1 12467 messages: { -1 12468 pass: function anonymous(it) { -1 12469 var out = 'ARIA attribute is supported'; -1 12470 return out; -1 12471 }, -1 12472 fail: function anonymous(it) { -1 12473 var out = 'ARIA attribute is not widely supported in screen readers and assistive technologies: '; -1 12474 var arr1 = it.data; -1 12475 if (arr1) { -1 12476 var value, i1 = -1, l1 = arr1.length - 1; -1 12477 while (i1 < l1) { -1 12478 value = arr1[i1 += 1]; -1 12479 out += ' ' + value; -1 12480 } -1 12481 } -1 12482 return out; -1 12483 } -1 12484 } -1 12485 }, 11567 12486 'aria-allowed-role': { 11568 12487 impact: 'minor', 11569 12488 messages: { @@ -11572,7 +12491,11 @@ module.exports = { 11572 12491 return out; 11573 12492 }, 11574 12493 fail: function anonymous(it) {11575 -1 var out = 'role' + (it.data && it.data.length > 1 ? 's' : '') + ' ' + it.data.join(', ') + ' ' + (it.data && it.data.length > 1 ? 'are' : ' is') + ' not allowed for given element';-1 12494 var out = 'ARIA role' + (it.data && it.data.length > 1 ? 's' : '') + ' ' + it.data.join(', ') + ' ' + (it.data && it.data.length > 1 ? 'are' : ' is') + ' not allowed for given element'; -1 12495 return out; -1 12496 }, -1 12497 incomplete: function anonymous(it) { -1 12498 var out = 'ARIA role' + (it.data && it.data.length > 1 ? 's' : '') + ' ' + it.data.join(', ') + ' must be removed when the element is made visible, as ' + (it.data && it.data.length > 1 ? 'they are' : 'it is') + ' not allowed for the element'; 11576 12499 return out; 11577 12500 } 11578 12501 } @@ -11603,6 +12526,32 @@ module.exports = { 11603 12526 } 11604 12527 } 11605 12528 }, -1 12529 'focusable-disabled': { -1 12530 impact: 'serious', -1 12531 messages: { -1 12532 pass: function anonymous(it) { -1 12533 var out = 'No focusable elements contained within element'; -1 12534 return out; -1 12535 }, -1 12536 fail: function anonymous(it) { -1 12537 var out = 'Focusable content should be disabled or be removed from the DOM'; -1 12538 return out; -1 12539 } -1 12540 } -1 12541 }, -1 12542 'focusable-not-tabbable': { -1 12543 impact: 'serious', -1 12544 messages: { -1 12545 pass: function anonymous(it) { -1 12546 var out = 'No focusable elements contained within element'; -1 12547 return out; -1 12548 }, -1 12549 fail: function anonymous(it) { -1 12550 var out = 'Focusable content should have tabindex=\'-1\' or be removed from the DOM'; -1 12551 return out; -1 12552 } -1 12553 } -1 12554 }, 11606 12555 'aria-required-attr': { 11607 12556 impact: 'critical', 11608 12557 messages: { @@ -11712,7 +12661,15 @@ module.exports = { 11712 12661 return out; 11713 12662 }, 11714 12663 fail: function anonymous(it) {11715 -1 var out = 'The role used is not widely supported in assistive technologies';-1 12664 var out = 'The role used is not widely supported in screen readers and assistive technologies: '; -1 12665 var arr1 = it.data; -1 12666 if (arr1) { -1 12667 var value, i1 = -1, l1 = arr1.length - 1; -1 12668 while (i1 < l1) { -1 12669 value = arr1[i1 += 1]; -1 12670 out += ' ' + value; -1 12671 } -1 12672 } 11716 12673 return out; 11717 12674 } 11718 12675 } @@ -11959,11 +12916,21 @@ module.exports = { 11959 12916 impact: 'critical', 11960 12917 messages: { 11961 12918 pass: function anonymous(it) {11962 -1 var out = 'All elements with the name "' + it.data.name + '" reference the same element with aria-labelledby';-1 12919 var out = 'Elements with the name "' + it.data.name + '" have both a shared label, and a unique label, referenced through aria-labelledby'; 11963 12920 return out; 11964 12921 }, 11965 12922 fail: function anonymous(it) {11966 -1 var out = 'All elements with the name "' + it.data.name + '" do not reference the same element with aria-labelledby';-1 12923 var out = ''; -1 12924 var code = it.data && it.data.failureCode; -1 12925 out += 'Elements with the name "' + it.data.name + '" do not all have '; -1 12926 if (code === 'no-shared-label') { -1 12927 out += 'a shared label'; -1 12928 } else if (code === 'no-unique-label') { -1 12929 out += 'a unique label'; -1 12930 } else { -1 12931 out += 'both a shared label, and a unique label'; -1 12932 } -1 12933 out += ', referenced through aria-labelledby'; 11967 12934 return out; 11968 12935 } 11969 12936 } @@ -12031,6 +12998,10 @@ module.exports = { 12031 12998 fail: function anonymous(it) { 12032 12999 var out = 'CSS Orientation lock is applied, and makes display inoperable'; 12033 13000 return out; -1 13001 }, -1 13002 incomplete: function anonymous(it) { -1 13003 var out = 'CSS Orientation lock cannot be determined'; -1 13004 return out; 12034 13005 } 12035 13006 } 12036 13007 }, @@ -12164,6 +13135,19 @@ module.exports = { 12164 13135 } 12165 13136 } 12166 13137 }, -1 13138 'multiple-label': { -1 13139 impact: 'moderate', -1 13140 messages: { -1 13141 pass: function anonymous(it) { -1 13142 var out = 'Form field does not have multiple label elements'; -1 13143 return out; -1 13144 }, -1 13145 fail: function anonymous(it) { -1 13146 var out = 'Multiple label elements is not widely supported in assistive technologies'; -1 13147 return out; -1 13148 } -1 13149 } -1 13150 }, 12167 13151 'frame-tested': { 12168 13152 impact: 'critical', 12169 13153 messages: { @@ -12258,20 +13242,33 @@ module.exports = { 12258 13242 return out; 12259 13243 }, 12260 13244 fail: function anonymous(it) {12261 -1 var out = 'Lang and xml:lang attributes do not have the same base language';-1 13245 var out = 'Lang and xml:lang attributes do not have the same base language'; -1 13246 return out; -1 13247 } -1 13248 } -1 13249 }, -1 13250 'has-alt': { -1 13251 impact: 'critical', -1 13252 messages: { -1 13253 pass: function anonymous(it) { -1 13254 var out = 'Element has an alt attribute'; -1 13255 return out; -1 13256 }, -1 13257 fail: function anonymous(it) { -1 13258 var out = 'Element does not have an alt attribute'; 12262 13259 return out; 12263 13260 } 12264 13261 } 12265 13262 },12266 -1 'has-alt': {-1 13263 'alt-space-value': { 12267 13264 impact: 'critical', 12268 13265 messages: { 12269 13266 pass: function anonymous(it) {12270 -1 var out = 'Element has an alt attribute';-1 13267 var out = 'Element has a valid alt attribute value'; 12271 13268 return out; 12272 13269 }, 12273 13270 fail: function anonymous(it) {12274 -1 var out = 'Element does not have an alt attribute';-1 13271 var out = 'Element has an alt attribute containing only a space character, which is not ignored by all screen readers'; 12275 13272 return out; 12276 13273 } 12277 13274 } @@ -12289,6 +13286,19 @@ module.exports = { 12289 13286 } 12290 13287 } 12291 13288 }, -1 13289 'label-content-name-mismatch': { -1 13290 impact: 'serious', -1 13291 messages: { -1 13292 pass: function anonymous(it) { -1 13293 var out = 'Element contains visible text as part of it\'s accessible name'; -1 13294 return out; -1 13295 }, -1 13296 fail: function anonymous(it) { -1 13297 var out = 'Text inside the element is not included in the accessible name'; -1 13298 return out; -1 13299 } -1 13300 } -1 13301 }, 12292 13302 'title-only': { 12293 13303 impact: 'serious', 12294 13304 messages: { @@ -12341,19 +13351,6 @@ module.exports = { 12341 13351 } 12342 13352 } 12343 13353 },12344 -1 'multiple-label': {12345 -1 impact: 'serious',12346 -1 messages: {12347 -1 pass: function anonymous(it) {12348 -1 var out = 'Form element does not have multiple <label> elements';12349 -1 return out;12350 -1 },12351 -1 fail: function anonymous(it) {12352 -1 var out = 'Form element has multiple <label> elements';12353 -1 return out;12354 -1 }12355 -1 }12356 -1 },12357 13354 'hidden-explicit-label': { 12358 13355 impact: 'critical', 12359 13356 messages: { @@ -12384,7 +13381,7 @@ module.exports = { 12384 13381 impact: 'moderate', 12385 13382 messages: { 12386 13383 pass: function anonymous(it) {12387 -1 var out = 'Document has no more than one banner landmark';-1 13384 var out = 'Document does not have more than one banner landmark'; 12388 13385 return out; 12389 13386 }, 12390 13387 fail: function anonymous(it) { @@ -12397,11 +13394,11 @@ module.exports = { 12397 13394 impact: 'moderate', 12398 13395 messages: { 12399 13396 pass: function anonymous(it) {12400 -1 var out = 'Page does not have more than one contentinfo landmark';-1 13397 var out = 'Document does not have more than one contentinfo landmark'; 12401 13398 return out; 12402 13399 }, 12403 13400 fail: function anonymous(it) {12404 -1 var out = 'Page has more than one contentinfo landmark';-1 13401 var out = 'Document has more than one contentinfo landmark'; 12405 13402 return out; 12406 13403 } 12407 13404 } @@ -12410,11 +13407,11 @@ module.exports = { 12410 13407 impact: 'moderate', 12411 13408 messages: { 12412 13409 pass: function anonymous(it) {12413 -1 var out = 'Page has at least one main landmark';-1 13410 var out = 'Document has at least one main landmark'; 12414 13411 return out; 12415 13412 }, 12416 13413 fail: function anonymous(it) {12417 -1 var out = 'Page does not have a main landmark';-1 13414 var out = 'Document does not have a main landmark'; 12418 13415 return out; 12419 13416 } 12420 13417 } @@ -12423,11 +13420,11 @@ module.exports = { 12423 13420 impact: 'moderate', 12424 13421 messages: { 12425 13422 pass: function anonymous(it) {12426 -1 var out = 'Page does not have more than one main landmark';-1 13423 var out = 'Document does not have more than one main landmark'; 12427 13424 return out; 12428 13425 }, 12429 13426 fail: function anonymous(it) {12430 -1 var out = 'Page has more than one main landmark';-1 13427 var out = 'Document has more than one main landmark'; 12431 13428 return out; 12432 13429 } 12433 13430 } @@ -12801,20 +13798,13 @@ module.exports = { 12801 13798 none: [] 12802 13799 }, { 12803 13800 id: 'aria-allowed-attr',12804 -1 matches: function matches(node, virtualNode) {12805 -1 var role = node.getAttribute('role');12806 -1 if (!role) {12807 -1 role = axe.commons.aria.implicitRole(node);12808 -1 }12809 -1 var allowed = axe.commons.aria.allowedAttr(role);12810 -1 if (role && allowed) {12811 -1 var aria = /^aria-/;12812 -1 if (node.hasAttributes()) {12813 -1 var attrs = node.attributes;12814 -1 for (var i = 0, l = attrs.length; i < l; i++) {12815 -1 if (aria.test(attrs[i].name)) {12816 -1 return true;12817 -1 }-1 13801 matches: function matches(node, virtualNode, context) { -1 13802 var aria = /^aria-/; -1 13803 if (node.hasAttributes()) { -1 13804 var attrs = node.attributes; -1 13805 for (var i = 0, l = attrs.length; i < l; i++) { -1 13806 if (aria.test(attrs[i].name)) { -1 13807 return true; 12818 13808 } 12819 13809 } 12820 13810 } @@ -12823,12 +13813,12 @@ module.exports = { 12823 13813 tags: [ 'cat.aria', 'wcag2a', 'wcag412' ], 12824 13814 all: [], 12825 13815 any: [ 'aria-allowed-attr' ],12826 -1 none: []-1 13816 none: [ 'aria-unsupported-attr' ] 12827 13817 }, { 12828 13818 id: 'aria-allowed-role', 12829 13819 excludeHidden: false, 12830 13820 selector: '[role]',12831 -1 matches: function matches(node, virtualNode) {-1 13821 matches: function matches(node, virtualNode, context) { 12832 13822 return axe.commons.aria.getRole(node, { 12833 13823 noImplicit: true, 12834 13824 dpub: true, @@ -12848,7 +13838,7 @@ module.exports = { 12848 13838 }, { 12849 13839 id: 'aria-dpub-role-fallback', 12850 13840 selector: '[role]',12851 -1 matches: function matches(node, virtualNode) {-1 13841 matches: function matches(node, virtualNode, context) { 12852 13842 var role = node.getAttribute('role'); 12853 13843 return [ 'doc-backlink', 'doc-biblioentry', 'doc-biblioref', 'doc-cover', 'doc-endnote', 'doc-glossref', 'doc-noteref' ].includes(role); 12854 13844 }, @@ -12865,6 +13855,27 @@ module.exports = { 12865 13855 any: [ 'aria-hidden-body' ], 12866 13856 none: [] 12867 13857 }, { -1 13858 id: 'aria-hidden-focus', -1 13859 selector: '[aria-hidden="true"]', -1 13860 matches: function matches(node, virtualNode, context) { -1 13861 var getComposedParent = axe.commons.dom.getComposedParent; -1 13862 function shouldMatchElement(el) { -1 13863 if (!el) { -1 13864 return true; -1 13865 } -1 13866 if (el.getAttribute('aria-hidden') === 'true') { -1 13867 return false; -1 13868 } -1 13869 return shouldMatchElement(getComposedParent(el)); -1 13870 } -1 13871 return shouldMatchElement(getComposedParent(node)); -1 13872 }, -1 13873 excludeHidden: false, -1 13874 tags: [ 'cat.name-role-value', 'wcag2a', 'wcag412' ], -1 13875 all: [ 'focusable-disabled', 'focusable-not-tabbable' ], -1 13876 any: [], -1 13877 none: [] -1 13878 }, { 12868 13879 id: 'aria-required-attr', 12869 13880 selector: '[role]', 12870 13881 tags: [ 'cat.aria', 'wcag2a', 'wcag412' ], @@ -12899,7 +13910,7 @@ module.exports = { 12899 13910 none: [ 'invalidrole', 'abstractrole', 'unsupportedrole' ] 12900 13911 }, { 12901 13912 id: 'aria-valid-attr-value',12902 -1 matches: function matches(node, virtualNode) {-1 13913 matches: function matches(node, virtualNode, context) { 12903 13914 var aria = /^aria-/; 12904 13915 if (node.hasAttributes()) { 12905 13916 var attrs = node.attributes; @@ -12920,7 +13931,7 @@ module.exports = { 12920 13931 none: [] 12921 13932 }, { 12922 13933 id: 'aria-valid-attr',12923 -1 matches: function matches(node, virtualNode) {-1 13934 matches: function matches(node, virtualNode, context) { 12924 13935 var aria = /^aria-/; 12925 13936 if (node.hasAttributes()) { 12926 13937 var attrs = node.attributes; @@ -12950,7 +13961,7 @@ module.exports = { 12950 13961 none: [ 'caption' ] 12951 13962 }, { 12952 13963 id: 'autocomplete-valid',12953 -1 matches: function matches(node, virtualNode) {-1 13964 matches: function matches(node, virtualNode, context) { 12954 13965 var _axe$commons = axe.commons, text = _axe$commons.text, aria = _axe$commons.aria, dom = _axe$commons.dom; 12955 13966 var autocomplete = node.getAttribute('autocomplete'); 12956 13967 if (!autocomplete || text.sanitize(autocomplete) === '') { @@ -13004,7 +14015,7 @@ module.exports = { 13004 14015 id: 'bypass', 13005 14016 selector: 'html', 13006 14017 pageLevel: true,13007 -1 matches: function matches(node, virtualNode) {-1 14018 matches: function matches(node, virtualNode, context) { 13008 14019 return !!node.querySelector('a[href]'); 13009 14020 }, 13010 14021 tags: [ 'cat.keyboard', 'wcag2a', 'wcag241', 'section508', 'section508.22.o' ], @@ -13020,7 +14031,7 @@ module.exports = { 13020 14031 none: [] 13021 14032 }, { 13022 14033 id: 'color-contrast',13023 -1 matches: function matches(node, virtualNode) {-1 14034 matches: function matches(node, virtualNode, context) { 13024 14035 var nodeName = node.nodeName.toUpperCase(), nodeType = node.type; 13025 14036 if (node.getAttribute('aria-disabled') === 'true' || axe.commons.dom.findUpVirtual(virtualNode, '[aria-disabled="true"]')) { 13026 14037 return false; @@ -13062,7 +14073,7 @@ module.exports = { 13062 14073 } 13063 14074 } 13064 14075 if (node.getAttribute('id')) {13065 -1 var id = axe.commons.utils.escapeSelector(node.getAttribute('id'));-1 14076 var id = axe.utils.escapeSelector(node.getAttribute('id')); 13066 14077 var _doc = axe.commons.dom.getRootNode(node); 13067 14078 var candidate = _doc.querySelector('[aria-labelledby~=' + id + ']'); 13068 14079 if (candidate && candidate.disabled) { @@ -13099,7 +14110,7 @@ module.exports = { 13099 14110 }, { 13100 14111 id: 'css-orientation-lock', 13101 14112 selector: 'html',13102 -1 tags: [ 'cat.structure', 'wcag262', 'wcag21aa', 'experimental' ],-1 14113 tags: [ 'cat.structure', 'wcag134', 'wcag21aa', 'experimental' ], 13103 14114 all: [ 'css-orientation-lock' ], 13104 14115 any: [], 13105 14116 none: [], @@ -13107,7 +14118,7 @@ module.exports = { 13107 14118 }, { 13108 14119 id: 'definition-list', 13109 14120 selector: 'dl',13110 -1 matches: function matches(node, virtualNode) {-1 14121 matches: function matches(node, virtualNode, context) { 13111 14122 return !node.getAttribute('role'); 13112 14123 }, 13113 14124 tags: [ 'cat.structure', 'wcag2a', 'wcag131' ], @@ -13117,7 +14128,7 @@ module.exports = { 13117 14128 }, { 13118 14129 id: 'dlitem', 13119 14130 selector: 'dd, dt',13120 -1 matches: function matches(node, virtualNode) {-1 14131 matches: function matches(node, virtualNode, context) { 13121 14132 return !node.getAttribute('role'); 13122 14133 }, 13123 14134 tags: [ 'cat.structure', 'wcag2a', 'wcag131' ], @@ -13127,7 +14138,7 @@ module.exports = { 13127 14138 }, { 13128 14139 id: 'document-title', 13129 14140 selector: 'html',13130 -1 matches: function matches(node, virtualNode) {-1 14141 matches: function matches(node, virtualNode, context) { 13131 14142 return node.ownerDocument.defaultView.self === node.ownerDocument.defaultView.top; 13132 14143 }, 13133 14144 tags: [ 'cat.text-alternatives', 'wcag2a', 'wcag242' ], @@ -13137,7 +14148,7 @@ module.exports = { 13137 14148 }, { 13138 14149 id: 'duplicate-id-active', 13139 14150 selector: '[id]',13140 -1 matches: function matches(node, virtualNode) {-1 14151 matches: function matches(node, virtualNode, context) { 13141 14152 var _axe$commons2 = axe.commons, dom = _axe$commons2.dom, aria = _axe$commons2.aria; 13142 14153 var id = node.getAttribute('id').trim(); 13143 14154 var idSelector = '*[id="' + axe.utils.escapeSelector(id) + '"]'; @@ -13152,7 +14163,7 @@ module.exports = { 13152 14163 }, { 13153 14164 id: 'duplicate-id-aria', 13154 14165 selector: '[id]',13155 -1 matches: function matches(node, virtualNode) {-1 14166 matches: function matches(node, virtualNode, context) { 13156 14167 return axe.commons.aria.isAccessibleRef(node); 13157 14168 }, 13158 14169 excludeHidden: false, @@ -13163,7 +14174,7 @@ module.exports = { 13163 14174 }, { 13164 14175 id: 'duplicate-id', 13165 14176 selector: '[id]',13166 -1 matches: function matches(node, virtualNode) {-1 14177 matches: function matches(node, virtualNode, context) { 13167 14178 var _axe$commons3 = axe.commons, dom = _axe$commons3.dom, aria = _axe$commons3.aria; 13168 14179 var id = node.getAttribute('id').trim(); 13169 14180 var idSelector = '*[id="' + axe.utils.escapeSelector(id) + '"]'; @@ -13180,7 +14191,7 @@ module.exports = { 13180 14191 }, { 13181 14192 id: 'empty-heading', 13182 14193 selector: 'h1, h2, h3, h4, h5, h6, [role="heading"]',13183 -1 matches: function matches(node, virtualNode) {-1 14194 matches: function matches(node, virtualNode, context) { 13184 14195 var explicitRoles = void 0; 13185 14196 if (node.hasAttribute('role')) { 13186 14197 explicitRoles = node.getAttribute('role').split(/\s+/i).filter(axe.commons.aria.isValidRole); @@ -13198,7 +14209,7 @@ module.exports = { 13198 14209 }, { 13199 14210 id: 'focus-order-semantics', 13200 14211 selector: 'div, h1, h2, h3, h4, h5, h6, [role=heading], p, span',13201 -1 matches: function matches(node, virtualNode) {-1 14212 matches: function matches(node, virtualNode, context) { 13202 14213 return axe.commons.dom.insertedIntoFocusOrder(node); 13203 14214 }, 13204 14215 tags: [ 'cat.keyboard', 'best-practice', 'experimental' ], @@ -13212,9 +14223,23 @@ module.exports = { 13212 14223 } ], 13213 14224 none: [] 13214 14225 }, { -1 14226 id: 'form-field-multiple-labels', -1 14227 selector: 'input, select, textarea', -1 14228 matches: function matches(node, virtualNode, context) { -1 14229 if (node.nodeName.toLowerCase() !== 'input' || node.hasAttribute('type') === false) { -1 14230 return true; -1 14231 } -1 14232 var type = node.getAttribute('type').toLowerCase(); -1 14233 return [ 'hidden', 'image', 'button', 'submit', 'reset' ].includes(type) === false; -1 14234 }, -1 14235 tags: [ 'cat.forms', 'wcag2a', 'wcag332' ], -1 14236 all: [], -1 14237 any: [], -1 14238 none: [ 'multiple-label' ] -1 14239 }, { 13215 14240 id: 'frame-tested', 13216 14241 selector: 'frame, iframe',13217 -1 tags: [ 'cat.structure', 'review-item' ],-1 14242 tags: [ 'cat.structure', 'review-item', 'best-practice' ], 13218 14243 all: [ { 13219 14244 options: { 13220 14245 isViolation: false @@ -13226,7 +14251,7 @@ module.exports = { 13226 14251 }, { 13227 14252 id: 'frame-title-unique', 13228 14253 selector: 'frame[title], iframe[title]',13229 -1 matches: function matches(node, virtualNode) {-1 14254 matches: function matches(node, virtualNode, context) { 13230 14255 var title = node.getAttribute('title'); 13231 14256 return !!(title ? axe.commons.text.sanitize(title).trim() : ''); 13232 14257 }, @@ -13244,7 +14269,7 @@ module.exports = { 13244 14269 }, { 13245 14270 id: 'heading-order', 13246 14271 selector: 'h1, h2, h3, h4, h5, h6, [role=heading]',13247 -1 matches: function matches(node, virtualNode) {-1 14272 matches: function matches(node, virtualNode, context) { 13248 14273 var explicitRoles = void 0; 13249 14274 if (node.hasAttribute('role')) { 13250 14275 explicitRoles = node.getAttribute('role').split(/\s+/i).filter(axe.commons.aria.isValidRole); @@ -13263,7 +14288,7 @@ module.exports = { 13263 14288 id: 'hidden-content', 13264 14289 selector: '*', 13265 14290 excludeHidden: false,13266 -1 tags: [ 'cat.structure', 'experimental', 'review-item' ],-1 14291 tags: [ 'cat.structure', 'experimental', 'review-item', 'best-practice' ], 13267 14292 all: [], 13268 14293 any: [ 'hidden-content' ], 13269 14294 none: [] @@ -13276,7 +14301,7 @@ module.exports = { 13276 14301 none: [] 13277 14302 }, { 13278 14303 id: 'html-lang-valid',13279 -1 selector: 'html[lang]',-1 14304 selector: 'html[lang], html[xml\\:lang]', 13280 14305 tags: [ 'cat.language', 'wcag2a', 'wcag311' ], 13281 14306 all: [], 13282 14307 any: [], @@ -13284,8 +14309,8 @@ module.exports = { 13284 14309 }, { 13285 14310 id: 'html-xml-lang-mismatch', 13286 14311 selector: 'html[lang][xml\\:lang]',13287 -1 matches: function matches(node, virtualNode) {13288 -1 var getBaseLang = axe.commons.utils.getBaseLang;-1 14312 matches: function matches(node, virtualNode, context) { -1 14313 var getBaseLang = axe.utils.getBaseLang; 13289 14314 var primaryLangValue = getBaseLang(node.getAttribute('lang')); 13290 14315 var primaryXmlLangValue = getBaseLang(node.getAttribute('xml:lang')); 13291 14316 return axe.utils.validLangs().includes(primaryLangValue) && axe.utils.validLangs().includes(primaryXmlLangValue); @@ -13300,7 +14325,7 @@ module.exports = { 13300 14325 tags: [ 'cat.text-alternatives', 'wcag2a', 'wcag111', 'section508', 'section508.22.a' ], 13301 14326 all: [], 13302 14327 any: [ 'has-alt', 'aria-label', 'aria-labelledby', 'non-empty-title', 'role-presentation', 'role-none' ],13303 -1 none: []-1 14328 none: [ 'alt-space-value' ] 13304 14329 }, { 13305 14330 id: 'image-redundant-alt', 13306 14331 selector: 'button, [role="button"], a[href], p, li, td, th', @@ -13316,9 +14341,37 @@ module.exports = { 13316 14341 any: [ 'non-empty-alt', 'aria-label', 'aria-labelledby', 'non-empty-title' ], 13317 14342 none: [] 13318 14343 }, { -1 14344 id: 'label-content-name-mismatch', -1 14345 matches: function matches(node, virtualNode, context) { -1 14346 var _axe$commons4 = axe.commons, aria = _axe$commons4.aria, text = _axe$commons4.text; -1 14347 var role = aria.getRole(node); -1 14348 if (!role) { -1 14349 return false; -1 14350 } -1 14351 var isWidgetType = aria.lookupTable.rolesOfType.widget.includes(role); -1 14352 if (!isWidgetType) { -1 14353 return false; -1 14354 } -1 14355 var rolesWithNameFromContents = aria.getRolesWithNameFromContents(); -1 14356 if (!rolesWithNameFromContents.includes(role)) { -1 14357 return false; -1 14358 } -1 14359 if (!text.sanitize(aria.arialabelText(node)) && !text.sanitize(aria.arialabelledbyText(node))) { -1 14360 return false; -1 14361 } -1 14362 if (!text.sanitize(text.visibleVirtual(virtualNode))) { -1 14363 return false; -1 14364 } -1 14365 return true; -1 14366 }, -1 14367 tags: [ 'wcag21a', 'wcag253', 'experimental' ], -1 14368 all: [], -1 14369 any: [ 'label-content-name-mismatch' ], -1 14370 none: [] -1 14371 }, { 13319 14372 id: 'label-title-only', 13320 14373 selector: 'input, select, textarea',13321 -1 matches: function matches(node, virtualNode) {-1 14374 matches: function matches(node, virtualNode, context) { 13322 14375 if (node.nodeName.toLowerCase() !== 'input' || node.hasAttribute('type') === false) { 13323 14376 return true; 13324 14377 } @@ -13332,7 +14385,7 @@ module.exports = { 13332 14385 }, { 13333 14386 id: 'label', 13334 14387 selector: 'input, select, textarea',13335 -1 matches: function matches(node, virtualNode) {-1 14388 matches: function matches(node, virtualNode, context) { 13336 14389 if (node.nodeName.toLowerCase() !== 'input' || node.hasAttribute('type') === false) { 13337 14390 return true; 13338 14391 } @@ -13342,11 +14395,11 @@ module.exports = { 13342 14395 tags: [ 'cat.forms', 'wcag2a', 'wcag332', 'wcag131', 'section508', 'section508.22.n' ], 13343 14396 all: [], 13344 14397 any: [ 'aria-label', 'aria-labelledby', 'implicit-label', 'explicit-label', 'non-empty-title' ],13345 -1 none: [ 'help-same-as-label', 'multiple-label', 'hidden-explicit-label' ]-1 14398 none: [ 'help-same-as-label', 'hidden-explicit-label' ] 13346 14399 }, { 13347 14400 id: 'landmark-banner-is-top-level', 13348 14401 selector: 'header:not([role]), [role=banner]',13349 -1 matches: function matches(node, virtualNode) {-1 14402 matches: function matches(node, virtualNode, context) { 13350 14403 var nativeScopeFilter = 'article, aside, main, nav, section'; 13351 14404 return node.hasAttribute('role') || !axe.commons.dom.findUpVirtual(virtualNode, nativeScopeFilter); 13352 14405 }, @@ -13355,9 +14408,16 @@ module.exports = { 13355 14408 any: [ 'landmark-is-top-level' ], 13356 14409 none: [] 13357 14410 }, { -1 14411 id: 'landmark-complementary-is-top-level', -1 14412 selector: 'aside:not([role]), [role=complementary]', -1 14413 tags: [ 'cat.semantics', 'best-practice' ], -1 14414 all: [], -1 14415 any: [ 'landmark-is-top-level' ], -1 14416 none: [] -1 14417 }, { 13358 14418 id: 'landmark-contentinfo-is-top-level', 13359 14419 selector: 'footer:not([role]), [role=contentinfo]',13360 -1 matches: function matches(node, virtualNode) {-1 14420 matches: function matches(node, virtualNode, context) { 13361 14421 var nativeScopeFilter = 'article, aside, main, nav, section'; 13362 14422 return node.hasAttribute('role') || !axe.commons.dom.findUpVirtual(virtualNode, nativeScopeFilter); 13363 14423 }, @@ -13418,7 +14478,7 @@ module.exports = { 13418 14478 }, { 13419 14479 id: 'layout-table', 13420 14480 selector: 'table',13421 -1 matches: function matches(node, virtualNode) {-1 14481 matches: function matches(node, virtualNode, context) { 13422 14482 var role = (node.getAttribute('role') || '').toLowerCase(); 13423 14483 return !((role === 'presentation' || role === 'none') && !axe.commons.dom.isFocusable(node)) && !axe.commons.table.isDataTable(node); 13424 14484 }, @@ -13429,7 +14489,7 @@ module.exports = { 13429 14489 }, { 13430 14490 id: 'link-in-text-block', 13431 14491 selector: 'a[href], [role=link]',13432 -1 matches: function matches(node, virtualNode) {-1 14492 matches: function matches(node, virtualNode, context) { 13433 14493 var text = axe.commons.text.sanitize(node.textContent); 13434 14494 var role = node.getAttribute('role'); 13435 14495 if (role && role !== 'link') { @@ -13451,7 +14511,7 @@ module.exports = { 13451 14511 }, { 13452 14512 id: 'link-name', 13453 14513 selector: 'a[href], [role=link][href]',13454 -1 matches: function matches(node, virtualNode) {-1 14514 matches: function matches(node, virtualNode, context) { 13455 14515 return node.getAttribute('role') !== 'button'; 13456 14516 }, 13457 14517 tags: [ 'cat.name-role-value', 'wcag2a', 'wcag412', 'wcag244', 'section508', 'section508.22.a' ], @@ -13461,7 +14521,7 @@ module.exports = { 13461 14521 }, { 13462 14522 id: 'list', 13463 14523 selector: 'ul, ol',13464 -1 matches: function matches(node, virtualNode) {-1 14524 matches: function matches(node, virtualNode, context) { 13465 14525 return !node.getAttribute('role'); 13466 14526 }, 13467 14527 tags: [ 'cat.structure', 'wcag2a', 'wcag131' ], @@ -13471,7 +14531,7 @@ module.exports = { 13471 14531 }, { 13472 14532 id: 'listitem', 13473 14533 selector: 'li',13474 -1 matches: function matches(node, virtualNode) {-1 14534 matches: function matches(node, virtualNode, context) { 13475 14535 return !node.getAttribute('role'); 13476 14536 }, 13477 14537 tags: [ 'cat.structure', 'wcag2a', 'wcag131' ], @@ -13526,12 +14586,12 @@ module.exports = { 13526 14586 selector: 'object', 13527 14587 tags: [ 'cat.text-alternatives', 'wcag2a', 'wcag111', 'section508', 'section508.22.a' ], 13528 14588 all: [],13529 -1 any: [ 'has-visible-text', 'aria-label', 'aria-labelledby', 'non-empty-title' ],-1 14589 any: [ 'has-visible-text', 'aria-label', 'aria-labelledby', 'non-empty-title', 'role-presentation', 'role-none' ], 13530 14590 none: [] 13531 14591 }, { 13532 14592 id: 'p-as-heading', 13533 14593 selector: 'p',13534 -1 matches: function matches(node, virtualNode) {-1 14594 matches: function matches(node, virtualNode, context) { 13535 14595 var children = Array.from(node.parentNode.childNodes); 13536 14596 var nodeText = node.textContent.trim(); 13537 14597 var isSentence = /[.!?:;](?![.!?:;])/g; @@ -13607,7 +14667,7 @@ module.exports = { 13607 14667 }, { 13608 14668 id: 'skip-link', 13609 14669 selector: 'a[href]',13610 -1 matches: function matches(node, virtualNode) {-1 14670 matches: function matches(node, virtualNode, context) { 13611 14671 return /^#[^/!]/.test(node.getAttribute('href')); 13612 14672 }, 13613 14673 tags: [ 'cat.keyboard', 'best-practice' ], @@ -13631,7 +14691,7 @@ module.exports = { 13631 14691 }, { 13632 14692 id: 'table-fake-caption', 13633 14693 selector: 'table',13634 -1 matches: function matches(node, virtualNode) {-1 14694 matches: function matches(node, virtualNode, context) { 13635 14695 return axe.commons.table.isDataTable(node); 13636 14696 }, 13637 14697 tags: [ 'cat.tables', 'experimental', 'wcag2a', 'wcag131', 'section508', 'section508.22.g' ], @@ -13641,7 +14701,7 @@ module.exports = { 13641 14701 }, { 13642 14702 id: 'td-has-header', 13643 14703 selector: 'table',13644 -1 matches: function matches(node, virtualNode) {-1 14704 matches: function matches(node, virtualNode, context) { 13645 14705 if (axe.commons.table.isDataTable(node)) { 13646 14706 var tableArray = axe.commons.table.toArray(node); 13647 14707 return tableArray.length >= 3 && tableArray[0].length >= 3 && tableArray[1].length >= 3 && tableArray[2].length >= 3; @@ -13662,7 +14722,7 @@ module.exports = { 13662 14722 }, { 13663 14723 id: 'th-has-data-cells', 13664 14724 selector: 'table',13665 -1 matches: function matches(node, virtualNode) {-1 14725 matches: function matches(node, virtualNode, context) { 13666 14726 return axe.commons.table.isDataTable(node); 13667 14727 }, 13668 14728 tags: [ 'cat.tables', 'wcag2a', 'wcag131', 'section508', 'section508.22.g' ], @@ -13672,7 +14732,7 @@ module.exports = { 13672 14732 }, { 13673 14733 id: 'valid-lang', 13674 14734 selector: '[lang], [xml\\:lang]',13675 -1 matches: function matches(node, virtualNode) {-1 14735 matches: function matches(node, virtualNode, context) { 13676 14736 return node.nodeName.toLowerCase() !== 'html'; 13677 14737 }, 13678 14738 tags: [ 'cat.language', 'wcag2aa', 'wcag312' ], @@ -13732,6 +14792,7 @@ module.exports = { 13732 14792 }, { 13733 14793 id: 'aria-allowed-role', 13734 14794 evaluate: function evaluate(node, options, virtualNode, context) { -1 14795 var dom = axe.commons.dom; 13735 14796 var _ref = options || {}, _ref$allowImplicit = _ref.allowImplicit, allowImplicit = _ref$allowImplicit === undefined ? true : _ref$allowImplicit, _ref$ignoredTags = _ref.ignoredTags, ignoredTags = _ref$ignoredTags === undefined ? [] : _ref$ignoredTags; 13736 14797 var tagName = node.nodeName.toUpperCase(); 13737 14798 if (ignoredTags.map(function(t) { @@ -13742,6 +14803,9 @@ module.exports = { 13742 14803 var unallowedRoles = axe.commons.aria.getElementUnallowedRoles(node, allowImplicit); 13743 14804 if (unallowedRoles.length) { 13744 14805 this.data(unallowedRoles); -1 14806 if (!dom.isVisible(node, true)) { -1 14807 return undefined; -1 14808 } 13745 14809 return false; 13746 14810 } 13747 14811 return true; @@ -13758,17 +14822,22 @@ module.exports = { 13758 14822 }, { 13759 14823 id: 'aria-errormessage', 13760 14824 evaluate: function evaluate(node, options, virtualNode, context) { -1 14825 var _axe$commons5 = axe.commons, aria = _axe$commons5.aria, dom = _axe$commons5.dom; 13761 14826 options = Array.isArray(options) ? options : [];13762 -1 var attr = node.getAttribute('aria-errormessage'), hasAttr = node.hasAttribute('aria-errormessage');13763 -1 var doc = axe.commons.dom.getRootNode(node);13764 -1 function validateAttrValue() {-1 14827 var attr = node.getAttribute('aria-errormessage'); -1 14828 var hasAttr = node.hasAttribute('aria-errormessage'); -1 14829 var doc = dom.getRootNode(node); -1 14830 function validateAttrValue(attr) { -1 14831 if (attr.trim() === '') { -1 14832 return aria.lookupTable.attributes['aria-errormessage'].allowEmpty; -1 14833 } 13765 14834 var idref = attr && doc.getElementById(attr); 13766 14835 if (idref) { 13767 14836 return idref.getAttribute('role') === 'alert' || idref.getAttribute('aria-live') === 'assertive' || axe.utils.tokenList(node.getAttribute('aria-describedby') || '').indexOf(attr) > -1; 13768 14837 } 13769 14838 } 13770 14839 if (options.indexOf(attr) === -1 && hasAttr) {13771 -1 if (!validateAttrValue()) {-1 14840 if (!validateAttrValue(attr)) { 13772 14841 this.data(axe.utils.tokenList(attr)); 13773 14842 return false; 13774 14843 } @@ -13833,7 +14902,7 @@ module.exports = { 13833 14902 evaluate: function evaluate(node, options, virtualNode, context) { 13834 14903 var requiredOwned = axe.commons.aria.requiredOwned; 13835 14904 var implicitNodes = axe.commons.aria.implicitNodes;13836 -1 var matchesSelector = axe.commons.utils.matchesSelector;-1 14905 var matchesSelector = axe.utils.matchesSelector; 13837 14906 var idrefs = axe.commons.dom.idrefs; 13838 14907 var reviewEmpty = options && Array.isArray(options.reviewEmpty) ? options.reviewEmpty : []; 13839 14908 function owns(node, virtualTree, role, ariaOwned) { @@ -13877,7 +14946,7 @@ module.exports = { 13877 14946 if (role === 'combobox') { 13878 14947 var textboxIndex = missing.indexOf('textbox'); 13879 14948 var textTypeInputs = [ 'text', 'search', 'email', 'url', 'tel' ];13880 -1 if (textboxIndex >= 0 && node.tagName === 'INPUT' && textTypeInputs.includes(node.type)) {-1 14949 if (textboxIndex >= 0 && node.nodeName.toUpperCase() === 'INPUT' && textTypeInputs.includes(node.type)) { 13881 14950 missing.splice(textboxIndex, 1); 13882 14951 } 13883 14952 var listboxIndex = missing.indexOf('listbox'); @@ -13950,7 +15019,7 @@ module.exports = { 13950 15019 var owners = [], o = null; 13951 15020 while (element) { 13952 15021 if (element.getAttribute('id')) {13953 -1 var id = axe.commons.utils.escapeSelector(element.getAttribute('id'));-1 15022 var id = axe.utils.escapeSelector(element.getAttribute('id')); 13954 15023 var doc = axe.commons.dom.getRootNode(element); 13955 15024 o = doc.querySelector('[aria-owns~=' + id + ']'); 13956 15025 if (o) { @@ -13978,11 +15047,43 @@ module.exports = { 13978 15047 return false; 13979 15048 } 13980 15049 }, {13981 -1 id: 'unsupportedrole',-1 15050 id: 'aria-unsupported-attr', 13982 15051 evaluate: function evaluate(node, options, virtualNode, context) {13983 -1 return !axe.commons.aria.isValidRole(node.getAttribute('role'), {13984 -1 flagUnsupported: true-1 15052 var nodeName = node.nodeName.toUpperCase(); -1 15053 var lookupTable = axe.commons.aria.lookupTable; -1 15054 var role = axe.commons.aria.getRole(node); -1 15055 var unsupportedAttrs = Array.from(node.attributes).filter(function(_ref2) { -1 15056 var name = _ref2.name; -1 15057 var attribute = lookupTable.attributes[name]; -1 15058 if (!axe.commons.aria.validateAttr(name)) { -1 15059 return false; -1 15060 } -1 15061 var unsupported = attribute.unsupported; -1 15062 if ((typeof unsupported === 'undefined' ? 'undefined' : _typeof(unsupported)) !== 'object') { -1 15063 return !!unsupported; -1 15064 } -1 15065 var isException = axe.commons.matches(node, unsupported.exceptions); -1 15066 if (!Object.keys(lookupTable.evaluateRoleForElement).includes(nodeName)) { -1 15067 return !isException; -1 15068 } -1 15069 return !lookupTable.evaluateRoleForElement[nodeName]({ -1 15070 node: node, -1 15071 role: role, -1 15072 out: isException -1 15073 }); -1 15074 }).map(function(candidate) { -1 15075 return candidate.name.toString(); 13985 15076 }); -1 15077 if (unsupportedAttrs.length) { -1 15078 this.data(unsupportedAttrs); -1 15079 return true; -1 15080 } -1 15081 return false; -1 15082 } -1 15083 }, { -1 15084 id: 'unsupportedrole', -1 15085 evaluate: function evaluate(node, options, virtualNode, context) { -1 15086 return axe.commons.aria.isUnsupportedRole(axe.commons.aria.getRole(node)); 13986 15087 } 13987 15088 }, { 13988 15089 id: 'aria-valid-attr-value', @@ -14047,8 +15148,8 @@ module.exports = { 14047 15148 search: false 14048 15149 }; 14049 15150 function validScrollableTagName(node) {14050 -1 var tagName = node.tagName.toUpperCase();14051 -1 return VALID_TAG_NAMES_FOR_SCROLLABLE_REGIONS[tagName] || false;-1 15151 var nodeName = node.nodeName.toUpperCase(); -1 15152 return VALID_TAG_NAMES_FOR_SCROLLABLE_REGIONS[nodeName] || false; 14052 15153 } 14053 15154 function validScrollableRole(node) { 14054 15155 var role = node.getAttribute('role'); @@ -14066,7 +15167,7 @@ module.exports = { 14066 15167 }, { 14067 15168 id: 'color-contrast', 14068 15169 evaluate: function evaluate(node, options, virtualNode, context) {14069 -1 var _axe$commons4 = axe.commons, dom = _axe$commons4.dom, color = _axe$commons4.color, text = _axe$commons4.text;-1 15170 var _axe$commons6 = axe.commons, dom = _axe$commons6.dom, color = _axe$commons6.color, text = _axe$commons6.text; 14070 15171 if (!dom.isVisible(node, false)) { 14071 15172 return true; 14072 15173 } @@ -14115,7 +15216,7 @@ module.exports = { 14115 15216 }, { 14116 15217 id: 'link-in-text-block', 14117 15218 evaluate: function evaluate(node, options, virtualNode, context) {14118 -1 var _axe$commons5 = axe.commons, color = _axe$commons5.color, dom = _axe$commons5.dom;-1 15219 var _axe$commons7 = axe.commons, color = _axe$commons7.color, dom = _axe$commons7.dom; 14119 15220 function getContrast(color1, color2) { 14120 15221 var c1lum = color1.getRelativeLuminance(); 14121 15222 var c2lum = color2.getRelativeLuminance(); @@ -14185,7 +15286,7 @@ module.exports = { 14185 15286 bday: [ 'text', 'search', 'date' ], 14186 15287 email: [ 'text', 'search', 'email' ], 14187 15288 'cc-exp': [ 'text', 'search', 'month' ],14188 -1 'street-address': [],-1 15289 'street-address': [ 'text' ], 14189 15290 tel: [ 'text', 'search', 'tel' ], 14190 15291 'cc-exp-month': number, 14191 15292 'cc-exp-year': number, @@ -14216,10 +15317,12 @@ module.exports = { 14216 15317 return true; 14217 15318 } 14218 15319 var allowedTypes = allowedTypesMap[purposeTerm]; -1 15320 var type = node.hasAttribute('type') ? axe.commons.text.sanitize(node.getAttribute('type')).toLowerCase() : 'text'; -1 15321 type = axe.utils.validInputTypes().includes(type) ? type : 'text'; 14219 15322 if (typeof allowedTypes === 'undefined') {14220 -1 return node.type === 'text';-1 15323 return type === 'text'; 14221 15324 }14222 -1 return allowedTypes.includes(node.type);-1 15325 return allowedTypes.includes(type); 14223 15326 } 14224 15327 }, { 14225 15328 id: 'autocomplete-valid', @@ -14232,7 +15335,7 @@ module.exports = { 14232 15335 evaluate: function evaluate(node, options, virtualNode, context) { 14233 15336 var failureCode, self = this; 14234 15337 function getUnrelatedElements(parent, name) {14235 -1 return axe.commons.utils.toArray(parent.querySelectorAll('select,textarea,button,input:not([name="' + name + '"]):not([type="hidden"])'));-1 15338 return axe.utils.toArray(parent.querySelectorAll('select,textarea,button,input:not([name="' + name + '"]):not([type="hidden"])')); 14236 15339 } 14237 15340 function checkFieldset(group, name) { 14238 15341 var firstNode = group.firstElementChild; @@ -14273,14 +15376,14 @@ module.exports = { 14273 15376 return true; 14274 15377 } 14275 15378 function spliceCurrentNode(nodes, current) {14276 -1 return axe.commons.utils.toArray(nodes).filter(function(candidate) {-1 15379 return axe.utils.toArray(nodes).filter(function(candidate) { 14277 15380 return candidate !== current; 14278 15381 }); 14279 15382 } 14280 15383 function runCheck(virtualNode) {14281 -1 var name = axe.commons.utils.escapeSelector(virtualNode.actualNode.name);-1 15384 var name = axe.utils.escapeSelector(virtualNode.actualNode.name); 14282 15385 var root = axe.commons.dom.getRootNode(virtualNode.actualNode);14283 -1 var matchingNodes = root.querySelectorAll('input[type="' + axe.commons.utils.escapeSelector(virtualNode.actualNode.type) + '"][name="' + name + '"]');-1 15386 var matchingNodes = root.querySelectorAll('input[type="' + axe.utils.escapeSelector(virtualNode.actualNode.type) + '"][name="' + name + '"]'); 14284 15387 if (matchingNodes.length < 2) { 14285 15388 return true; 14286 15389 } @@ -14334,26 +15437,57 @@ module.exports = { 14334 15437 }, { 14335 15438 id: 'group-labelledby', 14336 15439 evaluate: function evaluate(node, options, virtualNode, context) {14337 -1 this.data({14338 -1 name: node.getAttribute('name'),14339 -1 type: node.getAttribute('type')14340 -1 });14341 -1 var doc = axe.commons.dom.getRootNode(node);14342 -1 var matchingNodes = doc.querySelectorAll('input[type="' + axe.commons.utils.escapeSelector(node.type) + '"][name="' + axe.commons.utils.escapeSelector(node.name) + '"]');-1 15440 var _axe$commons8 = axe.commons, dom = _axe$commons8.dom, text = _axe$commons8.text; -1 15441 var type = axe.utils.escapeSelector(node.type); -1 15442 var name = axe.utils.escapeSelector(node.name); -1 15443 var doc = dom.getRootNode(node); -1 15444 var data = { -1 15445 name: node.name, -1 15446 type: node.type -1 15447 }; -1 15448 var matchingNodes = Array.from(doc.querySelectorAll('input[type="' + type + '"][name="' + name + '"]')); 14343 15449 if (matchingNodes.length <= 1) { -1 15450 this.data(data); 14344 15451 return true; 14345 15452 }14346 -1 return [].map.call(matchingNodes, function(m) {14347 -1 var l = m.getAttribute('aria-labelledby');14348 -1 return l ? l.split(/\s+/) : [];14349 -1 }).reduce(function(prev, curr) {14350 -1 return prev.filter(function(n) {14351 -1 return curr.includes(n);-1 15453 var sharedLabels = dom.idrefs(node, 'aria-labelledby').filter(function(label) { -1 15454 return !!label; -1 15455 }); -1 15456 var uniqueLabels = sharedLabels.slice(); -1 15457 matchingNodes.forEach(function(groupItem) { -1 15458 if (groupItem === node) { -1 15459 return; -1 15460 } -1 15461 var labels = dom.idrefs(groupItem, 'aria-labelledby').filter(function(newLabel) { -1 15462 return newLabel; 14352 15463 });14353 -1 }).filter(function(n) {14354 -1 var labelNode = doc.getElementById(n);14355 -1 return labelNode && axe.commons.text.accessibleText(labelNode, true);14356 -1 }).length !== 0;-1 15464 sharedLabels = sharedLabels.filter(function(sharedLabel) { -1 15465 return labels.includes(sharedLabel); -1 15466 }); -1 15467 uniqueLabels = uniqueLabels.filter(function(uniqueLabel) { -1 15468 return !labels.includes(uniqueLabel); -1 15469 }); -1 15470 }); -1 15471 var accessibleTextOptions = { -1 15472 inLabelledByContext: true -1 15473 }; -1 15474 uniqueLabels = uniqueLabels.filter(function(labelNode) { -1 15475 return text.accessibleText(labelNode, accessibleTextOptions); -1 15476 }); -1 15477 sharedLabels = sharedLabels.filter(function(labelNode) { -1 15478 return text.accessibleText(labelNode, accessibleTextOptions); -1 15479 }); -1 15480 if (uniqueLabels.length > 0 && sharedLabels.length > 0) { -1 15481 this.data(data); -1 15482 return true; -1 15483 } -1 15484 if (uniqueLabels.length > 0 && sharedLabels.length === 0) { -1 15485 data.failureCode = 'no-shared-label'; -1 15486 } else if (uniqueLabels.length === 0 && sharedLabels.length > 0) { -1 15487 data.failureCode = 'no-unique-label'; -1 15488 } -1 15489 this.data(data); -1 15490 return false; 14357 15491 }, 14358 15492 after: function after(results, options) { 14359 15493 var seen = {}; @@ -14398,6 +15532,25 @@ module.exports = { 14398 15532 }); 14399 15533 } 14400 15534 }, { -1 15535 id: 'focusable-disabled', -1 15536 evaluate: function evaluate(node, options, virtualNode, context) { -1 15537 var elementsThatCanBeDisabled = [ 'BUTTON', 'FIELDSET', 'INPUT', 'SELECT', 'TEXTAREA' ]; -1 15538 var tabbableElements = virtualNode.tabbableElements; -1 15539 if (!tabbableElements || !tabbableElements.length) { -1 15540 return true; -1 15541 } -1 15542 var relatedNodes = tabbableElements.reduce(function(out, _ref3) { -1 15543 var el = _ref3.actualNode; -1 15544 var nodeName = el.nodeName.toUpperCase(); -1 15545 if (elementsThatCanBeDisabled.includes(nodeName)) { -1 15546 out.push(el); -1 15547 } -1 15548 return out; -1 15549 }, []); -1 15550 this.relatedNodes(relatedNodes); -1 15551 return relatedNodes.length === 0; -1 15552 } -1 15553 }, { 14401 15554 id: 'focusable-no-name', 14402 15555 evaluate: function evaluate(node, options, virtualNode, context) { 14403 15556 var tabIndex = node.getAttribute('tabindex'), inFocusOrder = axe.commons.dom.isFocusable(node) && tabIndex > -1; @@ -14407,6 +15560,25 @@ module.exports = { 14407 15560 return !axe.commons.text.accessibleTextVirtual(virtualNode); 14408 15561 } 14409 15562 }, { -1 15563 id: 'focusable-not-tabbable', -1 15564 evaluate: function evaluate(node, options, virtualNode, context) { -1 15565 var elementsThatCanBeDisabled = [ 'BUTTON', 'FIELDSET', 'INPUT', 'SELECT', 'TEXTAREA' ]; -1 15566 var tabbableElements = virtualNode.tabbableElements; -1 15567 if (!tabbableElements || !tabbableElements.length) { -1 15568 return true; -1 15569 } -1 15570 var relatedNodes = tabbableElements.reduce(function(out, _ref4) { -1 15571 var el = _ref4.actualNode; -1 15572 var nodeName = el.nodeName.toUpperCase(); -1 15573 if (!elementsThatCanBeDisabled.includes(nodeName)) { -1 15574 out.push(el); -1 15575 } -1 15576 return out; -1 15577 }, []); -1 15578 this.relatedNodes(relatedNodes); -1 15579 return relatedNodes.length === 0; -1 15580 } -1 15581 }, { 14410 15582 id: 'landmark-is-top-level', 14411 15583 evaluate: function evaluate(node, options, virtualNode, context) { 14412 15584 var landmarks = axe.commons.aria.getRolesByType('landmark'); @@ -14416,7 +15588,7 @@ module.exports = { 14416 15588 }); 14417 15589 while (parent) { 14418 15590 var role = parent.getAttribute('role');14419 -1 if (!role && parent.tagName.toLowerCase() !== 'form') {-1 15591 if (!role && parent.nodeName.toUpperCase() !== 'FORM') { 14420 15592 role = axe.commons.aria.implicitRole(parent); 14421 15593 } 14422 15594 if (role && landmarks.includes(role)) { @@ -14546,14 +15718,20 @@ module.exports = { 14546 15718 return node.tabIndex <= 0; 14547 15719 } 14548 15720 }, { -1 15721 id: 'alt-space-value', -1 15722 evaluate: function evaluate(node, options, virtualNode, context) { -1 15723 var validAttrValue = /^\s+$/.test(node.getAttribute('alt')); -1 15724 return node.hasAttribute('alt') && validAttrValue; -1 15725 } -1 15726 }, { 14549 15727 id: 'duplicate-img-label', 14550 15728 evaluate: function evaluate(node, options, virtualNode, context) { 14551 15729 var text = axe.commons.text.visibleVirtual(virtualNode, true).toLowerCase(); 14552 15730 if (text === '') { 14553 15731 return false; 14554 15732 }14555 -1 var images = axe.utils.querySelectorAll(virtualNode, 'img').filter(function(_ref2) {14556 -1 var actualNode = _ref2.actualNode;-1 15733 var images = axe.utils.querySelectorAll(virtualNode, 'img').filter(function(_ref5) { -1 15734 var actualNode = _ref5.actualNode; 14557 15735 return axe.commons.dom.isVisible(actualNode) && ![ 'none', 'presentation' ].includes(actualNode.getAttribute('role')); 14558 15736 }); 14559 15737 return images.some(function(img) { @@ -14565,7 +15743,7 @@ module.exports = { 14565 15743 evaluate: function evaluate(node, options, virtualNode, context) { 14566 15744 if (node.getAttribute('id')) { 14567 15745 var root = axe.commons.dom.getRootNode(node);14568 -1 var id = axe.commons.utils.escapeSelector(node.getAttribute('id'));-1 15746 var id = axe.utils.escapeSelector(node.getAttribute('id')); 14569 15747 var label = root.querySelector('label[for="' + id + '"]'); 14570 15748 if (label) { 14571 15749 if (!axe.commons.dom.isVisible(label)) { @@ -14601,10 +15779,12 @@ module.exports = { 14601 15779 evaluate: function evaluate(node, options, virtualNode, context) { 14602 15780 if (node.getAttribute('id')) { 14603 15781 var root = axe.commons.dom.getRootNode(node);14604 -1 var id = axe.commons.utils.escapeSelector(node.getAttribute('id'));-1 15782 var id = axe.utils.escapeSelector(node.getAttribute('id')); 14605 15783 var label = root.querySelector('label[for="' + id + '"]');14606 -1 if (label && !axe.commons.dom.isVisible(label)) {14607 -1 return true;-1 15784 if (label && !axe.commons.dom.isVisible(label, true)) { -1 15785 var name = axe.commons.text.accessibleTextVirtual(virtualNode).trim(); -1 15786 var isNameEmpty = name === ''; -1 15787 return isNameEmpty; 14608 15788 } 14609 15789 } 14610 15790 return false; @@ -14612,16 +15792,52 @@ module.exports = { 14612 15792 }, { 14613 15793 id: 'implicit-label', 14614 15794 evaluate: function evaluate(node, options, virtualNode, context) {14615 -1 var label = axe.commons.dom.findUpVirtual(virtualNode, 'label');-1 15795 var _axe$commons9 = axe.commons, dom = _axe$commons9.dom, text = _axe$commons9.text; -1 15796 var label = dom.findUpVirtual(virtualNode, 'label'); 14616 15797 if (label) {14617 -1 return !!axe.commons.text.accessibleTextVirtual(label);-1 15798 return !!text.accessibleText(label, { -1 15799 inControlContext: true -1 15800 }); 14618 15801 } 14619 15802 return false; 14620 15803 } 14621 15804 }, { -1 15805 id: 'label-content-name-mismatch', -1 15806 evaluate: function evaluate(node, options, virtualNode, context) { -1 15807 var text = axe.commons.text; -1 15808 var accText = text.accessibleText(node).toLowerCase(); -1 15809 if (text.isHumanInterpretable(accText) < 1) { -1 15810 return undefined; -1 15811 } -1 15812 var visibleText = text.sanitize(text.visibleVirtual(virtualNode)).toLowerCase(); -1 15813 if (text.isHumanInterpretable(visibleText) < 1) { -1 15814 if (isStringContained(visibleText, accText)) { -1 15815 return true; -1 15816 } -1 15817 return undefined; -1 15818 } -1 15819 return isStringContained(visibleText, accText); -1 15820 function isStringContained(compare, compareWith) { -1 15821 var curatedCompareWith = curateString(compareWith); -1 15822 var curatedCompare = curateString(compare); -1 15823 if (!curatedCompareWith || !curatedCompare) { -1 15824 return false; -1 15825 } -1 15826 return curatedCompareWith.includes(curatedCompare); -1 15827 } -1 15828 function curateString(str) { -1 15829 var noUnicodeStr = text.removeUnicode(str, { -1 15830 emoji: true, -1 15831 nonBmp: true, -1 15832 punctuations: true -1 15833 }); -1 15834 return text.sanitize(noUnicodeStr); -1 15835 } -1 15836 } -1 15837 }, { 14622 15838 id: 'multiple-label', 14623 15839 evaluate: function evaluate(node, options, virtualNode, context) {14624 -1 var id = axe.commons.utils.escapeSelector(node.getAttribute('id'));-1 15840 var id = axe.utils.escapeSelector(node.getAttribute('id')); 14625 15841 var labels = Array.from(document.querySelectorAll('label[for="' + id + '"]')); 14626 15842 var parent = node.parentNode; 14627 15843 if (labels.length) { @@ -14632,7 +15848,7 @@ module.exports = { 14632 15848 }); 14633 15849 } 14634 15850 while (parent) {14635 -1 if (parent.tagName === 'LABEL' && labels.indexOf(parent) === -1) {-1 15851 if (parent.nodeName.toUpperCase() === 'LABEL' && labels.indexOf(parent) === -1) { 14636 15852 labels.push(parent); 14637 15853 } 14638 15854 parent = parent.parentNode; @@ -14655,13 +15871,13 @@ module.exports = { 14655 15871 id: 'valid-lang', 14656 15872 evaluate: function evaluate(node, options, virtualNode, context) { 14657 15873 var langs, invalid;14658 -1 langs = (options ? options : axe.commons.utils.validLangs()).map(axe.commons.utils.getBaseLang);-1 15874 langs = (options ? options : axe.utils.validLangs()).map(axe.utils.getBaseLang); 14659 15875 invalid = [ 'lang', 'xml:lang' ].reduce(function(invalid, langAttr) { 14660 15876 var langVal = node.getAttribute(langAttr); 14661 15877 if (typeof langVal !== 'string') { 14662 15878 return invalid; 14663 15879 }14664 -1 var baselangVal = axe.commons.utils.getBaseLang(langVal);-1 15880 var baselangVal = axe.utils.getBaseLang(langVal); 14665 15881 if (baselangVal !== '' && langs.indexOf(baselangVal) === -1) { 14666 15882 invalid.push(langAttr + '="' + node.getAttribute(langAttr) + '"'); 14667 15883 } @@ -14676,7 +15892,7 @@ module.exports = { 14676 15892 }, { 14677 15893 id: 'xml-lang-mismatch', 14678 15894 evaluate: function evaluate(node, options, virtualNode, context) {14679 -1 var getBaseLang = axe.commons.utils.getBaseLang;-1 15895 var getBaseLang = axe.utils.getBaseLang; 14680 15896 var primaryLangValue = getBaseLang(node.getAttribute('lang')); 14681 15897 var primaryXmlLangValue = getBaseLang(node.getAttribute('xml:lang')); 14682 15898 return primaryLangValue === primaryXmlLangValue; @@ -14686,27 +15902,25 @@ module.exports = { 14686 15902 evaluate: function evaluate(node, options, virtualNode, context) { 14687 15903 var parent = axe.commons.dom.getComposedParent(node); 14688 15904 var parentTagName = parent.nodeName.toUpperCase(); -1 15905 var parentRole = axe.commons.aria.getRole(parent, { -1 15906 noImplicit: true -1 15907 }); -1 15908 if (parentTagName === 'DIV' && [ 'presentation', 'none', null ].includes(parentRole)) { -1 15909 parent = axe.commons.dom.getComposedParent(parent); -1 15910 parentTagName = parent.nodeName.toUpperCase(); -1 15911 parentRole = axe.commons.aria.getRole(parent, { -1 15912 noImplicit: true -1 15913 }); -1 15914 } 14689 15915 if (parentTagName !== 'DL') { 14690 15916 return false; 14691 15917 }14692 -1 var parentRole = (parent.getAttribute('role') || '').toLowerCase();14693 -1 if (!parentRole || !axe.commons.aria.isValidRole(parentRole)) {14694 -1 return true;14695 -1 }14696 -1 if (parentRole === 'list') {-1 15918 if (!parentRole || parentRole === 'list') { 14697 15919 return true; 14698 15920 } 14699 15921 return false; 14700 15922 } 14701 15923 }, {14702 -1 id: 'has-listitem',14703 -1 evaluate: function evaluate(node, options, virtualNode, context) {14704 -1 return virtualNode.children.every(function(_ref3) {14705 -1 var actualNode = _ref3.actualNode;14706 -1 return actualNode.nodeName.toUpperCase() !== 'LI';14707 -1 });14708 -1 }14709 -1 }, {14710 15924 id: 'listitem', 14711 15925 evaluate: function evaluate(node, options, virtualNode, context) { 14712 15926 var parent = axe.commons.dom.getComposedParent(node); @@ -14726,7 +15940,7 @@ module.exports = { 14726 15940 }, { 14727 15941 id: 'only-dlitems', 14728 15942 evaluate: function evaluate(node, options, virtualNode, context) {14729 -1 var _axe$commons6 = axe.commons, dom = _axe$commons6.dom, aria = _axe$commons6.aria;-1 15943 var _axe$commons10 = axe.commons, dom = _axe$commons10.dom, aria = _axe$commons10.aria; 14730 15944 var ALLOWED_ROLES = [ 'definition', 'term', 'list' ]; 14731 15945 var base = { 14732 15946 badNodes: [], @@ -14778,8 +15992,8 @@ module.exports = { 14778 15992 hasListItem: false, 14779 15993 liItemsWithRole: 0 14780 15994 };14781 -1 var out = virtualNode.children.reduce(function(out, _ref4) {14782 -1 var actualNode = _ref4.actualNode;-1 15995 var out = virtualNode.children.reduce(function(out, _ref6) { -1 15996 var actualNode = _ref6.actualNode; 14783 15997 var tagName = actualNode.nodeName.toUpperCase(); 14784 15998 if (actualNode.nodeType === 1 && dom.isVisible(actualNode, true, false)) { 14785 15999 var role = (actualNode.getAttribute('role') || '').toLowerCase(); @@ -14802,8 +16016,8 @@ module.exports = { 14802 16016 } 14803 16017 return out; 14804 16018 }, base);14805 -1 var virtualNodeChildrenOfTypeLi = virtualNode.children.filter(function(_ref5) {14806 -1 var actualNode = _ref5.actualNode;-1 16019 var virtualNodeChildrenOfTypeLi = virtualNode.children.filter(function(_ref7) { -1 16020 var actualNode = _ref7.actualNode; 14807 16021 return actualNode.nodeName.toUpperCase() === 'LI'; 14808 16022 }); 14809 16023 var allLiItemsHaveRole = out.liItemsWithRole > 0 && virtualNodeChildrenOfTypeLi.length === out.liItemsWithRole; @@ -14839,8 +16053,8 @@ module.exports = { 14839 16053 id: 'caption', 14840 16054 evaluate: function evaluate(node, options, virtualNode, context) { 14841 16055 var tracks = axe.utils.querySelectorAll(virtualNode, 'track');14842 -1 var hasCaptions = tracks.some(function(_ref6) {14843 -1 var actualNode = _ref6.actualNode;-1 16056 var hasCaptions = tracks.some(function(_ref8) { -1 16057 var actualNode = _ref8.actualNode; 14844 16058 return (actualNode.getAttribute('kind') || '').toLowerCase() === 'captions'; 14845 16059 }); 14846 16060 return hasCaptions ? false : undefined; @@ -14849,8 +16063,8 @@ module.exports = { 14849 16063 id: 'description', 14850 16064 evaluate: function evaluate(node, options, virtualNode, context) { 14851 16065 var tracks = axe.utils.querySelectorAll(virtualNode, 'track');14852 -1 var hasDescriptions = tracks.some(function(_ref7) {14853 -1 var actualNode = _ref7.actualNode;-1 16066 var hasDescriptions = tracks.some(function(_ref9) { -1 16067 var actualNode = _ref9.actualNode; 14854 16068 return (actualNode.getAttribute('kind') || '').toLowerCase() === 'descriptions'; 14855 16069 }); 14856 16070 return hasDescriptions ? false : undefined; @@ -14882,12 +16096,12 @@ module.exports = { 14882 16096 }, { 14883 16097 id: 'css-orientation-lock', 14884 16098 evaluate: function evaluate(node, options, virtualNode, context) {14885 -1 var _ref8 = context || {}, _ref8$cssom = _ref8.cssom, cssom = _ref8$cssom === undefined ? undefined : _ref8$cssom;-1 16099 var _ref10 = context || {}, _ref10$cssom = _ref10.cssom, cssom = _ref10$cssom === undefined ? undefined : _ref10$cssom; 14886 16100 if (!cssom || !cssom.length) { 14887 16101 return undefined; 14888 16102 }14889 -1 var rulesGroupByDocumentFragment = cssom.reduce(function(out, _ref9) {14890 -1 var sheet = _ref9.sheet, root = _ref9.root, shadowId = _ref9.shadowId;-1 16103 var rulesGroupByDocumentFragment = cssom.reduce(function(out, _ref11) { -1 16104 var sheet = _ref11.sheet, root = _ref11.root, shadowId = _ref11.shadowId; 14891 16105 var key = shadowId ? shadowId : 'topDocument'; 14892 16106 if (!out[key]) { 14893 16107 out[key] = { @@ -15026,7 +16240,7 @@ module.exports = { 15026 16240 this.data(parseInt(ariaHeadingLevel, 10)); 15027 16241 return true; 15028 16242 }15029 -1 var headingLevel = node.tagName.match(/H(\d)/);-1 16243 var headingLevel = node.nodeName.toUpperCase().match(/H(\d)/); 15030 16244 if (headingLevel) { 15031 16245 this.data(parseInt(headingLevel[1], 10)); 15032 16246 return true; @@ -15158,7 +16372,7 @@ module.exports = { 15158 16372 }, { 15159 16373 id: 'region', 15160 16374 evaluate: function evaluate(node, options, virtualNode, context) {15161 -1 var _axe$commons7 = axe.commons, dom = _axe$commons7.dom, aria = _axe$commons7.aria;-1 16375 var _axe$commons11 = axe.commons, dom = _axe$commons11.dom, aria = _axe$commons11.aria; 15162 16376 function getSkiplink(virtualNode) { 15163 16377 var firstLink = axe.utils.querySelectorAll(virtualNode, 'a[href]')[0]; 15164 16378 if (firstLink && axe.commons.dom.getElementByReference(firstLink.actualNode, 'href')) { @@ -15189,7 +16403,7 @@ module.exports = { 15189 16403 } 15190 16404 return implicitLandmarks.some(function(implicitSelector) { 15191 16405 var matches = axe.utils.matchesSelector(node, implicitSelector);15192 -1 if (node.tagName.toLowerCase() === 'form') {-1 16406 if (node.nodeName.toUpperCase() === 'FORM') { 15193 16407 var titleAttr = node.getAttribute('title'); 15194 16408 var title = titleAttr && titleAttr.trim() !== '' ? axe.commons.text.sanitize(titleAttr) : null; 15195 16409 return matches && (!!aria.labelVirtual(virtualNode) || !!title); @@ -15204,8 +16418,8 @@ module.exports = { 15204 16418 } else if (dom.hasContent(node, true)) { 15205 16419 return [ node ]; 15206 16420 } else {15207 -1 return virtualNode.children.filter(function(_ref10) {15208 -1 var actualNode = _ref10.actualNode;-1 16421 return virtualNode.children.filter(function(_ref12) { -1 16422 var actualNode = _ref12.actualNode; 15209 16423 return actualNode.nodeType === 1; 15210 16424 }).map(findRegionlessElms).reduce(function(a, b) { 15211 16425 return a.concat(b); @@ -15253,7 +16467,7 @@ module.exports = { 15253 16467 return true; 15254 16468 } 15255 16469 var root = axe.commons.dom.getRootNode(node);15256 -1 var matchingNodes = Array.from(root.querySelectorAll('[id="' + axe.commons.utils.escapeSelector(id) + '"]')).filter(function(foundNode) {-1 16470 var matchingNodes = Array.from(root.querySelectorAll('[id="' + axe.utils.escapeSelector(id) + '"]')).filter(function(foundNode) { 15257 16471 return foundNode !== node; 15258 16472 }); 15259 16473 if (matchingNodes.length) { @@ -15280,7 +16494,7 @@ module.exports = { 15280 16494 return true; 15281 16495 } 15282 16496 var root = axe.commons.dom.getRootNode(node);15283 -1 var matchingNodes = Array.from(root.querySelectorAll('[id="' + axe.commons.utils.escapeSelector(id) + '"]')).filter(function(foundNode) {-1 16497 var matchingNodes = Array.from(root.querySelectorAll('[id="' + axe.utils.escapeSelector(id) + '"]')).filter(function(foundNode) { 15284 16498 return foundNode !== node; 15285 16499 }); 15286 16500 if (matchingNodes.length) { @@ -15307,7 +16521,7 @@ module.exports = { 15307 16521 return true; 15308 16522 } 15309 16523 var root = axe.commons.dom.getRootNode(node);15310 -1 var matchingNodes = Array.from(root.querySelectorAll('[id="' + axe.commons.utils.escapeSelector(id) + '"]')).filter(function(foundNode) {-1 16524 var matchingNodes = Array.from(root.querySelectorAll('[id="' + axe.utils.escapeSelector(id) + '"]')).filter(function(foundNode) { 15311 16525 return foundNode !== node; 15312 16526 }); 15313 16527 if (matchingNodes.length) { @@ -15329,16 +16543,14 @@ module.exports = { 15329 16543 }, { 15330 16544 id: 'aria-label', 15331 16545 evaluate: function evaluate(node, options, virtualNode, context) {15332 -1 var label = node.getAttribute('aria-label');15333 -1 return !!(label ? axe.commons.text.sanitize(label).trim() : '');-1 16546 var _axe$commons12 = axe.commons, text = _axe$commons12.text, aria = _axe$commons12.aria; -1 16547 return !!text.sanitize(aria.arialabelText(node)); 15334 16548 } 15335 16549 }, { 15336 16550 id: 'aria-labelledby', 15337 16551 evaluate: function evaluate(node, options, virtualNode, context) {15338 -1 var getIdRefs = axe.commons.dom.idrefs;15339 -1 return getIdRefs(node, 'aria-labelledby').some(function(elm) {15340 -1 return elm && axe.commons.text.accessibleText(elm, true);15341 -1 });-1 16552 var _axe$commons13 = axe.commons, text = _axe$commons13.text, aria = _axe$commons13.aria; -1 16553 return !!text.sanitize(aria.arialabelledbyText(node)); 15342 16554 } 15343 16555 }, { 15344 16556 id: 'button-has-visible-text', @@ -15402,8 +16614,8 @@ module.exports = { 15402 16614 }, { 15403 16615 id: 'non-empty-title', 15404 16616 evaluate: function evaluate(node, options, virtualNode, context) {15405 -1 var title = node.getAttribute('title');15406 -1 return !!(title ? axe.commons.text.sanitize(title).trim() : '');-1 16617 var text = axe.commons.text; -1 16618 return !!text.sanitize(text.titleText(node)); 15407 16619 } 15408 16620 }, { 15409 16621 id: 'non-empty-value', @@ -15601,7 +16813,7 @@ module.exports = { 15601 16813 id: 'hidden-content', 15602 16814 evaluate: function evaluate(node, options, virtualNode, context) { 15603 16815 var whitelist = [ 'SCRIPT', 'HEAD', 'TITLE', 'NOSCRIPT', 'STYLE', 'TEMPLATE' ];15604 -1 if (!whitelist.includes(node.tagName.toUpperCase()) && axe.commons.dom.hasContentVirtual(virtualNode)) {-1 16816 if (!whitelist.includes(node.nodeName.toUpperCase()) && axe.commons.dom.hasContentVirtual(virtualNode)) { 15605 16817 var styles = window.getComputedStyle(node); 15606 16818 if (styles.getPropertyValue('display') === 'none') { 15607 16819 return undefined; @@ -15618,228 +16830,256 @@ module.exports = { 15618 16830 } ], 15619 16831 commons: function() { 15620 16832 var commons = {};15621 -1 var aria = commons.aria = {}, lookupTable = aria.lookupTable = {};-1 16833 var aria = commons.aria = {}; -1 16834 var lookupTable = aria.lookupTable = {}; -1 16835 var isNull = function isNull(value) { -1 16836 return value === null; -1 16837 }; -1 16838 var isNotNull = function isNotNull(value) { -1 16839 return value !== null; -1 16840 }; 15622 16841 lookupTable.attributes = { 15623 16842 'aria-activedescendant': {15624 -1 type: 'idref'-1 16843 type: 'idref', -1 16844 allowEmpty: true, -1 16845 unsupported: false 15625 16846 }, 15626 16847 'aria-atomic': { 15627 16848 type: 'boolean',15628 -1 values: [ 'true', 'false' ]-1 16849 values: [ 'true', 'false' ], -1 16850 unsupported: false 15629 16851 }, 15630 16852 'aria-autocomplete': { 15631 16853 type: 'nmtoken',15632 -1 values: [ 'inline', 'list', 'both', 'none' ]-1 16854 values: [ 'inline', 'list', 'both', 'none' ], -1 16855 unsupported: false 15633 16856 }, 15634 16857 'aria-busy': { 15635 16858 type: 'boolean',15636 -1 values: [ 'true', 'false' ]-1 16859 values: [ 'true', 'false' ], -1 16860 unsupported: false 15637 16861 }, 15638 16862 'aria-checked': { 15639 16863 type: 'nmtoken',15640 -1 values: [ 'true', 'false', 'mixed', 'undefined' ]-1 16864 values: [ 'true', 'false', 'mixed', 'undefined' ], -1 16865 unsupported: false 15641 16866 }, 15642 16867 'aria-colcount': {15643 -1 type: 'int'-1 16868 type: 'int', -1 16869 unsupported: false 15644 16870 }, 15645 16871 'aria-colindex': {15646 -1 type: 'int'-1 16872 type: 'int', -1 16873 unsupported: false 15647 16874 }, 15648 16875 'aria-colspan': {15649 -1 type: 'int'-1 16876 type: 'int', -1 16877 unsupported: false 15650 16878 }, 15651 16879 'aria-controls': {15652 -1 type: 'idrefs'-1 16880 type: 'idrefs', -1 16881 allowEmpty: true, -1 16882 unsupported: false 15653 16883 }, 15654 16884 'aria-current': { 15655 16885 type: 'nmtoken',15656 -1 values: [ 'page', 'step', 'location', 'date', 'time', 'true', 'false' ]-1 16886 allowEmpty: true, -1 16887 values: [ 'page', 'step', 'location', 'date', 'time', 'true', 'false' ], -1 16888 unsupported: false 15657 16889 }, 15658 16890 'aria-describedby': {15659 -1 type: 'idrefs'-1 16891 type: 'idrefs', -1 16892 allowEmpty: true, -1 16893 unsupported: false -1 16894 }, -1 16895 'aria-describedat': { -1 16896 unsupported: true, -1 16897 unstandardized: true -1 16898 }, -1 16899 'aria-details': { -1 16900 unsupported: true 15660 16901 }, 15661 16902 'aria-disabled': { 15662 16903 type: 'boolean',15663 -1 values: [ 'true', 'false' ]-1 16904 values: [ 'true', 'false' ], -1 16905 unsupported: false 15664 16906 }, 15665 16907 'aria-dropeffect': { 15666 16908 type: 'nmtokens',15667 -1 values: [ 'copy', 'move', 'reference', 'execute', 'popup', 'none' ]-1 16909 values: [ 'copy', 'move', 'reference', 'execute', 'popup', 'none' ], -1 16910 unsupported: false 15668 16911 }, 15669 16912 'aria-errormessage': {15670 -1 type: 'idref'-1 16913 type: 'idref', -1 16914 allowEmpty: true, -1 16915 unsupported: false 15671 16916 }, 15672 16917 'aria-expanded': { 15673 16918 type: 'nmtoken',15674 -1 values: [ 'true', 'false', 'undefined' ]-1 16919 values: [ 'true', 'false', 'undefined' ], -1 16920 unsupported: false 15675 16921 }, 15676 16922 'aria-flowto': {15677 -1 type: 'idrefs'-1 16923 type: 'idrefs', -1 16924 allowEmpty: true, -1 16925 unsupported: false 15678 16926 }, 15679 16927 'aria-grabbed': { 15680 16928 type: 'nmtoken',15681 -1 values: [ 'true', 'false', 'undefined' ]-1 16929 values: [ 'true', 'false', 'undefined' ], -1 16930 unsupported: false 15682 16931 }, 15683 16932 'aria-haspopup': { 15684 16933 type: 'nmtoken',15685 -1 values: [ 'true', 'false', 'menu', 'listbox', 'tree', 'grid', 'dialog' ]-1 16934 allowEmpty: true, -1 16935 values: [ 'true', 'false', 'menu', 'listbox', 'tree', 'grid', 'dialog' ], -1 16936 unsupported: false 15686 16937 }, 15687 16938 'aria-hidden': { 15688 16939 type: 'boolean',15689 -1 values: [ 'true', 'false' ]-1 16940 values: [ 'true', 'false' ], -1 16941 unsupported: false 15690 16942 }, 15691 16943 'aria-invalid': { 15692 16944 type: 'nmtoken',15693 -1 values: [ 'true', 'false', 'spelling', 'grammar' ]-1 16945 allowEmpty: true, -1 16946 values: [ 'true', 'false', 'spelling', 'grammar' ], -1 16947 unsupported: false 15694 16948 }, 15695 16949 'aria-keyshortcuts': {15696 -1 type: 'string'-1 16950 type: 'string', -1 16951 allowEmpty: true, -1 16952 unsupported: false 15697 16953 }, 15698 16954 'aria-label': {15699 -1 type: 'string'-1 16955 type: 'string', -1 16956 allowEmpty: true, -1 16957 unsupported: false 15700 16958 }, 15701 16959 'aria-labelledby': {15702 -1 type: 'idrefs'-1 16960 type: 'idrefs', -1 16961 allowEmpty: true, -1 16962 unsupported: false 15703 16963 }, 15704 16964 'aria-level': {15705 -1 type: 'int'-1 16965 type: 'int', -1 16966 unsupported: false 15706 16967 }, 15707 16968 'aria-live': { 15708 16969 type: 'nmtoken',15709 -1 values: [ 'off', 'polite', 'assertive' ]-1 16970 values: [ 'off', 'polite', 'assertive' ], -1 16971 unsupported: false 15710 16972 }, 15711 16973 'aria-modal': { 15712 16974 type: 'boolean',15713 -1 values: [ 'true', 'false' ]-1 16975 values: [ 'true', 'false' ], -1 16976 unsupported: false 15714 16977 }, 15715 16978 'aria-multiline': { 15716 16979 type: 'boolean',15717 -1 values: [ 'true', 'false' ]-1 16980 values: [ 'true', 'false' ], -1 16981 unsupported: false 15718 16982 }, 15719 16983 'aria-multiselectable': { 15720 16984 type: 'boolean',15721 -1 values: [ 'true', 'false' ]-1 16985 values: [ 'true', 'false' ], -1 16986 unsupported: false 15722 16987 }, 15723 16988 'aria-orientation': { 15724 16989 type: 'nmtoken',15725 -1 values: [ 'horizontal', 'vertical' ]-1 16990 values: [ 'horizontal', 'vertical' ], -1 16991 unsupported: false 15726 16992 }, 15727 16993 'aria-owns': {15728 -1 type: 'idrefs'-1 16994 type: 'idrefs', -1 16995 allowEmpty: true, -1 16996 unsupported: false 15729 16997 }, 15730 16998 'aria-placeholder': {15731 -1 type: 'string'-1 16999 type: 'string', -1 17000 allowEmpty: true, -1 17001 unsupported: false 15732 17002 }, 15733 17003 'aria-posinset': {15734 -1 type: 'int'-1 17004 type: 'int', -1 17005 unsupported: false 15735 17006 }, 15736 17007 'aria-pressed': { 15737 17008 type: 'nmtoken',15738 -1 values: [ 'true', 'false', 'mixed', 'undefined' ]-1 17009 values: [ 'true', 'false', 'mixed', 'undefined' ], -1 17010 unsupported: false 15739 17011 }, 15740 17012 'aria-readonly': { 15741 17013 type: 'boolean',15742 -1 values: [ 'true', 'false' ]-1 17014 values: [ 'true', 'false' ], -1 17015 unsupported: false 15743 17016 }, 15744 17017 'aria-relevant': { 15745 17018 type: 'nmtokens',15746 -1 values: [ 'additions', 'removals', 'text', 'all' ]-1 17019 values: [ 'additions', 'removals', 'text', 'all' ], -1 17020 unsupported: false 15747 17021 }, 15748 17022 'aria-required': { 15749 17023 type: 'boolean',15750 -1 values: [ 'true', 'false' ]-1 17024 values: [ 'true', 'false' ], -1 17025 unsupported: false -1 17026 }, -1 17027 'aria-roledescription': { -1 17028 type: 'string', -1 17029 allowEmpty: true, -1 17030 unsupported: { -1 17031 exceptions: [ 'button', { -1 17032 nodeName: 'input', -1 17033 properties: { -1 17034 type: [ 'button', 'checkbox', 'image', 'radio', 'reset', 'submit' ] -1 17035 } -1 17036 }, 'img', 'select', 'summary' ] -1 17037 } 15751 17038 }, 15752 17039 'aria-rowcount': {15753 -1 type: 'int'-1 17040 type: 'int', -1 17041 unsupported: false 15754 17042 }, 15755 17043 'aria-rowindex': {15756 -1 type: 'int'-1 17044 type: 'int', -1 17045 unsupported: false 15757 17046 }, 15758 17047 'aria-rowspan': {15759 -1 type: 'int'-1 17048 type: 'int', -1 17049 unsupported: false 15760 17050 }, 15761 17051 'aria-selected': { 15762 17052 type: 'nmtoken',15763 -1 values: [ 'true', 'false', 'undefined' ]-1 17053 values: [ 'true', 'false', 'undefined' ], -1 17054 unsupported: false 15764 17055 }, 15765 17056 'aria-setsize': {15766 -1 type: 'int'-1 17057 type: 'int', -1 17058 unsupported: false 15767 17059 }, 15768 17060 'aria-sort': { 15769 17061 type: 'nmtoken',15770 -1 values: [ 'ascending', 'descending', 'other', 'none' ]-1 17062 values: [ 'ascending', 'descending', 'other', 'none' ], -1 17063 unsupported: false 15771 17064 }, 15772 17065 'aria-valuemax': {15773 -1 type: 'decimal'15774 -1 },15775 -1 'aria-valuemin': {15776 -1 type: 'decimal'15777 -1 },15778 -1 'aria-valuenow': {15779 -1 type: 'decimal'15780 -1 },15781 -1 'aria-valuetext': {15782 -1 type: 'string'15783 -1 }15784 -1 };15785 -1 lookupTable.globalAttributes = [ 'aria-atomic', 'aria-busy', 'aria-controls', 'aria-current', 'aria-describedby', 'aria-disabled', 'aria-dropeffect', 'aria-flowto', 'aria-grabbed', 'aria-haspopup', 'aria-hidden', 'aria-invalid', 'aria-keyshortcuts', 'aria-label', 'aria-labelledby', 'aria-live', 'aria-owns', 'aria-relevant' ];15786 -1 var elementConditions = {15787 -1 CANNOT_HAVE_LIST_ATTRIBUTE: function CANNOT_HAVE_LIST_ATTRIBUTE(node) {15788 -1 var nodeAttrs = Array.from(node.attributes).map(function(a) {15789 -1 return a.name.toUpperCase();15790 -1 });15791 -1 if (nodeAttrs.includes('LIST')) {15792 -1 return false;15793 -1 }15794 -1 return true;15795 -1 },15796 -1 CANNOT_HAVE_HREF_ATTRIBUTE: function CANNOT_HAVE_HREF_ATTRIBUTE(node) {15797 -1 var nodeAttrs = Array.from(node.attributes).map(function(a) {15798 -1 return a.name.toUpperCase();15799 -1 });15800 -1 if (nodeAttrs.includes('HREF')) {15801 -1 return false;15802 -1 }15803 -1 return true;15804 -1 },15805 -1 MUST_HAVE_HREF_ATTRIBUTE: function MUST_HAVE_HREF_ATTRIBUTE(node) {15806 -1 if (!node.href) {15807 -1 return false;15808 -1 }15809 -1 return true;-1 17066 type: 'decimal', -1 17067 unsupported: false 15810 17068 },15811 -1 MUST_HAVE_SIZE_ATTRIBUTE_WITH_VALUE_GREATER_THAN_1: function MUST_HAVE_SIZE_ATTRIBUTE_WITH_VALUE_GREATER_THAN_1(node) {15812 -1 var attr = 'SIZE';15813 -1 var nodeAttrs = Array.from(node.attributes).map(function(a) {15814 -1 return a.name.toUpperCase();15815 -1 });15816 -1 if (!nodeAttrs.includes(attr)) {15817 -1 return false;15818 -1 }15819 -1 return Number(node.getAttribute(attr)) > 1;-1 17069 'aria-valuemin': { -1 17070 type: 'decimal', -1 17071 unsupported: false 15820 17072 },15821 -1 MUST_HAVE_ALT_ATTRIBUTE: function MUST_HAVE_ALT_ATTRIBUTE(node) {15822 -1 var attr = 'ALT';15823 -1 var nodeAttrs = Array.from(node.attributes).map(function(a) {15824 -1 return a.name.toUpperCase();15825 -1 });15826 -1 if (!nodeAttrs.includes(attr)) {15827 -1 return false;15828 -1 }15829 -1 return true;-1 17073 'aria-valuenow': { -1 17074 type: 'decimal', -1 17075 unsupported: false 15830 17076 },15831 -1 MUST_HAVE_ALT_ATTRIBUTE_WITH_VALUE: function MUST_HAVE_ALT_ATTRIBUTE_WITH_VALUE(node) {15832 -1 var attr = 'ALT';15833 -1 var nodeAttrs = Array.from(node.attributes).map(function(a) {15834 -1 return a.name.toUpperCase();15835 -1 });15836 -1 if (!nodeAttrs.includes(attr)) {15837 -1 return false;15838 -1 }15839 -1 var attrValue = node.getAttribute(attr);15840 -1 return attrValue && attrValue.length > 0;-1 17077 'aria-valuetext': { -1 17078 type: 'string', -1 17079 unsupported: false 15841 17080 } 15842 17081 }; -1 17082 lookupTable.globalAttributes = [ 'aria-atomic', 'aria-busy', 'aria-controls', 'aria-current', 'aria-describedby', 'aria-disabled', 'aria-dropeffect', 'aria-flowto', 'aria-grabbed', 'aria-haspopup', 'aria-hidden', 'aria-invalid', 'aria-keyshortcuts', 'aria-label', 'aria-labelledby', 'aria-live', 'aria-owns', 'aria-relevant', 'aria-roledescription' ]; 15843 17083 lookupTable.role = { 15844 17084 alert: { 15845 17085 type: 'widget', @@ -15850,7 +17090,7 @@ module.exports = { 15850 17090 nameFrom: [ 'author' ], 15851 17091 context: null, 15852 17092 unsupported: false,15853 -1 allowedElements: [ 'SECTION' ]-1 17093 allowedElements: [ 'section' ] 15854 17094 }, 15855 17095 alertdialog: { 15856 17096 type: 'widget', @@ -15861,7 +17101,7 @@ module.exports = { 15861 17101 nameFrom: [ 'author' ], 15862 17102 context: null, 15863 17103 unsupported: false,15864 -1 allowedElements: [ 'DIALOG', 'SECTION' ]-1 17104 allowedElements: [ 'dialog', 'section' ] 15865 17105 }, 15866 17106 application: { 15867 17107 type: 'landmark', @@ -15872,7 +17112,7 @@ module.exports = { 15872 17112 nameFrom: [ 'author' ], 15873 17113 context: null, 15874 17114 unsupported: false,15875 -1 allowedElements: [ 'ARTICLE', 'AUDIO', 'EMBED', 'IFRAME', 'OBJECT', 'SECTION', 'SVG', 'VIDEO' ]-1 17115 allowedElements: [ 'article', 'audio', 'embed', 'iframe', 'object', 'section', 'svg', 'video' ] 15876 17116 }, 15877 17117 article: { 15878 17118 type: 'structure', @@ -15895,7 +17135,7 @@ module.exports = { 15895 17135 context: null, 15896 17136 implicit: [ 'header' ], 15897 17137 unsupported: false,15898 -1 allowedElements: [ 'SECTION' ]-1 17138 allowedElements: [ 'section' ] 15899 17139 }, 15900 17140 button: { 15901 17141 type: 'widget', @@ -15908,8 +17148,10 @@ module.exports = { 15908 17148 implicit: [ 'button', 'input[type="button"]', 'input[type="image"]', 'input[type="reset"]', 'input[type="submit"]', 'summary' ], 15909 17149 unsupported: false, 15910 17150 allowedElements: [ {15911 -1 tagName: 'A',15912 -1 condition: elementConditions.MUST_HAVE_HREF_ATTRIBUTE-1 17151 nodeName: 'a', -1 17152 attributes: { -1 17153 href: isNotNull -1 17154 } 15913 17155 } ] 15914 17156 }, 15915 17157 cell: { @@ -15933,7 +17175,7 @@ module.exports = { 15933 17175 context: null, 15934 17176 implicit: [ 'input[type="checkbox"]' ], 15935 17177 unsupported: false,15936 -1 allowedElements: [ 'BUTTON' ]-1 17178 allowedElements: [ 'button' ] 15937 17179 }, 15938 17180 columnheader: { 15939 17181 type: 'structure', @@ -15959,9 +17201,9 @@ module.exports = { 15959 17201 context: null, 15960 17202 unsupported: false, 15961 17203 allowedElements: [ {15962 -1 tagName: 'INPUT',15963 -1 attributes: {15964 -1 TYPE: 'TEXT'-1 17204 nodeName: 'input', -1 17205 properties: { -1 17206 type: 'text' 15965 17207 } 15966 17208 } ] 15967 17209 }, @@ -15980,7 +17222,7 @@ module.exports = { 15980 17222 context: null, 15981 17223 implicit: [ 'aside' ], 15982 17224 unsupported: false,15983 -1 allowedElements: [ 'SECTION' ]-1 17225 allowedElements: [ 'section' ] 15984 17226 }, 15985 17227 composite: { 15986 17228 nameFrom: [ 'author' ], @@ -15997,7 +17239,7 @@ module.exports = { 15997 17239 context: null, 15998 17240 implicit: [ 'footer' ], 15999 17241 unsupported: false,16000 -1 allowedElements: [ 'SECTION' ]-1 17242 allowedElements: [ 'section' ] 16001 17243 }, 16002 17244 definition: { 16003 17245 type: 'structure', @@ -16020,7 +17262,7 @@ module.exports = { 16020 17262 context: null, 16021 17263 implicit: [ 'dialog' ], 16022 17264 unsupported: false,16023 -1 allowedElements: [ 'SECTION' ]-1 17265 allowedElements: [ 'section' ] 16024 17266 }, 16025 17267 directory: { 16026 17268 type: 'structure', @@ -16031,7 +17273,7 @@ module.exports = { 16031 17273 nameFrom: [ 'author', 'contents' ], 16032 17274 context: null, 16033 17275 unsupported: false,16034 -1 allowedElements: [ 'OL', 'UL' ]-1 17276 allowedElements: [ 'ol', 'ul' ] 16035 17277 }, 16036 17278 document: { 16037 17279 type: 'structure', @@ -16043,7 +17285,7 @@ module.exports = { 16043 17285 context: null, 16044 17286 implicit: [ 'body' ], 16045 17287 unsupported: false,16046 -1 allowedElements: [ 'ARTICLE', 'EMBED', 'IFRAME', 'SECTION', 'SVG', 'OBJECT' ]-1 17288 allowedElements: [ 'article', 'embed', 'iframe', 'object', 'section', 'svg' ] 16047 17289 }, 16048 17290 'doc-abstract': { 16049 17291 type: 'section', @@ -16054,7 +17296,7 @@ module.exports = { 16054 17296 nameFrom: [ 'author' ], 16055 17297 context: null, 16056 17298 unsupported: false,16057 -1 allowedElements: [ 'SECTION' ]-1 17299 allowedElements: [ 'section' ] 16058 17300 }, 16059 17301 'doc-acknowledgments': { 16060 17302 type: 'landmark', @@ -16065,7 +17307,7 @@ module.exports = { 16065 17307 nameFrom: [ 'author' ], 16066 17308 context: null, 16067 17309 unsupported: false,16068 -1 allowedElements: [ 'SECTION' ]-1 17310 allowedElements: [ 'section' ] 16069 17311 }, 16070 17312 'doc-afterword': { 16071 17313 type: 'landmark', @@ -16076,7 +17318,7 @@ module.exports = { 16076 17318 nameFrom: [ 'author' ], 16077 17319 context: null, 16078 17320 unsupported: false,16079 -1 allowedElements: [ 'SECTION' ]-1 17321 allowedElements: [ 'section' ] 16080 17322 }, 16081 17323 'doc-appendix': { 16082 17324 type: 'landmark', @@ -16087,7 +17329,7 @@ module.exports = { 16087 17329 nameFrom: [ 'author' ], 16088 17330 context: null, 16089 17331 unsupported: false,16090 -1 allowedElements: [ 'SECTION' ]-1 17332 allowedElements: [ 'section' ] 16091 17333 }, 16092 17334 'doc-backlink': { 16093 17335 type: 'link', @@ -16099,8 +17341,10 @@ module.exports = { 16099 17341 context: null, 16100 17342 unsupported: false, 16101 17343 allowedElements: [ {16102 -1 tagName: 'A',16103 -1 condition: elementConditions.MUST_HAVE_HREF_ATTRIBUTE-1 17344 nodeName: 'a', -1 17345 attributes: { -1 17346 href: isNotNull -1 17347 } 16104 17348 } ] 16105 17349 }, 16106 17350 'doc-biblioentry': { @@ -16112,7 +17356,7 @@ module.exports = { 16112 17356 nameFrom: [ 'author' ], 16113 17357 context: [ 'doc-bibliography' ], 16114 17358 unsupported: false,16115 -1 allowedElements: [ 'LI' ]-1 17359 allowedElements: [ 'li' ] 16116 17360 }, 16117 17361 'doc-bibliography': { 16118 17362 type: 'landmark', @@ -16123,7 +17367,7 @@ module.exports = { 16123 17367 nameFrom: [ 'author' ], 16124 17368 context: null, 16125 17369 unsupported: false,16126 -1 allowedElements: [ 'SECTION' ]-1 17370 allowedElements: [ 'section' ] 16127 17371 }, 16128 17372 'doc-biblioref': { 16129 17373 type: 'link', @@ -16135,8 +17379,10 @@ module.exports = { 16135 17379 context: null, 16136 17380 unsupported: false, 16137 17381 allowedElements: [ {16138 -1 tagName: 'A',16139 -1 condition: elementConditions.MUST_HAVE_HREF_ATTRIBUTE-1 17382 nodeName: 'a', -1 17383 attributes: { -1 17384 href: isNotNull -1 17385 } 16140 17386 } ] 16141 17387 }, 16142 17388 'doc-chapter': { @@ -16148,7 +17394,7 @@ module.exports = { 16148 17394 namefrom: [ 'author' ], 16149 17395 context: null, 16150 17396 unsupported: false,16151 -1 allowedElements: [ 'SECTION' ]-1 17397 allowedElements: [ 'section' ] 16152 17398 }, 16153 17399 'doc-colophon': { 16154 17400 type: 'section', @@ -16159,7 +17405,7 @@ module.exports = { 16159 17405 namefrom: [ 'author' ], 16160 17406 context: null, 16161 17407 unsupported: false,16162 -1 allowedElements: [ 'SECTION' ]-1 17408 allowedElements: [ 'section' ] 16163 17409 }, 16164 17410 'doc-conclusion': { 16165 17411 type: 'landmark', @@ -16170,7 +17416,7 @@ module.exports = { 16170 17416 namefrom: [ 'author' ], 16171 17417 context: null, 16172 17418 unsupported: false,16173 -1 allowedElements: [ 'SECTION' ]-1 17419 allowedElements: [ 'section' ] 16174 17420 }, 16175 17421 'doc-cover': { 16176 17422 type: 'img', @@ -16191,7 +17437,7 @@ module.exports = { 16191 17437 namefrom: [ 'author' ], 16192 17438 context: null, 16193 17439 unsupported: false,16194 -1 allowedElements: [ 'SECTION' ]-1 17440 allowedElements: [ 'section' ] 16195 17441 }, 16196 17442 'doc-credits': { 16197 17443 type: 'landmark', @@ -16202,7 +17448,7 @@ module.exports = { 16202 17448 namefrom: [ 'author' ], 16203 17449 context: null, 16204 17450 unsupported: false,16205 -1 allowedElements: [ 'SECTION' ]-1 17451 allowedElements: [ 'section' ] 16206 17452 }, 16207 17453 'doc-dedication': { 16208 17454 type: 'section', @@ -16213,7 +17459,7 @@ module.exports = { 16213 17459 namefrom: [ 'author' ], 16214 17460 context: null, 16215 17461 unsupported: false,16216 -1 allowedElements: [ 'SECTION' ]-1 17462 allowedElements: [ 'section' ] 16217 17463 }, 16218 17464 'doc-endnote': { 16219 17465 type: 'listitem', @@ -16224,7 +17470,7 @@ module.exports = { 16224 17470 namefrom: [ 'author' ], 16225 17471 context: [ 'doc-endnotes' ], 16226 17472 unsupported: false,16227 -1 allowedElements: [ 'LI' ]-1 17473 allowedElements: [ 'li' ] 16228 17474 }, 16229 17475 'doc-endnotes': { 16230 17476 type: 'landmark', @@ -16235,7 +17481,7 @@ module.exports = { 16235 17481 namefrom: [ 'author' ], 16236 17482 context: null, 16237 17483 unsupported: false,16238 -1 allowedElements: [ 'SECTION' ]-1 17484 allowedElements: [ 'section' ] 16239 17485 }, 16240 17486 'doc-epigraph': { 16241 17487 type: 'section', @@ -16256,7 +17502,7 @@ module.exports = { 16256 17502 namefrom: [ 'author' ], 16257 17503 context: null, 16258 17504 unsupported: false,16259 -1 allowedElements: [ 'SECTION' ]-1 17505 allowedElements: [ 'section' ] 16260 17506 }, 16261 17507 'doc-errata': { 16262 17508 type: 'landmark', @@ -16267,7 +17513,7 @@ module.exports = { 16267 17513 namefrom: [ 'author' ], 16268 17514 context: null, 16269 17515 unsupported: false,16270 -1 allowedElements: [ 'SECTION' ]-1 17516 allowedElements: [ 'section' ] 16271 17517 }, 16272 17518 'doc-example': { 16273 17519 type: 'section', @@ -16278,7 +17524,7 @@ module.exports = { 16278 17524 namefrom: [ 'author' ], 16279 17525 context: null, 16280 17526 unsupported: false,16281 -1 allowedElements: [ 'ASIDE', 'SECTION' ]-1 17527 allowedElements: [ 'aside', 'section' ] 16282 17528 }, 16283 17529 'doc-footnote': { 16284 17530 type: 'section', @@ -16289,7 +17535,7 @@ module.exports = { 16289 17535 namefrom: [ 'author' ], 16290 17536 context: null, 16291 17537 unsupported: false,16292 -1 allowedElements: [ 'ASIDE', 'FOOTER', 'HEADER' ]-1 17538 allowedElements: [ 'aside', 'footer', 'header' ] 16293 17539 }, 16294 17540 'doc-foreword': { 16295 17541 type: 'landmark', @@ -16300,7 +17546,7 @@ module.exports = { 16300 17546 namefrom: [ 'author' ], 16301 17547 context: null, 16302 17548 unsupported: false,16303 -1 allowedElements: [ 'SECTION' ]-1 17549 allowedElements: [ 'section' ] 16304 17550 }, 16305 17551 'doc-glossary': { 16306 17552 type: 'landmark', @@ -16311,7 +17557,7 @@ module.exports = { 16311 17557 namefrom: [ 'author' ], 16312 17558 context: null, 16313 17559 unsupported: false,16314 -1 allowedElements: [ 'DL' ]-1 17560 allowedElements: [ 'dl' ] 16315 17561 }, 16316 17562 'doc-glossref': { 16317 17563 type: 'link', @@ -16323,8 +17569,10 @@ module.exports = { 16323 17569 context: null, 16324 17570 unsupported: false, 16325 17571 allowedElements: [ {16326 -1 tagName: 'A',16327 -1 condition: elementConditions.MUST_HAVE_HREF_ATTRIBUTE-1 17572 nodeName: 'a', -1 17573 attributes: { -1 17574 href: isNotNull -1 17575 } 16328 17576 } ] 16329 17577 }, 16330 17578 'doc-index': { @@ -16336,7 +17584,7 @@ module.exports = { 16336 17584 namefrom: [ 'author' ], 16337 17585 context: null, 16338 17586 unsupported: false,16339 -1 allowedElements: [ 'NAV', 'SECTION' ]-1 17587 allowedElements: [ 'nav', 'section' ] 16340 17588 }, 16341 17589 'doc-introduction': { 16342 17590 type: 'landmark', @@ -16347,7 +17595,7 @@ module.exports = { 16347 17595 namefrom: [ 'author' ], 16348 17596 context: null, 16349 17597 unsupported: false,16350 -1 allowedElements: [ 'SECTION' ]-1 17598 allowedElements: [ 'section' ] 16351 17599 }, 16352 17600 'doc-noteref': { 16353 17601 type: 'link', @@ -16359,8 +17607,10 @@ module.exports = { 16359 17607 context: null, 16360 17608 unsupported: false, 16361 17609 allowedElements: [ {16362 -1 tagName: 'A',16363 -1 condition: elementConditions.MUST_HAVE_HREF_ATTRIBUTE-1 17610 nodeName: 'a', -1 17611 attributes: { -1 17612 href: isNotNull -1 17613 } 16364 17614 } ] 16365 17615 }, 16366 17616 'doc-notice': { @@ -16372,7 +17622,7 @@ module.exports = { 16372 17622 namefrom: [ 'author' ], 16373 17623 context: null, 16374 17624 unsupported: false,16375 -1 allowedElements: [ 'SECTION' ]-1 17625 allowedElements: [ 'section' ] 16376 17626 }, 16377 17627 'doc-pagebreak': { 16378 17628 type: 'separator', @@ -16383,7 +17633,7 @@ module.exports = { 16383 17633 namefrom: [ 'author' ], 16384 17634 context: null, 16385 17635 unsupported: false,16386 -1 allowedElements: [ 'HR' ]-1 17636 allowedElements: [ 'hr' ] 16387 17637 }, 16388 17638 'doc-pagelist': { 16389 17639 type: 'navigation', @@ -16394,7 +17644,7 @@ module.exports = { 16394 17644 namefrom: [ 'author' ], 16395 17645 context: null, 16396 17646 unsupported: false,16397 -1 allowedElements: [ 'NAV', 'SECTION' ]-1 17647 allowedElements: [ 'nav', 'section' ] 16398 17648 }, 16399 17649 'doc-part': { 16400 17650 type: 'landmark', @@ -16405,7 +17655,7 @@ module.exports = { 16405 17655 namefrom: [ 'author' ], 16406 17656 context: null, 16407 17657 unsupported: false,16408 -1 allowedElements: [ 'SECTION' ]-1 17658 allowedElements: [ 'section' ] 16409 17659 }, 16410 17660 'doc-preface': { 16411 17661 type: 'landmark', @@ -16416,7 +17666,7 @@ module.exports = { 16416 17666 namefrom: [ 'author' ], 16417 17667 context: null, 16418 17668 unsupported: false,16419 -1 allowedElements: [ 'SECTION' ]-1 17669 allowedElements: [ 'section' ] 16420 17670 }, 16421 17671 'doc-prologue': { 16422 17672 type: 'landmark', @@ -16427,7 +17677,7 @@ module.exports = { 16427 17677 namefrom: [ 'author' ], 16428 17678 context: null, 16429 17679 unsupported: false,16430 -1 allowedElements: [ 'SECTION' ]-1 17680 allowedElements: [ 'section' ] 16431 17681 }, 16432 17682 'doc-pullquote': { 16433 17683 type: 'none', @@ -16438,7 +17688,7 @@ module.exports = { 16438 17688 namefrom: [ 'author' ], 16439 17689 context: null, 16440 17690 unsupported: false,16441 -1 allowedElements: [ 'ASIDE', 'SECTION' ]-1 17691 allowedElements: [ 'aside', 'section' ] 16442 17692 }, 16443 17693 'doc-qna': { 16444 17694 type: 'section', @@ -16449,7 +17699,7 @@ module.exports = { 16449 17699 namefrom: [ 'author' ], 16450 17700 context: null, 16451 17701 unsupported: false,16452 -1 allowedElements: [ 'SECTION' ]-1 17702 allowedElements: [ 'section' ] 16453 17703 }, 16454 17704 'doc-subtitle': { 16455 17705 type: 'sectionhead', @@ -16460,7 +17710,9 @@ module.exports = { 16460 17710 namefrom: [ 'author' ], 16461 17711 context: null, 16462 17712 unsupported: false,16463 -1 allowedElements: [ 'H1', 'H2', 'H3', 'H4', 'H5', 'H6' ]-1 17713 allowedElements: { -1 17714 nodeName: [ 'h1', 'h2', 'h3', 'h4', 'h5', 'h6' ] -1 17715 } 16464 17716 }, 16465 17717 'doc-tip': { 16466 17718 type: 'note', @@ -16471,7 +17723,7 @@ module.exports = { 16471 17723 namefrom: [ 'author' ], 16472 17724 context: null, 16473 17725 unsupported: false,16474 -1 allowedElements: [ 'ASIDE' ]-1 17726 allowedElements: [ 'aside' ] 16475 17727 }, 16476 17728 'doc-toc': { 16477 17729 type: 'navigation', @@ -16482,7 +17734,7 @@ module.exports = { 16482 17734 namefrom: [ 'author' ], 16483 17735 context: null, 16484 17736 unsupported: false,16485 -1 allowedElements: [ 'NAV', 'SECTION' ]-1 17737 allowedElements: [ 'nav', 'section' ] 16486 17738 }, 16487 17739 feed: { 16488 17740 type: 'structure', @@ -16495,7 +17747,7 @@ module.exports = { 16495 17747 nameFrom: [ 'author' ], 16496 17748 context: null, 16497 17749 unsupported: false,16498 -1 allowedElements: [ 'ARTICLE', 'ASIDE', 'SECTION' ]-1 17750 allowedElements: [ 'article', 'aside', 'section' ] 16499 17751 }, 16500 17752 figure: { 16501 17753 type: 'structure', @@ -16546,7 +17798,7 @@ module.exports = { 16546 17798 context: null, 16547 17799 implicit: [ 'details', 'optgroup' ], 16548 17800 unsupported: false,16549 -1 allowedElements: [ 'DL', 'FIGCAPTION', 'FIELDSET', 'FIGURE', 'FOOTER', 'HEADER', 'OL', 'UL' ]-1 17801 allowedElements: [ 'dl', 'figcaption', 'fieldset', 'figure', 'footer', 'header', 'ol', 'ul' ] 16550 17802 }, 16551 17803 heading: { 16552 17804 type: 'structure', @@ -16570,7 +17822,7 @@ module.exports = { 16570 17822 context: null, 16571 17823 implicit: [ 'img' ], 16572 17824 unsupported: false,16573 -1 allowedElements: [ 'EMBED', 'IFRAME', 'OBJECT', 'SVG' ]-1 17825 allowedElements: [ 'embed', 'iframe', 'object', 'svg' ] 16574 17826 }, 16575 17827 input: { 16576 17828 nameFrom: [ 'author' ], @@ -16592,15 +17844,10 @@ module.exports = { 16592 17844 context: null, 16593 17845 implicit: [ 'a[href]' ], 16594 17846 unsupported: false,16595 -1 allowedElements: [ 'BUTTON', {16596 -1 tagName: 'INPUT',16597 -1 attributes: {16598 -1 TYPE: 'IMAGE'16599 -1 }16600 -1 }, {16601 -1 tagName: 'INPUT',16602 -1 attributes: {16603 -1 TYPE: 'IMAGE'-1 17847 allowedElements: [ 'button', { -1 17848 nodeName: 'input', -1 17849 properties: { -1 17850 type: [ 'image', 'button' ] 16604 17851 } 16605 17852 } ] 16606 17853 }, @@ -16629,7 +17876,7 @@ module.exports = { 16629 17876 context: null, 16630 17877 implicit: [ 'select' ], 16631 17878 unsupported: false,16632 -1 allowedElements: [ 'OL', 'UL' ]-1 17879 allowedElements: [ 'ol', 'ul' ] 16633 17880 }, 16634 17881 listitem: { 16635 17882 type: 'structure', @@ -16651,7 +17898,7 @@ module.exports = { 16651 17898 nameFrom: [ 'author' ], 16652 17899 context: null, 16653 17900 unsupported: false,16654 -1 allowedElements: [ 'SECTION' ]-1 17901 allowedElements: [ 'section' ] 16655 17902 }, 16656 17903 main: { 16657 17904 type: 'landmark', @@ -16663,7 +17910,7 @@ module.exports = { 16663 17910 context: null, 16664 17911 implicit: [ 'main' ], 16665 17912 unsupported: false,16666 -1 allowedElements: [ 'ARTICLE', 'SECTION' ]-1 17913 allowedElements: [ 'article', 'section' ] 16667 17914 }, 16668 17915 marquee: { 16669 17916 type: 'widget', @@ -16674,7 +17921,7 @@ module.exports = { 16674 17921 nameFrom: [ 'author' ], 16675 17922 context: null, 16676 17923 unsupported: false,16677 -1 allowedElements: [ 'SECTION' ]-1 17924 allowedElements: [ 'section' ] 16678 17925 }, 16679 17926 math: { 16680 17927 type: 'structure', @@ -16699,7 +17946,7 @@ module.exports = { 16699 17946 context: null, 16700 17947 implicit: [ 'menu[type="context"]' ], 16701 17948 unsupported: false,16702 -1 allowedElements: [ 'OL', 'UL' ]-1 17949 allowedElements: [ 'ol', 'ul' ] 16703 17950 }, 16704 17951 menubar: { 16705 17952 type: 'composite', @@ -16710,7 +17957,7 @@ module.exports = { 16710 17957 nameFrom: [ 'author' ], 16711 17958 context: null, 16712 17959 unsupported: false,16713 -1 allowedElements: [ 'OL', 'UL' ]-1 17960 allowedElements: [ 'ol', 'ul' ] 16714 17961 }, 16715 17962 menuitem: { 16716 17963 type: 'widget', @@ -16722,19 +17969,16 @@ module.exports = { 16722 17969 context: [ 'menu', 'menubar' ], 16723 17970 implicit: [ 'menuitem[type="command"]' ], 16724 17971 unsupported: false,16725 -1 allowedElements: [ 'BUTTON', 'LI', {16726 -1 tagName: 'INPUT',16727 -1 attributes: {16728 -1 TYPE: 'IMAGE'-1 17972 allowedElements: [ 'button', 'li', { -1 17973 nodeName: 'iput', -1 17974 properties: { -1 17975 type: [ 'image', 'button' ] 16729 17976 } 16730 17977 }, {16731 -1 tagName: 'INPUT',-1 17978 nodeName: 'a', 16732 17979 attributes: {16733 -1 TYPE: 'BUTTON'-1 17980 href: isNotNull 16734 17981 }16735 -1 }, {16736 -1 tagName: 'A',16737 -1 condition: elementConditions.MUST_HAVE_HREF_ATTRIBUTE16738 17982 } ] 16739 17983 }, 16740 17984 menuitemcheckbox: { @@ -16747,24 +17991,18 @@ module.exports = { 16747 17991 context: [ 'menu', 'menubar' ], 16748 17992 implicit: [ 'menuitem[type="checkbox"]' ], 16749 17993 unsupported: false,16750 -1 allowedElements: [ 'BUTTON', 'LI', {16751 -1 tagName: 'INPUT',16752 -1 attributes: {16753 -1 TYPE: 'CHECKBOX'16754 -1 }-1 17994 allowedElements: [ { -1 17995 nodeName: [ 'button', 'li' ] 16755 17996 }, {16756 -1 tagName: 'INPUT',16757 -1 attributes: {16758 -1 TYPE: 'IMAGE'-1 17997 nodeName: 'input', -1 17998 properties: { -1 17999 type: [ 'checkbox', 'image', 'button' ] 16759 18000 } 16760 18001 }, {16761 -1 tagName: 'INPUT',-1 18002 nodeName: 'a', 16762 18003 attributes: {16763 -1 TYPE: 'BUTTON'-1 18004 href: isNotNull 16764 18005 }16765 -1 }, {16766 -1 tagName: 'A',16767 -1 condition: elementConditions.MUST_HAVE_HREF_ATTRIBUTE16768 18006 } ] 16769 18007 }, 16770 18008 menuitemradio: { @@ -16777,19 +18015,18 @@ module.exports = { 16777 18015 context: [ 'menu', 'menubar' ], 16778 18016 implicit: [ 'menuitem[type="radio"]' ], 16779 18017 unsupported: false,16780 -1 allowedElements: [ 'BUTTON', 'LI', {16781 -1 tagName: 'INPUT',16782 -1 attributes: {16783 -1 TYPE: 'IMAGE'-1 18018 allowedElements: [ { -1 18019 nodeName: [ 'button', 'li' ] -1 18020 }, { -1 18021 nodeName: 'input', -1 18022 properties: { -1 18023 type: [ 'image', 'button', 'radio' ] 16784 18024 } 16785 18025 }, {16786 -1 tagName: 'INPUT',-1 18026 nodeName: 'a', 16787 18027 attributes: {16788 -1 TYPE: 'BUTTON'-1 18028 href: isNotNull 16789 18029 }16790 -1 }, {16791 -1 tagName: 'A',16792 -1 condition: elementConditions.MUST_HAVE_HREF_ATTRIBUTE16793 18030 } ] 16794 18031 }, 16795 18032 navigation: { @@ -16802,7 +18039,7 @@ module.exports = { 16802 18039 context: null, 16803 18040 implicit: [ 'nav' ], 16804 18041 unsupported: false,16805 -1 allowedElements: [ 'SECTION' ]-1 18042 allowedElements: [ 'section' ] 16806 18043 }, 16807 18044 none: { 16808 18045 type: 'structure', @@ -16811,9 +18048,13 @@ module.exports = { 16811 18048 nameFrom: [ 'author' ], 16812 18049 context: null, 16813 18050 unsupported: false,16814 -1 allowedElements: [ 'ARTICLE', 'ASIDE', 'DL', 'EMBED', 'FIGCAPTION', 'FIELDSET', 'FIGURE', 'FOOTER', 'FORM', 'H1', 'H2', 'H3', 'H4', 'H5', 'H6', 'HEADER', 'LI', 'SECTION', 'OL', {16815 -1 tagName: 'IMG',16816 -1 condition: elementConditions.MUST_HAVE_ALT_ATTRIBUTE-1 18051 allowedElements: [ { -1 18052 nodeName: [ 'article', 'aside', 'dl', 'embed', 'figcaption', 'fieldset', 'figure', 'footer', 'form', 'h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'header', 'iframe', 'li', 'ol', 'section', 'ul' ] -1 18053 }, { -1 18054 nodeName: 'img', -1 18055 attributes: { -1 18056 alt: isNotNull -1 18057 } 16817 18058 } ] 16818 18059 }, 16819 18060 note: { @@ -16825,7 +18066,7 @@ module.exports = { 16825 18066 nameFrom: [ 'author' ], 16826 18067 context: null, 16827 18068 unsupported: false,16828 -1 allowedElements: [ 'ASIDE' ]-1 18069 allowedElements: [ 'aside' ] 16829 18070 }, 16830 18071 option: { 16831 18072 type: 'widget', @@ -16837,19 +18078,18 @@ module.exports = { 16837 18078 context: [ 'listbox' ], 16838 18079 implicit: [ 'option' ], 16839 18080 unsupported: false,16840 -1 allowedElements: [ 'BUTTON', 'LI', {16841 -1 tagName: 'INPUT',16842 -1 attributes: {16843 -1 TYPE: 'CHECKBOX'-1 18081 allowedElements: [ { -1 18082 nodeName: [ 'button', 'li' ] -1 18083 }, { -1 18084 nodeName: 'input', -1 18085 properties: { -1 18086 type: [ 'checkbox', 'button' ] 16844 18087 } 16845 18088 }, {16846 -1 tagName: 'INPUT',-1 18089 nodeName: 'a', 16847 18090 attributes: {16848 -1 TYPE: 'BUTTON'-1 18091 href: isNotNull 16849 18092 }16850 -1 }, {16851 -1 tagName: 'A',16852 -1 condition: elementConditions.MUST_HAVE_HREF_ATTRIBUTE16853 18093 } ] 16854 18094 }, 16855 18095 presentation: { @@ -16859,9 +18099,13 @@ module.exports = { 16859 18099 nameFrom: [ 'author' ], 16860 18100 context: null, 16861 18101 unsupported: false,16862 -1 allowedElements: [ 'ARTICLE', 'ASIDE', 'DL', 'EMBED', 'FIGCAPTION', 'FIELDSET', 'FIGURE', 'FOOTER', 'FORM', 'H1', 'H2', 'H3', 'H4', 'H5', 'H6', 'HEADER', 'HR', 'LI', 'OL', 'SECTION', 'UL', {16863 -1 tagName: 'IMG',16864 -1 condition: elementConditions.MUST_HAVE_ALT_ATTRIBUTE-1 18102 allowedElements: [ { -1 18103 nodeName: [ 'article', 'aside', 'dl', 'embed', 'figcaption', 'fieldset', 'figure', 'footer', 'form', 'h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'header', 'iframe', 'li', 'ol', 'section', 'ul' ] -1 18104 }, { -1 18105 nodeName: 'img', -1 18106 attributes: { -1 18107 alt: isNotNull -1 18108 } 16865 18109 } ] 16866 18110 }, 16867 18111 progressbar: { @@ -16886,15 +18130,12 @@ module.exports = { 16886 18130 context: null, 16887 18131 implicit: [ 'input[type="radio"]' ], 16888 18132 unsupported: false,16889 -1 allowedElements: [ 'BUTTON', 'LI', {16890 -1 tagName: 'INPUT',16891 -1 attributes: {16892 -1 TYPE: 'IMAGE'16893 -1 }-1 18133 allowedElements: [ { -1 18134 nodeName: [ 'button', 'li' ] 16894 18135 }, {16895 -1 tagName: 'INPUT',16896 -1 attributes: {16897 -1 TYPE: 'BUTTON'-1 18136 nodeName: 'input', -1 18137 properties: { -1 18138 type: [ 'image', 'button' ] 16898 18139 } 16899 18140 } ] 16900 18141 }, @@ -16909,7 +18150,9 @@ module.exports = { 16909 18150 nameFrom: [ 'author' ], 16910 18151 context: null, 16911 18152 unsupported: false,16912 -1 allowedElements: [ 'OL', 'UL' ]-1 18153 allowedElements: { -1 18154 nodeName: [ 'ol', 'ul' ] -1 18155 } 16913 18156 }, 16914 18157 range: { 16915 18158 nameFrom: [ 'author' ], @@ -16926,7 +18169,9 @@ module.exports = { 16926 18169 context: null, 16927 18170 implicit: [ 'section[aria-label]', 'section[aria-labelledby]', 'section[title]' ], 16928 18171 unsupported: false,16929 -1 allowedElements: [ 'ARTICLE', 'ASIDE' ]-1 18172 allowedElements: { -1 18173 nodeName: [ 'article', 'aside' ] -1 18174 } 16930 18175 }, 16931 18176 roletype: { 16932 18177 type: 'abstract', @@ -16989,7 +18234,9 @@ module.exports = { 16989 18234 nameFrom: [ 'author' ], 16990 18235 context: null, 16991 18236 unsupported: false,16992 -1 allowedElements: [ 'ASIDE', 'FORM', 'SECTION' ]-1 18237 allowedElements: { -1 18238 nodeName: [ 'aside', 'form', 'section' ] -1 18239 } 16993 18240 }, 16994 18241 searchbox: { 16995 18242 type: 'widget', @@ -17001,12 +18248,12 @@ module.exports = { 17001 18248 context: null, 17002 18249 implicit: [ 'input[type="search"]' ], 17003 18250 unsupported: false,17004 -1 allowedElements: [ {17005 -1 tagName: 'INPUT',17006 -1 attributes: {17007 -1 TYPE: 'TEXT'-1 18251 allowedElements: { -1 18252 nodeName: 'input', -1 18253 properties: { -1 18254 type: 'text' 17008 18255 }17009 -1 } ]-1 18256 } 17010 18257 }, 17011 18258 section: { 17012 18259 nameFrom: [ 'author', 'contents' ], @@ -17033,7 +18280,7 @@ module.exports = { 17033 18280 context: null, 17034 18281 implicit: [ 'hr' ], 17035 18282 unsupported: false,17036 -1 allowedElements: [ 'LI' ]-1 18283 allowedElements: [ 'li' ] 17037 18284 }, 17038 18285 slider: { 17039 18286 type: 'widget', @@ -17058,12 +18305,12 @@ module.exports = { 17058 18305 context: null, 17059 18306 implicit: [ 'input[type="number"]' ], 17060 18307 unsupported: false,17061 -1 allowedElements: [ {17062 -1 tagName: 'INPUT',17063 -1 attributes: {17064 -1 TYPE: 'TEXT'-1 18308 allowedElements: { -1 18309 nodeName: 'input', -1 18310 properties: { -1 18311 type: 'text' 17065 18312 }17066 -1 } ]-1 18313 } 17067 18314 }, 17068 18315 status: { 17069 18316 type: 'widget', @@ -17075,7 +18322,7 @@ module.exports = { 17075 18322 context: null, 17076 18323 implicit: [ 'output' ], 17077 18324 unsupported: false,17078 -1 allowedElements: [ 'SECTION' ]-1 18325 allowedElements: [ 'section' ] 17079 18326 }, 17080 18327 structure: { 17081 18328 type: 'abstract', @@ -17091,24 +18338,16 @@ module.exports = { 17091 18338 nameFrom: [ 'author', 'contents' ], 17092 18339 context: null, 17093 18340 unsupported: false,17094 -1 allowedElements: [ 'BUTTON', {17095 -1 tagName: 'INPUT',17096 -1 attributes: {17097 -1 TYPE: 'CHECKBOX'-1 18341 allowedElements: [ 'button', { -1 18342 nodeName: 'input', -1 18343 properties: { -1 18344 type: [ 'checkbox', 'image', 'button' ] 17098 18345 } 17099 18346 }, {17100 -1 tagName: 'INPUT',-1 18347 nodeName: 'a', 17101 18348 attributes: {17102 -1 TYPE: 'IMAGE'-1 18349 href: isNotNull 17103 18350 }17104 -1 }, {17105 -1 tagName: 'INPUT',17106 -1 attributes: {17107 -1 TYPE: 'BUTTON'17108 -1 }17109 -1 }, {17110 -1 tagName: 'A',17111 -1 condition: elementConditions.MUST_HAVE_HREF_ATTRIBUTE17112 18351 } ] 17113 18352 }, 17114 18353 tab: { @@ -17120,14 +18359,18 @@ module.exports = { 17120 18359 nameFrom: [ 'author', 'contents' ], 17121 18360 context: [ 'tablist' ], 17122 18361 unsupported: false,17123 -1 allowedElements: [ 'BUTTON', 'H1', 'H2', 'H3', 'H4', 'H5', 'H6', 'LI', {17124 -1 tagName: 'INPUT',17125 -1 attributes: {17126 -1 TYPE: 'BUTTON'-1 18362 allowedElements: [ { -1 18363 nodeName: [ 'button', 'h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'li' ] -1 18364 }, { -1 18365 nodeName: 'input', -1 18366 properties: { -1 18367 type: 'button' 17127 18368 } 17128 18369 }, {17129 -1 tagName: 'A',17130 -1 condition: elementConditions.MUST_HAVE_HREF_ATTRIBUTE-1 18370 nodeName: 'a', -1 18371 attributes: { -1 18372 href: isNotNull -1 18373 } 17131 18374 } ] 17132 18375 }, 17133 18376 table: { @@ -17154,7 +18397,7 @@ module.exports = { 17154 18397 nameFrom: [ 'author' ], 17155 18398 context: null, 17156 18399 unsupported: false,17157 -1 allowedElements: [ 'OL', 'UL' ]-1 18400 allowedElements: [ 'ol', 'ul' ] 17158 18401 }, 17159 18402 tabpanel: { 17160 18403 type: 'widget', @@ -17165,7 +18408,7 @@ module.exports = { 17165 18408 nameFrom: [ 'author' ], 17166 18409 context: null, 17167 18410 unsupported: false,17168 -1 allowedElements: [ 'SECTION' ]-1 18411 allowedElements: [ 'section' ] 17169 18412 }, 17170 18413 term: { 17171 18414 type: 'structure', @@ -17209,7 +18452,7 @@ module.exports = { 17209 18452 context: null, 17210 18453 implicit: [ 'menu[type="toolbar"]' ], 17211 18454 unsupported: false,17212 -1 allowedElements: [ 'OL', 'UL' ]-1 18455 allowedElements: [ 'ol', 'ul' ] 17213 18456 }, 17214 18457 tooltip: { 17215 18458 type: 'widget', @@ -17232,7 +18475,7 @@ module.exports = { 17232 18475 nameFrom: [ 'author' ], 17233 18476 context: null, 17234 18477 unsupported: false,17235 -1 allowedElements: [ 'OL', 'UL' ]-1 18478 allowedElements: [ 'ol', 'ul' ] 17236 18479 }, 17237 18480 treegrid: { 17238 18481 type: 'composite', @@ -17255,9 +18498,11 @@ module.exports = { 17255 18498 nameFrom: [ 'author', 'contents' ], 17256 18499 context: [ 'group', 'tree' ], 17257 18500 unsupported: false,17258 -1 allowedElements: [ 'LI', {17259 -1 tagName: 'A',17260 -1 condition: elementConditions.MUST_HAVE_HREF_ATTRIBUTE-1 18501 allowedElements: [ 'li', { -1 18502 nodeName: 'a', -1 18503 attributes: { -1 18504 href: isNotNull -1 18505 } 17261 18506 } ] 17262 18507 }, 17263 18508 widget: { @@ -17271,136 +18516,62 @@ module.exports = { 17271 18516 } 17272 18517 }; 17273 18518 lookupTable.elementsAllowedNoRole = [ {17274 -1 tagName: 'AREA',17275 -1 condition: elementConditions.MUST_HAVE_HREF_ATTRIBUTE17276 -1 }, 'BASE', 'BODY', 'CAPTION', 'COL', 'COLGROUP', 'DATALIST', 'DD', 'DETAILS', 'DT', 'HEAD', 'HTML', {17277 -1 tagName: 'INPUT',17278 -1 attributes: {17279 -1 TYPE: 'COLOR'17280 -1 }17281 -1 }, {17282 -1 tagName: 'INPUT',17283 -1 attributes: {17284 -1 TYPE: 'DATE'17285 -1 }17286 -1 }, {17287 -1 tagName: 'INPUT',17288 -1 attributes: {17289 -1 TYPE: 'DATETIME'17290 -1 }17291 -1 }, {17292 -1 tagName: 'INPUT',17293 -1 condition: elementConditions.CANNOT_HAVE_LIST_ATTRIBUTE,17294 -1 attributes: {17295 -1 TYPE: 'EMAIL'17296 -1 }17297 -1 }, {17298 -1 tagName: 'INPUT',17299 -1 attributes: {17300 -1 TYPE: 'FILE'17301 -1 }17302 -1 }, {17303 -1 tagName: 'INPUT',17304 -1 attributes: {17305 -1 TYPE: 'HIDDEN'17306 -1 }17307 -1 }, {17308 -1 tagName: 'INPUT',17309 -1 attributes: {17310 -1 TYPE: 'MONTH'17311 -1 }17312 -1 }, {17313 -1 tagName: 'INPUT',17314 -1 attributes: {17315 -1 TYPE: 'NUMBER'17316 -1 }17317 -1 }, {17318 -1 tagName: 'INPUT',17319 -1 attributes: {17320 -1 TYPE: 'PASSWORD'17321 -1 }17322 -1 }, {17323 -1 tagName: 'INPUT',17324 -1 attributes: {17325 -1 TYPE: 'RANGE'17326 -1 }-1 18519 nodeName: [ 'base', 'body', 'caption', 'col', 'colgroup', 'datalist', 'dd', 'details', 'dt', 'head', 'html', 'keygen', 'label', 'legend', 'main', 'map', 'math', 'meta', 'meter', 'noscript', 'optgroup', 'param', 'picture', 'progress', 'script', 'source', 'style', 'template', 'textarea', 'title', 'track' ] 17327 18520 }, {17328 -1 tagName: 'INPUT',-1 18521 nodeName: 'area', 17329 18522 attributes: {17330 -1 TYPE: 'RESET'-1 18523 href: isNotNull 17331 18524 } 17332 18525 }, {17333 -1 tagName: 'INPUT',17334 -1 condition: elementConditions.CANNOT_HAVE_LIST_ATTRIBUTE,17335 -1 attributes: {17336 -1 TYPE: 'SEARCH'17337 -1 }17338 -1 }, {17339 -1 tagName: 'INPUT',17340 -1 attributes: {17341 -1 TYPE: 'SUBMIT'-1 18526 nodeName: 'input', -1 18527 properties: { -1 18528 type: [ 'color', 'data', 'datatime', 'file', 'hidden', 'month', 'number', 'password', 'range', 'reset', 'submit', 'time', 'week' ] 17342 18529 } 17343 18530 }, {17344 -1 tagName: 'INPUT',17345 -1 condition: elementConditions.CANNOT_HAVE_LIST_ATTRIBUTE,-1 18531 nodeName: 'input', 17346 18532 attributes: {17347 -1 TYPE: 'TEL'-1 18533 list: isNull -1 18534 }, -1 18535 properties: { -1 18536 type: [ 'email', 'search', 'tel', 'url' ] 17348 18537 } 17349 18538 }, {17350 -1 tagName: 'INPUT',-1 18539 nodeName: 'link', 17351 18540 attributes: {17352 -1 TYPE: 'TIME'-1 18541 href: isNotNull 17353 18542 } 17354 18543 }, {17355 -1 tagName: 'INPUT',17356 -1 condition: elementConditions.CANNOT_HAVE_LIST_ATTRIBUTE,-1 18544 nodeName: 'menu', 17357 18545 attributes: {17358 -1 TYPE: 'URL'-1 18546 type: 'context' 17359 18547 } 17360 18548 }, {17361 -1 tagName: 'INPUT',17362 -1 attributes: {17363 -1 TYPE: 'WEEK'17364 -1 }17365 -1 }, 'KEYGEN', 'LABEL', 'LEGEND', {17366 -1 tagName: 'LINK',17367 -1 attributes: {17368 -1 TYPE: 'HREF'17369 -1 }17370 -1 }, 'MAIN', 'MAP', 'MATH', {17371 -1 tagName: 'MENU',-1 18549 nodeName: 'menuitem', 17372 18550 attributes: {17373 -1 TYPE: 'CONTEXT'-1 18551 type: [ 'command', 'checkbox', 'radio' ] 17374 18552 } 17375 18553 }, {17376 -1 tagName: 'MENUITEM',17377 -1 attributes: {17378 -1 TYPE: 'COMMAND'-1 18554 nodeName: 'select', -1 18555 condition: function condition(node) { -1 18556 return Number(node.getAttribute('size')) > 1; -1 18557 }, -1 18558 properties: { -1 18559 multiple: true 17379 18560 } 17380 18561 }, {17381 -1 tagName: 'MENUITEM',-1 18562 nodeName: [ 'clippath', 'cursor', 'defs', 'desc', 'feblend', 'fecolormatrix', 'fecomponenttransfer', 'fecomposite', 'feconvolvematrix', 'fediffuselighting', 'fedisplacementmap', 'fedistantlight', 'fedropshadow', 'feflood', 'fefunca', 'fefuncb', 'fefuncg', 'fefuncr', 'fegaussianblur', 'feimage', 'femerge', 'femergenode', 'femorphology', 'feoffset', 'fepointlight', 'fespecularlighting', 'fespotlight', 'fetile', 'feturbulence', 'filter', 'hatch', 'hatchpath', 'lineargradient', 'marker', 'mask', 'meshgradient', 'meshpatch', 'meshrow', 'metadata', 'mpath', 'pattern', 'radialgradient', 'solidcolor', 'stop', 'switch', 'view' ] -1 18563 } ]; -1 18564 lookupTable.elementsAllowedAnyRole = [ { -1 18565 nodeName: 'a', 17382 18566 attributes: {17383 -1 TYPE: 'CHECKBOX'-1 18567 href: isNull 17384 18568 } 17385 18569 }, {17386 -1 tagName: 'MENUITEM',17387 -1 attributes: {17388 -1 TYPE: 'RADIO'17389 -1 }17390 -1 }, 'META', 'METER', 'NOSCRIPT', 'OPTGROUP', 'PARAM', 'PICTURE', 'PROGRESS', 'SCRIPT', {17391 -1 tagName: 'SELECT',17392 -1 condition: elementConditions.MUST_HAVE_SIZE_ATTRIBUTE_WITH_VALUE_GREATER_THAN_1,17393 -1 attributes: {17394 -1 TYPE: 'MULTIPLE'17395 -1 }17396 -1 }, 'SOURCE', 'STYLE', 'TEMPLATE', 'TEXTAREA', 'TITLE', 'TRACK', 'CLIPPATH', 'CURSOR', 'DEFS', 'DESC', 'FEBLEND', 'FECOLORMATRIX', 'FECOMPONENTTRANSFER', 'FECOMPOSITE', 'FECONVOLVEMATRIX', 'FEDIFFUSELIGHTING', 'FEDISPLACEMENTMAP', 'FEDISTANTLIGHT', 'FEDROPSHADOW', 'FEFLOOD', 'FEFUNCA', 'FEFUNCB', 'FEFUNCG', 'FEFUNCR', 'FEGAUSSIANBLUR', 'FEIMAGE', 'FEMERGE', 'FEMERGENODE', 'FEMORPHOLOGY', 'FEOFFSET', 'FEPOINTLIGHT', 'FESPECULARLIGHTING', 'FESPOTLIGHT', 'FETILE', 'FETURBULENCE', 'FILTER', 'HATCH', 'HATCHPATH', 'LINEARGRADIENT', 'MARKER', 'MASK', 'MESHGRADIENT', 'MESHPATCH', 'MESHROW', 'METADATA', 'MPATH', 'PATTERN', 'RADIALGRADIENT', 'SOLIDCOLOR', 'STOP', 'SWITCH', 'VIEW' ];17397 -1 lookupTable.elementsAllowedAnyRole = [ {17398 -1 tagName: 'A',17399 -1 condition: elementConditions.CANNOT_HAVE_HREF_ATTRIBUTE17400 -1 }, 'ABBR', 'ADDRESS', 'CANVAS', 'DIV', 'P', 'PRE', 'BLOCKQUOTE', 'INS', 'DEL', 'OUTPUT', 'SPAN', 'TABLE', 'TBODY', 'THEAD', 'TFOOT', 'TD', 'EM', 'STRONG', 'SMALL', 'S', 'CITE', 'Q', 'DFN', 'ABBR', 'TIME', 'CODE', 'VAR', 'SAMP', 'KBD', 'SUB', 'SUP', 'I', 'B', 'U', 'MARK', 'RUBY', 'RT', 'RP', 'BDI', 'BDO', 'BR', 'WBR', 'TH', 'TR' ];-1 18570 nodeName: [ 'abbr', 'address', 'canvas', 'div', 'p', 'pre', 'blockquote', 'ins', 'del', 'output', 'span', 'table', 'tbody', 'thead', 'tfoot', 'td', 'em', 'strong', 'small', 's', 'cite', 'q', 'dfn', 'abbr', 'time', 'code', 'var', 'samp', 'kbd', 'sub', 'sup', 'i', 'b', 'u', 'mark', 'ruby', 'rt', 'rp', 'bdi', 'bdo', 'br', 'wbr', 'th', 'tr' ] -1 18571 } ]; 17401 18572 lookupTable.evaluateRoleForElement = {17402 -1 A: function A(_ref11) {17403 -1 var node = _ref11.node, out = _ref11.out;-1 18573 A: function A(_ref13) { -1 18574 var node = _ref13.node, out = _ref13.out; 17404 18575 if (node.namespaceURI === 'http://www.w3.org/2000/svg') { 17405 18576 return true; 17406 18577 } @@ -17409,26 +18580,26 @@ module.exports = { 17409 18580 } 17410 18581 return true; 17411 18582 },17412 -1 AREA: function AREA(_ref12) {17413 -1 var node = _ref12.node;-1 18583 AREA: function AREA(_ref14) { -1 18584 var node = _ref14.node; 17414 18585 return !node.href; 17415 18586 },17416 -1 BUTTON: function BUTTON(_ref13) {17417 -1 var node = _ref13.node, role = _ref13.role, out = _ref13.out;-1 18587 BUTTON: function BUTTON(_ref15) { -1 18588 var node = _ref15.node, role = _ref15.role, out = _ref15.out; 17418 18589 if (node.getAttribute('type') === 'menu') { 17419 18590 return role === 'menuitem'; 17420 18591 } 17421 18592 return out; 17422 18593 },17423 -1 IMG: function IMG(_ref14) {17424 -1 var node = _ref14.node, out = _ref14.out;-1 18594 IMG: function IMG(_ref16) { -1 18595 var node = _ref16.node, out = _ref16.out; 17425 18596 if (node.alt) { 17426 18597 return !out; 17427 18598 } 17428 18599 return out; 17429 18600 },17430 -1 INPUT: function INPUT(_ref15) {17431 -1 var node = _ref15.node, role = _ref15.role, out = _ref15.out;-1 18601 INPUT: function INPUT(_ref17) { -1 18602 var node = _ref17.node, role = _ref17.role, out = _ref17.out; 17432 18603 switch (node.type) { 17433 18604 case 'button': 17434 18605 case 'image': @@ -17450,107 +18621,92 @@ module.exports = { 17450 18621 return false; 17451 18622 } 17452 18623 },17453 -1 LI: function LI(_ref16) {17454 -1 var node = _ref16.node, out = _ref16.out;-1 18624 LI: function LI(_ref18) { -1 18625 var node = _ref18.node, out = _ref18.out; 17455 18626 var hasImplicitListitemRole = axe.utils.matchesSelector(node, 'ol li, ul li'); 17456 18627 if (hasImplicitListitemRole) { 17457 18628 return out; 17458 18629 } 17459 18630 return true; 17460 18631 },17461 -1 LINK: function LINK(_ref17) {17462 -1 var node = _ref17.node;17463 -1 return !node.href;17464 -1 },17465 -1 MENU: function MENU(_ref18) {17466 -1 var node = _ref18.node;-1 18632 MENU: function MENU(_ref19) { -1 18633 var node = _ref19.node; 17467 18634 if (node.getAttribute('type') === 'context') { 17468 18635 return false; 17469 18636 } 17470 18637 return true; 17471 18638 },17472 -1 OPTION: function OPTION(_ref19) {17473 -1 var node = _ref19.node;-1 18639 OPTION: function OPTION(_ref20) { -1 18640 var node = _ref20.node; 17474 18641 var withinOptionList = axe.utils.matchesSelector(node, 'select > option, datalist > option, optgroup > option'); 17475 18642 return !withinOptionList; 17476 18643 },17477 -1 SELECT: function SELECT(_ref20) {17478 -1 var node = _ref20.node, role = _ref20.role;-1 18644 SELECT: function SELECT(_ref21) { -1 18645 var node = _ref21.node, role = _ref21.role; 17479 18646 return !node.multiple && node.size <= 1 && role === 'menu'; 17480 18647 },17481 -1 SVG: function SVG(_ref21) {17482 -1 var node = _ref21.node, out = _ref21.out;-1 18648 SVG: function SVG(_ref22) { -1 18649 var node = _ref22.node, out = _ref22.out; 17483 18650 if (node.parentNode && node.parentNode.namespaceURI === 'http://www.w3.org/2000/svg') { 17484 18651 return true; 17485 18652 } 17486 18653 return out; 17487 18654 } 17488 18655 }; -1 18656 lookupTable.rolesOfType = { -1 18657 widget: [ 'button', 'checkbox', 'dialog', 'gridcell', 'heading', 'link', 'log', 'marquee', 'menuitem', 'menuitemcheckbox', 'menuitemradio', 'option', 'progressbar', 'radio', 'scrollbar', 'slider', 'spinbutton', 'status', 'switch', 'tab', 'tabpanel', 'textbox', 'timer', 'tooltip', 'tree', 'treeitem' ] -1 18658 }; 17489 18659 var color = {}; 17490 18660 commons.color = color; 17491 18661 var dom = commons.dom = {}; -1 18662 function matches(node, definition) { -1 18663 return matches.fromDefinition(node, definition); -1 18664 } -1 18665 commons.matches = matches; 17492 18666 var table = commons.table = {}; 17493 18667 var text = commons.text = { 17494 18668 EdgeFormDefaults: {} 17495 18669 }; 17496 18670 var utils = commons.utils = axe.utils; -1 18671 aria.arialabelText = function arialabelText(node) { -1 18672 node = node.actualNode || node; -1 18673 if (node.nodeType !== 1) { -1 18674 return ''; -1 18675 } -1 18676 return node.getAttribute('aria-label') || ''; -1 18677 }; -1 18678 aria.arialabelledbyText = function arialabelledbyText(node) { -1 18679 var context = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; -1 18680 node = node.actualNode || node; -1 18681 if (node.nodeType !== 1 || context.inLabelledByContext || context.inControlContext) { -1 18682 return ''; -1 18683 } -1 18684 var refs = dom.idrefs(node, 'aria-labelledby').filter(function(elm) { -1 18685 return elm; -1 18686 }); -1 18687 return refs.reduce(function(accessibleName, elm) { -1 18688 var accessibleNameAdd = text.accessibleText(elm, _extends({ -1 18689 inLabelledByContext: true, -1 18690 startNode: context.startNode || node -1 18691 }, context)); -1 18692 if (!accessibleName) { -1 18693 return accessibleNameAdd; -1 18694 } else { -1 18695 return accessibleName + ' ' + accessibleNameAdd; -1 18696 } -1 18697 }, ''); -1 18698 }; 17497 18699 aria.requiredAttr = function(role) {17498 -1 'use strict';17499 18700 var roles = aria.lookupTable.role[role], attr = roles && roles.attributes && roles.attributes.required; 17500 18701 return attr || []; 17501 18702 }; 17502 18703 aria.allowedAttr = function(role) {17503 -1 'use strict';17504 18704 var roles = aria.lookupTable.role[role], attr = roles && roles.attributes && roles.attributes.allowed || [], requiredAttr = roles && roles.attributes && roles.attributes.required || []; 17505 18705 return attr.concat(aria.lookupTable.globalAttributes).concat(requiredAttr); 17506 18706 };17507 -1 aria.validateAttr = function(att) {17508 -1 'use strict';17509 -1 return !!aria.lookupTable.attributes[att];17510 -1 };17511 -1 aria.validateAttrValue = function validateAttrValue(node, attr) {17512 -1 'use strict';17513 -1 var matches, list, value = node.getAttribute(attr), attrInfo = aria.lookupTable.attributes[attr];17514 -1 var doc = dom.getRootNode(node);17515 -1 if (!attrInfo) {17516 -1 return true;17517 -1 }17518 -1 switch (attrInfo.type) {17519 -1 case 'boolean':17520 -1 case 'nmtoken':17521 -1 return typeof value === 'string' && attrInfo.values.includes(value.toLowerCase());17522 -117523 -1 case 'nmtokens':17524 -1 list = axe.utils.tokenList(value);17525 -1 return list.reduce(function(result, token) {17526 -1 return result && attrInfo.values.includes(token);17527 -1 }, list.length !== 0);17528 -117529 -1 case 'idref':17530 -1 if (value.trim().length === 0) {17531 -1 return true;17532 -1 }17533 -1 return !!(value && doc.getElementById(value));17534 -117535 -1 case 'idrefs':17536 -1 if (value.trim().length === 0) {17537 -1 return true;17538 -1 }17539 -1 list = axe.utils.tokenList(value);17540 -1 return list.some(function(token) {17541 -1 return doc.getElementById(token);17542 -1 });17543 -117544 -1 case 'string':17545 -1 return true;17546 -117547 -1 case 'decimal':17548 -1 matches = value.match(/^[-+]?([0-9]*)\.?([0-9]*)$/);17549 -1 return !!(matches && (matches[1] || matches[2]));17550 -117551 -1 case 'int':17552 -1 return /^[-+]?[0-9]+$/.test(value);17553 -1 }-1 18707 aria.validateAttr = function validateAttr(att) { -1 18708 var attrDefinition = aria.lookupTable.attributes[att]; -1 18709 return !!attrDefinition; 17554 18710 }; 17555 18711 function getRoleSegments(node) { 17556 18712 var roles = []; @@ -17587,14 +18743,29 @@ module.exports = { 17587 18743 if (!allowImplicit && !(role === 'row' && tagName === 'TR' && axe.utils.matchesSelector(node, 'table[role="grid"] > tr'))) { 17588 18744 return true; 17589 18745 }17590 -1 if (!aria.isAriaRoleAllowedOnElement(node, role)) {17591 -1 return true;17592 -1 }-1 18746 return !aria.isAriaRoleAllowedOnElement(node, role); 17593 18747 }); 17594 18748 return unallowedRoles; 17595 18749 }; -1 18750 aria.getOwnedVirtual = function getOwned(_ref23) { -1 18751 var actualNode = _ref23.actualNode, children = _ref23.children; -1 18752 if (!actualNode || !children) { -1 18753 throw new Error('getOwnedVirtual requires a virtual node'); -1 18754 } -1 18755 return dom.idrefs(actualNode, 'aria-owns').reduce(function(ownedElms, element) { -1 18756 if (element) { -1 18757 var virtualNode = axe.utils.getNodeFromTree(axe._tree[0], element); -1 18758 ownedElms.push(virtualNode); -1 18759 } -1 18760 return ownedElms; -1 18761 }, children); -1 18762 }; 17596 18763 aria.getRole = function getRole(node) {17597 -1 var _ref22 = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}, noImplicit = _ref22.noImplicit, fallback = _ref22.fallback, abstracts = _ref22.abstracts, dpub = _ref22.dpub;-1 18764 var _ref24 = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}, noImplicit = _ref24.noImplicit, fallback = _ref24.fallback, abstracts = _ref24.abstracts, dpub = _ref24.dpub; -1 18765 node = node.actualNode || node; -1 18766 if (node.nodeType !== 1) { -1 18767 return null; -1 18768 } 17598 18769 var roleAttr = (node.getAttribute('role') || '').trim().toLowerCase(); 17599 18770 var roleList = fallback ? axe.utils.tokenList(roleAttr) : [ roleAttr ]; 17600 18771 var validRoles = roleList.filter(function(role) { @@ -17651,25 +18822,21 @@ module.exports = { 17651 18822 return typeof refElm !== 'undefined'; 17652 18823 }; 17653 18824 aria.isAriaRoleAllowedOnElement = function isAriaRoleAllowedOnElement(node, role) {17654 -1 var tagName = node.nodeName.toUpperCase();-1 18825 var nodeName = node.nodeName.toUpperCase(); 17655 18826 var lookupTable = axe.commons.aria.lookupTable;17656 -1 if (aria.validateNodeAndAttributes(node, lookupTable.elementsAllowedNoRole)) {-1 18827 if (matches(node, lookupTable.elementsAllowedNoRole)) { 17657 18828 return false; 17658 18829 }17659 -1 if (aria.validateNodeAndAttributes(node, lookupTable.elementsAllowedAnyRole)) {-1 18830 if (matches(node, lookupTable.elementsAllowedAnyRole)) { 17660 18831 return true; 17661 18832 } 17662 18833 var roleValue = lookupTable.role[role];17663 -1 if (!roleValue) {17664 -1 return false;17665 -1 }17666 -1 if (!(roleValue.allowedElements && Array.isArray(roleValue.allowedElements) && roleValue.allowedElements.length)) {-1 18834 if (!roleValue || !roleValue.allowedElements) { 17667 18835 return false; 17668 18836 }17669 -1 var out = false;17670 -1 out = aria.validateNodeAndAttributes(node, roleValue.allowedElements);17671 -1 if (Object.keys(lookupTable.evaluateRoleForElement).includes(tagName)) {17672 -1 out = lookupTable.evaluateRoleForElement[tagName]({-1 18837 var out = matches(node, roleValue.allowedElements); -1 18838 if (Object.keys(lookupTable.evaluateRoleForElement).includes(nodeName)) { -1 18839 return lookupTable.evaluateRoleForElement[nodeName]({ 17673 18840 node: node, 17674 18841 role: role, 17675 18842 out: out @@ -17677,8 +18844,12 @@ module.exports = { 17677 18844 } 17678 18845 return out; 17679 18846 };17680 -1 aria.labelVirtual = function(_ref23) {17681 -1 var actualNode = _ref23.actualNode;-1 18847 aria.isUnsupportedRole = function(role) { -1 18848 var roleDefinition = aria.lookupTable.role[role]; -1 18849 return roleDefinition ? roleDefinition.unsupported : false; -1 18850 }; -1 18851 aria.labelVirtual = function(_ref25) { -1 18852 var actualNode = _ref25.actualNode; 17682 18853 var ref = void 0, candidate = void 0; 17683 18854 if (actualNode.getAttribute('aria-labelledby')) { 17684 18855 ref = dom.idrefs(actualNode, 'aria-labelledby'); @@ -17703,8 +18874,24 @@ module.exports = { 17703 18874 node = axe.utils.getNodeFromTree(axe._tree[0], node); 17704 18875 return aria.labelVirtual(node); 17705 18876 }; -1 18877 aria.namedFromContents = function namedFromContents(node) { -1 18878 var _ref26 = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}, strict = _ref26.strict; -1 18879 node = node.actualNode || node; -1 18880 if (node.nodeType !== 1) { -1 18881 return false; -1 18882 } -1 18883 var role = aria.getRole(node); -1 18884 var roleDef = aria.lookupTable.role[role]; -1 18885 if (roleDef && roleDef.nameFrom.includes('contents') || node.nodeName.toUpperCase() === 'TABLE') { -1 18886 return true; -1 18887 } -1 18888 if (strict) { -1 18889 return false; -1 18890 } -1 18891 return !roleDef || [ 'presentation', 'none' ].includes(role); -1 18892 }; 17706 18893 aria.isValidRole = function(role) {17707 -1 var _ref24 = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}, allowAbstract = _ref24.allowAbstract, _ref24$flagUnsupporte = _ref24.flagUnsupported, flagUnsupported = _ref24$flagUnsupporte === undefined ? false : _ref24$flagUnsupporte;-1 18894 var _ref27 = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}, allowAbstract = _ref27.allowAbstract, _ref27$flagUnsupporte = _ref27.flagUnsupported, flagUnsupported = _ref27$flagUnsupporte === undefined ? false : _ref27$flagUnsupporte; 17708 18895 var roleDefinition = aria.lookupTable.role[role]; 17709 18896 var isRoleUnsupported = roleDefinition ? roleDefinition.unsupported : false; 17710 18897 if (!roleDefinition || flagUnsupported && isRoleUnsupported) { @@ -17802,55 +18989,46 @@ module.exports = { 17802 18989 } 17803 18990 return sortRolesByOptimalAriaContext(availableImplicitRoles, ariaAttributes).shift(); 17804 18991 };17805 -1 aria.validateNodeAndAttributes = function validateNodeAndAttributes(node, constraintsArray) {17806 -1 var tagName = node.nodeName.toUpperCase();17807 -1 var stringConstraints = constraintsArray.filter(function(c) {17808 -1 return typeof c === 'string';17809 -1 });17810 -1 if (stringConstraints.includes(tagName)) {-1 18992 aria.validateAttrValue = function validateAttrValue(node, attr) { -1 18993 'use strict'; -1 18994 var matches, list, value = node.getAttribute(attr), attrInfo = aria.lookupTable.attributes[attr]; -1 18995 var doc = dom.getRootNode(node); -1 18996 if (!attrInfo) { 17811 18997 return true; 17812 18998 }17813 -1 var objectConstraints = constraintsArray.filter(function(c) {17814 -1 return (typeof c === 'undefined' ? 'undefined' : _typeof(c)) === 'object';17815 -1 }).filter(function(c) {17816 -1 return c.tagName === tagName;17817 -1 });17818 -1 var nodeAttrs = Array.from(node.attributes).map(function(a) {17819 -1 return a.name.toUpperCase();17820 -1 });17821 -1 var validConstraints = objectConstraints.filter(function(c) {17822 -1 if (!c.attributes) {17823 -1 if (c.condition) {17824 -1 return true;17825 -1 }17826 -1 return false;17827 -1 }17828 -1 var keys = Object.keys(c.attributes);17829 -1 if (!keys.length) {17830 -1 return false;17831 -1 }17832 -1 var keepConstraint = false;17833 -1 keys.forEach(function(k) {17834 -1 if (!nodeAttrs.includes(k)) {17835 -1 return;17836 -1 }17837 -1 var attrValue = node.getAttribute(k).trim().toUpperCase();17838 -1 if (attrValue === c.attributes[k]) {17839 -1 keepConstraint = true;17840 -1 }-1 18999 if (attrInfo.allowEmpty && (!value || value.trim() === '')) { -1 19000 return true; -1 19001 } -1 19002 switch (attrInfo.type) { -1 19003 case 'boolean': -1 19004 case 'nmtoken': -1 19005 return typeof value === 'string' && attrInfo.values.includes(value.toLowerCase()); -1 19006 -1 19007 case 'nmtokens': -1 19008 list = axe.utils.tokenList(value); -1 19009 return list.reduce(function(result, token) { -1 19010 return result && attrInfo.values.includes(token); -1 19011 }, list.length !== 0); -1 19012 -1 19013 case 'idref': -1 19014 return !!(value && doc.getElementById(value)); -1 19015 -1 19016 case 'idrefs': -1 19017 list = axe.utils.tokenList(value); -1 19018 return list.some(function(token) { -1 19019 return doc.getElementById(token); 17841 19020 });17842 -1 return keepConstraint;17843 -1 });17844 -1 if (!validConstraints.length) {17845 -1 return false;-1 19021 -1 19022 case 'string': -1 19023 return value.trim() !== ''; -1 19024 -1 19025 case 'decimal': -1 19026 matches = value.match(/^[-+]?([0-9]*)\.?([0-9]*)$/); -1 19027 return !!(matches && (matches[1] || matches[2])); -1 19028 -1 19029 case 'int': -1 19030 return /^[-+]?[0-9]+$/.test(value); 17846 19031 }17847 -1 var out = true;17848 -1 validConstraints.forEach(function(c) {17849 -1 if (c.condition && typeof c.condition === 'function') {17850 -1 out = c.condition(node);17851 -1 }17852 -1 });17853 -1 return out;17854 19032 }; 17855 19033 color.Color = function(red, green, blue, alpha) { 17856 19034 this.red = red; @@ -18029,7 +19207,7 @@ module.exports = { 18029 19207 INPUT: [ 'LABEL' ] 18030 19208 }; 18031 19209 var tagArray = elmStack.map(function(elm) {18032 -1 return elm.tagName;-1 19210 return elm.nodeName; 18033 19211 }); 18034 19212 var bgNodes = elmStack; 18035 19213 for (var candidate in elementMap) { @@ -18043,7 +19221,7 @@ module.exports = { 18043 19221 bgNodes.splice(tagArray.indexOf(candidate) + 1, 0, ancestorMatch); 18044 19222 } 18045 19223 }18046 -1 if (elm.tagName === elementMap[candidate][candidateIndex] && tagArray.indexOf(elm.tagName) === -1) {-1 19224 if (elm.nodeName === elementMap[candidate][candidateIndex] && tagArray.indexOf(elm.nodeName) === -1) { 18047 19225 bgNodes.splice(tagArray.indexOf(candidate) + 1, 0, elm); 18048 19226 } 18049 19227 } @@ -18079,25 +19257,29 @@ module.exports = { 18079 19257 }; 18080 19258 color.getRectStack = function(elm) { 18081 19259 var boundingCoords = color.getCoords(elm.getBoundingClientRect());18082 -1 if (boundingCoords) {18083 -1 var boundingStack = dom.shadowElementsFromPoint(boundingCoords.x, boundingCoords.y);18084 -1 var rects = Array.from(elm.getClientRects());18085 -1 if (rects && rects.length > 1) {18086 -1 var filteredArr = rects.filter(function(rect) {18087 -1 return rect.width && rect.width > 0;18088 -1 }).map(function(rect) {18089 -1 var coords = color.getCoords(rect);18090 -1 if (coords) {18091 -1 return dom.shadowElementsFromPoint(coords.x, coords.y);18092 -1 }18093 -1 });18094 -1 filteredArr.splice(0, 0, boundingStack);18095 -1 return filteredArr;18096 -1 } else {18097 -1 return [ boundingStack ];-1 19260 if (!boundingCoords) { -1 19261 return null; -1 19262 } -1 19263 var boundingStack = dom.shadowElementsFromPoint(boundingCoords.x, boundingCoords.y); -1 19264 var rects = Array.from(elm.getClientRects()); -1 19265 if (!rects || rects.length <= 1) { -1 19266 return [ boundingStack ]; -1 19267 } -1 19268 var filteredArr = rects.filter(function(rect) { -1 19269 return rect.width && rect.width > 0; -1 19270 }).map(function(rect) { -1 19271 var coords = color.getCoords(rect); -1 19272 if (coords) { -1 19273 return dom.shadowElementsFromPoint(coords.x, coords.y); 18098 19274 } -1 19275 }); -1 19276 if (filteredArr.some(function(stack) { -1 19277 return stack === undefined; -1 19278 })) { -1 19279 return null; 18099 19280 }18100 -1 return null;-1 19281 filteredArr.splice(0, 0, boundingStack); -1 19282 return filteredArr; 18101 19283 }; 18102 19284 color.filteredRectStack = function(elm) { 18103 19285 var rectStack = color.getRectStack(elm); @@ -18144,7 +19326,8 @@ module.exports = { 18144 19326 var bgElms = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : []; 18145 19327 var noScroll = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false; 18146 19328 if (noScroll !== true) {18147 -1 var alignToTop = elm.clientHeight - 2 >= window.innerHeight * 2;-1 19329 var clientHeight = elm.getBoundingClientRect().height; -1 19330 var alignToTop = clientHeight - 2 >= window.innerHeight * 2; 18148 19331 elm.scrollIntoView(alignToTop); 18149 19332 } 18150 19333 var bgColors = []; @@ -18229,8 +19412,8 @@ module.exports = { 18229 19412 } 18230 19413 return finalElements; 18231 19414 };18232 -1 dom.findElmsInContext = function(_ref25) {18233 -1 var context = _ref25.context, value = _ref25.value, attr = _ref25.attr, _ref25$elm = _ref25.elm, elm = _ref25$elm === undefined ? '' : _ref25$elm;-1 19415 dom.findElmsInContext = function(_ref28) { -1 19416 var context = _ref28.context, value = _ref28.value, attr = _ref28.attr, _ref28$elm = _ref28.elm, elm = _ref28$elm === undefined ? '' : _ref28$elm; 18234 19417 var root = void 0; 18235 19418 var escapedValue = axe.utils.escapeSelector(value); 18236 19419 if (context.nodeType === 9 || context.nodeType === 11) { @@ -18279,16 +19462,21 @@ module.exports = { 18279 19462 }; 18280 19463 dom.getElementByReference = function(node, attr) { 18281 19464 var fragment = node.getAttribute(attr);18282 -1 if (fragment && fragment.charAt(0) === '#') {-1 19465 if (!fragment) { -1 19466 return null; -1 19467 } -1 19468 if (fragment.charAt(0) === '#') { 18283 19469 fragment = decodeURIComponent(fragment.substring(1));18284 -1 var candidate = document.getElementById(fragment);18285 -1 if (candidate) {18286 -1 return candidate;18287 -1 }18288 -1 candidate = document.getElementsByName(fragment);18289 -1 if (candidate.length) {18290 -1 return candidate[0];18291 -1 }-1 19470 } else if (fragment.substr(0, 2) === '/#') { -1 19471 fragment = decodeURIComponent(fragment.substring(2)); -1 19472 } -1 19473 var candidate = document.getElementById(fragment); -1 19474 if (candidate) { -1 19475 return candidate; -1 19476 } -1 19477 candidate = document.getElementsByName(fragment); -1 19478 if (candidate.length) { -1 19479 return candidate[0]; 18292 19480 } 18293 19481 return null; 18294 19482 }; @@ -18322,6 +19510,16 @@ module.exports = { 18322 19510 top: element.scrollTop 18323 19511 }; 18324 19512 }; -1 19513 dom.getTabbableElements = function getTabbableElements(virtualNode) { -1 19514 var nodeAndDescendents = axe.utils.querySelectorAll(virtualNode, '*'); -1 19515 var tabbableElements = nodeAndDescendents.filter(function(vNode) { -1 19516 var isFocusable = vNode.isFocusable; -1 19517 var tabIndex = vNode.actualNode.getAttribute('tabindex'); -1 19518 tabIndex = tabIndex && !isNaN(parseInt(tabIndex, 10)) ? parseInt(tabIndex) : null; -1 19519 return tabIndex ? isFocusable && tabIndex >= 0 : isFocusable; -1 19520 }); -1 19521 return tabbableElements; -1 19522 }; 18325 19523 dom.getViewportSize = function(win) { 18326 19524 'use strict'; 18327 19525 var body, doc = win.document, docElement = doc.documentElement; @@ -18346,8 +19544,8 @@ module.exports = { 18346 19544 var hiddenTextElms = [ 'HEAD', 'TITLE', 'TEMPLATE', 'SCRIPT', 'STYLE', 'IFRAME', 'OBJECT', 'VIDEO', 'AUDIO', 'NOSCRIPT' ]; 18347 19545 function hasChildTextNodes(elm) { 18348 19546 if (!hiddenTextElms.includes(elm.actualNode.nodeName.toUpperCase())) {18349 -1 return elm.children.some(function(_ref26) {18350 -1 var actualNode = _ref26.actualNode;-1 19547 return elm.children.some(function(_ref29) { -1 19548 var actualNode = _ref29.actualNode; 18351 19549 return actualNode.nodeType === 3 && actualNode.nodeValue.trim(); 18352 19550 }); 18353 19551 } @@ -18373,7 +19571,7 @@ module.exports = { 18373 19571 return result; 18374 19572 }; 18375 19573 function focusDisabled(el) {18376 -1 return el.disabled || !dom.isVisible(el, true) && el.nodeName.toUpperCase() !== 'AREA';-1 19574 return el.disabled || dom.isHiddenWithCSS(el) && el.nodeName.toUpperCase() !== 'AREA'; 18377 19575 } 18378 19576 dom.isFocusable = function(el) { 18379 19577 'use strict'; @@ -18415,6 +19613,38 @@ module.exports = { 18415 19613 dom.insertedIntoFocusOrder = function(el) { 18416 19614 return el.tabIndex > -1 && dom.isFocusable(el) && !dom.isNativelyFocusable(el); 18417 19615 }; -1 19616 dom.isHiddenWithCSS = function isHiddenWithCSS(el, descendentVisibilityValue) { -1 19617 if (el.nodeType === 9) { -1 19618 return false; -1 19619 } -1 19620 if (el.nodeType === 11) { -1 19621 el = el.host; -1 19622 } -1 19623 if ([ 'STYLE', 'SCRIPT' ].includes(el.nodeName.toUpperCase())) { -1 19624 return false; -1 19625 } -1 19626 var style = window.getComputedStyle(el, null); -1 19627 if (!style) { -1 19628 throw new Error('Style does not exist for the given element.'); -1 19629 } -1 19630 var displayValue = style.getPropertyValue('display'); -1 19631 if (displayValue === 'none') { -1 19632 return true; -1 19633 } -1 19634 var HIDDEN_VISIBILITY_VALUES = [ 'hidden', 'collapse' ]; -1 19635 var visibilityValue = style.getPropertyValue('visibility'); -1 19636 if (HIDDEN_VISIBILITY_VALUES.includes(visibilityValue) && !descendentVisibilityValue) { -1 19637 return true; -1 19638 } -1 19639 if (HIDDEN_VISIBILITY_VALUES.includes(visibilityValue) && descendentVisibilityValue && HIDDEN_VISIBILITY_VALUES.includes(descendentVisibilityValue)) { -1 19640 return true; -1 19641 } -1 19642 var parent = dom.getComposedParent(el); -1 19643 if (parent && !HIDDEN_VISIBILITY_VALUES.includes(visibilityValue)) { -1 19644 return dom.isHiddenWithCSS(parent, visibilityValue); -1 19645 } -1 19646 return false; -1 19647 }; 18418 19648 dom.isHTML5 = function(doc) { 18419 19649 var node = doc.doctype; 18420 19650 if (node === null) { @@ -18544,7 +19774,7 @@ module.exports = { 18544 19774 return false; 18545 19775 } 18546 19776 nodeName = el.nodeName.toUpperCase();18547 -1 if (style.getPropertyValue('display') === 'none' || nodeName.toUpperCase() === 'STYLE' || nodeName.toUpperCase() === 'SCRIPT' || !screenReader && isClipped(style.getPropertyValue('clip')) || !recursed && (style.getPropertyValue('visibility') === 'hidden' || !screenReader && dom.isOffscreen(el)) || screenReader && el.getAttribute('aria-hidden') === 'true') {-1 19777 if (style.getPropertyValue('display') === 'none' || [ 'STYLE', 'SCRIPT', 'NOSCRIPT', 'TEMPLATE' ].includes(nodeName) || !screenReader && isClipped(style.getPropertyValue('clip')) || !recursed && (style.getPropertyValue('visibility') === 'hidden' || !screenReader && dom.isOffscreen(el)) || screenReader && el.getAttribute('aria-hidden') === 'true') { 18548 19778 return false; 18549 19779 } 18550 19780 parent = el.assignedSlot ? el.assignedSlot : el.parentNode; @@ -18559,7 +19789,7 @@ module.exports = { 18559 19789 if (role) { 18560 19790 return visualRoles.indexOf(role) !== -1; 18561 19791 }18562 -1 switch (element.tagName.toUpperCase()) {-1 19792 switch (element.nodeName.toUpperCase()) { 18563 19793 case 'IMG': 18564 19794 case 'IFRAME': 18565 19795 case 'OBJECT': @@ -18653,6 +19883,80 @@ module.exports = { 18653 19883 } 18654 19884 return true; 18655 19885 }; -1 19886 matches.attributes = function matchesAttributes(node, matcher) { -1 19887 node = node.actualNode || node; -1 19888 return matches.fromFunction(function(attrName) { -1 19889 return node.getAttribute(attrName); -1 19890 }, matcher); -1 19891 }; -1 19892 matches.condition = function(arg, condition) { -1 19893 return !!condition(arg); -1 19894 }; -1 19895 var matchers = [ 'nodeName', 'attributes', 'properties', 'condition' ]; -1 19896 matches.fromDefinition = function matchFromDefinition(node, definition) { -1 19897 node = node.actualNode || node; -1 19898 if (Array.isArray(definition)) { -1 19899 return definition.some(function(definitionItem) { -1 19900 return matches(node, definitionItem); -1 19901 }); -1 19902 } -1 19903 if (typeof definition === 'string') { -1 19904 return axe.utils.matchesSelector(node, definition); -1 19905 } -1 19906 return Object.keys(definition).every(function(matcherName) { -1 19907 if (!matchers.includes(matcherName)) { -1 19908 throw new Error('Unknown matcher type "' + matcherName + '"'); -1 19909 } -1 19910 var matchMethod = matches[matcherName]; -1 19911 var matcher = definition[matcherName]; -1 19912 return matchMethod(node, matcher); -1 19913 }); -1 19914 }; -1 19915 matches.fromFunction = function matchFromFunction(getValue, matcher) { -1 19916 var matcherType = typeof matcher === 'undefined' ? 'undefined' : _typeof(matcher); -1 19917 if (matcherType !== 'object' || Array.isArray(matcher) || matcher instanceof RegExp) { -1 19918 throw new Error('Expect matcher to be an object'); -1 19919 } -1 19920 return Object.keys(matcher).every(function(propName) { -1 19921 return matches.fromPrimative(getValue(propName), matcher[propName]); -1 19922 }); -1 19923 }; -1 19924 matches.fromPrimative = function matchFromPrimative(someString, matcher) { -1 19925 var matcherType = typeof matcher === 'undefined' ? 'undefined' : _typeof(matcher); -1 19926 if (Array.isArray(matcher) && typeof someString !== 'undefined') { -1 19927 return matcher.includes(someString); -1 19928 } -1 19929 if (matcherType === 'function') { -1 19930 return !!matcher(someString); -1 19931 } -1 19932 if (matcher instanceof RegExp) { -1 19933 return matcher.test(someString); -1 19934 } -1 19935 return matcher === someString; -1 19936 }; -1 19937 var isXHTMLGlobal = void 0; -1 19938 matches.nodeName = function matchNodeName(node, matcher) { -1 19939 var _ref30 = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {}, isXHTML = _ref30.isXHTML; -1 19940 node = node.actualNode || node; -1 19941 if (typeof isXHTML === 'undefined') { -1 19942 if (typeof matcher === 'string') { -1 19943 return axe.utils.matchesSelector(node, matcher); -1 19944 } -1 19945 if (typeof isXHTMLGlobal === 'undefined') { -1 19946 isXHTMLGlobal = axe.utils.isXHTML(node.ownerDocument); -1 19947 } -1 19948 isXHTML = isXHTMLGlobal; -1 19949 } -1 19950 var nodeName = isXHTML ? node.nodeName : node.nodeName.toLowerCase(); -1 19951 return matches.fromPrimative(nodeName, matcher); -1 19952 }; -1 19953 matches.properties = function matchesProperties(node, matcher) { -1 19954 node = node.actualNode || node; -1 19955 var out = matches.fromFunction(function(propName) { -1 19956 return node[propName]; -1 19957 }, matcher); -1 19958 return out; -1 19959 }; 18656 19960 table.getAllCells = function(tableElm) { 18657 19961 var rowIndex, cellIndex, rowLength, cellLength; 18658 19962 var cells = []; @@ -18720,7 +20024,7 @@ module.exports = { 18720 20024 var headerCol = tableGrid.map(function(col) { 18721 20025 return col[pos.x]; 18722 20026 }).reduce(function(headerCol, cell) {18723 -1 return headerCol && cell.nodeName.toUpperCase() === 'TH';-1 20027 return headerCol && cell && cell.nodeName.toUpperCase() === 'TH'; 18724 20028 }, true); 18725 20029 if (headerCol) { 18726 20030 return 'row'; @@ -18941,232 +20245,184 @@ module.exports = { 18941 20245 }, tableGrid, callback); 18942 20246 }; 18943 20247 })(table);18944 -1 var defaultButtonValues = {18945 -1 submit: 'Submit',18946 -1 reset: 'Reset'-1 20248 text.accessibleText = function accessibleText(element, context) { -1 20249 var virtualNode = axe.utils.getNodeFromTree(axe._tree[0], element); -1 20250 return text.accessibleTextVirtual(virtualNode, context); 18947 20251 };18948 -1 var inputTypes = [ 'text', 'search', 'tel', 'url', 'email', 'date', 'time', 'number', 'range', 'color' ];18949 -1 var phrasingElements = [ 'A', 'EM', 'STRONG', 'SMALL', 'MARK', 'ABBR', 'DFN', 'I', 'B', 'S', 'U', 'CODE', 'VAR', 'SAMP', 'KBD', 'SUP', 'SUB', 'Q', 'CITE', 'SPAN', 'BDO', 'BDI', 'BR', 'WBR', 'INS', 'DEL', 'IMG', 'EMBED', 'OBJECT', 'IFRAME', 'MAP', 'AREA', 'SCRIPT', 'NOSCRIPT', 'RUBY', 'VIDEO', 'AUDIO', 'INPUT', 'TEXTAREA', 'SELECT', 'BUTTON', 'LABEL', 'OUTPUT', 'DATALIST', 'KEYGEN', 'PROGRESS', 'COMMAND', 'CANVAS', 'TIME', 'METER' ];18950 -1 function findLabel(virtualNode) {18951 -1 var label = void 0;18952 -1 if (virtualNode.actualNode.id) {18953 -1 label = dom.findElmsInContext({18954 -1 elm: 'label',18955 -1 attr: 'for',18956 -1 value: virtualNode.actualNode.id,18957 -1 context: virtualNode.actualNode18958 -1 })[0];-1 20252 text.accessibleTextVirtual = function accessibleTextVirtual(virtualNode) { -1 20253 var context = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; -1 20254 var actualNode = virtualNode.actualNode; -1 20255 context = prepareContext(virtualNode, context); -1 20256 if (shouldIgnoreHidden(virtualNode, context)) { -1 20257 return ''; -1 20258 } -1 20259 var computationSteps = [ aria.arialabelledbyText, aria.arialabelText, text.nativeTextAlternative, text.formControlValue, text.subtreeText, textNodeContent, text.titleText ]; -1 20260 var accName = computationSteps.reduce(function(accName, step) { -1 20261 if (accName !== '') { -1 20262 return accName; -1 20263 } -1 20264 return step(virtualNode, context); -1 20265 }, ''); -1 20266 if (context.startNode === virtualNode) { -1 20267 accName = text.sanitize(accName); 18959 20268 }18960 -1 if (!label) {18961 -1 label = dom.findUpVirtual(virtualNode, 'label');-1 20269 if (context.debug) { -1 20270 axe.log(accName || '{empty-value}', actualNode, context); 18962 20271 }18963 -1 return axe.utils.getNodeFromTree(axe._tree[0], label);18964 -1 }18965 -1 function isButton(_ref27) {18966 -1 var actualNode = _ref27.actualNode;18967 -1 return [ 'button', 'reset', 'submit' ].includes(actualNode.type.toLowerCase());18968 -1 }18969 -1 function isInput(_ref28) {18970 -1 var actualNode = _ref28.actualNode;18971 -1 var nodeName = actualNode.nodeName.toUpperCase();18972 -1 return nodeName === 'TEXTAREA' || nodeName === 'SELECT' || nodeName === 'INPUT' && actualNode.type.toLowerCase() !== 'hidden';-1 20272 return accName; -1 20273 }; -1 20274 function textNodeContent(_ref31) { -1 20275 var actualNode = _ref31.actualNode; -1 20276 if (actualNode.nodeType !== 3) { -1 20277 return ''; -1 20278 } -1 20279 return actualNode.textContent; 18973 20280 }18974 -1 function shouldCheckSubtree(_ref29) {18975 -1 var actualNode = _ref29.actualNode;18976 -1 return [ 'BUTTON', 'SUMMARY', 'A' ].includes(actualNode.nodeName.toUpperCase());-1 20281 function shouldIgnoreHidden(_ref32, context) { -1 20282 var actualNode = _ref32.actualNode; -1 20283 if (actualNode.nodeType !== 1 || context.includeHidden) { -1 20284 return false; -1 20285 } -1 20286 return !dom.isVisible(actualNode, true); 18977 20287 }18978 -1 function shouldNeverCheckSubtree(_ref30) {18979 -1 var actualNode = _ref30.actualNode;18980 -1 return [ 'TABLE', 'FIGURE', 'SELECT' ].includes(actualNode.nodeName.toUpperCase());-1 20288 function prepareContext(virtualNode, context) { -1 20289 var actualNode = virtualNode.actualNode; -1 20290 if (!context.startNode) { -1 20291 context = _extends({ -1 20292 startNode: virtualNode -1 20293 }, context); -1 20294 } -1 20295 if (actualNode.nodeType === 1 && context.inLabelledByContext && context.includeHidden === undefined) { -1 20296 context = _extends({ -1 20297 includeHidden: !dom.isVisible(actualNode, true) -1 20298 }, context); -1 20299 } -1 20300 return context; 18981 20301 }18982 -1 function formValueText(_ref31, inLabelledByContext) {18983 -1 var actualNode = _ref31.actualNode;18984 -1 var nodeName = actualNode.nodeName.toUpperCase();18985 -1 if (nodeName === 'INPUT') {18986 -1 if (!actualNode.hasAttribute('type') || inputTypes.includes(actualNode.type.toLowerCase())) {18987 -1 return actualNode.value;18988 -1 }18989 -1 return '';-1 20302 text.accessibleTextVirtual.alreadyProcessed = function alreadyProcessed(virtualnode, context) { -1 20303 context.processed = context.processed || []; -1 20304 if (context.processed.includes(virtualnode)) { -1 20305 return true; 18990 20306 }18991 -1 if (nodeName === 'SELECT' && inLabelledByContext) {18992 -1 var opts = actualNode.options;18993 -1 if (opts && opts.length) {18994 -1 var returnText = '';18995 -1 for (var i = 0; i < opts.length; i++) {18996 -1 if (opts[i].selected) {18997 -1 returnText += ' ' + opts[i].text;18998 -1 }18999 -1 }19000 -1 return text.sanitize(returnText);19001 -1 }-1 20307 context.processed.push(virtualnode); -1 20308 return false; -1 20309 }; -1 20310 var selectRoles = [ 'combobox', 'listbox' ]; -1 20311 var rangeRoles = [ 'progressbar', 'scrollbar', 'slider', 'spinbutton' ]; -1 20312 var controlValueRoles = [ 'textbox' ].concat(selectRoles, rangeRoles); -1 20313 text.formControlValueMethods = { -1 20314 nativeTextboxValue: nativeTextboxValue, -1 20315 nativeSelectValue: nativeSelectValue, -1 20316 ariaTextboxValue: ariaTextboxValue, -1 20317 ariaListboxValue: ariaListboxValue, -1 20318 ariaComboboxValue: ariaComboboxValue, -1 20319 ariaRangeValue: ariaRangeValue -1 20320 }; -1 20321 text.formControlValue = function formControlValue(virtualNode) { -1 20322 var context = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; -1 20323 var actualNode = virtualNode.actualNode; -1 20324 var unsupported = text.unsupported.accessibleNameFromFieldValue || []; -1 20325 var role = aria.getRole(actualNode); -1 20326 if (context.startNode === virtualNode || !controlValueRoles.includes(role) || unsupported.includes(role)) { 19002 20327 return ''; 19003 20328 }19004 -1 if (nodeName === 'TEXTAREA' && actualNode.value) {19005 -1 return actualNode.value;-1 20329 var valueMethods = Object.keys(text.formControlValueMethods).map(function(name) { -1 20330 return text.formControlValueMethods[name]; -1 20331 }); -1 20332 var valueString = valueMethods.reduce(function(accName, step) { -1 20333 return accName || step(virtualNode, context); -1 20334 }, ''); -1 20335 if (context.debug) { -1 20336 axe.log(valueString || '{empty-value}', actualNode, context); -1 20337 } -1 20338 return valueString; -1 20339 }; -1 20340 function nativeTextboxValue(node) { -1 20341 node = node.actualNode || node; -1 20342 var nonTextInputTypes = [ 'button', 'checkbox', 'file', 'hidden', 'image', 'password', 'radio', 'reset', 'submit', 'color' ]; -1 20343 var nodeName = node.nodeName.toUpperCase(); -1 20344 if (nodeName === 'TEXTAREA' || nodeName === 'INPUT' && !nonTextInputTypes.includes(node.type)) { -1 20345 return node.value || ''; 19006 20346 } 19007 20347 return ''; 19008 20348 }19009 -1 function checkDescendant(_ref32, nodeName) {19010 -1 var actualNode = _ref32.actualNode;19011 -1 var candidate = actualNode.querySelector(nodeName.toLowerCase());19012 -1 if (candidate) {19013 -1 return text.accessibleText(candidate);-1 20349 function nativeSelectValue(node) { -1 20350 node = node.actualNode || node; -1 20351 if (node.nodeName.toUpperCase() !== 'SELECT') { -1 20352 return ''; 19014 20353 }19015 -1 return '';-1 20354 return Array.from(node.options).filter(function(option) { -1 20355 return option.selected; -1 20356 }).map(function(option) { -1 20357 return option.text; -1 20358 }).join(' ') || ''; 19016 20359 }19017 -1 function isEmbeddedControl(elm) {19018 -1 if (!elm) {19019 -1 return false;-1 20360 function ariaTextboxValue(virtualNode) { -1 20361 var actualNode = virtualNode.actualNode; -1 20362 var role = aria.getRole(actualNode); -1 20363 if (role !== 'textbox') { -1 20364 return ''; 19020 20365 }19021 -1 var actualNode = elm.actualNode;19022 -1 switch (actualNode.nodeName.toUpperCase()) {19023 -1 case 'SELECT':19024 -1 case 'TEXTAREA':19025 -1 return true;19026 -119027 -1 case 'INPUT':19028 -1 return !actualNode.hasAttribute('type') || inputTypes.includes(actualNode.getAttribute('type').toLowerCase());19029 -119030 -1 default:19031 -1 return false;-1 20366 if (!dom.isHiddenWithCSS(actualNode)) { -1 20367 return text.visibleVirtual(virtualNode, true); -1 20368 } else { -1 20369 return actualNode.textContent; 19032 20370 } 19033 20371 }19034 -1 function shouldCheckAlt(_ref33) {19035 -1 var actualNode = _ref33.actualNode;19036 -1 var nodeName = actualNode.nodeName.toUpperCase();19037 -1 return [ 'IMG', 'APPLET', 'AREA' ].includes(nodeName) || nodeName === 'INPUT' && actualNode.type.toLowerCase() === 'image';19038 -1 }19039 -1 function nonEmptyText(t) {19040 -1 return !!text.sanitize(t);19041 -1 }19042 -1 text.accessibleText = function accessibleText(element, inLabelledByContext) {19043 -1 var virtualNode = axe.utils.getNodeFromTree(axe._tree[0], element);19044 -1 return axe.commons.text.accessibleTextVirtual(virtualNode, inLabelledByContext);19045 -1 };19046 -1 text.accessibleTextVirtual = function accessibleTextVirtual(element, inLabelledByContext) {19047 -1 var accessibleNameComputation = void 0;19048 -1 var encounteredNodes = [];19049 -1 if (element instanceof Node) {19050 -1 element = axe.utils.getNodeFromTree(axe._tree[0], element);19051 -1 }19052 -1 function getInnerText(element, inLabelledByContext, inControlContext) {19053 -1 return element.children.reduce(function(returnText, child) {19054 -1 var actualNode = child.actualNode;19055 -1 if (actualNode.nodeType === 3) {19056 -1 returnText += actualNode.nodeValue;19057 -1 } else if (actualNode.nodeType === 1) {19058 -1 if (!phrasingElements.includes(actualNode.nodeName.toUpperCase())) {19059 -1 returnText += ' ';19060 -1 }19061 -1 returnText += accessibleNameComputation(child, inLabelledByContext, inControlContext);19062 -1 }19063 -1 return returnText;19064 -1 }, '');19065 -1 }19066 -1 function getLayoutTableText(element) {19067 -1 if (!axe.commons.table.isDataTable(element.actualNode) && axe.commons.table.getAllCells(element.actualNode).length === 1) {19068 -1 return getInnerText(element, false, false).trim();19069 -1 }-1 20372 function ariaListboxValue(virtualNode, context) { -1 20373 var actualNode = virtualNode.actualNode; -1 20374 var role = aria.getRole(actualNode); -1 20375 if (role !== 'listbox') { 19070 20376 return ''; 19071 20377 }19072 -1 function checkNative(element, inLabelledByContext, inControlContext) {19073 -1 var returnText = '';19074 -1 var actualNode = element.actualNode;19075 -1 var nodeName = actualNode.nodeName.toUpperCase();19076 -1 if (shouldCheckSubtree(element)) {19077 -1 returnText = getInnerText(element, false, false) || '';19078 -1 if (nonEmptyText(returnText)) {19079 -1 return returnText;19080 -1 }19081 -1 }19082 -1 if (nodeName === 'FIGURE') {19083 -1 returnText = checkDescendant(element, 'figcaption');19084 -1 if (nonEmptyText(returnText)) {19085 -1 return returnText;19086 -1 }19087 -1 }19088 -1 if (nodeName === 'TABLE') {19089 -1 returnText = checkDescendant(element, 'caption');19090 -1 if (nonEmptyText(returnText)) {19091 -1 return returnText;19092 -1 }19093 -1 returnText = actualNode.getAttribute('title') || actualNode.getAttribute('summary') || getLayoutTableText(element) || '';19094 -1 if (nonEmptyText(returnText)) {19095 -1 return returnText;19096 -1 }19097 -1 }19098 -1 if (shouldCheckAlt(element)) {19099 -1 return actualNode.getAttribute('alt') || '';19100 -1 }19101 -1 if (isInput(element) && !inControlContext) {19102 -1 if (isButton(element)) {19103 -1 return actualNode.value || actualNode.title || defaultButtonValues[actualNode.type] || '';19104 -1 }19105 -1 var labelElement = findLabel(element);19106 -1 if (labelElement) {19107 -1 return accessibleNameComputation(labelElement, inLabelledByContext, true);19108 -1 }19109 -1 }-1 20378 var selected = aria.getOwnedVirtual(virtualNode).filter(function(owned) { -1 20379 return aria.getRole(owned) === 'option' && owned.actualNode.getAttribute('aria-selected') === 'true'; -1 20380 }); -1 20381 if (selected.length === 0) { 19110 20382 return ''; 19111 20383 }19112 -1 function checkARIA(element, inLabelledByContext, inControlContext) {19113 -1 var returnText = '';19114 -1 var actualNode = element.actualNode;19115 -1 if (!inLabelledByContext && actualNode.hasAttribute('aria-labelledby')) {19116 -1 returnText = text.sanitize(dom.idrefs(actualNode, 'aria-labelledby').map(function(label) {19117 -1 if (label !== null) {19118 -1 if (actualNode === label) {19119 -1 encounteredNodes.pop();19120 -1 }19121 -1 var vLabel = axe.utils.getNodeFromTree(axe._tree[0], label);19122 -1 return accessibleNameComputation(vLabel, true, actualNode !== label);19123 -1 } else {19124 -1 return '';19125 -1 }19126 -1 }).join(' '));19127 -1 }19128 -1 if (!returnText && !(inControlContext && isEmbeddedControl(element)) && actualNode.hasAttribute('aria-label')) {19129 -1 return text.sanitize(actualNode.getAttribute('aria-label'));19130 -1 }19131 -1 return returnText;-1 20384 return axe.commons.text.accessibleTextVirtual(selected[0], context); -1 20385 } -1 20386 function ariaComboboxValue(virtualNode, context) { -1 20387 var actualNode = virtualNode.actualNode; -1 20388 var role = aria.getRole(actualNode, { -1 20389 noImplicit: true -1 20390 }); -1 20391 var listbox = void 0; -1 20392 if (!role === 'combobox') { -1 20393 return ''; 19132 20394 }19133 -1 accessibleNameComputation = function accessibleNameComputation(element, inLabelledByContext, inControlContext) {19134 -1 var returnText = void 0;19135 -1 if (!element || encounteredNodes.includes(element)) {19136 -1 return '';19137 -1 } else if (element !== null && element.actualNode instanceof Node !== true) {19138 -1 throw new Error('Invalid argument. Virtual Node must be provided');19139 -1 } else if (!inLabelledByContext && !dom.isVisible(element.actualNode, true)) {19140 -1 return '';19141 -1 }19142 -1 encounteredNodes.push(element);19143 -1 var role = element.actualNode.getAttribute('role');19144 -1 returnText = checkARIA(element, inLabelledByContext, inControlContext);19145 -1 if (nonEmptyText(returnText)) {19146 -1 return returnText;19147 -1 }19148 -1 returnText = checkNative(element, inLabelledByContext, inControlContext);19149 -1 if (nonEmptyText(returnText)) {19150 -1 return returnText;19151 -1 }19152 -1 if (inControlContext) {19153 -1 returnText = formValueText(element, inLabelledByContext);19154 -1 if (nonEmptyText(returnText)) {19155 -1 return returnText;19156 -1 }19157 -1 }19158 -1 if ((inLabelledByContext || !shouldNeverCheckSubtree(element)) && (!role || aria.getRolesWithNameFromContents().indexOf(role) !== -1)) {19159 -1 returnText = getInnerText(element, inLabelledByContext, inControlContext);19160 -1 if (nonEmptyText(returnText)) {19161 -1 return returnText;19162 -1 }19163 -1 }19164 -1 if (element.actualNode.hasAttribute('title')) {19165 -1 return element.actualNode.getAttribute('title');19166 -1 }-1 20395 listbox = aria.getOwnedVirtual(virtualNode).filter(function(elm) { -1 20396 return aria.getRole(elm) === 'listbox'; -1 20397 })[0]; -1 20398 return listbox ? text.formControlValueMethods.ariaListboxValue(listbox, context) : ''; -1 20399 } -1 20400 function ariaRangeValue(node) { -1 20401 node = node.actualNode || node; -1 20402 var role = aria.getRole(node); -1 20403 if (!rangeRoles.includes(role) || !node.hasAttribute('aria-valuenow')) { 19167 20404 return '';19168 -1 };19169 -1 return text.sanitize(accessibleNameComputation(element, inLabelledByContext));-1 20405 } -1 20406 var valueNow = +node.getAttribute('aria-valuenow'); -1 20407 return !isNaN(valueNow) ? String(valueNow) : '0'; -1 20408 } -1 20409 text.isHumanInterpretable = function(str) { -1 20410 if (!str.length) { -1 20411 return 0; -1 20412 } -1 20413 var alphaNumericIconMap = [ 'x', 'i' ]; -1 20414 if (alphaNumericIconMap.includes(str)) { -1 20415 return 0; -1 20416 } -1 20417 var noUnicodeStr = text.removeUnicode(str, { -1 20418 emoji: true, -1 20419 nonBmp: true, -1 20420 punctuations: true -1 20421 }); -1 20422 if (!text.sanitize(noUnicodeStr)) { -1 20423 return 0; -1 20424 } -1 20425 return 1; 19170 20426 }; 19171 20427 var autocomplete = { 19172 20428 stateTerms: [ 'on', 'off' ], @@ -19177,7 +20433,7 @@ module.exports = { 19177 20433 }; 19178 20434 text.autocomplete = autocomplete; 19179 20435 text.isValidAutocomplete = function isValidAutocomplete(autocomplete) {19180 -1 var _ref34 = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}, _ref34$looseTyped = _ref34.looseTyped, looseTyped = _ref34$looseTyped === undefined ? false : _ref34$looseTyped, _ref34$stateTerms = _ref34.stateTerms, stateTerms = _ref34$stateTerms === undefined ? [] : _ref34$stateTerms, _ref34$locations = _ref34.locations, locations = _ref34$locations === undefined ? [] : _ref34$locations, _ref34$qualifiers = _ref34.qualifiers, qualifiers = _ref34$qualifiers === undefined ? [] : _ref34$qualifiers, _ref34$standaloneTerm = _ref34.standaloneTerms, standaloneTerms = _ref34$standaloneTerm === undefined ? [] : _ref34$standaloneTerm, _ref34$qualifiedTerms = _ref34.qualifiedTerms, qualifiedTerms = _ref34$qualifiedTerms === undefined ? [] : _ref34$qualifiedTerms;-1 20436 var _ref33 = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}, _ref33$looseTyped = _ref33.looseTyped, looseTyped = _ref33$looseTyped === undefined ? false : _ref33$looseTyped, _ref33$stateTerms = _ref33.stateTerms, stateTerms = _ref33$stateTerms === undefined ? [] : _ref33$stateTerms, _ref33$locations = _ref33.locations, locations = _ref33$locations === undefined ? [] : _ref33$locations, _ref33$qualifiers = _ref33.qualifiers, qualifiers = _ref33$qualifiers === undefined ? [] : _ref33$qualifiers, _ref33$standaloneTerm = _ref33.standaloneTerms, standaloneTerms = _ref33$standaloneTerm === undefined ? [] : _ref33$standaloneTerm, _ref33$qualifiedTerms = _ref33.qualifiedTerms, qualifiedTerms = _ref33$qualifiedTerms === undefined ? [] : _ref33$qualifiedTerms; 19181 20437 autocomplete = autocomplete.toLowerCase().trim(); 19182 20438 stateTerms = stateTerms.concat(text.autocomplete.stateTerms); 19183 20439 if (stateTerms.includes(autocomplete) || autocomplete === '') { @@ -19206,6 +20462,45 @@ module.exports = { 19206 20462 var purposeTerm = autocompleteTerms[autocompleteTerms.length - 1]; 19207 20463 return standaloneTerms.includes(purposeTerm) || qualifiedTerms.includes(purposeTerm); 19208 20464 }; -1 20465 text.labelText = function labelText(virtualNode) { -1 20466 var context = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; -1 20467 var alreadyProcessed = text.accessibleTextVirtual.alreadyProcessed; -1 20468 if (context.inControlContext || context.inLabelledByContext || alreadyProcessed(virtualNode, context)) { -1 20469 return ''; -1 20470 } -1 20471 if (!context.startNode) { -1 20472 context.startNode = virtualNode; -1 20473 } -1 20474 var labelContext = _extends({ -1 20475 inControlContext: true -1 20476 }, context); -1 20477 var explicitLabels = getExplicitLabels(virtualNode); -1 20478 var implicitLabel = dom.findUpVirtual(virtualNode, 'label'); -1 20479 var labels = void 0; -1 20480 if (implicitLabel) { -1 20481 labels = [].concat(_toConsumableArray(explicitLabels), [ implicitLabel ]); -1 20482 labels.sort(axe.utils.nodeSorter); -1 20483 } else { -1 20484 labels = explicitLabels; -1 20485 } -1 20486 return labels.map(function(label) { -1 20487 return text.accessibleText(label, labelContext); -1 20488 }).filter(function(text) { -1 20489 return text !== ''; -1 20490 }).join(' '); -1 20491 }; -1 20492 function getExplicitLabels(_ref34) { -1 20493 var actualNode = _ref34.actualNode; -1 20494 if (!actualNode.id) { -1 20495 return []; -1 20496 } -1 20497 return dom.findElmsInContext({ -1 20498 elm: 'label', -1 20499 attr: 'for', -1 20500 value: actualNode.id, -1 20501 context: actualNode -1 20502 }); -1 20503 } 19209 20504 text.labelVirtual = function(node) { 19210 20505 var ref, candidate, doc; 19211 20506 candidate = aria.labelVirtual(node); @@ -19213,7 +20508,7 @@ module.exports = { 19213 20508 return candidate; 19214 20509 } 19215 20510 if (node.actualNode.id) {19216 -1 var id = axe.commons.utils.escapeSelector(node.actualNode.getAttribute('id'));-1 20511 var id = axe.utils.escapeSelector(node.actualNode.getAttribute('id')); 19217 20512 doc = axe.commons.dom.getRootNode(node.actualNode); 19218 20513 ref = doc.querySelector('label[for="' + id + '"]'); 19219 20514 candidate = ref && text.visible(ref, true); @@ -19232,10 +20527,226 @@ module.exports = { 19232 20527 node = axe.utils.getNodeFromTree(axe._tree[0], node); 19233 20528 return text.labelVirtual(node); 19234 20529 }; -1 20530 text.nativeElementType = [ { -1 20531 matches: [ { -1 20532 nodeName: 'textarea' -1 20533 }, { -1 20534 nodeName: 'input', -1 20535 properties: { -1 20536 type: [ 'text', 'password', 'search', 'tel', 'email', 'url' ] -1 20537 } -1 20538 } ], -1 20539 namingMethods: 'labelText' -1 20540 }, { -1 20541 matches: { -1 20542 nodeName: 'input', -1 20543 properties: { -1 20544 type: [ 'button', 'submit', 'reset' ] -1 20545 } -1 20546 }, -1 20547 namingMethods: [ 'valueText', 'titleText', 'buttonDefaultText' ] -1 20548 }, { -1 20549 matches: { -1 20550 nodeName: 'input', -1 20551 properties: { -1 20552 type: 'image' -1 20553 } -1 20554 }, -1 20555 namingMethods: [ 'altText', 'valueText', 'labelText', 'titleText', 'buttonDefaultText' ] -1 20556 }, { -1 20557 matches: 'button', -1 20558 namingMethods: 'subtreeText' -1 20559 }, { -1 20560 matches: 'fieldset', -1 20561 namingMethods: 'fieldsetLegendText' -1 20562 }, { -1 20563 matches: 'OUTPUT', -1 20564 namingMethods: 'subtreeText' -1 20565 }, { -1 20566 matches: [ { -1 20567 nodeName: 'select' -1 20568 }, { -1 20569 nodeName: 'input', -1 20570 properties: { -1 20571 type: /^(?!text|password|search|tel|email|url|button|submit|reset)/ -1 20572 } -1 20573 } ], -1 20574 namingMethods: 'labelText' -1 20575 }, { -1 20576 matches: 'summary', -1 20577 namingMethods: 'subtreeText' -1 20578 }, { -1 20579 matches: 'figure', -1 20580 namingMethods: [ 'figureText', 'titleText' ] -1 20581 }, { -1 20582 matches: 'img', -1 20583 namingMethods: 'altText' -1 20584 }, { -1 20585 matches: 'table', -1 20586 namingMethods: [ 'tableCaptionText', 'tableSummaryText' ] -1 20587 }, { -1 20588 matches: [ 'hr', 'br' ], -1 20589 namingMethods: [ 'titleText', 'singleSpace' ] -1 20590 } ]; -1 20591 text.nativeTextAlternative = function nativeTextAlternative(virtualNode) { -1 20592 var context = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; -1 20593 var actualNode = virtualNode.actualNode; -1 20594 if (actualNode.nodeType !== 1 || [ 'presentation', 'none' ].includes(aria.getRole(actualNode))) { -1 20595 return ''; -1 20596 } -1 20597 var textMethods = findTextMethods(virtualNode); -1 20598 var accName = textMethods.reduce(function(accName, step) { -1 20599 return accName || step(virtualNode, context); -1 20600 }, ''); -1 20601 if (context.debug) { -1 20602 axe.log(accName || '{empty-value}', actualNode, context); -1 20603 } -1 20604 return accName; -1 20605 }; -1 20606 function findTextMethods(virtualNode) { -1 20607 var nativeElementType = text.nativeElementType, nativeTextMethods = text.nativeTextMethods; -1 20608 var nativeType = nativeElementType.find(function(_ref35) { -1 20609 var matches = _ref35.matches; -1 20610 return axe.commons.matches(virtualNode, matches); -1 20611 }); -1 20612 var methods = nativeType ? [].concat(nativeType.namingMethods) : []; -1 20613 return methods.map(function(methodName) { -1 20614 return nativeTextMethods[methodName]; -1 20615 }); -1 20616 } -1 20617 var defaultButtonValues = { -1 20618 submit: 'Submit', -1 20619 image: 'Submit', -1 20620 reset: 'Reset', -1 20621 button: '' -1 20622 }; -1 20623 text.nativeTextMethods = { -1 20624 valueText: function valueText(_ref36) { -1 20625 var actualNode = _ref36.actualNode; -1 20626 return actualNode.value || ''; -1 20627 }, -1 20628 buttonDefaultText: function buttonDefaultText(_ref37) { -1 20629 var actualNode = _ref37.actualNode; -1 20630 return defaultButtonValues[actualNode.type] || ''; -1 20631 }, -1 20632 tableCaptionText: descendantText.bind(null, 'caption'), -1 20633 figureText: descendantText.bind(null, 'figcaption'), -1 20634 fieldsetLegendText: descendantText.bind(null, 'legend'), -1 20635 altText: attrText.bind(null, 'alt'), -1 20636 tableSummaryText: attrText.bind(null, 'summary'), -1 20637 titleText: function titleText(virtualNode, context) { -1 20638 return text.titleText(virtualNode, context); -1 20639 }, -1 20640 subtreeText: function subtreeText(virtualNode, context) { -1 20641 return text.subtreeText(virtualNode, context); -1 20642 }, -1 20643 labelText: function labelText(virtualNode, context) { -1 20644 return text.labelText(virtualNode, context); -1 20645 }, -1 20646 singleSpace: function singleSpace() { -1 20647 return ' '; -1 20648 } -1 20649 }; -1 20650 function attrText(attr, _ref38) { -1 20651 var actualNode = _ref38.actualNode; -1 20652 return actualNode.getAttribute(attr) || ''; -1 20653 } -1 20654 function descendantText(nodeName, _ref39, context) { -1 20655 var actualNode = _ref39.actualNode; -1 20656 nodeName = nodeName.toLowerCase(); -1 20657 var nodeNames = [ nodeName, actualNode.nodeName.toLowerCase() ].join(','); -1 20658 var candidate = actualNode.querySelector(nodeNames); -1 20659 if (!candidate || candidate.nodeName.toLowerCase() !== nodeName) { -1 20660 return ''; -1 20661 } -1 20662 return text.accessibleText(candidate, context); -1 20663 } 19235 20664 text.sanitize = function(str) { 19236 20665 'use strict'; 19237 20666 return str.replace(/\r\n/g, '\n').replace(/\u00A0/g, ' ').replace(/[\s]{2,}/g, ' ').trim(); 19238 20667 }; -1 20668 text.subtreeText = function subtreeText(virtualNode) { -1 20669 var context = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; -1 20670 var alreadyProcessed = text.accessibleTextVirtual.alreadyProcessed; -1 20671 context.startNode = context.startNode || virtualNode; -1 20672 var strict = context.strict; -1 20673 if (alreadyProcessed(virtualNode, context) || !aria.namedFromContents(virtualNode, { -1 20674 strict: strict -1 20675 })) { -1 20676 return ''; -1 20677 } -1 20678 return aria.getOwnedVirtual(virtualNode).reduce(function(contentText, child) { -1 20679 return appendAccessibleText(contentText, child, context); -1 20680 }, ''); -1 20681 }; -1 20682 var phrasingElements = [ 'A', 'EM', 'STRONG', 'SMALL', 'MARK', 'ABBR', 'DFN', 'I', 'B', 'S', 'U', 'CODE', 'VAR', 'SAMP', 'KBD', 'SUP', 'SUB', 'Q', 'CITE', 'SPAN', 'BDO', 'BDI', 'WBR', 'INS', 'DEL', 'MAP', 'AREA', 'NOSCRIPT', 'RUBY', 'BUTTON', 'LABEL', 'OUTPUT', 'DATALIST', 'KEYGEN', 'PROGRESS', 'COMMAND', 'CANVAS', 'TIME', 'METER', '#TEXT' ]; -1 20683 function appendAccessibleText(contentText, virtualNode, context) { -1 20684 var nodeName = virtualNode.actualNode.nodeName.toUpperCase(); -1 20685 var contentTextAdd = text.accessibleTextVirtual(virtualNode, context); -1 20686 if (!contentTextAdd) { -1 20687 return contentText; -1 20688 } -1 20689 if (!phrasingElements.includes(nodeName)) { -1 20690 if (contentTextAdd[0] !== ' ') { -1 20691 contentTextAdd += ' '; -1 20692 } -1 20693 if (contentText && contentText[contentText.length - 1] !== ' ') { -1 20694 contentTextAdd = ' ' + contentTextAdd; -1 20695 } -1 20696 } -1 20697 return contentText + contentTextAdd; -1 20698 } -1 20699 var alwaysTitleElements = [ 'button', 'iframe', 'a[href]', { -1 20700 nodeName: 'input', -1 20701 properties: { -1 20702 type: 'button' -1 20703 } -1 20704 } ]; -1 20705 text.titleText = function titleText(node) { -1 20706 node = node.actualNode || node; -1 20707 if (node.nodeType !== 1 || !node.hasAttribute('title')) { -1 20708 return ''; -1 20709 } -1 20710 if (!axe.commons.matches(node, alwaysTitleElements) && [ 'none', 'presentation' ].includes(aria.getRole(node))) { -1 20711 return ''; -1 20712 } -1 20713 return node.getAttribute('title'); -1 20714 }; -1 20715 text.hasUnicode = function hasUnicode(str, options) { -1 20716 var emoji = options.emoji, nonBmp = options.nonBmp, punctuations = options.punctuations; -1 20717 if (emoji) { -1 20718 return axe.imports.emojiRegexText().test(str); -1 20719 } -1 20720 if (nonBmp) { -1 20721 return getUnicodeNonBmpRegExp().test(str); -1 20722 } -1 20723 if (punctuations) { -1 20724 return getPunctuationRegExp().test(str); -1 20725 } -1 20726 return false; -1 20727 }; -1 20728 text.removeUnicode = function removeUnicode(str, options) { -1 20729 var emoji = options.emoji, nonBmp = options.nonBmp, punctuations = options.punctuations; -1 20730 if (emoji) { -1 20731 str = str.replace(axe.imports.emojiRegexText(), ''); -1 20732 } -1 20733 if (nonBmp) { -1 20734 str = str.replace(getUnicodeNonBmpRegExp(), ''); -1 20735 } -1 20736 if (punctuations) { -1 20737 str = str.replace(getPunctuationRegExp(), ''); -1 20738 } -1 20739 return str; -1 20740 }; -1 20741 function getUnicodeNonBmpRegExp() { -1 20742 return new RegExp('[' + 'ᴀ-ᵿ' + 'ᶀ-ᶿ' + '᷀-᷿' + '₠-' + '⃐-' + '℀-⅏' + '⅐-' + '←-⇿' + '∀-⋿' + '⌀-⏿' + '␀-' + '⑀-' + '①-⓿' + '─-╿' + '▀-▟' + '■-◿' + '☀-⛿' + '✀-➿' + ']'); -1 20743 } -1 20744 function getPunctuationRegExp() { -1 20745 return /[\u2000-\u206F\u2E00-\u2E7F\\'!"#$%&()*+,\-.\/:;<=>?@\[\]^_`{|}~]/g; -1 20746 } -1 20747 text.unsupported = { -1 20748 accessibleNameFromFieldValue: [ 'combobox', 'listbox', 'progressbar' ] -1 20749 }; 19239 20750 text.visibleVirtual = function(element, screenReader, noRecursing) { 19240 20751 var result = element.children.map(function(child) { 19241 20752 if (child.actualNode.nodeType === 3) { @@ -19253,33 +20764,12 @@ module.exports = { 19253 20764 element = axe.utils.getNodeFromTree(axe._tree[0], element); 19254 20765 return text.visibleVirtual(element, screenReader, noRecursing); 19255 20766 };19256 -1 axe.utils.getBaseLang = function getBaseLang(lang) {19257 -1 if (!lang) {19258 -1 return '';19259 -1 }19260 -1 return lang.trim().split('-')[0].toLowerCase();19261 -1 };19262 -1 var htmlTags = [ 'a', 'abbr', 'address', 'area', 'article', 'aside', 'audio', 'b', 'base', 'bdi', 'bdo', 'blockquote', 'body', 'br', 'button', 'canvas', 'caption', 'cite', 'code', 'col', 'colgroup', 'data', 'datalist', 'dd', 'del', 'details', 'dfn', 'dialog', 'div', 'dl', 'dt', 'em', 'embed', 'fieldset', 'figcaption', 'figure', 'footer', 'form', 'h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'head', 'header', 'hgroup', 'hr', 'html', 'i', 'iframe', 'img', 'input', 'ins', 'kbd', 'keygen', 'label', 'legend', 'li', 'link', 'main', 'map', 'mark', 'math', 'menu', 'menuitem', 'meta', 'meter', 'nav', 'noscript', 'object', 'ol', 'optgroup', 'option', 'output', 'p', 'param', 'picture', 'pre', 'progress', 'q', 'rb', 'rp', 'rt', 'rtc', 'ruby', 's', 'samp', 'script', 'section', 'select', 'slot', 'small', 'source', 'span', 'strong', 'style', 'sub', 'summary', 'sup', 'svg', 'table', 'tbody', 'td', 'template', 'textarea', 'tfoot', 'th', 'thead', 'time', 'title', 'tr', 'track', 'u', 'ul', 'var', 'video', 'wbr' ];19263 -1 axe.utils.isHtmlElement = function isHtmlElement(node) {19264 -1 var tagName = node.nodeName.toLowerCase();19265 -1 return htmlTags.includes(tagName) && node.namespaceURI !== 'http://www.w3.org/2000/svg';19266 -1 };19267 -1 axe.utils.tokenList = function(str) {19268 -1 'use strict';19269 -1 return str.trim().replace(/\s{2,}/g, ' ').split(' ');19270 -1 };19271 -1 var langs = [ 'aa', 'ab', 'ae', 'af', 'ak', 'am', 'an', 'ar', 'as', 'av', 'ay', 'az', 'ba', 'be', 'bg', 'bh', 'bi', 'bm', 'bn', 'bo', 'br', 'bs', 'ca', 'ce', 'ch', 'co', 'cr', 'cs', 'cu', 'cv', 'cy', 'da', 'de', 'dv', 'dz', 'ee', 'el', 'en', 'eo', 'es', 'et', 'eu', 'fa', 'ff', 'fi', 'fj', 'fo', 'fr', 'fy', 'ga', 'gd', 'gl', 'gn', 'gu', 'gv', 'ha', 'he', 'hi', 'ho', 'hr', 'ht', 'hu', 'hy', 'hz', 'ia', 'id', 'ie', 'ig', 'ii', 'ik', 'in', 'io', 'is', 'it', 'iu', 'iw', 'ja', 'ji', 'jv', 'jw', 'ka', 'kg', 'ki', 'kj', 'kk', 'kl', 'km', 'kn', 'ko', 'kr', 'ks', 'ku', 'kv', 'kw', 'ky', 'la', 'lb', 'lg', 'li', 'ln', 'lo', 'lt', 'lu', 'lv', 'mg', 'mh', 'mi', 'mk', 'ml', 'mn', 'mo', 'mr', 'ms', 'mt', 'my', 'na', 'nb', 'nd', 'ne', 'ng', 'nl', 'nn', 'no', 'nr', 'nv', 'ny', 'oc', 'oj', 'om', 'or', 'os', 'pa', 'pi', 'pl', 'ps', 'pt', 'qu', 'rm', 'rn', 'ro', 'ru', 'rw', 'sa', 'sc', 'sd', 'se', 'sg', 'sh', 'si', 'sk', 'sl', 'sm', 'sn', 'so', 'sq', 'sr', 'ss', 'st', 'su', 'sv', 'sw', 'ta', 'te', 'tg', 'th', 'ti', 'tk', 'tl', 'tn', 'to', 'tr', 'ts', 'tt', 'tw', 'ty', 'ug', 'uk', 'ur', 'uz', 've', 'vi', 'vo', 'wa', 'wo', 'xh', 'yi', 'yo', 'za', 'zh', 'zu', 'aaa', 'aab', 'aac', 'aad', 'aae', 'aaf', 'aag', 'aah', 'aai', 'aak', 'aal', 'aam', 'aan', 'aao', 'aap', 'aaq', 'aas', 'aat', 'aau', 'aav', 'aaw', 'aax', 'aaz', 'aba', 'abb', 'abc', 'abd', 'abe', 'abf', 'abg', 'abh', 'abi', 'abj', 'abl', 'abm', 'abn', 'abo', 'abp', 'abq', 'abr', 'abs', 'abt', 'abu', 'abv', 'abw', 'abx', 'aby', 'abz', 'aca', 'acb', 'acd', 'ace', 'acf', 'ach', 'aci', 'ack', 'acl', 'acm', 'acn', 'acp', 'acq', 'acr', 'acs', 'act', 'acu', 'acv', 'acw', 'acx', 'acy', 'acz', 'ada', 'adb', 'add', 'ade', 'adf', 'adg', 'adh', 'adi', 'adj', 'adl', 'adn', 'ado', 'adp', 'adq', 'adr', 'ads', 'adt', 'adu', 'adw', 'adx', 'ady', 'adz', 'aea', 'aeb', 'aec', 'aed', 'aee', 'aek', 'ael', 'aem', 'aen', 'aeq', 'aer', 'aes', 'aeu', 'aew', 'aey', 'aez', 'afa', 'afb', 'afd', 'afe', 'afg', 'afh', 'afi', 'afk', 'afn', 'afo', 'afp', 'afs', 'aft', 'afu', 'afz', 'aga', 'agb', 'agc', 'agd', 'age', 'agf', 'agg', 'agh', 'agi', 'agj', 'agk', 'agl', 'agm', 'agn', 'ago', 'agp', 'agq', 'agr', 'ags', 'agt', 'agu', 'agv', 'agw', 'agx', 'agy', 'agz', 'aha', 'ahb', 'ahg', 'ahh', 'ahi', 'ahk', 'ahl', 'ahm', 'ahn', 'aho', 'ahp', 'ahr', 'ahs', 'aht', 'aia', 'aib', 'aic', 'aid', 'aie', 'aif', 'aig', 'aih', 'aii', 'aij', 'aik', 'ail', 'aim', 'ain', 'aio', 'aip', 'aiq', 'air', 'ais', 'ait', 'aiw', 'aix', 'aiy', 'aja', 'ajg', 'aji', 'ajn', 'ajp', 'ajt', 'aju', 'ajw', 'ajz', 'akb', 'akc', 'akd', 'ake', 'akf', 'akg', 'akh', 'aki', 'akj', 'akk', 'akl', 'akm', 'ako', 'akp', 'akq', 'akr', 'aks', 'akt', 'aku', 'akv', 'akw', 'akx', 'aky', 'akz', 'ala', 'alc', 'ald', 'ale', 'alf', 'alg', 'alh', 'ali', 'alj', 'alk', 'all', 'alm', 'aln', 'alo', 'alp', 'alq', 'alr', 'als', 'alt', 'alu', 'alv', 'alw', 'alx', 'aly', 'alz', 'ama', 'amb', 'amc', 'ame', 'amf', 'amg', 'ami', 'amj', 'amk', 'aml', 'amm', 'amn', 'amo', 'amp', 'amq', 'amr', 'ams', 'amt', 'amu', 'amv', 'amw', 'amx', 'amy', 'amz', 'ana', 'anb', 'anc', 'and', 'ane', 'anf', 'ang', 'anh', 'ani', 'anj', 'ank', 'anl', 'anm', 'ann', 'ano', 'anp', 'anq', 'anr', 'ans', 'ant', 'anu', 'anv', 'anw', 'anx', 'any', 'anz', 'aoa', 'aob', 'aoc', 'aod', 'aoe', 'aof', 'aog', 'aoh', 'aoi', 'aoj', 'aok', 'aol', 'aom', 'aon', 'aor', 'aos', 'aot', 'aou', 'aox', 'aoz', 'apa', 'apb', 'apc', 'apd', 'ape', 'apf', 'apg', 'aph', 'api', 'apj', 'apk', 'apl', 'apm', 'apn', 'apo', 'app', 'apq', 'apr', 'aps', 'apt', 'apu', 'apv', 'apw', 'apx', 'apy', 'apz', 'aqa', 'aqc', 'aqd', 'aqg', 'aql', 'aqm', 'aqn', 'aqp', 'aqr', 'aqt', 'aqz', 'arb', 'arc', 'ard', 'are', 'arh', 'ari', 'arj', 'ark', 'arl', 'arn', 'aro', 'arp', 'arq', 'arr', 'ars', 'art', 'aru', 'arv', 'arw', 'arx', 'ary', 'arz', 'asa', 'asb', 'asc', 'asd', 'ase', 'asf', 'asg', 'ash', 'asi', 'asj', 'ask', 'asl', 'asn', 'aso', 'asp', 'asq', 'asr', 'ass', 'ast', 'asu', 'asv', 'asw', 'asx', 'asy', 'asz', 'ata', 'atb', 'atc', 'atd', 'ate', 'atg', 'ath', 'ati', 'atj', 'atk', 'atl', 'atm', 'atn', 'ato', 'atp', 'atq', 'atr', 'ats', 'att', 'atu', 'atv', 'atw', 'atx', 'aty', 'atz', 'aua', 'aub', 'auc', 'aud', 'aue', 'auf', 'aug', 'auh', 'aui', 'auj', 'auk', 'aul', 'aum', 'aun', 'auo', 'aup', 'auq', 'aur', 'aus', 'aut', 'auu', 'auw', 'aux', 'auy', 'auz', 'avb', 'avd', 'avi', 'avk', 'avl', 'avm', 'avn', 'avo', 'avs', 'avt', 'avu', 'avv', 'awa', 'awb', 'awc', 'awd', 'awe', 'awg', 'awh', 'awi', 'awk', 'awm', 'awn', 'awo', 'awr', 'aws', 'awt', 'awu', 'awv', 'aww', 'awx', 'awy', 'axb', 'axe', 'axg', 'axk', 'axl', 'axm', 'axx', 'aya', 'ayb', 'ayc', 'ayd', 'aye', 'ayg', 'ayh', 'ayi', 'ayk', 'ayl', 'ayn', 'ayo', 'ayp', 'ayq', 'ayr', 'ays', 'ayt', 'ayu', 'ayx', 'ayy', 'ayz', 'aza', 'azb', 'azc', 'azd', 'azg', 'azj', 'azm', 'azn', 'azo', 'azt', 'azz', 'baa', 'bab', 'bac', 'bad', 'bae', 'baf', 'bag', 'bah', 'bai', 'baj', 'bal', 'ban', 'bao', 'bap', 'bar', 'bas', 'bat', 'bau', 'bav', 'baw', 'bax', 'bay', 'baz', 'bba', 'bbb', 'bbc', 'bbd', 'bbe', 'bbf', 'bbg', 'bbh', 'bbi', 'bbj', 'bbk', 'bbl', 'bbm', 'bbn', 'bbo', 'bbp', 'bbq', 'bbr', 'bbs', 'bbt', 'bbu', 'bbv', 'bbw', 'bbx', 'bby', 'bbz', 'bca', 'bcb', 'bcc', 'bcd', 'bce', 'bcf', 'bcg', 'bch', 'bci', 'bcj', 'bck', 'bcl', 'bcm', 'bcn', 'bco', 'bcp', 'bcq', 'bcr', 'bcs', 'bct', 'bcu', 'bcv', 'bcw', 'bcy', 'bcz', 'bda', 'bdb', 'bdc', 'bdd', 'bde', 'bdf', 'bdg', 'bdh', 'bdi', 'bdj', 'bdk', 'bdl', 'bdm', 'bdn', 'bdo', 'bdp', 'bdq', 'bdr', 'bds', 'bdt', 'bdu', 'bdv', 'bdw', 'bdx', 'bdy', 'bdz', 'bea', 'beb', 'bec', 'bed', 'bee', 'bef', 'beg', 'beh', 'bei', 'bej', 'bek', 'bem', 'beo', 'bep', 'beq', 'ber', 'bes', 'bet', 'beu', 'bev', 'bew', 'bex', 'bey', 'bez', 'bfa', 'bfb', 'bfc', 'bfd', 'bfe', 'bff', 'bfg', 'bfh', 'bfi', 'bfj', 'bfk', 'bfl', 'bfm', 'bfn', 'bfo', 'bfp', 'bfq', 'bfr', 'bfs', 'bft', 'bfu', 'bfw', 'bfx', 'bfy', 'bfz', 'bga', 'bgb', 'bgc', 'bgd', 'bge', 'bgf', 'bgg', 'bgi', 'bgj', 'bgk', 'bgl', 'bgm', 'bgn', 'bgo', 'bgp', 'bgq', 'bgr', 'bgs', 'bgt', 'bgu', 'bgv', 'bgw', 'bgx', 'bgy', 'bgz', 'bha', 'bhb', 'bhc', 'bhd', 'bhe', 'bhf', 'bhg', 'bhh', 'bhi', 'bhj', 'bhk', 'bhl', 'bhm', 'bhn', 'bho', 'bhp', 'bhq', 'bhr', 'bhs', 'bht', 'bhu', 'bhv', 'bhw', 'bhx', 'bhy', 'bhz', 'bia', 'bib', 'bic', 'bid', 'bie', 'bif', 'big', 'bij', 'bik', 'bil', 'bim', 'bin', 'bio', 'bip', 'biq', 'bir', 'bit', 'biu', 'biv', 'biw', 'bix', 'biy', 'biz', 'bja', 'bjb', 'bjc', 'bjd', 'bje', 'bjf', 'bjg', 'bjh', 'bji', 'bjj', 'bjk', 'bjl', 'bjm', 'bjn', 'bjo', 'bjp', 'bjq', 'bjr', 'bjs', 'bjt', 'bju', 'bjv', 'bjw', 'bjx', 'bjy', 'bjz', 'bka', 'bkb', 'bkc', 'bkd', 'bkf', 'bkg', 'bkh', 'bki', 'bkj', 'bkk', 'bkl', 'bkm', 'bkn', 'bko', 'bkp', 'bkq', 'bkr', 'bks', 'bkt', 'bku', 'bkv', 'bkw', 'bkx', 'bky', 'bkz', 'bla', 'blb', 'blc', 'bld', 'ble', 'blf', 'blg', 'blh', 'bli', 'blj', 'blk', 'bll', 'blm', 'bln', 'blo', 'blp', 'blq', 'blr', 'bls', 'blt', 'blv', 'blw', 'blx', 'bly', 'blz', 'bma', 'bmb', 'bmc', 'bmd', 'bme', 'bmf', 'bmg', 'bmh', 'bmi', 'bmj', 'bmk', 'bml', 'bmm', 'bmn', 'bmo', 'bmp', 'bmq', 'bmr', 'bms', 'bmt', 'bmu', 'bmv', 'bmw', 'bmx', 'bmy', 'bmz', 'bna', 'bnb', 'bnc', 'bnd', 'bne', 'bnf', 'bng', 'bni', 'bnj', 'bnk', 'bnl', 'bnm', 'bnn', 'bno', 'bnp', 'bnq', 'bnr', 'bns', 'bnt', 'bnu', 'bnv', 'bnw', 'bnx', 'bny', 'bnz', 'boa', 'bob', 'boe', 'bof', 'bog', 'boh', 'boi', 'boj', 'bok', 'bol', 'bom', 'bon', 'boo', 'bop', 'boq', 'bor', 'bot', 'bou', 'bov', 'bow', 'box', 'boy', 'boz', 'bpa', 'bpb', 'bpd', 'bpg', 'bph', 'bpi', 'bpj', 'bpk', 'bpl', 'bpm', 'bpn', 'bpo', 'bpp', 'bpq', 'bpr', 'bps', 'bpt', 'bpu', 'bpv', 'bpw', 'bpx', 'bpy', 'bpz', 'bqa', 'bqb', 'bqc', 'bqd', 'bqf', 'bqg', 'bqh', 'bqi', 'bqj', 'bqk', 'bql', 'bqm', 'bqn', 'bqo', 'bqp', 'bqq', 'bqr', 'bqs', 'bqt', 'bqu', 'bqv', 'bqw', 'bqx', 'bqy', 'bqz', 'bra', 'brb', 'brc', 'brd', 'brf', 'brg', 'brh', 'bri', 'brj', 'brk', 'brl', 'brm', 'brn', 'bro', 'brp', 'brq', 'brr', 'brs', 'brt', 'bru', 'brv', 'brw', 'brx', 'bry', 'brz', 'bsa', 'bsb', 'bsc', 'bse', 'bsf', 'bsg', 'bsh', 'bsi', 'bsj', 'bsk', 'bsl', 'bsm', 'bsn', 'bso', 'bsp', 'bsq', 'bsr', 'bss', 'bst', 'bsu', 'bsv', 'bsw', 'bsx', 'bsy', 'bta', 'btb', 'btc', 'btd', 'bte', 'btf', 'btg', 'bth', 'bti', 'btj', 'btk', 'btl', 'btm', 'btn', 'bto', 'btp', 'btq', 'btr', 'bts', 'btt', 'btu', 'btv', 'btw', 'btx', 'bty', 'btz', 'bua', 'bub', 'buc', 'bud', 'bue', 'buf', 'bug', 'buh', 'bui', 'buj', 'buk', 'bum', 'bun', 'buo', 'bup', 'buq', 'bus', 'but', 'buu', 'buv', 'buw', 'bux', 'buy', 'buz', 'bva', 'bvb', 'bvc', 'bvd', 'bve', 'bvf', 'bvg', 'bvh', 'bvi', 'bvj', 'bvk', 'bvl', 'bvm', 'bvn', 'bvo', 'bvp', 'bvq', 'bvr', 'bvt', 'bvu', 'bvv', 'bvw', 'bvx', 'bvy', 'bvz', 'bwa', 'bwb', 'bwc', 'bwd', 'bwe', 'bwf', 'bwg', 'bwh', 'bwi', 'bwj', 'bwk', 'bwl', 'bwm', 'bwn', 'bwo', 'bwp', 'bwq', 'bwr', 'bws', 'bwt', 'bwu', 'bww', 'bwx', 'bwy', 'bwz', 'bxa', 'bxb', 'bxc', 'bxd', 'bxe', 'bxf', 'bxg', 'bxh', 'bxi', 'bxj', 'bxk', 'bxl', 'bxm', 'bxn', 'bxo', 'bxp', 'bxq', 'bxr', 'bxs', 'bxu', 'bxv', 'bxw', 'bxx', 'bxz', 'bya', 'byb', 'byc', 'byd', 'bye', 'byf', 'byg', 'byh', 'byi', 'byj', 'byk', 'byl', 'bym', 'byn', 'byo', 'byp', 'byq', 'byr', 'bys', 'byt', 'byv', 'byw', 'byx', 'byy', 'byz', 'bza', 'bzb', 'bzc', 'bzd', 'bze', 'bzf', 'bzg', 'bzh', 'bzi', 'bzj', 'bzk', 'bzl', 'bzm', 'bzn', 'bzo', 'bzp', 'bzq', 'bzr', 'bzs', 'bzt', 'bzu', 'bzv', 'bzw', 'bzx', 'bzy', 'bzz', 'caa', 'cab', 'cac', 'cad', 'cae', 'caf', 'cag', 'cah', 'cai', 'caj', 'cak', 'cal', 'cam', 'can', 'cao', 'cap', 'caq', 'car', 'cas', 'cau', 'cav', 'caw', 'cax', 'cay', 'caz', 'cba', 'cbb', 'cbc', 'cbd', 'cbe', 'cbg', 'cbh', 'cbi', 'cbj', 'cbk', 'cbl', 'cbn', 'cbo', 'cbq', 'cbr', 'cbs', 'cbt', 'cbu', 'cbv', 'cbw', 'cby', 'cca', 'ccc', 'ccd', 'cce', 'ccg', 'cch', 'ccj', 'ccl', 'ccm', 'ccn', 'cco', 'ccp', 'ccq', 'ccr', 'ccs', 'cda', 'cdc', 'cdd', 'cde', 'cdf', 'cdg', 'cdh', 'cdi', 'cdj', 'cdm', 'cdn', 'cdo', 'cdr', 'cds', 'cdy', 'cdz', 'cea', 'ceb', 'ceg', 'cek', 'cel', 'cen', 'cet', 'cfa', 'cfd', 'cfg', 'cfm', 'cga', 'cgc', 'cgg', 'cgk', 'chb', 'chc', 'chd', 'chf', 'chg', 'chh', 'chj', 'chk', 'chl', 'chm', 'chn', 'cho', 'chp', 'chq', 'chr', 'cht', 'chw', 'chx', 'chy', 'chz', 'cia', 'cib', 'cic', 'cid', 'cie', 'cih', 'cik', 'cim', 'cin', 'cip', 'cir', 'ciw', 'ciy', 'cja', 'cje', 'cjh', 'cji', 'cjk', 'cjm', 'cjn', 'cjo', 'cjp', 'cjr', 'cjs', 'cjv', 'cjy', 'cka', 'ckb', 'ckh', 'ckl', 'ckn', 'cko', 'ckq', 'ckr', 'cks', 'ckt', 'cku', 'ckv', 'ckx', 'cky', 'ckz', 'cla', 'clc', 'cld', 'cle', 'clh', 'cli', 'clj', 'clk', 'cll', 'clm', 'clo', 'clt', 'clu', 'clw', 'cly', 'cma', 'cmc', 'cme', 'cmg', 'cmi', 'cmk', 'cml', 'cmm', 'cmn', 'cmo', 'cmr', 'cms', 'cmt', 'cna', 'cnb', 'cnc', 'cng', 'cnh', 'cni', 'cnk', 'cnl', 'cno', 'cnr', 'cns', 'cnt', 'cnu', 'cnw', 'cnx', 'coa', 'cob', 'coc', 'cod', 'coe', 'cof', 'cog', 'coh', 'coj', 'cok', 'col', 'com', 'con', 'coo', 'cop', 'coq', 'cot', 'cou', 'cov', 'cow', 'cox', 'coy', 'coz', 'cpa', 'cpb', 'cpc', 'cpe', 'cpf', 'cpg', 'cpi', 'cpn', 'cpo', 'cpp', 'cps', 'cpu', 'cpx', 'cpy', 'cqd', 'cqu', 'cra', 'crb', 'crc', 'crd', 'crf', 'crg', 'crh', 'cri', 'crj', 'crk', 'crl', 'crm', 'crn', 'cro', 'crp', 'crq', 'crr', 'crs', 'crt', 'crv', 'crw', 'crx', 'cry', 'crz', 'csa', 'csb', 'csc', 'csd', 'cse', 'csf', 'csg', 'csh', 'csi', 'csj', 'csk', 'csl', 'csm', 'csn', 'cso', 'csq', 'csr', 'css', 'cst', 'csu', 'csv', 'csw', 'csy', 'csz', 'cta', 'ctc', 'ctd', 'cte', 'ctg', 'cth', 'ctl', 'ctm', 'ctn', 'cto', 'ctp', 'cts', 'ctt', 'ctu', 'ctz', 'cua', 'cub', 'cuc', 'cug', 'cuh', 'cui', 'cuj', 'cuk', 'cul', 'cum', 'cuo', 'cup', 'cuq', 'cur', 'cus', 'cut', 'cuu', 'cuv', 'cuw', 'cux', 'cuy', 'cvg', 'cvn', 'cwa', 'cwb', 'cwd', 'cwe', 'cwg', 'cwt', 'cya', 'cyb', 'cyo', 'czh', 'czk', 'czn', 'czo', 'czt', 'daa', 'dac', 'dad', 'dae', 'daf', 'dag', 'dah', 'dai', 'daj', 'dak', 'dal', 'dam', 'dao', 'dap', 'daq', 'dar', 'das', 'dau', 'dav', 'daw', 'dax', 'day', 'daz', 'dba', 'dbb', 'dbd', 'dbe', 'dbf', 'dbg', 'dbi', 'dbj', 'dbl', 'dbm', 'dbn', 'dbo', 'dbp', 'dbq', 'dbr', 'dbt', 'dbu', 'dbv', 'dbw', 'dby', 'dcc', 'dcr', 'dda', 'ddd', 'dde', 'ddg', 'ddi', 'ddj', 'ddn', 'ddo', 'ddr', 'dds', 'ddw', 'dec', 'ded', 'dee', 'def', 'deg', 'deh', 'dei', 'dek', 'del', 'dem', 'den', 'dep', 'deq', 'der', 'des', 'dev', 'dez', 'dga', 'dgb', 'dgc', 'dgd', 'dge', 'dgg', 'dgh', 'dgi', 'dgk', 'dgl', 'dgn', 'dgo', 'dgr', 'dgs', 'dgt', 'dgu', 'dgw', 'dgx', 'dgz', 'dha', 'dhd', 'dhg', 'dhi', 'dhl', 'dhm', 'dhn', 'dho', 'dhr', 'dhs', 'dhu', 'dhv', 'dhw', 'dhx', 'dia', 'dib', 'dic', 'did', 'dif', 'dig', 'dih', 'dii', 'dij', 'dik', 'dil', 'dim', 'din', 'dio', 'dip', 'diq', 'dir', 'dis', 'dit', 'diu', 'diw', 'dix', 'diy', 'diz', 'dja', 'djb', 'djc', 'djd', 'dje', 'djf', 'dji', 'djj', 'djk', 'djl', 'djm', 'djn', 'djo', 'djr', 'dju', 'djw', 'dka', 'dkk', 'dkl', 'dkr', 'dks', 'dkx', 'dlg', 'dlk', 'dlm', 'dln', 'dma', 'dmb', 'dmc', 'dmd', 'dme', 'dmg', 'dmk', 'dml', 'dmm', 'dmn', 'dmo', 'dmr', 'dms', 'dmu', 'dmv', 'dmw', 'dmx', 'dmy', 'dna', 'dnd', 'dne', 'dng', 'dni', 'dnj', 'dnk', 'dnn', 'dnr', 'dnt', 'dnu', 'dnv', 'dnw', 'dny', 'doa', 'dob', 'doc', 'doe', 'dof', 'doh', 'doi', 'dok', 'dol', 'don', 'doo', 'dop', 'doq', 'dor', 'dos', 'dot', 'dov', 'dow', 'dox', 'doy', 'doz', 'dpp', 'dra', 'drb', 'drc', 'drd', 'dre', 'drg', 'drh', 'dri', 'drl', 'drn', 'dro', 'drq', 'drr', 'drs', 'drt', 'dru', 'drw', 'dry', 'dsb', 'dse', 'dsh', 'dsi', 'dsl', 'dsn', 'dso', 'dsq', 'dta', 'dtb', 'dtd', 'dth', 'dti', 'dtk', 'dtm', 'dtn', 'dto', 'dtp', 'dtr', 'dts', 'dtt', 'dtu', 'dty', 'dua', 'dub', 'duc', 'dud', 'due', 'duf', 'dug', 'duh', 'dui', 'duj', 'duk', 'dul', 'dum', 'dun', 'duo', 'dup', 'duq', 'dur', 'dus', 'duu', 'duv', 'duw', 'dux', 'duy', 'duz', 'dva', 'dwa', 'dwl', 'dwr', 'dws', 'dwu', 'dww', 'dwy', 'dya', 'dyb', 'dyd', 'dyg', 'dyi', 'dym', 'dyn', 'dyo', 'dyu', 'dyy', 'dza', 'dzd', 'dze', 'dzg', 'dzl', 'dzn', 'eaa', 'ebg', 'ebk', 'ebo', 'ebr', 'ebu', 'ecr', 'ecs', 'ecy', 'eee', 'efa', 'efe', 'efi', 'ega', 'egl', 'ego', 'egx', 'egy', 'ehu', 'eip', 'eit', 'eiv', 'eja', 'eka', 'ekc', 'eke', 'ekg', 'eki', 'ekk', 'ekl', 'ekm', 'eko', 'ekp', 'ekr', 'eky', 'ele', 'elh', 'eli', 'elk', 'elm', 'elo', 'elp', 'elu', 'elx', 'ema', 'emb', 'eme', 'emg', 'emi', 'emk', 'emm', 'emn', 'emo', 'emp', 'ems', 'emu', 'emw', 'emx', 'emy', 'ena', 'enb', 'enc', 'end', 'enf', 'enh', 'enl', 'enm', 'enn', 'eno', 'enq', 'enr', 'enu', 'env', 'enw', 'enx', 'eot', 'epi', 'era', 'erg', 'erh', 'eri', 'erk', 'ero', 'err', 'ers', 'ert', 'erw', 'ese', 'esg', 'esh', 'esi', 'esk', 'esl', 'esm', 'esn', 'eso', 'esq', 'ess', 'esu', 'esx', 'esy', 'etb', 'etc', 'eth', 'etn', 'eto', 'etr', 'ets', 'ett', 'etu', 'etx', 'etz', 'euq', 'eve', 'evh', 'evn', 'ewo', 'ext', 'eya', 'eyo', 'eza', 'eze', 'faa', 'fab', 'fad', 'faf', 'fag', 'fah', 'fai', 'faj', 'fak', 'fal', 'fam', 'fan', 'fap', 'far', 'fat', 'fau', 'fax', 'fay', 'faz', 'fbl', 'fcs', 'fer', 'ffi', 'ffm', 'fgr', 'fia', 'fie', 'fil', 'fip', 'fir', 'fit', 'fiu', 'fiw', 'fkk', 'fkv', 'fla', 'flh', 'fli', 'fll', 'fln', 'flr', 'fly', 'fmp', 'fmu', 'fnb', 'fng', 'fni', 'fod', 'foi', 'fom', 'fon', 'for', 'fos', 'fox', 'fpe', 'fqs', 'frc', 'frd', 'frk', 'frm', 'fro', 'frp', 'frq', 'frr', 'frs', 'frt', 'fse', 'fsl', 'fss', 'fub', 'fuc', 'fud', 'fue', 'fuf', 'fuh', 'fui', 'fuj', 'fum', 'fun', 'fuq', 'fur', 'fut', 'fuu', 'fuv', 'fuy', 'fvr', 'fwa', 'fwe', 'gaa', 'gab', 'gac', 'gad', 'gae', 'gaf', 'gag', 'gah', 'gai', 'gaj', 'gak', 'gal', 'gam', 'gan', 'gao', 'gap', 'gaq', 'gar', 'gas', 'gat', 'gau', 'gav', 'gaw', 'gax', 'gay', 'gaz', 'gba', 'gbb', 'gbc', 'gbd', 'gbe', 'gbf', 'gbg', 'gbh', 'gbi', 'gbj', 'gbk', 'gbl', 'gbm', 'gbn', 'gbo', 'gbp', 'gbq', 'gbr', 'gbs', 'gbu', 'gbv', 'gbw', 'gbx', 'gby', 'gbz', 'gcc', 'gcd', 'gce', 'gcf', 'gcl', 'gcn', 'gcr', 'gct', 'gda', 'gdb', 'gdc', 'gdd', 'gde', 'gdf', 'gdg', 'gdh', 'gdi', 'gdj', 'gdk', 'gdl', 'gdm', 'gdn', 'gdo', 'gdq', 'gdr', 'gds', 'gdt', 'gdu', 'gdx', 'gea', 'geb', 'gec', 'ged', 'geg', 'geh', 'gei', 'gej', 'gek', 'gel', 'gem', 'geq', 'ges', 'gev', 'gew', 'gex', 'gey', 'gez', 'gfk', 'gft', 'gfx', 'gga', 'ggb', 'ggd', 'gge', 'ggg', 'ggk', 'ggl', 'ggn', 'ggo', 'ggr', 'ggt', 'ggu', 'ggw', 'gha', 'ghc', 'ghe', 'ghh', 'ghk', 'ghl', 'ghn', 'gho', 'ghr', 'ghs', 'ght', 'gia', 'gib', 'gic', 'gid', 'gie', 'gig', 'gih', 'gil', 'gim', 'gin', 'gio', 'gip', 'giq', 'gir', 'gis', 'git', 'giu', 'giw', 'gix', 'giy', 'giz', 'gji', 'gjk', 'gjm', 'gjn', 'gjr', 'gju', 'gka', 'gkd', 'gke', 'gkn', 'gko', 'gkp', 'gku', 'glc', 'gld', 'glh', 'gli', 'glj', 'glk', 'gll', 'glo', 'glr', 'glu', 'glw', 'gly', 'gma', 'gmb', 'gmd', 'gme', 'gmg', 'gmh', 'gml', 'gmm', 'gmn', 'gmq', 'gmu', 'gmv', 'gmw', 'gmx', 'gmy', 'gmz', 'gna', 'gnb', 'gnc', 'gnd', 'gne', 'gng', 'gnh', 'gni', 'gnj', 'gnk', 'gnl', 'gnm', 'gnn', 'gno', 'gnq', 'gnr', 'gnt', 'gnu', 'gnw', 'gnz', 'goa', 'gob', 'goc', 'god', 'goe', 'gof', 'gog', 'goh', 'goi', 'goj', 'gok', 'gol', 'gom', 'gon', 'goo', 'gop', 'goq', 'gor', 'gos', 'got', 'gou', 'gow', 'gox', 'goy', 'goz', 'gpa', 'gpe', 'gpn', 'gqa', 'gqi', 'gqn', 'gqr', 'gqu', 'gra', 'grb', 'grc', 'grd', 'grg', 'grh', 'gri', 'grj', 'grk', 'grm', 'gro', 'grq', 'grr', 'grs', 'grt', 'gru', 'grv', 'grw', 'grx', 'gry', 'grz', 'gse', 'gsg', 'gsl', 'gsm', 'gsn', 'gso', 'gsp', 'gss', 'gsw', 'gta', 'gti', 'gtu', 'gua', 'gub', 'guc', 'gud', 'gue', 'guf', 'gug', 'guh', 'gui', 'guk', 'gul', 'gum', 'gun', 'guo', 'gup', 'guq', 'gur', 'gus', 'gut', 'guu', 'guv', 'guw', 'gux', 'guz', 'gva', 'gvc', 'gve', 'gvf', 'gvj', 'gvl', 'gvm', 'gvn', 'gvo', 'gvp', 'gvr', 'gvs', 'gvy', 'gwa', 'gwb', 'gwc', 'gwd', 'gwe', 'gwf', 'gwg', 'gwi', 'gwj', 'gwm', 'gwn', 'gwr', 'gwt', 'gwu', 'gww', 'gwx', 'gxx', 'gya', 'gyb', 'gyd', 'gye', 'gyf', 'gyg', 'gyi', 'gyl', 'gym', 'gyn', 'gyo', 'gyr', 'gyy', 'gza', 'gzi', 'gzn', 'haa', 'hab', 'hac', 'had', 'hae', 'haf', 'hag', 'hah', 'hai', 'haj', 'hak', 'hal', 'ham', 'han', 'hao', 'hap', 'haq', 'har', 'has', 'hav', 'haw', 'hax', 'hay', 'haz', 'hba', 'hbb', 'hbn', 'hbo', 'hbu', 'hca', 'hch', 'hdn', 'hds', 'hdy', 'hea', 'hed', 'heg', 'heh', 'hei', 'hem', 'hgm', 'hgw', 'hhi', 'hhr', 'hhy', 'hia', 'hib', 'hid', 'hif', 'hig', 'hih', 'hii', 'hij', 'hik', 'hil', 'him', 'hio', 'hir', 'hit', 'hiw', 'hix', 'hji', 'hka', 'hke', 'hkk', 'hkn', 'hks', 'hla', 'hlb', 'hld', 'hle', 'hlt', 'hlu', 'hma', 'hmb', 'hmc', 'hmd', 'hme', 'hmf', 'hmg', 'hmh', 'hmi', 'hmj', 'hmk', 'hml', 'hmm', 'hmn', 'hmp', 'hmq', 'hmr', 'hms', 'hmt', 'hmu', 'hmv', 'hmw', 'hmx', 'hmy', 'hmz', 'hna', 'hnd', 'hne', 'hnh', 'hni', 'hnj', 'hnn', 'hno', 'hns', 'hnu', 'hoa', 'hob', 'hoc', 'hod', 'hoe', 'hoh', 'hoi', 'hoj', 'hok', 'hol', 'hom', 'hoo', 'hop', 'hor', 'hos', 'hot', 'hov', 'how', 'hoy', 'hoz', 'hpo', 'hps', 'hra', 'hrc', 'hre', 'hrk', 'hrm', 'hro', 'hrp', 'hrr', 'hrt', 'hru', 'hrw', 'hrx', 'hrz', 'hsb', 'hsh', 'hsl', 'hsn', 'hss', 'hti', 'hto', 'hts', 'htu', 'htx', 'hub', 'huc', 'hud', 'hue', 'huf', 'hug', 'huh', 'hui', 'huj', 'huk', 'hul', 'hum', 'huo', 'hup', 'huq', 'hur', 'hus', 'hut', 'huu', 'huv', 'huw', 'hux', 'huy', 'huz', 'hvc', 'hve', 'hvk', 'hvn', 'hvv', 'hwa', 'hwc', 'hwo', 'hya', 'hyw', 'hyx', 'iai', 'ian', 'iap', 'iar', 'iba', 'ibb', 'ibd', 'ibe', 'ibg', 'ibh', 'ibi', 'ibl', 'ibm', 'ibn', 'ibr', 'ibu', 'iby', 'ica', 'ich', 'icl', 'icr', 'ida', 'idb', 'idc', 'idd', 'ide', 'idi', 'idr', 'ids', 'idt', 'idu', 'ifa', 'ifb', 'ife', 'iff', 'ifk', 'ifm', 'ifu', 'ify', 'igb', 'ige', 'igg', 'igl', 'igm', 'ign', 'igo', 'igs', 'igw', 'ihb', 'ihi', 'ihp', 'ihw', 'iin', 'iir', 'ijc', 'ije', 'ijj', 'ijn', 'ijo', 'ijs', 'ike', 'iki', 'ikk', 'ikl', 'iko', 'ikp', 'ikr', 'iks', 'ikt', 'ikv', 'ikw', 'ikx', 'ikz', 'ila', 'ilb', 'ilg', 'ili', 'ilk', 'ill', 'ilm', 'ilo', 'ilp', 'ils', 'ilu', 'ilv', 'ilw', 'ima', 'ime', 'imi', 'iml', 'imn', 'imo', 'imr', 'ims', 'imy', 'inb', 'inc', 'ine', 'ing', 'inh', 'inj', 'inl', 'inm', 'inn', 'ino', 'inp', 'ins', 'int', 'inz', 'ior', 'iou', 'iow', 'ipi', 'ipo', 'iqu', 'iqw', 'ira', 'ire', 'irh', 'iri', 'irk', 'irn', 'iro', 'irr', 'iru', 'irx', 'iry', 'isa', 'isc', 'isd', 'ise', 'isg', 'ish', 'isi', 'isk', 'ism', 'isn', 'iso', 'isr', 'ist', 'isu', 'itb', 'itc', 'itd', 'ite', 'iti', 'itk', 'itl', 'itm', 'ito', 'itr', 'its', 'itt', 'itv', 'itw', 'itx', 'ity', 'itz', 'ium', 'ivb', 'ivv', 'iwk', 'iwm', 'iwo', 'iws', 'ixc', 'ixl', 'iya', 'iyo', 'iyx', 'izh', 'izi', 'izr', 'izz', 'jaa', 'jab', 'jac', 'jad', 'jae', 'jaf', 'jah', 'jaj', 'jak', 'jal', 'jam', 'jan', 'jao', 'jaq', 'jar', 'jas', 'jat', 'jau', 'jax', 'jay', 'jaz', 'jbe', 'jbi', 'jbj', 'jbk', 'jbn', 'jbo', 'jbr', 'jbt', 'jbu', 'jbw', 'jcs', 'jct', 'jda', 'jdg', 'jdt', 'jeb', 'jee', 'jeg', 'jeh', 'jei', 'jek', 'jel', 'jen', 'jer', 'jet', 'jeu', 'jgb', 'jge', 'jgk', 'jgo', 'jhi', 'jhs', 'jia', 'jib', 'jic', 'jid', 'jie', 'jig', 'jih', 'jii', 'jil', 'jim', 'jio', 'jiq', 'jit', 'jiu', 'jiv', 'jiy', 'jje', 'jjr', 'jka', 'jkm', 'jko', 'jkp', 'jkr', 'jku', 'jle', 'jls', 'jma', 'jmb', 'jmc', 'jmd', 'jmi', 'jml', 'jmn', 'jmr', 'jms', 'jmw', 'jmx', 'jna', 'jnd', 'jng', 'jni', 'jnj', 'jnl', 'jns', 'job', 'jod', 'jog', 'jor', 'jos', 'jow', 'jpa', 'jpr', 'jpx', 'jqr', 'jra', 'jrb', 'jrr', 'jrt', 'jru', 'jsl', 'jua', 'jub', 'juc', 'jud', 'juh', 'jui', 'juk', 'jul', 'jum', 'jun', 'juo', 'jup', 'jur', 'jus', 'jut', 'juu', 'juw', 'juy', 'jvd', 'jvn', 'jwi', 'jya', 'jye', 'jyy', 'kaa', 'kab', 'kac', 'kad', 'kae', 'kaf', 'kag', 'kah', 'kai', 'kaj', 'kak', 'kam', 'kao', 'kap', 'kaq', 'kar', 'kav', 'kaw', 'kax', 'kay', 'kba', 'kbb', 'kbc', 'kbd', 'kbe', 'kbf', 'kbg', 'kbh', 'kbi', 'kbj', 'kbk', 'kbl', 'kbm', 'kbn', 'kbo', 'kbp', 'kbq', 'kbr', 'kbs', 'kbt', 'kbu', 'kbv', 'kbw', 'kbx', 'kby', 'kbz', 'kca', 'kcb', 'kcc', 'kcd', 'kce', 'kcf', 'kcg', 'kch', 'kci', 'kcj', 'kck', 'kcl', 'kcm', 'kcn', 'kco', 'kcp', 'kcq', 'kcr', 'kcs', 'kct', 'kcu', 'kcv', 'kcw', 'kcx', 'kcy', 'kcz', 'kda', 'kdc', 'kdd', 'kde', 'kdf', 'kdg', 'kdh', 'kdi', 'kdj', 'kdk', 'kdl', 'kdm', 'kdn', 'kdo', 'kdp', 'kdq', 'kdr', 'kdt', 'kdu', 'kdv', 'kdw', 'kdx', 'kdy', 'kdz', 'kea', 'keb', 'kec', 'ked', 'kee', 'kef', 'keg', 'keh', 'kei', 'kej', 'kek', 'kel', 'kem', 'ken', 'keo', 'kep', 'keq', 'ker', 'kes', 'ket', 'keu', 'kev', 'kew', 'kex', 'key', 'kez', 'kfa', 'kfb', 'kfc', 'kfd', 'kfe', 'kff', 'kfg', 'kfh', 'kfi', 'kfj', 'kfk', 'kfl', 'kfm', 'kfn', 'kfo', 'kfp', 'kfq', 'kfr', 'kfs', 'kft', 'kfu', 'kfv', 'kfw', 'kfx', 'kfy', 'kfz', 'kga', 'kgb', 'kgc', 'kgd', 'kge', 'kgf', 'kgg', 'kgh', 'kgi', 'kgj', 'kgk', 'kgl', 'kgm', 'kgn', 'kgo', 'kgp', 'kgq', 'kgr', 'kgs', 'kgt', 'kgu', 'kgv', 'kgw', 'kgx', 'kgy', 'kha', 'khb', 'khc', 'khd', 'khe', 'khf', 'khg', 'khh', 'khi', 'khj', 'khk', 'khl', 'khn', 'kho', 'khp', 'khq', 'khr', 'khs', 'kht', 'khu', 'khv', 'khw', 'khx', 'khy', 'khz', 'kia', 'kib', 'kic', 'kid', 'kie', 'kif', 'kig', 'kih', 'kii', 'kij', 'kil', 'kim', 'kio', 'kip', 'kiq', 'kis', 'kit', 'kiu', 'kiv', 'kiw', 'kix', 'kiy', 'kiz', 'kja', 'kjb', 'kjc', 'kjd', 'kje', 'kjf', 'kjg', 'kjh', 'kji', 'kjj', 'kjk', 'kjl', 'kjm', 'kjn', 'kjo', 'kjp', 'kjq', 'kjr', 'kjs', 'kjt', 'kju', 'kjv', 'kjx', 'kjy', 'kjz', 'kka', 'kkb', 'kkc', 'kkd', 'kke', 'kkf', 'kkg', 'kkh', 'kki', 'kkj', 'kkk', 'kkl', 'kkm', 'kkn', 'kko', 'kkp', 'kkq', 'kkr', 'kks', 'kkt', 'kku', 'kkv', 'kkw', 'kkx', 'kky', 'kkz', 'kla', 'klb', 'klc', 'kld', 'kle', 'klf', 'klg', 'klh', 'kli', 'klj', 'klk', 'kll', 'klm', 'kln', 'klo', 'klp', 'klq', 'klr', 'kls', 'klt', 'klu', 'klv', 'klw', 'klx', 'kly', 'klz', 'kma', 'kmb', 'kmc', 'kmd', 'kme', 'kmf', 'kmg', 'kmh', 'kmi', 'kmj', 'kmk', 'kml', 'kmm', 'kmn', 'kmo', 'kmp', 'kmq', 'kmr', 'kms', 'kmt', 'kmu', 'kmv', 'kmw', 'kmx', 'kmy', 'kmz', 'kna', 'knb', 'knc', 'knd', 'kne', 'knf', 'kng', 'kni', 'knj', 'knk', 'knl', 'knm', 'knn', 'kno', 'knp', 'knq', 'knr', 'kns', 'knt', 'knu', 'knv', 'knw', 'knx', 'kny', 'knz', 'koa', 'koc', 'kod', 'koe', 'kof', 'kog', 'koh', 'koi', 'koj', 'kok', 'kol', 'koo', 'kop', 'koq', 'kos', 'kot', 'kou', 'kov', 'kow', 'kox', 'koy', 'koz', 'kpa', 'kpb', 'kpc', 'kpd', 'kpe', 'kpf', 'kpg', 'kph', 'kpi', 'kpj', 'kpk', 'kpl', 'kpm', 'kpn', 'kpo', 'kpp', 'kpq', 'kpr', 'kps', 'kpt', 'kpu', 'kpv', 'kpw', 'kpx', 'kpy', 'kpz', 'kqa', 'kqb', 'kqc', 'kqd', 'kqe', 'kqf', 'kqg', 'kqh', 'kqi', 'kqj', 'kqk', 'kql', 'kqm', 'kqn', 'kqo', 'kqp', 'kqq', 'kqr', 'kqs', 'kqt', 'kqu', 'kqv', 'kqw', 'kqx', 'kqy', 'kqz', 'kra', 'krb', 'krc', 'krd', 'kre', 'krf', 'krh', 'kri', 'krj', 'krk', 'krl', 'krm', 'krn', 'kro', 'krp', 'krr', 'krs', 'krt', 'kru', 'krv', 'krw', 'krx', 'kry', 'krz', 'ksa', 'ksb', 'ksc', 'ksd', 'kse', 'ksf', 'ksg', 'ksh', 'ksi', 'ksj', 'ksk', 'ksl', 'ksm', 'ksn', 'kso', 'ksp', 'ksq', 'ksr', 'kss', 'kst', 'ksu', 'ksv', 'ksw', 'ksx', 'ksy', 'ksz', 'kta', 'ktb', 'ktc', 'ktd', 'kte', 'ktf', 'ktg', 'kth', 'kti', 'ktj', 'ktk', 'ktl', 'ktm', 'ktn', 'kto', 'ktp', 'ktq', 'ktr', 'kts', 'ktt', 'ktu', 'ktv', 'ktw', 'ktx', 'kty', 'ktz', 'kub', 'kuc', 'kud', 'kue', 'kuf', 'kug', 'kuh', 'kui', 'kuj', 'kuk', 'kul', 'kum', 'kun', 'kuo', 'kup', 'kuq', 'kus', 'kut', 'kuu', 'kuv', 'kuw', 'kux', 'kuy', 'kuz', 'kva', 'kvb', 'kvc', 'kvd', 'kve', 'kvf', 'kvg', 'kvh', 'kvi', 'kvj', 'kvk', 'kvl', 'kvm', 'kvn', 'kvo', 'kvp', 'kvq', 'kvr', 'kvs', 'kvt', 'kvu', 'kvv', 'kvw', 'kvx', 'kvy', 'kvz', 'kwa', 'kwb', 'kwc', 'kwd', 'kwe', 'kwf', 'kwg', 'kwh', 'kwi', 'kwj', 'kwk', 'kwl', 'kwm', 'kwn', 'kwo', 'kwp', 'kwq', 'kwr', 'kws', 'kwt', 'kwu', 'kwv', 'kww', 'kwx', 'kwy', 'kwz', 'kxa', 'kxb', 'kxc', 'kxd', 'kxe', 'kxf', 'kxh', 'kxi', 'kxj', 'kxk', 'kxl', 'kxm', 'kxn', 'kxo', 'kxp', 'kxq', 'kxr', 'kxs', 'kxt', 'kxu', 'kxv', 'kxw', 'kxx', 'kxy', 'kxz', 'kya', 'kyb', 'kyc', 'kyd', 'kye', 'kyf', 'kyg', 'kyh', 'kyi', 'kyj', 'kyk', 'kyl', 'kym', 'kyn', 'kyo', 'kyp', 'kyq', 'kyr', 'kys', 'kyt', 'kyu', 'kyv', 'kyw', 'kyx', 'kyy', 'kyz', 'kza', 'kzb', 'kzc', 'kzd', 'kze', 'kzf', 'kzg', 'kzh', 'kzi', 'kzj', 'kzk', 'kzl', 'kzm', 'kzn', 'kzo', 'kzp', 'kzq', 'kzr', 'kzs', 'kzt', 'kzu', 'kzv', 'kzw', 'kzx', 'kzy', 'kzz', 'laa', 'lab', 'lac', 'lad', 'lae', 'laf', 'lag', 'lah', 'lai', 'laj', 'lak', 'lal', 'lam', 'lan', 'lap', 'laq', 'lar', 'las', 'lau', 'law', 'lax', 'lay', 'laz', 'lba', 'lbb', 'lbc', 'lbe', 'lbf', 'lbg', 'lbi', 'lbj', 'lbk', 'lbl', 'lbm', 'lbn', 'lbo', 'lbq', 'lbr', 'lbs', 'lbt', 'lbu', 'lbv', 'lbw', 'lbx', 'lby', 'lbz', 'lcc', 'lcd', 'lce', 'lcf', 'lch', 'lcl', 'lcm', 'lcp', 'lcq', 'lcs', 'lda', 'ldb', 'ldd', 'ldg', 'ldh', 'ldi', 'ldj', 'ldk', 'ldl', 'ldm', 'ldn', 'ldo', 'ldp', 'ldq', 'lea', 'leb', 'lec', 'led', 'lee', 'lef', 'leg', 'leh', 'lei', 'lej', 'lek', 'lel', 'lem', 'len', 'leo', 'lep', 'leq', 'ler', 'les', 'let', 'leu', 'lev', 'lew', 'lex', 'ley', 'lez', 'lfa', 'lfn', 'lga', 'lgb', 'lgg', 'lgh', 'lgi', 'lgk', 'lgl', 'lgm', 'lgn', 'lgq', 'lgr', 'lgt', 'lgu', 'lgz', 'lha', 'lhh', 'lhi', 'lhl', 'lhm', 'lhn', 'lhp', 'lhs', 'lht', 'lhu', 'lia', 'lib', 'lic', 'lid', 'lie', 'lif', 'lig', 'lih', 'lii', 'lij', 'lik', 'lil', 'lio', 'lip', 'liq', 'lir', 'lis', 'liu', 'liv', 'liw', 'lix', 'liy', 'liz', 'lja', 'lje', 'lji', 'ljl', 'ljp', 'ljw', 'ljx', 'lka', 'lkb', 'lkc', 'lkd', 'lke', 'lkh', 'lki', 'lkj', 'lkl', 'lkm', 'lkn', 'lko', 'lkr', 'lks', 'lkt', 'lku', 'lky', 'lla', 'llb', 'llc', 'lld', 'lle', 'llf', 'llg', 'llh', 'lli', 'llj', 'llk', 'lll', 'llm', 'lln', 'llo', 'llp', 'llq', 'lls', 'llu', 'llx', 'lma', 'lmb', 'lmc', 'lmd', 'lme', 'lmf', 'lmg', 'lmh', 'lmi', 'lmj', 'lmk', 'lml', 'lmm', 'lmn', 'lmo', 'lmp', 'lmq', 'lmr', 'lmu', 'lmv', 'lmw', 'lmx', 'lmy', 'lmz', 'lna', 'lnb', 'lnd', 'lng', 'lnh', 'lni', 'lnj', 'lnl', 'lnm', 'lnn', 'lno', 'lns', 'lnu', 'lnw', 'lnz', 'loa', 'lob', 'loc', 'loe', 'lof', 'log', 'loh', 'loi', 'loj', 'lok', 'lol', 'lom', 'lon', 'loo', 'lop', 'loq', 'lor', 'los', 'lot', 'lou', 'lov', 'low', 'lox', 'loy', 'loz', 'lpa', 'lpe', 'lpn', 'lpo', 'lpx', 'lra', 'lrc', 'lre', 'lrg', 'lri', 'lrk', 'lrl', 'lrm', 'lrn', 'lro', 'lrr', 'lrt', 'lrv', 'lrz', 'lsa', 'lsd', 'lse', 'lsg', 'lsh', 'lsi', 'lsl', 'lsm', 'lso', 'lsp', 'lsr', 'lss', 'lst', 'lsy', 'ltc', 'ltg', 'lth', 'lti', 'ltn', 'lto', 'lts', 'ltu', 'lua', 'luc', 'lud', 'lue', 'luf', 'lui', 'luj', 'luk', 'lul', 'lum', 'lun', 'luo', 'lup', 'luq', 'lur', 'lus', 'lut', 'luu', 'luv', 'luw', 'luy', 'luz', 'lva', 'lvk', 'lvs', 'lvu', 'lwa', 'lwe', 'lwg', 'lwh', 'lwl', 'lwm', 'lwo', 'lws', 'lwt', 'lwu', 'lww', 'lya', 'lyg', 'lyn', 'lzh', 'lzl', 'lzn', 'lzz', 'maa', 'mab', 'mad', 'mae', 'maf', 'mag', 'mai', 'maj', 'mak', 'mam', 'man', 'map', 'maq', 'mas', 'mat', 'mau', 'mav', 'maw', 'max', 'maz', 'mba', 'mbb', 'mbc', 'mbd', 'mbe', 'mbf', 'mbh', 'mbi', 'mbj', 'mbk', 'mbl', 'mbm', 'mbn', 'mbo', 'mbp', 'mbq', 'mbr', 'mbs', 'mbt', 'mbu', 'mbv', 'mbw', 'mbx', 'mby', 'mbz', 'mca', 'mcb', 'mcc', 'mcd', 'mce', 'mcf', 'mcg', 'mch', 'mci', 'mcj', 'mck', 'mcl', 'mcm', 'mcn', 'mco', 'mcp', 'mcq', 'mcr', 'mcs', 'mct', 'mcu', 'mcv', 'mcw', 'mcx', 'mcy', 'mcz', 'mda', 'mdb', 'mdc', 'mdd', 'mde', 'mdf', 'mdg', 'mdh', 'mdi', 'mdj', 'mdk', 'mdl', 'mdm', 'mdn', 'mdp', 'mdq', 'mdr', 'mds', 'mdt', 'mdu', 'mdv', 'mdw', 'mdx', 'mdy', 'mdz', 'mea', 'meb', 'mec', 'med', 'mee', 'mef', 'meg', 'meh', 'mei', 'mej', 'mek', 'mel', 'mem', 'men', 'meo', 'mep', 'meq', 'mer', 'mes', 'met', 'meu', 'mev', 'mew', 'mey', 'mez', 'mfa', 'mfb', 'mfc', 'mfd', 'mfe', 'mff', 'mfg', 'mfh', 'mfi', 'mfj', 'mfk', 'mfl', 'mfm', 'mfn', 'mfo', 'mfp', 'mfq', 'mfr', 'mfs', 'mft', 'mfu', 'mfv', 'mfw', 'mfx', 'mfy', 'mfz', 'mga', 'mgb', 'mgc', 'mgd', 'mge', 'mgf', 'mgg', 'mgh', 'mgi', 'mgj', 'mgk', 'mgl', 'mgm', 'mgn', 'mgo', 'mgp', 'mgq', 'mgr', 'mgs', 'mgt', 'mgu', 'mgv', 'mgw', 'mgx', 'mgy', 'mgz', 'mha', 'mhb', 'mhc', 'mhd', 'mhe', 'mhf', 'mhg', 'mhh', 'mhi', 'mhj', 'mhk', 'mhl', 'mhm', 'mhn', 'mho', 'mhp', 'mhq', 'mhr', 'mhs', 'mht', 'mhu', 'mhw', 'mhx', 'mhy', 'mhz', 'mia', 'mib', 'mic', 'mid', 'mie', 'mif', 'mig', 'mih', 'mii', 'mij', 'mik', 'mil', 'mim', 'min', 'mio', 'mip', 'miq', 'mir', 'mis', 'mit', 'miu', 'miw', 'mix', 'miy', 'miz', 'mja', 'mjb', 'mjc', 'mjd', 'mje', 'mjg', 'mjh', 'mji', 'mjj', 'mjk', 'mjl', 'mjm', 'mjn', 'mjo', 'mjp', 'mjq', 'mjr', 'mjs', 'mjt', 'mju', 'mjv', 'mjw', 'mjx', 'mjy', 'mjz', 'mka', 'mkb', 'mkc', 'mke', 'mkf', 'mkg', 'mkh', 'mki', 'mkj', 'mkk', 'mkl', 'mkm', 'mkn', 'mko', 'mkp', 'mkq', 'mkr', 'mks', 'mkt', 'mku', 'mkv', 'mkw', 'mkx', 'mky', 'mkz', 'mla', 'mlb', 'mlc', 'mld', 'mle', 'mlf', 'mlh', 'mli', 'mlj', 'mlk', 'mll', 'mlm', 'mln', 'mlo', 'mlp', 'mlq', 'mlr', 'mls', 'mlu', 'mlv', 'mlw', 'mlx', 'mlz', 'mma', 'mmb', 'mmc', 'mmd', 'mme', 'mmf', 'mmg', 'mmh', 'mmi', 'mmj', 'mmk', 'mml', 'mmm', 'mmn', 'mmo', 'mmp', 'mmq', 'mmr', 'mmt', 'mmu', 'mmv', 'mmw', 'mmx', 'mmy', 'mmz', 'mna', 'mnb', 'mnc', 'mnd', 'mne', 'mnf', 'mng', 'mnh', 'mni', 'mnj', 'mnk', 'mnl', 'mnm', 'mnn', 'mno', 'mnp', 'mnq', 'mnr', 'mns', 'mnt', 'mnu', 'mnv', 'mnw', 'mnx', 'mny', 'mnz', 'moa', 'moc', 'mod', 'moe', 'mof', 'mog', 'moh', 'moi', 'moj', 'mok', 'mom', 'moo', 'mop', 'moq', 'mor', 'mos', 'mot', 'mou', 'mov', 'mow', 'mox', 'moy', 'moz', 'mpa', 'mpb', 'mpc', 'mpd', 'mpe', 'mpg', 'mph', 'mpi', 'mpj', 'mpk', 'mpl', 'mpm', 'mpn', 'mpo', 'mpp', 'mpq', 'mpr', 'mps', 'mpt', 'mpu', 'mpv', 'mpw', 'mpx', 'mpy', 'mpz', 'mqa', 'mqb', 'mqc', 'mqe', 'mqf', 'mqg', 'mqh', 'mqi', 'mqj', 'mqk', 'mql', 'mqm', 'mqn', 'mqo', 'mqp', 'mqq', 'mqr', 'mqs', 'mqt', 'mqu', 'mqv', 'mqw', 'mqx', 'mqy', 'mqz', 'mra', 'mrb', 'mrc', 'mrd', 'mre', 'mrf', 'mrg', 'mrh', 'mrj', 'mrk', 'mrl', 'mrm', 'mrn', 'mro', 'mrp', 'mrq', 'mrr', 'mrs', 'mrt', 'mru', 'mrv', 'mrw', 'mrx', 'mry', 'mrz', 'msb', 'msc', 'msd', 'mse', 'msf', 'msg', 'msh', 'msi', 'msj', 'msk', 'msl', 'msm', 'msn', 'mso', 'msp', 'msq', 'msr', 'mss', 'mst', 'msu', 'msv', 'msw', 'msx', 'msy', 'msz', 'mta', 'mtb', 'mtc', 'mtd', 'mte', 'mtf', 'mtg', 'mth', 'mti', 'mtj', 'mtk', 'mtl', 'mtm', 'mtn', 'mto', 'mtp', 'mtq', 'mtr', 'mts', 'mtt', 'mtu', 'mtv', 'mtw', 'mtx', 'mty', 'mua', 'mub', 'muc', 'mud', 'mue', 'mug', 'muh', 'mui', 'muj', 'muk', 'mul', 'mum', 'mun', 'muo', 'mup', 'muq', 'mur', 'mus', 'mut', 'muu', 'muv', 'mux', 'muy', 'muz', 'mva', 'mvb', 'mvd', 'mve', 'mvf', 'mvg', 'mvh', 'mvi', 'mvk', 'mvl', 'mvm', 'mvn', 'mvo', 'mvp', 'mvq', 'mvr', 'mvs', 'mvt', 'mvu', 'mvv', 'mvw', 'mvx', 'mvy', 'mvz', 'mwa', 'mwb', 'mwc', 'mwd', 'mwe', 'mwf', 'mwg', 'mwh', 'mwi', 'mwj', 'mwk', 'mwl', 'mwm', 'mwn', 'mwo', 'mwp', 'mwq', 'mwr', 'mws', 'mwt', 'mwu', 'mwv', 'mww', 'mwx', 'mwy', 'mwz', 'mxa', 'mxb', 'mxc', 'mxd', 'mxe', 'mxf', 'mxg', 'mxh', 'mxi', 'mxj', 'mxk', 'mxl', 'mxm', 'mxn', 'mxo', 'mxp', 'mxq', 'mxr', 'mxs', 'mxt', 'mxu', 'mxv', 'mxw', 'mxx', 'mxy', 'mxz', 'myb', 'myc', 'myd', 'mye', 'myf', 'myg', 'myh', 'myi', 'myj', 'myk', 'myl', 'mym', 'myn', 'myo', 'myp', 'myq', 'myr', 'mys', 'myt', 'myu', 'myv', 'myw', 'myx', 'myy', 'myz', 'mza', 'mzb', 'mzc', 'mzd', 'mze', 'mzg', 'mzh', 'mzi', 'mzj', 'mzk', 'mzl', 'mzm', 'mzn', 'mzo', 'mzp', 'mzq', 'mzr', 'mzs', 'mzt', 'mzu', 'mzv', 'mzw', 'mzx', 'mzy', 'mzz', 'naa', 'nab', 'nac', 'nad', 'nae', 'naf', 'nag', 'nah', 'nai', 'naj', 'nak', 'nal', 'nam', 'nan', 'nao', 'nap', 'naq', 'nar', 'nas', 'nat', 'naw', 'nax', 'nay', 'naz', 'nba', 'nbb', 'nbc', 'nbd', 'nbe', 'nbf', 'nbg', 'nbh', 'nbi', 'nbj', 'nbk', 'nbm', 'nbn', 'nbo', 'nbp', 'nbq', 'nbr', 'nbs', 'nbt', 'nbu', 'nbv', 'nbw', 'nbx', 'nby', 'nca', 'ncb', 'ncc', 'ncd', 'nce', 'ncf', 'ncg', 'nch', 'nci', 'ncj', 'nck', 'ncl', 'ncm', 'ncn', 'nco', 'ncp', 'ncq', 'ncr', 'ncs', 'nct', 'ncu', 'ncx', 'ncz', 'nda', 'ndb', 'ndc', 'ndd', 'ndf', 'ndg', 'ndh', 'ndi', 'ndj', 'ndk', 'ndl', 'ndm', 'ndn', 'ndp', 'ndq', 'ndr', 'nds', 'ndt', 'ndu', 'ndv', 'ndw', 'ndx', 'ndy', 'ndz', 'nea', 'neb', 'nec', 'ned', 'nee', 'nef', 'neg', 'neh', 'nei', 'nej', 'nek', 'nem', 'nen', 'neo', 'neq', 'ner', 'nes', 'net', 'neu', 'nev', 'new', 'nex', 'ney', 'nez', 'nfa', 'nfd', 'nfl', 'nfr', 'nfu', 'nga', 'ngb', 'ngc', 'ngd', 'nge', 'ngf', 'ngg', 'ngh', 'ngi', 'ngj', 'ngk', 'ngl', 'ngm', 'ngn', 'ngo', 'ngp', 'ngq', 'ngr', 'ngs', 'ngt', 'ngu', 'ngv', 'ngw', 'ngx', 'ngy', 'ngz', 'nha', 'nhb', 'nhc', 'nhd', 'nhe', 'nhf', 'nhg', 'nhh', 'nhi', 'nhk', 'nhm', 'nhn', 'nho', 'nhp', 'nhq', 'nhr', 'nht', 'nhu', 'nhv', 'nhw', 'nhx', 'nhy', 'nhz', 'nia', 'nib', 'nic', 'nid', 'nie', 'nif', 'nig', 'nih', 'nii', 'nij', 'nik', 'nil', 'nim', 'nin', 'nio', 'niq', 'nir', 'nis', 'nit', 'niu', 'niv', 'niw', 'nix', 'niy', 'niz', 'nja', 'njb', 'njd', 'njh', 'nji', 'njj', 'njl', 'njm', 'njn', 'njo', 'njr', 'njs', 'njt', 'nju', 'njx', 'njy', 'njz', 'nka', 'nkb', 'nkc', 'nkd', 'nke', 'nkf', 'nkg', 'nkh', 'nki', 'nkj', 'nkk', 'nkm', 'nkn', 'nko', 'nkp', 'nkq', 'nkr', 'nks', 'nkt', 'nku', 'nkv', 'nkw', 'nkx', 'nkz', 'nla', 'nlc', 'nle', 'nlg', 'nli', 'nlj', 'nlk', 'nll', 'nlm', 'nln', 'nlo', 'nlq', 'nlr', 'nlu', 'nlv', 'nlw', 'nlx', 'nly', 'nlz', 'nma', 'nmb', 'nmc', 'nmd', 'nme', 'nmf', 'nmg', 'nmh', 'nmi', 'nmj', 'nmk', 'nml', 'nmm', 'nmn', 'nmo', 'nmp', 'nmq', 'nmr', 'nms', 'nmt', 'nmu', 'nmv', 'nmw', 'nmx', 'nmy', 'nmz', 'nna', 'nnb', 'nnc', 'nnd', 'nne', 'nnf', 'nng', 'nnh', 'nni', 'nnj', 'nnk', 'nnl', 'nnm', 'nnn', 'nnp', 'nnq', 'nnr', 'nns', 'nnt', 'nnu', 'nnv', 'nnw', 'nnx', 'nny', 'nnz', 'noa', 'noc', 'nod', 'noe', 'nof', 'nog', 'noh', 'noi', 'noj', 'nok', 'nol', 'nom', 'non', 'noo', 'nop', 'noq', 'nos', 'not', 'nou', 'nov', 'now', 'noy', 'noz', 'npa', 'npb', 'npg', 'nph', 'npi', 'npl', 'npn', 'npo', 'nps', 'npu', 'npx', 'npy', 'nqg', 'nqk', 'nql', 'nqm', 'nqn', 'nqo', 'nqq', 'nqy', 'nra', 'nrb', 'nrc', 'nre', 'nrf', 'nrg', 'nri', 'nrk', 'nrl', 'nrm', 'nrn', 'nrp', 'nrr', 'nrt', 'nru', 'nrx', 'nrz', 'nsa', 'nsc', 'nsd', 'nse', 'nsf', 'nsg', 'nsh', 'nsi', 'nsk', 'nsl', 'nsm', 'nsn', 'nso', 'nsp', 'nsq', 'nsr', 'nss', 'nst', 'nsu', 'nsv', 'nsw', 'nsx', 'nsy', 'nsz', 'ntd', 'nte', 'ntg', 'nti', 'ntj', 'ntk', 'ntm', 'nto', 'ntp', 'ntr', 'nts', 'ntu', 'ntw', 'ntx', 'nty', 'ntz', 'nua', 'nub', 'nuc', 'nud', 'nue', 'nuf', 'nug', 'nuh', 'nui', 'nuj', 'nuk', 'nul', 'num', 'nun', 'nuo', 'nup', 'nuq', 'nur', 'nus', 'nut', 'nuu', 'nuv', 'nuw', 'nux', 'nuy', 'nuz', 'nvh', 'nvm', 'nvo', 'nwa', 'nwb', 'nwc', 'nwe', 'nwg', 'nwi', 'nwm', 'nwo', 'nwr', 'nwx', 'nwy', 'nxa', 'nxd', 'nxe', 'nxg', 'nxi', 'nxk', 'nxl', 'nxm', 'nxn', 'nxo', 'nxq', 'nxr', 'nxu', 'nxx', 'nyb', 'nyc', 'nyd', 'nye', 'nyf', 'nyg', 'nyh', 'nyi', 'nyj', 'nyk', 'nyl', 'nym', 'nyn', 'nyo', 'nyp', 'nyq', 'nyr', 'nys', 'nyt', 'nyu', 'nyv', 'nyw', 'nyx', 'nyy', 'nza', 'nzb', 'nzd', 'nzi', 'nzk', 'nzm', 'nzs', 'nzu', 'nzy', 'nzz', 'oaa', 'oac', 'oar', 'oav', 'obi', 'obk', 'obl', 'obm', 'obo', 'obr', 'obt', 'obu', 'oca', 'och', 'oco', 'ocu', 'oda', 'odk', 'odt', 'odu', 'ofo', 'ofs', 'ofu', 'ogb', 'ogc', 'oge', 'ogg', 'ogo', 'ogu', 'oht', 'ohu', 'oia', 'oin', 'ojb', 'ojc', 'ojg', 'ojp', 'ojs', 'ojv', 'ojw', 'oka', 'okb', 'okd', 'oke', 'okg', 'okh', 'oki', 'okj', 'okk', 'okl', 'okm', 'okn', 'oko', 'okr', 'oks', 'oku', 'okv', 'okx', 'ola', 'old', 'ole', 'olk', 'olm', 'olo', 'olr', 'olt', 'olu', 'oma', 'omb', 'omc', 'ome', 'omg', 'omi', 'omk', 'oml', 'omn', 'omo', 'omp', 'omq', 'omr', 'omt', 'omu', 'omv', 'omw', 'omx', 'ona', 'onb', 'one', 'ong', 'oni', 'onj', 'onk', 'onn', 'ono', 'onp', 'onr', 'ons', 'ont', 'onu', 'onw', 'onx', 'ood', 'oog', 'oon', 'oor', 'oos', 'opa', 'opk', 'opm', 'opo', 'opt', 'opy', 'ora', 'orc', 'ore', 'org', 'orh', 'orn', 'oro', 'orr', 'ors', 'ort', 'oru', 'orv', 'orw', 'orx', 'ory', 'orz', 'osa', 'osc', 'osi', 'oso', 'osp', 'ost', 'osu', 'osx', 'ota', 'otb', 'otd', 'ote', 'oti', 'otk', 'otl', 'otm', 'otn', 'oto', 'otq', 'otr', 'ots', 'ott', 'otu', 'otw', 'otx', 'oty', 'otz', 'oua', 'oub', 'oue', 'oui', 'oum', 'oun', 'ovd', 'owi', 'owl', 'oyb', 'oyd', 'oym', 'oyy', 'ozm', 'paa', 'pab', 'pac', 'pad', 'pae', 'paf', 'pag', 'pah', 'pai', 'pak', 'pal', 'pam', 'pao', 'pap', 'paq', 'par', 'pas', 'pat', 'pau', 'pav', 'paw', 'pax', 'pay', 'paz', 'pbb', 'pbc', 'pbe', 'pbf', 'pbg', 'pbh', 'pbi', 'pbl', 'pbm', 'pbn', 'pbo', 'pbp', 'pbr', 'pbs', 'pbt', 'pbu', 'pbv', 'pby', 'pbz', 'pca', 'pcb', 'pcc', 'pcd', 'pce', 'pcf', 'pcg', 'pch', 'pci', 'pcj', 'pck', 'pcl', 'pcm', 'pcn', 'pcp', 'pcr', 'pcw', 'pda', 'pdc', 'pdi', 'pdn', 'pdo', 'pdt', 'pdu', 'pea', 'peb', 'ped', 'pee', 'pef', 'peg', 'peh', 'pei', 'pej', 'pek', 'pel', 'pem', 'peo', 'pep', 'peq', 'pes', 'pev', 'pex', 'pey', 'pez', 'pfa', 'pfe', 'pfl', 'pga', 'pgd', 'pgg', 'pgi', 'pgk', 'pgl', 'pgn', 'pgs', 'pgu', 'pgy', 'pgz', 'pha', 'phd', 'phg', 'phh', 'phi', 'phk', 'phl', 'phm', 'phn', 'pho', 'phq', 'phr', 'pht', 'phu', 'phv', 'phw', 'pia', 'pib', 'pic', 'pid', 'pie', 'pif', 'pig', 'pih', 'pii', 'pij', 'pil', 'pim', 'pin', 'pio', 'pip', 'pir', 'pis', 'pit', 'piu', 'piv', 'piw', 'pix', 'piy', 'piz', 'pjt', 'pka', 'pkb', 'pkc', 'pkg', 'pkh', 'pkn', 'pko', 'pkp', 'pkr', 'pks', 'pkt', 'pku', 'pla', 'plb', 'plc', 'pld', 'ple', 'plf', 'plg', 'plh', 'plj', 'plk', 'pll', 'pln', 'plo', 'plp', 'plq', 'plr', 'pls', 'plt', 'plu', 'plv', 'plw', 'ply', 'plz', 'pma', 'pmb', 'pmc', 'pmd', 'pme', 'pmf', 'pmh', 'pmi', 'pmj', 'pmk', 'pml', 'pmm', 'pmn', 'pmo', 'pmq', 'pmr', 'pms', 'pmt', 'pmu', 'pmw', 'pmx', 'pmy', 'pmz', 'pna', 'pnb', 'pnc', 'pne', 'png', 'pnh', 'pni', 'pnj', 'pnk', 'pnl', 'pnm', 'pnn', 'pno', 'pnp', 'pnq', 'pnr', 'pns', 'pnt', 'pnu', 'pnv', 'pnw', 'pnx', 'pny', 'pnz', 'poc', 'pod', 'poe', 'pof', 'pog', 'poh', 'poi', 'pok', 'pom', 'pon', 'poo', 'pop', 'poq', 'pos', 'pot', 'pov', 'pow', 'pox', 'poy', 'poz', 'ppa', 'ppe', 'ppi', 'ppk', 'ppl', 'ppm', 'ppn', 'ppo', 'ppp', 'ppq', 'ppr', 'pps', 'ppt', 'ppu', 'pqa', 'pqe', 'pqm', 'pqw', 'pra', 'prb', 'prc', 'prd', 'pre', 'prf', 'prg', 'prh', 'pri', 'prk', 'prl', 'prm', 'prn', 'pro', 'prp', 'prq', 'prr', 'prs', 'prt', 'pru', 'prw', 'prx', 'pry', 'prz', 'psa', 'psc', 'psd', 'pse', 'psg', 'psh', 'psi', 'psl', 'psm', 'psn', 'pso', 'psp', 'psq', 'psr', 'pss', 'pst', 'psu', 'psw', 'psy', 'pta', 'pth', 'pti', 'ptn', 'pto', 'ptp', 'ptq', 'ptr', 'ptt', 'ptu', 'ptv', 'ptw', 'pty', 'pua', 'pub', 'puc', 'pud', 'pue', 'puf', 'pug', 'pui', 'puj', 'puk', 'pum', 'puo', 'pup', 'puq', 'pur', 'put', 'puu', 'puw', 'pux', 'puy', 'puz', 'pwa', 'pwb', 'pwg', 'pwi', 'pwm', 'pwn', 'pwo', 'pwr', 'pww', 'pxm', 'pye', 'pym', 'pyn', 'pys', 'pyu', 'pyx', 'pyy', 'pzn', 'qaa..qtz', 'qua', 'qub', 'quc', 'qud', 'quf', 'qug', 'quh', 'qui', 'quk', 'qul', 'qum', 'qun', 'qup', 'quq', 'qur', 'qus', 'quv', 'quw', 'qux', 'quy', 'quz', 'qva', 'qvc', 'qve', 'qvh', 'qvi', 'qvj', 'qvl', 'qvm', 'qvn', 'qvo', 'qvp', 'qvs', 'qvw', 'qvy', 'qvz', 'qwa', 'qwc', 'qwe', 'qwh', 'qwm', 'qws', 'qwt', 'qxa', 'qxc', 'qxh', 'qxl', 'qxn', 'qxo', 'qxp', 'qxq', 'qxr', 'qxs', 'qxt', 'qxu', 'qxw', 'qya', 'qyp', 'raa', 'rab', 'rac', 'rad', 'raf', 'rag', 'rah', 'rai', 'raj', 'rak', 'ral', 'ram', 'ran', 'rao', 'rap', 'raq', 'rar', 'ras', 'rat', 'rau', 'rav', 'raw', 'rax', 'ray', 'raz', 'rbb', 'rbk', 'rbl', 'rbp', 'rcf', 'rdb', 'rea', 'reb', 'ree', 'reg', 'rei', 'rej', 'rel', 'rem', 'ren', 'rer', 'res', 'ret', 'rey', 'rga', 'rge', 'rgk', 'rgn', 'rgr', 'rgs', 'rgu', 'rhg', 'rhp', 'ria', 'rie', 'rif', 'ril', 'rim', 'rin', 'rir', 'rit', 'riu', 'rjg', 'rji', 'rjs', 'rka', 'rkb', 'rkh', 'rki', 'rkm', 'rkt', 'rkw', 'rma', 'rmb', 'rmc', 'rmd', 'rme', 'rmf', 'rmg', 'rmh', 'rmi', 'rmk', 'rml', 'rmm', 'rmn', 'rmo', 'rmp', 'rmq', 'rmr', 'rms', 'rmt', 'rmu', 'rmv', 'rmw', 'rmx', 'rmy', 'rmz', 'rna', 'rnd', 'rng', 'rnl', 'rnn', 'rnp', 'rnr', 'rnw', 'roa', 'rob', 'roc', 'rod', 'roe', 'rof', 'rog', 'rol', 'rom', 'roo', 'rop', 'ror', 'rou', 'row', 'rpn', 'rpt', 'rri', 'rro', 'rrt', 'rsb', 'rsi', 'rsl', 'rsm', 'rtc', 'rth', 'rtm', 'rts', 'rtw', 'rub', 'ruc', 'rue', 'ruf', 'rug', 'ruh', 'rui', 'ruk', 'ruo', 'rup', 'ruq', 'rut', 'ruu', 'ruy', 'ruz', 'rwa', 'rwk', 'rwm', 'rwo', 'rwr', 'rxd', 'rxw', 'ryn', 'rys', 'ryu', 'rzh', 'saa', 'sab', 'sac', 'sad', 'sae', 'saf', 'sah', 'sai', 'saj', 'sak', 'sal', 'sam', 'sao', 'sap', 'saq', 'sar', 'sas', 'sat', 'sau', 'sav', 'saw', 'sax', 'say', 'saz', 'sba', 'sbb', 'sbc', 'sbd', 'sbe', 'sbf', 'sbg', 'sbh', 'sbi', 'sbj', 'sbk', 'sbl', 'sbm', 'sbn', 'sbo', 'sbp', 'sbq', 'sbr', 'sbs', 'sbt', 'sbu', 'sbv', 'sbw', 'sbx', 'sby', 'sbz', 'sca', 'scb', 'sce', 'scf', 'scg', 'sch', 'sci', 'sck', 'scl', 'scn', 'sco', 'scp', 'scq', 'scs', 'sct', 'scu', 'scv', 'scw', 'scx', 'sda', 'sdb', 'sdc', 'sde', 'sdf', 'sdg', 'sdh', 'sdj', 'sdk', 'sdl', 'sdm', 'sdn', 'sdo', 'sdp', 'sdr', 'sds', 'sdt', 'sdu', 'sdv', 'sdx', 'sdz', 'sea', 'seb', 'sec', 'sed', 'see', 'sef', 'seg', 'seh', 'sei', 'sej', 'sek', 'sel', 'sem', 'sen', 'seo', 'sep', 'seq', 'ser', 'ses', 'set', 'seu', 'sev', 'sew', 'sey', 'sez', 'sfb', 'sfe', 'sfm', 'sfs', 'sfw', 'sga', 'sgb', 'sgc', 'sgd', 'sge', 'sgg', 'sgh', 'sgi', 'sgj', 'sgk', 'sgl', 'sgm', 'sgn', 'sgo', 'sgp', 'sgr', 'sgs', 'sgt', 'sgu', 'sgw', 'sgx', 'sgy', 'sgz', 'sha', 'shb', 'shc', 'shd', 'she', 'shg', 'shh', 'shi', 'shj', 'shk', 'shl', 'shm', 'shn', 'sho', 'shp', 'shq', 'shr', 'shs', 'sht', 'shu', 'shv', 'shw', 'shx', 'shy', 'shz', 'sia', 'sib', 'sid', 'sie', 'sif', 'sig', 'sih', 'sii', 'sij', 'sik', 'sil', 'sim', 'sio', 'sip', 'siq', 'sir', 'sis', 'sit', 'siu', 'siv', 'siw', 'six', 'siy', 'siz', 'sja', 'sjb', 'sjd', 'sje', 'sjg', 'sjk', 'sjl', 'sjm', 'sjn', 'sjo', 'sjp', 'sjr', 'sjs', 'sjt', 'sju', 'sjw', 'ska', 'skb', 'skc', 'skd', 'ske', 'skf', 'skg', 'skh', 'ski', 'skj', 'skk', 'skm', 'skn', 'sko', 'skp', 'skq', 'skr', 'sks', 'skt', 'sku', 'skv', 'skw', 'skx', 'sky', 'skz', 'sla', 'slc', 'sld', 'sle', 'slf', 'slg', 'slh', 'sli', 'slj', 'sll', 'slm', 'sln', 'slp', 'slq', 'slr', 'sls', 'slt', 'slu', 'slw', 'slx', 'sly', 'slz', 'sma', 'smb', 'smc', 'smd', 'smf', 'smg', 'smh', 'smi', 'smj', 'smk', 'sml', 'smm', 'smn', 'smp', 'smq', 'smr', 'sms', 'smt', 'smu', 'smv', 'smw', 'smx', 'smy', 'smz', 'snb', 'snc', 'sne', 'snf', 'sng', 'snh', 'sni', 'snj', 'snk', 'snl', 'snm', 'snn', 'sno', 'snp', 'snq', 'snr', 'sns', 'snu', 'snv', 'snw', 'snx', 'sny', 'snz', 'soa', 'sob', 'soc', 'sod', 'soe', 'sog', 'soh', 'soi', 'soj', 'sok', 'sol', 'son', 'soo', 'sop', 'soq', 'sor', 'sos', 'sou', 'sov', 'sow', 'sox', 'soy', 'soz', 'spb', 'spc', 'spd', 'spe', 'spg', 'spi', 'spk', 'spl', 'spm', 'spn', 'spo', 'spp', 'spq', 'spr', 'sps', 'spt', 'spu', 'spv', 'spx', 'spy', 'sqa', 'sqh', 'sqj', 'sqk', 'sqm', 'sqn', 'sqo', 'sqq', 'sqr', 'sqs', 'sqt', 'squ', 'sra', 'srb', 'src', 'sre', 'srf', 'srg', 'srh', 'sri', 'srk', 'srl', 'srm', 'srn', 'sro', 'srq', 'srr', 'srs', 'srt', 'sru', 'srv', 'srw', 'srx', 'sry', 'srz', 'ssa', 'ssb', 'ssc', 'ssd', 'sse', 'ssf', 'ssg', 'ssh', 'ssi', 'ssj', 'ssk', 'ssl', 'ssm', 'ssn', 'sso', 'ssp', 'ssq', 'ssr', 'sss', 'sst', 'ssu', 'ssv', 'ssx', 'ssy', 'ssz', 'sta', 'stb', 'std', 'ste', 'stf', 'stg', 'sth', 'sti', 'stj', 'stk', 'stl', 'stm', 'stn', 'sto', 'stp', 'stq', 'str', 'sts', 'stt', 'stu', 'stv', 'stw', 'sty', 'sua', 'sub', 'suc', 'sue', 'sug', 'sui', 'suj', 'suk', 'sul', 'sum', 'suq', 'sur', 'sus', 'sut', 'suv', 'suw', 'sux', 'suy', 'suz', 'sva', 'svb', 'svc', 'sve', 'svk', 'svm', 'svr', 'svs', 'svx', 'swb', 'swc', 'swf', 'swg', 'swh', 'swi', 'swj', 'swk', 'swl', 'swm', 'swn', 'swo', 'swp', 'swq', 'swr', 'sws', 'swt', 'swu', 'swv', 'sww', 'swx', 'swy', 'sxb', 'sxc', 'sxe', 'sxg', 'sxk', 'sxl', 'sxm', 'sxn', 'sxo', 'sxr', 'sxs', 'sxu', 'sxw', 'sya', 'syb', 'syc', 'syd', 'syi', 'syk', 'syl', 'sym', 'syn', 'syo', 'syr', 'sys', 'syw', 'syx', 'syy', 'sza', 'szb', 'szc', 'szd', 'sze', 'szg', 'szl', 'szn', 'szp', 'szs', 'szv', 'szw', 'taa', 'tab', 'tac', 'tad', 'tae', 'taf', 'tag', 'tai', 'taj', 'tak', 'tal', 'tan', 'tao', 'tap', 'taq', 'tar', 'tas', 'tau', 'tav', 'taw', 'tax', 'tay', 'taz', 'tba', 'tbb', 'tbc', 'tbd', 'tbe', 'tbf', 'tbg', 'tbh', 'tbi', 'tbj', 'tbk', 'tbl', 'tbm', 'tbn', 'tbo', 'tbp', 'tbq', 'tbr', 'tbs', 'tbt', 'tbu', 'tbv', 'tbw', 'tbx', 'tby', 'tbz', 'tca', 'tcb', 'tcc', 'tcd', 'tce', 'tcf', 'tcg', 'tch', 'tci', 'tck', 'tcl', 'tcm', 'tcn', 'tco', 'tcp', 'tcq', 'tcs', 'tct', 'tcu', 'tcw', 'tcx', 'tcy', 'tcz', 'tda', 'tdb', 'tdc', 'tdd', 'tde', 'tdf', 'tdg', 'tdh', 'tdi', 'tdj', 'tdk', 'tdl', 'tdm', 'tdn', 'tdo', 'tdq', 'tdr', 'tds', 'tdt', 'tdu', 'tdv', 'tdx', 'tdy', 'tea', 'teb', 'tec', 'ted', 'tee', 'tef', 'teg', 'teh', 'tei', 'tek', 'tem', 'ten', 'teo', 'tep', 'teq', 'ter', 'tes', 'tet', 'teu', 'tev', 'tew', 'tex', 'tey', 'tez', 'tfi', 'tfn', 'tfo', 'tfr', 'tft', 'tga', 'tgb', 'tgc', 'tgd', 'tge', 'tgf', 'tgg', 'tgh', 'tgi', 'tgj', 'tgn', 'tgo', 'tgp', 'tgq', 'tgr', 'tgs', 'tgt', 'tgu', 'tgv', 'tgw', 'tgx', 'tgy', 'tgz', 'thc', 'thd', 'the', 'thf', 'thh', 'thi', 'thk', 'thl', 'thm', 'thn', 'thp', 'thq', 'thr', 'ths', 'tht', 'thu', 'thv', 'thw', 'thx', 'thy', 'thz', 'tia', 'tic', 'tid', 'tie', 'tif', 'tig', 'tih', 'tii', 'tij', 'tik', 'til', 'tim', 'tin', 'tio', 'tip', 'tiq', 'tis', 'tit', 'tiu', 'tiv', 'tiw', 'tix', 'tiy', 'tiz', 'tja', 'tjg', 'tji', 'tjl', 'tjm', 'tjn', 'tjo', 'tjs', 'tju', 'tjw', 'tka', 'tkb', 'tkd', 'tke', 'tkf', 'tkg', 'tkk', 'tkl', 'tkm', 'tkn', 'tkp', 'tkq', 'tkr', 'tks', 'tkt', 'tku', 'tkv', 'tkw', 'tkx', 'tkz', 'tla', 'tlb', 'tlc', 'tld', 'tlf', 'tlg', 'tlh', 'tli', 'tlj', 'tlk', 'tll', 'tlm', 'tln', 'tlo', 'tlp', 'tlq', 'tlr', 'tls', 'tlt', 'tlu', 'tlv', 'tlw', 'tlx', 'tly', 'tma', 'tmb', 'tmc', 'tmd', 'tme', 'tmf', 'tmg', 'tmh', 'tmi', 'tmj', 'tmk', 'tml', 'tmm', 'tmn', 'tmo', 'tmp', 'tmq', 'tmr', 'tms', 'tmt', 'tmu', 'tmv', 'tmw', 'tmy', 'tmz', 'tna', 'tnb', 'tnc', 'tnd', 'tne', 'tnf', 'tng', 'tnh', 'tni', 'tnk', 'tnl', 'tnm', 'tnn', 'tno', 'tnp', 'tnq', 'tnr', 'tns', 'tnt', 'tnu', 'tnv', 'tnw', 'tnx', 'tny', 'tnz', 'tob', 'toc', 'tod', 'toe', 'tof', 'tog', 'toh', 'toi', 'toj', 'tol', 'tom', 'too', 'top', 'toq', 'tor', 'tos', 'tou', 'tov', 'tow', 'tox', 'toy', 'toz', 'tpa', 'tpc', 'tpe', 'tpf', 'tpg', 'tpi', 'tpj', 'tpk', 'tpl', 'tpm', 'tpn', 'tpo', 'tpp', 'tpq', 'tpr', 'tpt', 'tpu', 'tpv', 'tpw', 'tpx', 'tpy', 'tpz', 'tqb', 'tql', 'tqm', 'tqn', 'tqo', 'tqp', 'tqq', 'tqr', 'tqt', 'tqu', 'tqw', 'tra', 'trb', 'trc', 'trd', 'tre', 'trf', 'trg', 'trh', 'tri', 'trj', 'trk', 'trl', 'trm', 'trn', 'tro', 'trp', 'trq', 'trr', 'trs', 'trt', 'tru', 'trv', 'trw', 'trx', 'try', 'trz', 'tsa', 'tsb', 'tsc', 'tsd', 'tse', 'tsf', 'tsg', 'tsh', 'tsi', 'tsj', 'tsk', 'tsl', 'tsm', 'tsp', 'tsq', 'tsr', 'tss', 'tst', 'tsu', 'tsv', 'tsw', 'tsx', 'tsy', 'tsz', 'tta', 'ttb', 'ttc', 'ttd', 'tte', 'ttf', 'ttg', 'tth', 'tti', 'ttj', 'ttk', 'ttl', 'ttm', 'ttn', 'tto', 'ttp', 'ttq', 'ttr', 'tts', 'ttt', 'ttu', 'ttv', 'ttw', 'tty', 'ttz', 'tua', 'tub', 'tuc', 'tud', 'tue', 'tuf', 'tug', 'tuh', 'tui', 'tuj', 'tul', 'tum', 'tun', 'tuo', 'tup', 'tuq', 'tus', 'tut', 'tuu', 'tuv', 'tuw', 'tux', 'tuy', 'tuz', 'tva', 'tvd', 'tve', 'tvk', 'tvl', 'tvm', 'tvn', 'tvo', 'tvs', 'tvt', 'tvu', 'tvw', 'tvy', 'twa', 'twb', 'twc', 'twd', 'twe', 'twf', 'twg', 'twh', 'twl', 'twm', 'twn', 'two', 'twp', 'twq', 'twr', 'twt', 'twu', 'tww', 'twx', 'twy', 'txa', 'txb', 'txc', 'txe', 'txg', 'txh', 'txi', 'txj', 'txm', 'txn', 'txo', 'txq', 'txr', 'txs', 'txt', 'txu', 'txx', 'txy', 'tya', 'tye', 'tyh', 'tyi', 'tyj', 'tyl', 'tyn', 'typ', 'tyr', 'tys', 'tyt', 'tyu', 'tyv', 'tyx', 'tyz', 'tza', 'tzh', 'tzj', 'tzl', 'tzm', 'tzn', 'tzo', 'tzx', 'uam', 'uan', 'uar', 'uba', 'ubi', 'ubl', 'ubr', 'ubu', 'uby', 'uda', 'ude', 'udg', 'udi', 'udj', 'udl', 'udm', 'udu', 'ues', 'ufi', 'uga', 'ugb', 'uge', 'ugn', 'ugo', 'ugy', 'uha', 'uhn', 'uis', 'uiv', 'uji', 'uka', 'ukg', 'ukh', 'ukk', 'ukl', 'ukp', 'ukq', 'uks', 'uku', 'ukw', 'uky', 'ula', 'ulb', 'ulc', 'ule', 'ulf', 'uli', 'ulk', 'ull', 'ulm', 'uln', 'ulu', 'ulw', 'uma', 'umb', 'umc', 'umd', 'umg', 'umi', 'umm', 'umn', 'umo', 'ump', 'umr', 'ums', 'umu', 'una', 'und', 'une', 'ung', 'unk', 'unm', 'unn', 'unp', 'unr', 'unu', 'unx', 'unz', 'uok', 'upi', 'upv', 'ura', 'urb', 'urc', 'ure', 'urf', 'urg', 'urh', 'uri', 'urj', 'urk', 'url', 'urm', 'urn', 'uro', 'urp', 'urr', 'urt', 'uru', 'urv', 'urw', 'urx', 'ury', 'urz', 'usa', 'ush', 'usi', 'usk', 'usp', 'usu', 'uta', 'ute', 'utp', 'utr', 'utu', 'uum', 'uun', 'uur', 'uuu', 'uve', 'uvh', 'uvl', 'uwa', 'uya', 'uzn', 'uzs', 'vaa', 'vae', 'vaf', 'vag', 'vah', 'vai', 'vaj', 'val', 'vam', 'van', 'vao', 'vap', 'var', 'vas', 'vau', 'vav', 'vay', 'vbb', 'vbk', 'vec', 'ved', 'vel', 'vem', 'veo', 'vep', 'ver', 'vgr', 'vgt', 'vic', 'vid', 'vif', 'vig', 'vil', 'vin', 'vis', 'vit', 'viv', 'vka', 'vki', 'vkj', 'vkk', 'vkl', 'vkm', 'vko', 'vkp', 'vkt', 'vku', 'vlp', 'vls', 'vma', 'vmb', 'vmc', 'vmd', 'vme', 'vmf', 'vmg', 'vmh', 'vmi', 'vmj', 'vmk', 'vml', 'vmm', 'vmp', 'vmq', 'vmr', 'vms', 'vmu', 'vmv', 'vmw', 'vmx', 'vmy', 'vmz', 'vnk', 'vnm', 'vnp', 'vor', 'vot', 'vra', 'vro', 'vrs', 'vrt', 'vsi', 'vsl', 'vsv', 'vto', 'vum', 'vun', 'vut', 'vwa', 'waa', 'wab', 'wac', 'wad', 'wae', 'waf', 'wag', 'wah', 'wai', 'waj', 'wak', 'wal', 'wam', 'wan', 'wao', 'wap', 'waq', 'war', 'was', 'wat', 'wau', 'wav', 'waw', 'wax', 'way', 'waz', 'wba', 'wbb', 'wbe', 'wbf', 'wbh', 'wbi', 'wbj', 'wbk', 'wbl', 'wbm', 'wbp', 'wbq', 'wbr', 'wbs', 'wbt', 'wbv', 'wbw', 'wca', 'wci', 'wdd', 'wdg', 'wdj', 'wdk', 'wdu', 'wdy', 'wea', 'wec', 'wed', 'weg', 'weh', 'wei', 'wem', 'wen', 'weo', 'wep', 'wer', 'wes', 'wet', 'weu', 'wew', 'wfg', 'wga', 'wgb', 'wgg', 'wgi', 'wgo', 'wgu', 'wgw', 'wgy', 'wha', 'whg', 'whk', 'whu', 'wib', 'wic', 'wie', 'wif', 'wig', 'wih', 'wii', 'wij', 'wik', 'wil', 'wim', 'win', 'wir', 'wit', 'wiu', 'wiv', 'wiw', 'wiy', 'wja', 'wji', 'wka', 'wkb', 'wkd', 'wkl', 'wku', 'wkw', 'wky', 'wla', 'wlc', 'wle', 'wlg', 'wli', 'wlk', 'wll', 'wlm', 'wlo', 'wlr', 'wls', 'wlu', 'wlv', 'wlw', 'wlx', 'wly', 'wma', 'wmb', 'wmc', 'wmd', 'wme', 'wmh', 'wmi', 'wmm', 'wmn', 'wmo', 'wms', 'wmt', 'wmw', 'wmx', 'wnb', 'wnc', 'wnd', 'wne', 'wng', 'wni', 'wnk', 'wnm', 'wnn', 'wno', 'wnp', 'wnu', 'wnw', 'wny', 'woa', 'wob', 'woc', 'wod', 'woe', 'wof', 'wog', 'woi', 'wok', 'wom', 'won', 'woo', 'wor', 'wos', 'wow', 'woy', 'wpc', 'wra', 'wrb', 'wrd', 'wrg', 'wrh', 'wri', 'wrk', 'wrl', 'wrm', 'wrn', 'wro', 'wrp', 'wrr', 'wrs', 'wru', 'wrv', 'wrw', 'wrx', 'wry', 'wrz', 'wsa', 'wsg', 'wsi', 'wsk', 'wsr', 'wss', 'wsu', 'wsv', 'wtf', 'wth', 'wti', 'wtk', 'wtm', 'wtw', 'wua', 'wub', 'wud', 'wuh', 'wul', 'wum', 'wun', 'wur', 'wut', 'wuu', 'wuv', 'wux', 'wuy', 'wwa', 'wwb', 'wwo', 'wwr', 'www', 'wxa', 'wxw', 'wya', 'wyb', 'wyi', 'wym', 'wyr', 'wyy', 'xaa', 'xab', 'xac', 'xad', 'xae', 'xag', 'xai', 'xaj', 'xak', 'xal', 'xam', 'xan', 'xao', 'xap', 'xaq', 'xar', 'xas', 'xat', 'xau', 'xav', 'xaw', 'xay', 'xba', 'xbb', 'xbc', 'xbd', 'xbe', 'xbg', 'xbi', 'xbj', 'xbm', 'xbn', 'xbo', 'xbp', 'xbr', 'xbw', 'xbx', 'xby', 'xcb', 'xcc', 'xce', 'xcg', 'xch', 'xcl', 'xcm', 'xcn', 'xco', 'xcr', 'xct', 'xcu', 'xcv', 'xcw', 'xcy', 'xda', 'xdc', 'xdk', 'xdm', 'xdo', 'xdy', 'xeb', 'xed', 'xeg', 'xel', 'xem', 'xep', 'xer', 'xes', 'xet', 'xeu', 'xfa', 'xga', 'xgb', 'xgd', 'xgf', 'xgg', 'xgi', 'xgl', 'xgm', 'xgn', 'xgr', 'xgu', 'xgw', 'xha', 'xhc', 'xhd', 'xhe', 'xhr', 'xht', 'xhu', 'xhv', 'xia', 'xib', 'xii', 'xil', 'xin', 'xip', 'xir', 'xis', 'xiv', 'xiy', 'xjb', 'xjt', 'xka', 'xkb', 'xkc', 'xkd', 'xke', 'xkf', 'xkg', 'xkh', 'xki', 'xkj', 'xkk', 'xkl', 'xkn', 'xko', 'xkp', 'xkq', 'xkr', 'xks', 'xkt', 'xku', 'xkv', 'xkw', 'xkx', 'xky', 'xkz', 'xla', 'xlb', 'xlc', 'xld', 'xle', 'xlg', 'xli', 'xln', 'xlo', 'xlp', 'xls', 'xlu', 'xly', 'xma', 'xmb', 'xmc', 'xmd', 'xme', 'xmf', 'xmg', 'xmh', 'xmj', 'xmk', 'xml', 'xmm', 'xmn', 'xmo', 'xmp', 'xmq', 'xmr', 'xms', 'xmt', 'xmu', 'xmv', 'xmw', 'xmx', 'xmy', 'xmz', 'xna', 'xnb', 'xnd', 'xng', 'xnh', 'xni', 'xnk', 'xnn', 'xno', 'xnr', 'xns', 'xnt', 'xnu', 'xny', 'xnz', 'xoc', 'xod', 'xog', 'xoi', 'xok', 'xom', 'xon', 'xoo', 'xop', 'xor', 'xow', 'xpa', 'xpc', 'xpe', 'xpg', 'xpi', 'xpj', 'xpk', 'xpm', 'xpn', 'xpo', 'xpp', 'xpq', 'xpr', 'xps', 'xpt', 'xpu', 'xpy', 'xqa', 'xqt', 'xra', 'xrb', 'xrd', 'xre', 'xrg', 'xri', 'xrm', 'xrn', 'xrq', 'xrr', 'xrt', 'xru', 'xrw', 'xsa', 'xsb', 'xsc', 'xsd', 'xse', 'xsh', 'xsi', 'xsj', 'xsl', 'xsm', 'xsn', 'xso', 'xsp', 'xsq', 'xsr', 'xss', 'xsu', 'xsv', 'xsy', 'xta', 'xtb', 'xtc', 'xtd', 'xte', 'xtg', 'xth', 'xti', 'xtj', 'xtl', 'xtm', 'xtn', 'xto', 'xtp', 'xtq', 'xtr', 'xts', 'xtt', 'xtu', 'xtv', 'xtw', 'xty', 'xtz', 'xua', 'xub', 'xud', 'xug', 'xuj', 'xul', 'xum', 'xun', 'xuo', 'xup', 'xur', 'xut', 'xuu', 'xve', 'xvi', 'xvn', 'xvo', 'xvs', 'xwa', 'xwc', 'xwd', 'xwe', 'xwg', 'xwj', 'xwk', 'xwl', 'xwo', 'xwr', 'xwt', 'xww', 'xxb', 'xxk', 'xxm', 'xxr', 'xxt', 'xya', 'xyb', 'xyj', 'xyk', 'xyl', 'xyt', 'xyy', 'xzh', 'xzm', 'xzp', 'yaa', 'yab', 'yac', 'yad', 'yae', 'yaf', 'yag', 'yah', 'yai', 'yaj', 'yak', 'yal', 'yam', 'yan', 'yao', 'yap', 'yaq', 'yar', 'yas', 'yat', 'yau', 'yav', 'yaw', 'yax', 'yay', 'yaz', 'yba', 'ybb', 'ybd', 'ybe', 'ybh', 'ybi', 'ybj', 'ybk', 'ybl', 'ybm', 'ybn', 'ybo', 'ybx', 'yby', 'ych', 'ycl', 'ycn', 'ycp', 'yda', 'ydd', 'yde', 'ydg', 'ydk', 'yds', 'yea', 'yec', 'yee', 'yei', 'yej', 'yel', 'yen', 'yer', 'yes', 'yet', 'yeu', 'yev', 'yey', 'yga', 'ygi', 'ygl', 'ygm', 'ygp', 'ygr', 'ygs', 'ygu', 'ygw', 'yha', 'yhd', 'yhl', 'yhs', 'yia', 'yif', 'yig', 'yih', 'yii', 'yij', 'yik', 'yil', 'yim', 'yin', 'yip', 'yiq', 'yir', 'yis', 'yit', 'yiu', 'yiv', 'yix', 'yiy', 'yiz', 'yka', 'ykg', 'yki', 'ykk', 'ykl', 'ykm', 'ykn', 'yko', 'ykr', 'ykt', 'yku', 'yky', 'yla', 'ylb', 'yle', 'ylg', 'yli', 'yll', 'ylm', 'yln', 'ylo', 'ylr', 'ylu', 'yly', 'yma', 'ymb', 'ymc', 'ymd', 'yme', 'ymg', 'ymh', 'ymi', 'ymk', 'yml', 'ymm', 'ymn', 'ymo', 'ymp', 'ymq', 'ymr', 'yms', 'ymt', 'ymx', 'ymz', 'yna', 'ynd', 'yne', 'yng', 'ynh', 'ynk', 'ynl', 'ynn', 'yno', 'ynq', 'yns', 'ynu', 'yob', 'yog', 'yoi', 'yok', 'yol', 'yom', 'yon', 'yos', 'yot', 'yox', 'yoy', 'ypa', 'ypb', 'ypg', 'yph', 'ypk', 'ypm', 'ypn', 'ypo', 'ypp', 'ypz', 'yra', 'yrb', 'yre', 'yri', 'yrk', 'yrl', 'yrm', 'yrn', 'yro', 'yrs', 'yrw', 'yry', 'ysc', 'ysd', 'ysg', 'ysl', 'ysn', 'yso', 'ysp', 'ysr', 'yss', 'ysy', 'yta', 'ytl', 'ytp', 'ytw', 'yty', 'yua', 'yub', 'yuc', 'yud', 'yue', 'yuf', 'yug', 'yui', 'yuj', 'yuk', 'yul', 'yum', 'yun', 'yup', 'yuq', 'yur', 'yut', 'yuu', 'yuw', 'yux', 'yuy', 'yuz', 'yva', 'yvt', 'ywa', 'ywg', 'ywl', 'ywn', 'ywq', 'ywr', 'ywt', 'ywu', 'yww', 'yxa', 'yxg', 'yxl', 'yxm', 'yxu', 'yxy', 'yyr', 'yyu', 'yyz', 'yzg', 'yzk', 'zaa', 'zab', 'zac', 'zad', 'zae', 'zaf', 'zag', 'zah', 'zai', 'zaj', 'zak', 'zal', 'zam', 'zao', 'zap', 'zaq', 'zar', 'zas', 'zat', 'zau', 'zav', 'zaw', 'zax', 'zay', 'zaz', 'zbc', 'zbe', 'zbl', 'zbt', 'zbw', 'zca', 'zch', 'zdj', 'zea', 'zeg', 'zeh', 'zen', 'zga', 'zgb', 'zgh', 'zgm', 'zgn', 'zgr', 'zhb', 'zhd', 'zhi', 'zhn', 'zhw', 'zhx', 'zia', 'zib', 'zik', 'zil', 'zim', 'zin', 'zir', 'ziw', 'ziz', 'zka', 'zkb', 'zkd', 'zkg', 'zkh', 'zkk', 'zkn', 'zko', 'zkp', 'zkr', 'zkt', 'zku', 'zkv', 'zkz', 'zle', 'zlj', 'zlm', 'zln', 'zlq', 'zls', 'zlw', 'zma', 'zmb', 'zmc', 'zmd', 'zme', 'zmf', 'zmg', 'zmh', 'zmi', 'zmj', 'zmk', 'zml', 'zmm', 'zmn', 'zmo', 'zmp', 'zmq', 'zmr', 'zms', 'zmt', 'zmu', 'zmv', 'zmw', 'zmx', 'zmy', 'zmz', 'zna', 'znd', 'zne', 'zng', 'znk', 'zns', 'zoc', 'zoh', 'zom', 'zoo', 'zoq', 'zor', 'zos', 'zpa', 'zpb', 'zpc', 'zpd', 'zpe', 'zpf', 'zpg', 'zph', 'zpi', 'zpj', 'zpk', 'zpl', 'zpm', 'zpn', 'zpo', 'zpp', 'zpq', 'zpr', 'zps', 'zpt', 'zpu', 'zpv', 'zpw', 'zpx', 'zpy', 'zpz', 'zqe', 'zra', 'zrg', 'zrn', 'zro', 'zrp', 'zrs', 'zsa', 'zsk', 'zsl', 'zsm', 'zsr', 'zsu', 'zte', 'ztg', 'ztl', 'ztm', 'ztn', 'ztp', 'ztq', 'zts', 'ztt', 'ztu', 'ztx', 'zty', 'zua', 'zuh', 'zum', 'zun', 'zuy', 'zwa', 'zxx', 'zyb', 'zyg', 'zyj', 'zyn', 'zyp', 'zza', 'zzj' ];19272 -1 axe.utils.validLangs = function() {19273 -1 'use strict';19274 -1 return langs;19275 -1 };19276 20767 return commons; 19277 20768 }() 19278 20769 }); 19279 20770 })(typeof window === 'object' ? window : this);19280 -1 }).call(this,require('_process'))19281 -1 },{"_process":1}],14:[function(require,module,exports){19282 -1 var currentVersion = "2.20";-1 20771 },{}],13:[function(require,module,exports){ -1 20772 window.getAccNameVersion = "2.20"; 19283 20773 19284 20774 /*! 19285 20775 CalcNames: The AccName Computation Prototype, compute the Name and Description property values for a DOM node @@ -19292,1160 +20782,1183 @@ Distributed under the terms of the Open Source Initiative OSI - MIT License 19292 20782 */ 19293 20783 19294 20784 // AccName Computation Prototype19295 -1 var calcNames = function(node, fnc, preventVisualARIASelfCSSRef) {19296 -1 var props = { name: "", desc: "" };19297 -1 if (!node || node.nodeType !== 1) {19298 -1 return props;19299 -1 }19300 -1 var rootNode = node;19301 -119302 -1 // Track nodes to prevent duplicate node reference parsing.19303 -1 var nodes = [];19304 -1 // Track aria-owns references to prevent duplicate parsing.19305 -1 var owns = [];19306 -119307 -1 // Recursively process a DOM node to compute an accessible name in accordance with the spec19308 -1 var walk = function(19309 -1 refNode,19310 -1 stop,19311 -1 skip,19312 -1 nodesToIgnoreValues,19313 -1 skipAbort,19314 -1 ownedBy19315 -1 ) {19316 -1 var fullResult = {19317 -1 name: "",19318 -1 title: ""19319 -1 };-1 20785 window.getAccName = calcNames = function( -1 20786 node, -1 20787 fnc, -1 20788 preventVisualARIASelfCSSRef -1 20789 ) { -1 20790 var props = { name: "", desc: "", error: "" }; -1 20791 try { -1 20792 if (!node || node.nodeType !== 1) { -1 20793 return props; -1 20794 } -1 20795 var rootNode = node; -1 20796 -1 20797 // Track nodes to prevent duplicate node reference parsing. -1 20798 var nodes = []; -1 20799 // Track aria-owns references to prevent duplicate parsing. -1 20800 var owns = []; -1 20801 -1 20802 // Recursively process a DOM node to compute an accessible name in accordance with the spec -1 20803 var walk = function( -1 20804 refNode, -1 20805 stop, -1 20806 skip, -1 20807 nodesToIgnoreValues, -1 20808 skipAbort, -1 20809 ownedBy -1 20810 ) { -1 20811 var fullResult = { -1 20812 name: "", -1 20813 title: "" -1 20814 }; 19320 2081519321 -1 /*-1 20816 /* 19322 20817 ARIA Role Exception Rule Set 1.1 19323 20818 The following Role Exception Rule Set is based on the following ARIA Working Group discussion involving all relevant browser venders. 19324 20819 https://lists.w3.org/Archives/Public/public-aria/2017Jun/0057.html 19325 20820 */19326 -1 var isException = function(node, refNode) {19327 -1 if (!refNode || !node || refNode.nodeType !== 1 || node.nodeType !== 1) {19328 -1 return false;19329 -1 }19330 -119331 -1 var inList = function(node, list) {19332 -1 var role = getRole(node);19333 -1 var tag = node.nodeName.toLowerCase();19334 -1 return (19335 -1 (role && list.roles.indexOf(role) >= 0) ||19336 -1 (!role && list.tags.indexOf(tag) >= 0)19337 -1 );19338 -1 };19339 -119340 -1 // The list3 overrides must be checked first.19341 -1 if (inList(node, list3)) {-1 20821 var isException = function(node, refNode) { 19342 20822 if (19343 -1 node === refNode &&19344 -1 !(node.id && ownedBy[node.id] && ownedBy[node.id].node)-1 20823 !refNode || -1 20824 !node || -1 20825 refNode.nodeType !== 1 || -1 20826 node.nodeType !== 1 19345 20827 ) {19346 -1 return !isFocusable(node);19347 -1 } else {19348 -1 // Note: the inParent checker needs to be present to allow for embedded roles matching list3 when the referenced parent is referenced using aria-labelledby, aria-describedby, or aria-owns.19349 -1 return !(19350 -1 (inParent(node, ownedBy.top) &&19351 -1 node.nodeName.toLowerCase() !== "select") ||19352 -1 inList(refNode, list1)19353 -1 );-1 20828 return false; 19354 20829 }19355 -1 }19356 -1 // Otherwise process list2 to identify roles to ignore processing name from content.19357 -1 else if (19358 -1 inList(node, list2) ||19359 -1 (node === rootNode && !inList(node, list1))19360 -1 ) {19361 -1 return true;19362 -1 } else {19363 -1 return false;19364 -1 }19365 -1 };19366 2083019367 -1 var inParent = function(node, parent) {19368 -1 var trackNodes = [];19369 -1 while (node) {19370 -1 if (19371 -1 node.id &&19372 -1 ownedBy[node.id] &&19373 -1 ownedBy[node.id].node &&19374 -1 trackNodes.indexOf(node) === -1-1 20831 var inList = function(node, list) { -1 20832 var role = getRole(node); -1 20833 var tag = node.nodeName.toLowerCase(); -1 20834 return ( -1 20835 (role && list.roles.indexOf(role) >= 0) || -1 20836 (!role && list.tags.indexOf(tag) >= 0) -1 20837 ); -1 20838 }; -1 20839 -1 20840 // The list3 overrides must be checked first. -1 20841 if (inList(node, list3)) { -1 20842 if ( -1 20843 node === refNode && -1 20844 !(node.id && ownedBy[node.id] && ownedBy[node.id].node) -1 20845 ) { -1 20846 return !isFocusable(node); -1 20847 } else { -1 20848 // Note: the inParent checker needs to be present to allow for embedded roles matching list3 when the referenced parent is referenced using aria-labelledby, aria-describedby, or aria-owns. -1 20849 return !( -1 20850 (inParent(node, ownedBy.top) && -1 20851 node.nodeName.toLowerCase() !== "select") || -1 20852 inList(refNode, list1) -1 20853 ); -1 20854 } -1 20855 } -1 20856 // Otherwise process list2 to identify roles to ignore processing name from content. -1 20857 else if ( -1 20858 inList(node, list2) || -1 20859 (node === rootNode && !inList(node, list1)) 19375 20860 ) {19376 -1 trackNodes.push(node);19377 -1 node = ownedBy[node.id].node;19378 -1 } else {19379 -1 node = node.parentNode;19380 -1 }19381 -1 if (node && node === parent) {19382 20861 return true;19383 -1 } else if (!node || node === ownedBy.top || node === document.body) {-1 20862 } else { 19384 20863 return false; 19385 20864 }19386 -1 }19387 -1 return false;19388 -1 };19389 -119390 -1 // Placeholder for storing CSS before and after pseudo element text values for the top level node19391 -1 var cssOP = {19392 -1 before: "",19393 -1 after: ""19394 -1 };-1 20865 }; 19395 2086619396 -1 if (ownedBy.ref) {19397 -1 if (isParentHidden(refNode, document.body, true, true)) {19398 -1 // If referenced via aria-labelledby or aria-describedby, do not return a name or description if a parent node is hidden.19399 -1 return fullResult;19400 -1 } else if (isHidden(refNode, document.body)) {19401 -1 // Otherwise, if aria-labelledby or aria-describedby reference a node that is explicitly hidden, then process all children regardless of their individual hidden states.19402 -1 var ignoreHidden = true;19403 -1 }19404 -1 }-1 20867 var inParent = function(node, parent) { -1 20868 var trackNodes = []; -1 20869 while (node) { -1 20870 if ( -1 20871 node.id && -1 20872 ownedBy[node.id] && -1 20873 ownedBy[node.id].node && -1 20874 trackNodes.indexOf(node) === -1 -1 20875 ) { -1 20876 trackNodes.push(node); -1 20877 node = ownedBy[node.id].node; -1 20878 } else { -1 20879 node = node.parentNode; -1 20880 } -1 20881 if (node && node === parent) { -1 20882 return true; -1 20883 } else if (!node || node === ownedBy.top || node === document.body) { -1 20884 return false; -1 20885 } -1 20886 } -1 20887 return false; -1 20888 }; 19405 2088919406 -1 if (nodes.indexOf(refNode) === -1) {19407 -1 // Store the before and after pseudo element 'content' values for the top level DOM node19408 -1 // Note: If the pseudo element includes block level styling, a space will be added, otherwise inline is asumed and no spacing is added.19409 -1 cssOP = getCSSText(refNode, null);-1 20890 // Placeholder for storing CSS before and after pseudo element text values for the top level node -1 20891 var cssOP = { -1 20892 before: "", -1 20893 after: "" -1 20894 }; 19410 2089519411 -1 // Enabled in Visual ARIA to prevent self referencing by Visual ARIA tooltips19412 -1 if (preventVisualARIASelfCSSRef) {19413 -1 if (19414 -1 cssOP.before.indexOf(" [ARIA] ") !== -1 ||19415 -1 cssOP.before.indexOf(" aria-") !== -1 ||19416 -1 cssOP.before.indexOf(" accName: ") !== -119417 -1 )19418 -1 cssOP.before = "";19419 -1 if (19420 -1 cssOP.after.indexOf(" [ARIA] ") !== -1 ||19421 -1 cssOP.after.indexOf(" aria-") !== -1 ||19422 -1 cssOP.after.indexOf(" accDescription: ") !== -119423 -1 )19424 -1 cssOP.after = "";-1 20896 if (ownedBy.ref) { -1 20897 if (isParentHidden(refNode, document.body, true, true)) { -1 20898 // If referenced via aria-labelledby or aria-describedby, do not return a name or description if a parent node is hidden. -1 20899 return fullResult; -1 20900 } else if (isHidden(refNode, document.body)) { -1 20901 // Otherwise, if aria-labelledby or aria-describedby reference a node that is explicitly hidden, then process all children regardless of their individual hidden states. -1 20902 var ignoreHidden = true; -1 20903 } 19425 20904 }19426 -1 }19427 2090519428 -1 // Recursively apply the same naming computation to all nodes within the referenced structure19429 -1 var walkDOM = function(node, fn, refNode) {19430 -1 var res = {19431 -1 name: "",19432 -1 title: ""19433 -1 };19434 -1 if (!node) {19435 -1 return res;19436 -1 }19437 -1 var nodeIsBlock =19438 -1 node && node.nodeType === 1 && isBlockLevelElement(node) ? true : false;19439 -1 var fResult = fn(node) || {};19440 -1 if (fResult.name && fResult.name.length) {19441 -1 res.name += fResult.name;19442 -1 }19443 -1 if (!isException(node, ownedBy.top, ownedBy)) {19444 -1 node = node.firstChild;19445 -1 while (node) {19446 -1 res.name += walkDOM(node, fn, refNode).name;19447 -1 node = node.nextSibling;-1 20906 if (nodes.indexOf(refNode) === -1) { -1 20907 // Store the before and after pseudo element 'content' values for the top level DOM node -1 20908 // Note: If the pseudo element includes block level styling, a space will be added, otherwise inline is asumed and no spacing is added. -1 20909 cssOP = getCSSText(refNode, null); -1 20910 -1 20911 // Enabled in Visual ARIA to prevent self referencing by Visual ARIA tooltips -1 20912 if (preventVisualARIASelfCSSRef) { -1 20913 if ( -1 20914 cssOP.before.indexOf(" [ARIA] ") !== -1 || -1 20915 cssOP.before.indexOf(" aria-") !== -1 || -1 20916 cssOP.before.indexOf(" accName: ") !== -1 -1 20917 ) -1 20918 cssOP.before = ""; -1 20919 if ( -1 20920 cssOP.after.indexOf(" [ARIA] ") !== -1 || -1 20921 cssOP.after.indexOf(" aria-") !== -1 || -1 20922 cssOP.after.indexOf(" accDescription: ") !== -1 -1 20923 ) -1 20924 cssOP.after = ""; 19448 20925 } 19449 20926 }19450 -1 res.name += fResult.owns || "";19451 -1 if (rootNode === refNode && !trim(res.name) && trim(fResult.title)) {19452 -1 res.name = addSpacing(fResult.title);19453 -1 } else if (rootNode === refNode && trim(fResult.title)) {19454 -1 res.title = addSpacing(fResult.title);19455 -1 }19456 -1 if (rootNode === refNode && trim(fResult.desc)) {19457 -1 res.title = addSpacing(fResult.desc);19458 -1 }19459 -1 if (nodeIsBlock || fResult.isWidget) {19460 -1 res.name = addSpacing(res.name);19461 -1 }19462 -1 return res;19463 -1 };19464 2092719465 -1 fullResult = walkDOM(19466 -1 refNode,19467 -1 function(node) {19468 -1 var i = 0;19469 -1 var element = null;19470 -1 var ids = [];19471 -1 var parts = [];19472 -1 var result = {-1 20928 // Recursively apply the same naming computation to all nodes within the referenced structure -1 20929 var walkDOM = function(node, fn, refNode) { -1 20930 var res = { 19473 20931 name: "",19474 -1 title: "",19475 -1 owns: ""-1 20932 title: "" 19476 20933 };19477 -1 var isEmbeddedNode =19478 -1 node &&19479 -1 node.nodeType === 1 &&19480 -1 nodesToIgnoreValues &&19481 -1 nodesToIgnoreValues.length &&19482 -1 nodesToIgnoreValues.indexOf(node) !== -1 &&19483 -1 node === rootNode &&19484 -1 node !== refNode-1 20934 if (!node) { -1 20935 return res; -1 20936 } -1 20937 var nodeIsBlock = -1 20938 node && node.nodeType === 1 && isBlockLevelElement(node) 19485 20939 ? true 19486 20940 : false;19487 -119488 -1 if (19489 -1 (skip ||19490 -1 !node ||19491 -1 nodes.indexOf(node) !== -1 ||19492 -1 (!ignoreHidden && isHidden(node, ownedBy.top))) &&19493 -1 !skipAbort &&19494 -1 !isEmbeddedNode19495 -1 ) {19496 -1 // Abort if algorithm step is already completed, or if node is a hidden child of refNode, or if this node has already been processed, or skip abort if aria-labelledby self references same node.19497 -1 return result;19498 -1 }19499 -119500 -1 if (nodes.indexOf(node) === -1) {19501 -1 nodes.push(node);-1 20941 var fResult = fn(node) || {}; -1 20942 if (fResult.name && fResult.name.length) { -1 20943 res.name += fResult.name; 19502 20944 }19503 -119504 -1 // Store name for the current node.19505 -1 var name = "";19506 -1 // Store name from aria-owns references if detected.19507 -1 var ariaO = "";19508 -1 // Placeholder for storing CSS before and after pseudo element text values for the current node container element19509 -1 var cssO = {19510 -1 before: "",19511 -1 after: ""19512 -1 };19513 -119514 -1 var parent = refNode === node ? node : node.parentNode;19515 -1 if (nodes.indexOf(parent) === -1) {19516 -1 nodes.push(parent);19517 -1 // Store the before and after pseudo element 'content' values for the current node container element19518 -1 // Note: If the pseudo element includes block level styling, a space will be added, otherwise inline is asumed and no spacing is added.19519 -1 cssO = getCSSText(parent, refNode);19520 -119521 -1 // Enabled in Visual ARIA to prevent self referencing by Visual ARIA tooltips19522 -1 if (preventVisualARIASelfCSSRef) {19523 -1 if (19524 -1 cssO.before.indexOf(" [ARIA] ") !== -1 ||19525 -1 cssO.before.indexOf(" aria-") !== -1 ||19526 -1 cssO.before.indexOf(" accName: ") !== -119527 -1 )19528 -1 cssO.before = "";19529 -1 if (19530 -1 cssO.after.indexOf(" [ARIA] ") !== -1 ||19531 -1 cssO.after.indexOf(" aria-") !== -1 ||19532 -1 cssO.after.indexOf(" accDescription: ") !== -119533 -1 )19534 -1 cssO.after = "";-1 20945 if (!isException(node, ownedBy.top, ownedBy)) { -1 20946 node = node.firstChild; -1 20947 while (node) { -1 20948 res.name += walkDOM(node, fn, refNode).name; -1 20949 node = node.nextSibling; 19535 20950 } 19536 20951 } -1 20952 res.name += fResult.owns || ""; -1 20953 if (rootNode === refNode && !trim(res.name) && trim(fResult.title)) { -1 20954 res.name = addSpacing(fResult.title); -1 20955 } else if (rootNode === refNode && trim(fResult.title)) { -1 20956 res.title = addSpacing(fResult.title); -1 20957 } -1 20958 if (rootNode === refNode && trim(fResult.desc)) { -1 20959 res.title = addSpacing(fResult.desc); -1 20960 } -1 20961 if (nodeIsBlock || fResult.isWidget) { -1 20962 res.name = addSpacing(res.name); -1 20963 } -1 20964 return res; -1 20965 }; 19537 2096619538 -1 // Process standard DOM element node19539 -1 if (node.nodeType === 1) {19540 -1 var aLabelledby = node.getAttribute("aria-labelledby") || "";19541 -1 var aDescribedby = node.getAttribute("aria-describedby") || "";19542 -1 var aLabel = node.getAttribute("aria-label") || "";19543 -1 var nTitle = node.getAttribute("title") || "";19544 -1 var nTag = node.nodeName.toLowerCase();19545 -1 var nRole = getRole(node);19546 -119547 -1 var isNativeFormField = nativeFormFields.indexOf(nTag) !== -1;19548 -1 var isNativeButton = ["input"].indexOf(nTag) !== -1;19549 -1 var isRangeWidgetRole = rangeWidgetRoles.indexOf(nRole) !== -1;19550 -1 var isEditWidgetRole = editWidgetRoles.indexOf(nRole) !== -1;19551 -1 var isSelectWidgetRole = selectWidgetRoles.indexOf(nRole) !== -1;19552 -1 var isSimulatedFormField =19553 -1 isRangeWidgetRole ||19554 -1 isEditWidgetRole ||19555 -1 isSelectWidgetRole ||19556 -1 nRole === "combobox";19557 -1 var isWidgetRole =19558 -1 (isSimulatedFormField || otherWidgetRoles.indexOf(nRole) !== -1) &&19559 -1 nRole !== "link";19560 -1 result.isWidget = isNativeFormField || isWidgetRole;19561 -119562 -1 var hasName = false;19563 -1 var aOwns = node.getAttribute("aria-owns") || "";19564 -1 var isSeparatChildFormField =19565 -1 !isEmbeddedNode &&19566 -1 ((node !== refNode &&19567 -1 (isNativeFormField || isSimulatedFormField)) ||19568 -1 (node.id &&19569 -1 ownedBy[node.id] &&19570 -1 ownedBy[node.id].target &&19571 -1 ownedBy[node.id].target === node))-1 20967 fullResult = walkDOM( -1 20968 refNode, -1 20969 function(node) { -1 20970 var i = 0; -1 20971 var element = null; -1 20972 var ids = []; -1 20973 var parts = []; -1 20974 var result = { -1 20975 name: "", -1 20976 title: "", -1 20977 owns: "" -1 20978 }; -1 20979 var isEmbeddedNode = -1 20980 node && -1 20981 node.nodeType === 1 && -1 20982 nodesToIgnoreValues && -1 20983 nodesToIgnoreValues.length && -1 20984 nodesToIgnoreValues.indexOf(node) !== -1 && -1 20985 node === rootNode && -1 20986 node !== refNode 19572 20987 ? true 19573 20988 : false; 19574 2098919575 -1 if (!stop && node === refNode) {19576 -1 // Check for non-empty value of aria-labelledby if current node equals reference node, follow each ID ref, then stop and process no deeper.19577 -1 if (aLabelledby) {19578 -1 ids = aLabelledby.split(/\s+/);19579 -1 parts = [];19580 -1 for (i = 0; i < ids.length; i++) {19581 -1 element = document.getElementById(ids[i]);19582 -1 // Also prevent the current form field from having its value included in the naming computation if nested as a child of label19583 -1 parts.push(19584 -1 walk(element, true, skip, [node], element === refNode, {19585 -1 ref: ownedBy,19586 -1 top: element19587 -1 }).name19588 -1 );19589 -1 }19590 -1 // Check for blank value, since whitespace chars alone are not valid as a name19591 -1 name = trim(parts.join(" "));-1 20990 if ( -1 20991 (skip || -1 20992 !node || -1 20993 nodes.indexOf(node) !== -1 || -1 20994 (!ignoreHidden && isHidden(node, ownedBy.top))) && -1 20995 !skipAbort && -1 20996 !isEmbeddedNode -1 20997 ) { -1 20998 // Abort if algorithm step is already completed, or if node is a hidden child of refNode, or if this node has already been processed, or skip abort if aria-labelledby self references same node. -1 20999 return result; -1 21000 } 19592 2100119593 -1 if (trim(name)) {19594 -1 hasName = true;19595 -1 // Abort further recursion if name is valid.19596 -1 skip = true;19597 -1 }-1 21002 if (nodes.indexOf(node) === -1) { -1 21003 nodes.push(node); -1 21004 } -1 21005 -1 21006 // Store name for the current node. -1 21007 var name = ""; -1 21008 // Store name from aria-owns references if detected. -1 21009 var ariaO = ""; -1 21010 // Placeholder for storing CSS before and after pseudo element text values for the current node container element -1 21011 var cssO = { -1 21012 before: "", -1 21013 after: "" -1 21014 }; -1 21015 -1 21016 var parent = refNode === node ? node : node.parentNode; -1 21017 if (nodes.indexOf(parent) === -1) { -1 21018 nodes.push(parent); -1 21019 // Store the before and after pseudo element 'content' values for the current node container element -1 21020 // Note: If the pseudo element includes block level styling, a space will be added, otherwise inline is asumed and no spacing is added. -1 21021 cssO = getCSSText(parent, refNode); -1 21022 -1 21023 // Enabled in Visual ARIA to prevent self referencing by Visual ARIA tooltips -1 21024 if (preventVisualARIASelfCSSRef) { -1 21025 if ( -1 21026 cssO.before.indexOf(" [ARIA] ") !== -1 || -1 21027 cssO.before.indexOf(" aria-") !== -1 || -1 21028 cssO.before.indexOf(" accName: ") !== -1 -1 21029 ) -1 21030 cssO.before = ""; -1 21031 if ( -1 21032 cssO.after.indexOf(" [ARIA] ") !== -1 || -1 21033 cssO.after.indexOf(" aria-") !== -1 || -1 21034 cssO.after.indexOf(" accDescription: ") !== -1 -1 21035 ) -1 21036 cssO.after = ""; 19598 21037 } -1 21038 } 19599 2103919600 -1 // Check for non-empty value of aria-describedby if current node equals reference node, follow each ID ref, then stop and process no deeper.19601 -1 if (aDescribedby) {19602 -1 var desc = "";19603 -1 ids = aDescribedby.split(/\s+/);19604 -1 parts = [];19605 -1 for (i = 0; i < ids.length; i++) {19606 -1 element = document.getElementById(ids[i]);19607 -1 // Also prevent the current form field from having its value included in the naming computation if nested as a child of label19608 -1 parts.push(19609 -1 walk(element, true, false, [node], false, {19610 -1 ref: ownedBy,19611 -1 top: element19612 -1 }).name19613 -1 );-1 21040 // Process standard DOM element node -1 21041 if (node.nodeType === 1) { -1 21042 var aLabelledby = node.getAttribute("aria-labelledby") || ""; -1 21043 var aDescribedby = node.getAttribute("aria-describedby") || ""; -1 21044 var aLabel = node.getAttribute("aria-label") || ""; -1 21045 var nTitle = node.getAttribute("title") || ""; -1 21046 var nTag = node.nodeName.toLowerCase(); -1 21047 var nRole = getRole(node); -1 21048 -1 21049 var isNativeFormField = nativeFormFields.indexOf(nTag) !== -1; -1 21050 var isNativeButton = ["input"].indexOf(nTag) !== -1; -1 21051 var isRangeWidgetRole = rangeWidgetRoles.indexOf(nRole) !== -1; -1 21052 var isEditWidgetRole = editWidgetRoles.indexOf(nRole) !== -1; -1 21053 var isSelectWidgetRole = selectWidgetRoles.indexOf(nRole) !== -1; -1 21054 var isSimulatedFormField = -1 21055 isRangeWidgetRole || -1 21056 isEditWidgetRole || -1 21057 isSelectWidgetRole || -1 21058 nRole === "combobox"; -1 21059 var isWidgetRole = -1 21060 (isSimulatedFormField || -1 21061 otherWidgetRoles.indexOf(nRole) !== -1) && -1 21062 nRole !== "link"; -1 21063 result.isWidget = isNativeFormField || isWidgetRole; -1 21064 -1 21065 var hasName = false; -1 21066 var aOwns = node.getAttribute("aria-owns") || ""; -1 21067 var isSeparatChildFormField = -1 21068 !isEmbeddedNode && -1 21069 ((node !== refNode && -1 21070 (isNativeFormField || isSimulatedFormField)) || -1 21071 (node.id && -1 21072 ownedBy[node.id] && -1 21073 ownedBy[node.id].target && -1 21074 ownedBy[node.id].target === node)) -1 21075 ? true -1 21076 : false; -1 21077 -1 21078 if (!stop && node === refNode) { -1 21079 // Check for non-empty value of aria-labelledby if current node equals reference node, follow each ID ref, then stop and process no deeper. -1 21080 if (aLabelledby) { -1 21081 ids = aLabelledby.split(/\s+/); -1 21082 parts = []; -1 21083 for (i = 0; i < ids.length; i++) { -1 21084 element = document.getElementById(ids[i]); -1 21085 // Also prevent the current form field from having its value included in the naming computation if nested as a child of label -1 21086 parts.push( -1 21087 walk(element, true, skip, [node], element === refNode, { -1 21088 ref: ownedBy, -1 21089 top: element -1 21090 }).name -1 21091 ); -1 21092 } -1 21093 // Check for blank value, since whitespace chars alone are not valid as a name -1 21094 name = trim(parts.join(" ")); -1 21095 -1 21096 if (trim(name)) { -1 21097 hasName = true; -1 21098 // Abort further recursion if name is valid. -1 21099 skip = true; -1 21100 } 19614 21101 }19615 -1 // Check for blank value, since whitespace chars alone are not valid as a name19616 -1 desc = trim(parts.join(" "));19617 2110219618 -1 if (trim(desc)) {19619 -1 result.desc = desc;-1 21103 // Check for non-empty value of aria-describedby if current node equals reference node, follow each ID ref, then stop and process no deeper. -1 21104 if (aDescribedby) { -1 21105 var desc = ""; -1 21106 ids = aDescribedby.split(/\s+/); -1 21107 parts = []; -1 21108 for (i = 0; i < ids.length; i++) { -1 21109 element = document.getElementById(ids[i]); -1 21110 // Also prevent the current form field from having its value included in the naming computation if nested as a child of label -1 21111 parts.push( -1 21112 walk(element, true, false, [node], false, { -1 21113 ref: ownedBy, -1 21114 top: element -1 21115 }).name -1 21116 ); -1 21117 } -1 21118 // Check for blank value, since whitespace chars alone are not valid as a name -1 21119 desc = trim(parts.join(" ")); -1 21120 -1 21121 if (trim(desc)) { -1 21122 result.desc = desc; -1 21123 } 19620 21124 } 19621 21125 }19622 -1 }19623 2112619624 -1 // Otherwise, if the current node is a nested widget control within the parent ref obj, then add only its value and process no deeper within the branch.19625 -1 if (isSeparatChildFormField) {19626 -1 // Prevent the referencing node from having its value included in the case of form control labels that contain the element with focus.19627 -1 if (19628 -1 !(19629 -1 nodesToIgnoreValues &&19630 -1 nodesToIgnoreValues.length &&19631 -1 nodesToIgnoreValues.indexOf(node) !== -119632 -1 )19633 -1 ) {19634 -1 if (isRangeWidgetRole) {19635 -1 // For range widgets, append aria-valuetext if non-empty, or aria-valuenow if non-empty, or node.value if applicable.19636 -1 name = getObjectValue(nRole, node, true);19637 -1 } else if (19638 -1 isEditWidgetRole ||19639 -1 (nRole === "combobox" && isNativeFormField)-1 21127 // Otherwise, if the current node is a nested widget control within the parent ref obj, then add only its value and process no deeper within the branch. -1 21128 if (isSeparatChildFormField) { -1 21129 // Prevent the referencing node from having its value included in the case of form control labels that contain the element with focus. -1 21130 if ( -1 21131 !( -1 21132 nodesToIgnoreValues && -1 21133 nodesToIgnoreValues.length && -1 21134 nodesToIgnoreValues.indexOf(node) !== -1 -1 21135 ) 19640 21136 ) {19641 -1 // For simulated edit widgets, append text from content if applicable, or node.value if applicable.19642 -1 name = getObjectValue(nRole, node, false, true);19643 -1 } else if (isSelectWidgetRole) {19644 -1 // For simulated select widgets, append same naming computation algorithm for all child nodes including aria-selected="true" separated by a space when multiple.19645 -1 // Also filter nodes so that only valid child roles of relevant parent role that include aria-selected="true" are included.19646 -1 name = getObjectValue(nRole, node, false, false, true);19647 -1 } else if (19648 -1 isNativeFormField &&19649 -1 ["input", "textarea"].indexOf(nTag) !== -1 &&19650 -1 (!isWidgetRole || isEditWidgetRole)19651 -1 ) {19652 -1 // For native edit fields, append node.value when applicable.19653 -1 name = getObjectValue(nRole, node, false, false, false, true);19654 -1 } else if (19655 -1 isNativeFormField &&19656 -1 nTag === "select" &&19657 -1 (!isWidgetRole || nRole === "combobox")19658 -1 ) {19659 -1 // For native select fields, get text from content for all options with selected attribute separated by a space when multiple, but don't process if another widget role is present unless it matches role="combobox".19660 -1 // Reference: https://github.com/WhatSock/w3c-alternative-text-computation/issues/719661 -1 name = getObjectValue(nRole, node, false, false, true, true);-1 21137 if (isRangeWidgetRole) { -1 21138 // For range widgets, append aria-valuetext if non-empty, or aria-valuenow if non-empty, or node.value if applicable. -1 21139 name = getObjectValue(nRole, node, true); -1 21140 } else if ( -1 21141 isEditWidgetRole || -1 21142 (nRole === "combobox" && isNativeFormField) -1 21143 ) { -1 21144 // For simulated edit widgets, append text from content if applicable, or node.value if applicable. -1 21145 name = getObjectValue(nRole, node, false, true); -1 21146 } else if (isSelectWidgetRole) { -1 21147 // For simulated select widgets, append same naming computation algorithm for all child nodes including aria-selected="true" separated by a space when multiple. -1 21148 // Also filter nodes so that only valid child roles of relevant parent role that include aria-selected="true" are included. -1 21149 name = getObjectValue(nRole, node, false, false, true); -1 21150 } else if ( -1 21151 isNativeFormField && -1 21152 ["input", "textarea"].indexOf(nTag) !== -1 && -1 21153 (!isWidgetRole || isEditWidgetRole) -1 21154 ) { -1 21155 // For native edit fields, append node.value when applicable. -1 21156 name = getObjectValue(nRole, node, false, false, false, true); -1 21157 } else if ( -1 21158 isNativeFormField && -1 21159 nTag === "select" && -1 21160 (!isWidgetRole || nRole === "combobox") -1 21161 ) { -1 21162 // For native select fields, get text from content for all options with selected attribute separated by a space when multiple, but don't process if another widget role is present unless it matches role="combobox". -1 21163 // Reference: https://github.com/WhatSock/w3c-alternative-text-computation/issues/7 -1 21164 name = getObjectValue(nRole, node, false, false, true, true); -1 21165 } -1 21166 -1 21167 // Check for blank value, since whitespace chars alone are not valid as a name -1 21168 name = trim(name); 19662 21169 } 19663 2117019664 -1 // Check for blank value, since whitespace chars alone are not valid as a name19665 -1 name = trim(name);-1 21171 if (trim(name)) { -1 21172 hasName = true; -1 21173 } 19666 21174 } 19667 2117519668 -1 if (trim(name)) {19669 -1 hasName = true;-1 21176 // Otherwise, if current node has a non-empty aria-label then set as name and process no deeper within the branch. -1 21177 if (!hasName && trim(aLabel) && !isSeparatChildFormField) { -1 21178 name = aLabel; -1 21179 -1 21180 // Check for blank value, since whitespace chars alone are not valid as a name -1 21181 if (trim(name)) { -1 21182 hasName = true; -1 21183 if (node === refNode) { -1 21184 // If name is non-empty and both the current and refObject nodes match, then don't process any deeper within the branch. -1 21185 skip = true; -1 21186 } -1 21187 } 19670 21188 }19671 -1 }19672 2118919673 -1 // Otherwise, if current node has a non-empty aria-label then set as name and process no deeper within the branch.19674 -1 if (!hasName && trim(aLabel) && !isSeparatChildFormField) {19675 -1 name = aLabel;-1 21190 // Otherwise, if name is still empty and the current node matches the ref node and is a standard form field with a non-empty associated label element, process label with same naming computation algorithm. -1 21191 if (!hasName && node === refNode && isNativeFormField) { -1 21192 // Logic modified to match issue -1 21193 // https://github.com/WhatSock/w3c-alternative-text-computation/issues/12 */ -1 21194 var labels = document.querySelectorAll("label"); -1 21195 var implicitLabel = getParent(node, "label") || false; -1 21196 var explicitLabel = -1 21197 node.id && -1 21198 document.querySelectorAll('label[for="' + node.id + '"]').length -1 21199 ? document.querySelector('label[for="' + node.id + '"]') -1 21200 : false; -1 21201 var implicitI = 0; -1 21202 var explicitI = 0; -1 21203 for (i = 0; i < labels.length; i++) { -1 21204 if (labels[i] === implicitLabel) { -1 21205 implicitI = i; -1 21206 } else if (labels[i] === explicitLabel) { -1 21207 explicitI = i; -1 21208 } -1 21209 } -1 21210 var isImplicitFirst = -1 21211 implicitLabel && -1 21212 implicitLabel.nodeType === 1 && -1 21213 explicitLabel && -1 21214 explicitLabel.nodeType === 1 && -1 21215 implicitI < explicitI -1 21216 ? true -1 21217 : false; -1 21218 -1 21219 if (explicitLabel) { -1 21220 var eLblName = trim( -1 21221 walk(explicitLabel, true, skip, [node], false, { -1 21222 ref: ownedBy, -1 21223 top: explicitLabel -1 21224 }).name -1 21225 ); -1 21226 } -1 21227 if (implicitLabel && implicitLabel !== explicitLabel) { -1 21228 var iLblName = trim( -1 21229 walk(implicitLabel, true, skip, [node], false, { -1 21230 ref: ownedBy, -1 21231 top: implicitLabel -1 21232 }).name -1 21233 ); -1 21234 } 19676 2123519677 -1 // Check for blank value, since whitespace chars alone are not valid as a name19678 -1 if (trim(name)) {19679 -1 hasName = true;19680 -1 if (node === refNode) {19681 -1 // If name is non-empty and both the current and refObject nodes match, then don't process any deeper within the branch.19682 -1 skip = true;-1 21236 if (iLblName && eLblName && isImplicitFirst) { -1 21237 name = iLblName + " " + eLblName; -1 21238 } else if (eLblName && iLblName) { -1 21239 name = eLblName + " " + iLblName; -1 21240 } else if (eLblName) { -1 21241 name = eLblName; -1 21242 } else if (iLblName) { -1 21243 name = iLblName; 19683 21244 }19684 -1 }19685 -1 }19686 2124519687 -1 // Otherwise, if name is still empty and the current node matches the ref node and is a standard form field with a non-empty associated label element, process label with same naming computation algorithm.19688 -1 if (!hasName && node === refNode && isNativeFormField) {19689 -1 // Logic modified to match issue19690 -1 // https://github.com/WhatSock/w3c-alternative-text-computation/issues/12 */19691 -1 var labels = document.querySelectorAll("label");19692 -1 var implicitLabel = getParent(node, "label") || false;19693 -1 var explicitLabel =19694 -1 node.id &&19695 -1 document.querySelectorAll('label[for="' + node.id + '"]').length19696 -1 ? document.querySelector('label[for="' + node.id + '"]')19697 -1 : false;19698 -1 var implicitI = 0;19699 -1 var explicitI = 0;19700 -1 for (i = 0; i < labels.length; i++) {19701 -1 if (labels[i] === implicitLabel) {19702 -1 implicitI = i;19703 -1 } else if (labels[i] === explicitLabel) {19704 -1 explicitI = i;-1 21246 if (trim(name)) { -1 21247 hasName = true; 19705 21248 } 19706 21249 }19707 -1 var isImplicitFirst =19708 -1 implicitLabel &&19709 -1 implicitLabel.nodeType === 1 &&19710 -1 explicitLabel &&19711 -1 explicitLabel.nodeType === 1 &&19712 -1 implicitI < explicitI-1 21250 -1 21251 // Process native form field buttons in accordance with the HTML AAM -1 21252 // https://w3c.github.io/html-aam/#accessible-name-and-description-computation -1 21253 var btnType = -1 21254 (isNativeButton && node.getAttribute("type")) || false; -1 21255 var btnValue = -1 21256 (btnType && trim(node.getAttribute("value"))) || false; -1 21257 -1 21258 var rolePresentation = -1 21259 !hasName && -1 21260 nRole && -1 21261 presentationRoles.indexOf(nRole) !== -1 && -1 21262 !isFocusable(node) && -1 21263 !hasGlobalAttr(node) 19713 21264 ? true 19714 21265 : false; -1 21266 var nAlt = rolePresentation ? "" : trim(node.getAttribute("alt")); 19715 2126719716 -1 if (explicitLabel) {19717 -1 var eLblName = trim(19718 -1 walk(explicitLabel, true, skip, [node], false, {19719 -1 ref: ownedBy,19720 -1 top: explicitLabel19721 -1 }).name19722 -1 );19723 -1 }19724 -1 if (implicitLabel && implicitLabel !== explicitLabel) {19725 -1 var iLblName = trim(19726 -1 walk(implicitLabel, true, skip, [node], false, {19727 -1 ref: ownedBy,19728 -1 top: implicitLabel19729 -1 }).name19730 -1 );19731 -1 }19732 -119733 -1 if (iLblName && eLblName && isImplicitFirst) {19734 -1 name = iLblName + " " + eLblName;19735 -1 } else if (eLblName && iLblName) {19736 -1 name = eLblName + " " + iLblName;19737 -1 } else if (eLblName) {19738 -1 name = eLblName;19739 -1 } else if (iLblName) {19740 -1 name = iLblName;19741 -1 }19742 -119743 -1 if (trim(name)) {19744 -1 hasName = true;19745 -1 }19746 -1 }19747 -119748 -1 // Process native form field buttons in accordance with the HTML AAM19749 -1 // https://w3c.github.io/html-aam/#accessible-name-and-description-computation19750 -1 var btnType = (isNativeButton && node.getAttribute("type")) || false;19751 -1 var btnValue = (btnType && trim(node.getAttribute("value"))) || false;19752 -119753 -1 var rolePresentation =19754 -1 !hasName &&19755 -1 nRole &&19756 -1 presentationRoles.indexOf(nRole) !== -1 &&19757 -1 !isFocusable(node) &&19758 -1 !hasGlobalAttr(node)19759 -1 ? true19760 -1 : false;19761 -1 var nAlt = rolePresentation ? "" : trim(node.getAttribute("alt"));19762 -119763 -1 // Otherwise, if name is still empty and current node is a standard non-presentational img or image button with a non-empty alt attribute, set alt attribute value as the accessible name.19764 -1 if (19765 -1 !hasName &&19766 -1 !rolePresentation &&19767 -1 (nTag === "img" || btnType === "image") &&19768 -1 nAlt19769 -1 ) {19770 -1 // Check for blank value, since whitespace chars alone are not valid as a name19771 -1 name = trim(nAlt);19772 -1 if (trim(name)) {19773 -1 hasName = true;-1 21268 // Otherwise, if name is still empty and current node is a standard non-presentational img or image button with a non-empty alt attribute, set alt attribute value as the accessible name. -1 21269 if ( -1 21270 !hasName && -1 21271 !rolePresentation && -1 21272 (nTag === "img" || btnType === "image") && -1 21273 nAlt -1 21274 ) { -1 21275 // Check for blank value, since whitespace chars alone are not valid as a name -1 21276 name = trim(nAlt); -1 21277 if (trim(name)) { -1 21278 hasName = true; -1 21279 } 19774 21280 }19775 -1 }19776 2128119777 -1 if (19778 -1 !hasName &&19779 -1 node === refNode &&19780 -1 btnType &&19781 -1 ["button", "image", "submit", "reset"].indexOf(btnType) !== -119782 -1 ) {19783 -1 if (btnValue) {19784 -1 name = btnValue;19785 -1 } else {19786 -1 switch (btnType) {19787 -1 case "submit":19788 -1 case "image":19789 -1 name = "Submit Query";19790 -1 break;19791 -1 case "reset":19792 -1 name = "Reset";19793 -1 break;19794 -1 default:19795 -1 name = "";-1 21282 if ( -1 21283 !hasName && -1 21284 node === refNode && -1 21285 btnType && -1 21286 ["button", "image", "submit", "reset"].indexOf(btnType) !== -1 -1 21287 ) { -1 21288 if (btnValue) { -1 21289 name = btnValue; -1 21290 } else { -1 21291 switch (btnType) { -1 21292 case "submit": -1 21293 case "image": -1 21294 name = "Submit Query"; -1 21295 break; -1 21296 case "reset": -1 21297 name = "Reset"; -1 21298 break; -1 21299 default: -1 21300 name = ""; -1 21301 } -1 21302 } -1 21303 if (trim(name)) { -1 21304 hasName = true; 19796 21305 } 19797 21306 }19798 -1 if (trim(name)) {19799 -1 hasName = true;-1 21307 -1 21308 if ( -1 21309 hasName && -1 21310 node === refNode && -1 21311 btnType && -1 21312 ["button", "submit", "reset"].indexOf(btnType) !== -1 && -1 21313 btnValue && -1 21314 btnValue !== name && -1 21315 !result.desc -1 21316 ) { -1 21317 result.desc = btnValue; 19800 21318 }19801 -1 }19802 2131919803 -1 if (19804 -1 hasName &&19805 -1 node === refNode &&19806 -1 btnType &&19807 -1 ["button", "submit", "reset"].indexOf(btnType) !== -1 &&19808 -1 btnValue &&19809 -1 btnValue !== name &&19810 -1 !result.desc19811 -1 ) {19812 -1 result.desc = btnValue;19813 -1 }-1 21320 // Otherwise, if current node is the same as rootNode and is non-presentational and includes a non-empty title attribute and is not a separate embedded form field, store title attribute value as the accessible name if name is still empty, or the description if not. -1 21321 if ( -1 21322 node === rootNode && -1 21323 !rolePresentation && -1 21324 trim(nTitle) && -1 21325 !isSeparatChildFormField -1 21326 ) { -1 21327 result.title = trim(nTitle); -1 21328 } 19814 2132919815 -1 // Otherwise, if current node is the same as rootNode and is non-presentational and includes a non-empty title attribute and is not a separate embedded form field, store title attribute value as the accessible name if name is still empty, or the description if not.19816 -1 if (19817 -1 node === rootNode &&19818 -1 !rolePresentation &&19819 -1 trim(nTitle) &&19820 -1 !isSeparatChildFormField19821 -1 ) {19822 -1 result.title = trim(nTitle);19823 -1 }19824 -119825 -1 // Check for non-empty value of aria-owns, follow each ID ref, then process with same naming computation.19826 -1 // Also abort aria-owns processing if contained on an element that does not support child elements.19827 -1 if (aOwns && !isNativeFormField && nTag !== "img") {19828 -1 ids = aOwns.split(/\s+/);19829 -1 parts = [];19830 -1 for (i = 0; i < ids.length; i++) {19831 -1 element = document.getElementById(ids[i]);19832 -1 // Abort processing if the referenced node has already been traversed19833 -1 if (element && owns.indexOf(ids[i]) === -1) {19834 -1 owns.push(ids[i]);19835 -1 var oBy = { ref: ownedBy, top: ownedBy.top };19836 -1 oBy[ids[i]] = {19837 -1 refNode: refNode,19838 -1 node: node,19839 -1 target: element19840 -1 };19841 -1 if (!isParentHidden(element, document.body, true)) {19842 -1 parts.push(walk(element, true, skip, [], false, oBy).name);-1 21330 // Check for non-empty value of aria-owns, follow each ID ref, then process with same naming computation. -1 21331 // Also abort aria-owns processing if contained on an element that does not support child elements. -1 21332 if (aOwns && !isNativeFormField && nTag !== "img") { -1 21333 ids = aOwns.split(/\s+/); -1 21334 parts = []; -1 21335 for (i = 0; i < ids.length; i++) { -1 21336 element = document.getElementById(ids[i]); -1 21337 // Abort processing if the referenced node has already been traversed -1 21338 if (element && owns.indexOf(ids[i]) === -1) { -1 21339 owns.push(ids[i]); -1 21340 var oBy = { ref: ownedBy, top: ownedBy.top }; -1 21341 oBy[ids[i]] = { -1 21342 refNode: refNode, -1 21343 node: node, -1 21344 target: element -1 21345 }; -1 21346 if (!isParentHidden(element, document.body, true)) { -1 21347 parts.push(walk(element, true, skip, [], false, oBy).name); -1 21348 } 19843 21349 } 19844 21350 } -1 21351 // Join without adding whitespace since this is already handled by parsing individual nodes within the algorithm steps. -1 21352 ariaO = parts.join(""); 19845 21353 }19846 -1 // Join without adding whitespace since this is already handled by parsing individual nodes within the algorithm steps.19847 -1 ariaO = parts.join("");19848 21354 }19849 -1 }19850 2135519851 -1 // Otherwise, process text node19852 -1 else if (node.nodeType === 3) {19853 -1 name = node.data;19854 -1 }-1 21356 // Otherwise, process text node -1 21357 else if (node.nodeType === 3) { -1 21358 name = node.data; -1 21359 } 19855 2136019856 -1 // Prepend and append the current CSS pseudo element text, plus normalize all whitespace such as newline characters and others into flat spaces.19857 -1 name = cssO.before + name.replace(/\s+/g, " ") + cssO.after;-1 21361 // Prepend and append the current CSS pseudo element text, plus normalize all whitespace such as newline characters and others into flat spaces. -1 21362 name = cssO.before + name.replace(/\s+/g, " ") + cssO.after; 19858 2136319859 -1 if (19860 -1 name.length &&19861 -1 !hasParentLabelOrHidden(node, ownedBy.top, ownedBy, ignoreHidden)19862 -1 ) {19863 -1 result.name = name;19864 -1 }-1 21364 if ( -1 21365 name.length && -1 21366 !hasParentLabelOrHidden(node, ownedBy.top, ownedBy, ignoreHidden) -1 21367 ) { -1 21368 result.name = name; -1 21369 } 19865 2137019866 -1 result.owns = ariaO;-1 21371 result.owns = ariaO; 19867 2137219868 -1 return result;19869 -1 },19870 -1 refNode19871 -1 );-1 21373 return result; -1 21374 }, -1 21375 refNode -1 21376 ); 19872 2137719873 -1 // Prepend and append the refObj CSS pseudo element text, plus normalize whitespace chars into flat spaces.19874 -1 fullResult.name =19875 -1 cssOP.before + fullResult.name.replace(/\s+/g, " ") + cssOP.after;-1 21378 // Prepend and append the refObj CSS pseudo element text, plus normalize whitespace chars into flat spaces. -1 21379 fullResult.name = -1 21380 cssOP.before + fullResult.name.replace(/\s+/g, " ") + cssOP.after; 19876 2138119877 -1 return fullResult;19878 -1 };-1 21382 return fullResult; -1 21383 }; 19879 2138419880 -1 var getRole = function(node) {19881 -1 var role = node && node.getAttribute ? node.getAttribute("role") : "";19882 -1 if (!trim(role)) {-1 21385 var getRole = function(node) { -1 21386 var role = node && node.getAttribute ? node.getAttribute("role") : ""; -1 21387 if (!trim(role)) { -1 21388 return ""; -1 21389 } -1 21390 var inList = function(list) { -1 21391 return trim(role).length > 0 && list.roles.indexOf(role) >= 0; -1 21392 }; -1 21393 var roles = role.split(/\s+/); -1 21394 for (var i = 0; i < roles.length; i++) { -1 21395 role = roles[i]; -1 21396 if ( -1 21397 inList(list1) || -1 21398 inList(list2) || -1 21399 inList(list3) || -1 21400 presentationRoles.indexOf(role) !== -1 -1 21401 ) { -1 21402 return role; -1 21403 } -1 21404 } 19883 21405 return "";19884 -1 }19885 -1 var inList = function(list) {19886 -1 return trim(role).length > 0 && list.roles.indexOf(role) >= 0;19887 21406 };19888 -1 var roles = role.split(/\s+/);19889 -1 for (var i = 0; i < roles.length; i++) {19890 -1 role = roles[i];-1 21407 -1 21408 var isFocusable = function(node) { -1 21409 var nodeName = node.nodeName.toLowerCase(); -1 21410 if (node.getAttribute("tabindex")) { -1 21411 return true; -1 21412 } -1 21413 if (nodeName === "a" && node.getAttribute("href")) { -1 21414 return true; -1 21415 } 19891 21416 if (19892 -1 inList(list1) ||19893 -1 inList(list2) ||19894 -1 inList(list3) ||19895 -1 presentationRoles.indexOf(role) !== -1-1 21417 ["button", "input", "select", "textarea"].indexOf(nodeName) !== -1 && -1 21418 node.getAttribute("type") !== "hidden" 19896 21419 ) {19897 -1 return role;-1 21420 return true; 19898 21421 }19899 -1 }19900 -1 return "";19901 -1 };19902 -119903 -1 var isFocusable = function(node) {19904 -1 var nodeName = node.nodeName.toLowerCase();19905 -1 if (node.getAttribute("tabindex")) {19906 -1 return true;19907 -1 }19908 -1 if (nodeName === "a" && node.getAttribute("href")) {19909 -1 return true;19910 -1 }19911 -1 if (19912 -1 ["button", "input", "select", "textarea"].indexOf(nodeName) !== -1 &&19913 -1 node.getAttribute("type") !== "hidden"19914 -1 ) {19915 -1 return true;19916 -1 }19917 -1 return false;19918 -1 };-1 21422 return false; -1 21423 }; 19919 2142419920 -1 // ARIA Role Exception Rule Set 1.119921 -1 // The following Role Exception Rule Set is based on the following ARIA Working Group discussion involving all relevant browser venders.19922 -1 // https://lists.w3.org/Archives/Public/public-aria/2017Jun/0057.html-1 21425 // ARIA Role Exception Rule Set 1.1 -1 21426 // The following Role Exception Rule Set is based on the following ARIA Working Group discussion involving all relevant browser venders. -1 21427 // https://lists.w3.org/Archives/Public/public-aria/2017Jun/0057.html -1 21428 -1 21429 // Always include name from content when the referenced node matches list1, as well as when child nodes match those within list3 -1 21430 // Note: gridcell was added to list1 to account for focusable gridcells that match the ARIA 1.0 paradigm for interactive grids. -1 21431 var list1 = { -1 21432 roles: [ -1 21433 "button", -1 21434 "checkbox", -1 21435 "link", -1 21436 "option", -1 21437 "radio", -1 21438 "switch", -1 21439 "tab", -1 21440 "treeitem", -1 21441 "menuitem", -1 21442 "menuitemcheckbox", -1 21443 "menuitemradio", -1 21444 "cell", -1 21445 "gridcell", -1 21446 "columnheader", -1 21447 "rowheader", -1 21448 "tooltip", -1 21449 "heading" -1 21450 ], -1 21451 tags: [ -1 21452 "a", -1 21453 "button", -1 21454 "summary", -1 21455 "input", -1 21456 "h1", -1 21457 "h2", -1 21458 "h3", -1 21459 "h4", -1 21460 "h5", -1 21461 "h6", -1 21462 "menuitem", -1 21463 "option", -1 21464 "td", -1 21465 "th" -1 21466 ] -1 21467 }; -1 21468 // Never include name from content when current node matches list2 -1 21469 var list2 = { -1 21470 roles: [ -1 21471 "application", -1 21472 "alert", -1 21473 "log", -1 21474 "marquee", -1 21475 "timer", -1 21476 "alertdialog", -1 21477 "dialog", -1 21478 "banner", -1 21479 "complementary", -1 21480 "form", -1 21481 "main", -1 21482 "navigation", -1 21483 "region", -1 21484 "search", -1 21485 "article", -1 21486 "document", -1 21487 "feed", -1 21488 "figure", -1 21489 "img", -1 21490 "math", -1 21491 "toolbar", -1 21492 "menu", -1 21493 "menubar", -1 21494 "grid", -1 21495 "listbox", -1 21496 "radiogroup", -1 21497 "textbox", -1 21498 "searchbox", -1 21499 "spinbutton", -1 21500 "scrollbar", -1 21501 "slider", -1 21502 "tablist", -1 21503 "tabpanel", -1 21504 "tree", -1 21505 "treegrid", -1 21506 "separator" -1 21507 ], -1 21508 tags: [ -1 21509 "article", -1 21510 "aside", -1 21511 "body", -1 21512 "select", -1 21513 "datalist", -1 21514 "optgroup", -1 21515 "dialog", -1 21516 "figure", -1 21517 "footer", -1 21518 "form", -1 21519 "header", -1 21520 "hr", -1 21521 "img", -1 21522 "textarea", -1 21523 "input", -1 21524 "main", -1 21525 "math", -1 21526 "menu", -1 21527 "nav", -1 21528 "section" -1 21529 ] -1 21530 }; -1 21531 // As an override of list2, conditionally include name from content if current node is focusable, or if the current node matches list3 while the referenced parent node matches list1. -1 21532 var list3 = { -1 21533 roles: [ -1 21534 "term", -1 21535 "definition", -1 21536 "directory", -1 21537 "list", -1 21538 "group", -1 21539 "note", -1 21540 "status", -1 21541 "table", -1 21542 "rowgroup", -1 21543 "row", -1 21544 "contentinfo" -1 21545 ], -1 21546 tags: [ -1 21547 "dl", -1 21548 "ul", -1 21549 "ol", -1 21550 "dd", -1 21551 "details", -1 21552 "output", -1 21553 "table", -1 21554 "thead", -1 21555 "tbody", -1 21556 "tfoot", -1 21557 "tr" -1 21558 ] -1 21559 }; 19923 2156019924 -1 // Always include name from content when the referenced node matches list1, as well as when child nodes match those within list319925 -1 // Note: gridcell was added to list1 to account for focusable gridcells that match the ARIA 1.0 paradigm for interactive grids.19926 -1 var list1 = {19927 -1 roles: [-1 21561 var nativeFormFields = ["button", "input", "select", "textarea"]; -1 21562 var rangeWidgetRoles = ["scrollbar", "slider", "spinbutton"]; -1 21563 var editWidgetRoles = ["searchbox", "textbox"]; -1 21564 var selectWidgetRoles = ["grid", "listbox", "tablist", "tree", "treegrid"]; -1 21565 var otherWidgetRoles = [ 19928 21566 "button", 19929 21567 "checkbox", 19930 21568 "link",19931 -1 "option",19932 -1 "radio",19933 21569 "switch",19934 -1 "tab",19935 -1 "treeitem",-1 21570 "option", -1 21571 "menu", -1 21572 "menubar", 19936 21573 "menuitem", 19937 21574 "menuitemcheckbox", 19938 21575 "menuitemradio",19939 -1 "cell",19940 -1 "gridcell",19941 -1 "columnheader",19942 -1 "rowheader",19943 -1 "tooltip",19944 -1 "heading"19945 -1 ],19946 -1 tags: [19947 -1 "a",19948 -1 "button",19949 -1 "summary",19950 -1 "input",-1 21576 "radio", -1 21577 "tab", -1 21578 "treeitem", -1 21579 "gridcell" -1 21580 ]; -1 21581 var presentationRoles = ["presentation", "none"]; -1 21582 -1 21583 var hasGlobalAttr = function(node) { -1 21584 var globalPropsAndStates = [ -1 21585 "busy", -1 21586 "controls", -1 21587 "current", -1 21588 "describedby", -1 21589 "details", -1 21590 "disabled", -1 21591 "dropeffect", -1 21592 "errormessage", -1 21593 "flowto", -1 21594 "grabbed", -1 21595 "haspopup", -1 21596 "invalid", -1 21597 "keyshortcuts", -1 21598 "live", -1 21599 "owns", -1 21600 "roledescription" -1 21601 ]; -1 21602 for (var i = 0; i < globalPropsAndStates.length; i++) { -1 21603 var a = trim(node.getAttribute("aria-" + globalPropsAndStates[i])); -1 21604 if (a) { -1 21605 return true; -1 21606 } -1 21607 } -1 21608 return false; -1 21609 }; -1 21610 -1 21611 var isHidden = function(node, refNode) { -1 21612 var hidden = function(node) { -1 21613 if (!node || node.nodeType !== 1 || node === refNode) { -1 21614 return false; -1 21615 } -1 21616 if (node.getAttribute("aria-hidden") === "true") { -1 21617 return true; -1 21618 } -1 21619 if (node.getAttribute("hidden")) { -1 21620 return true; -1 21621 } -1 21622 var style = getStyleObject(node); -1 21623 if (style["display"] === "none" || style["visibility"] === "hidden") { -1 21624 return true; -1 21625 } -1 21626 return false; -1 21627 }; -1 21628 return hidden(node); -1 21629 }; -1 21630 -1 21631 var isParentHidden = function(node, refNode, skipOwned, skipCurrent) { -1 21632 while (node && node !== refNode) { -1 21633 if (!skipCurrent && node.nodeType === 1 && isHidden(node, refNode)) { -1 21634 return true; -1 21635 } else skipCurrent = false; -1 21636 node = node.parentNode; -1 21637 } -1 21638 return false; -1 21639 }; -1 21640 -1 21641 var getStyleObject = function(node) { -1 21642 var style = {}; -1 21643 if (document.defaultView && document.defaultView.getComputedStyle) { -1 21644 style = document.defaultView.getComputedStyle(node, ""); -1 21645 } else if (node.currentStyle) { -1 21646 style = node.currentStyle; -1 21647 } -1 21648 return style; -1 21649 }; -1 21650 -1 21651 var cleanCSSText = function(node, text) { -1 21652 var s = text; -1 21653 if (s.indexOf("attr(") !== -1) { -1 21654 var m = s.match(/attr\((.|\n|\r\n)*?\)/g); -1 21655 for (var i = 0; i < m.length; i++) { -1 21656 var b = m[i].slice(5, -1); -1 21657 b = node.getAttribute(b) || ""; -1 21658 s = s.replace(m[i], b); -1 21659 } -1 21660 } -1 21661 return s || text; -1 21662 }; -1 21663 -1 21664 var isBlockLevelElement = function(node, cssObj) { -1 21665 var styleObject = cssObj || getStyleObject(node); -1 21666 for (var prop in blockStyles) { -1 21667 var values = blockStyles[prop]; -1 21668 for (var i = 0; i < values.length; i++) { -1 21669 if ( -1 21670 styleObject[prop] && -1 21671 ((values[i].indexOf("!") === 0 && -1 21672 [values[i].slice(1), "inherit", "initial", "unset"].indexOf( -1 21673 styleObject[prop] -1 21674 ) === -1) || -1 21675 styleObject[prop].indexOf(values[i]) !== -1) -1 21676 ) { -1 21677 return true; -1 21678 } -1 21679 } -1 21680 } -1 21681 if ( -1 21682 !cssObj && -1 21683 node.nodeName && -1 21684 blockElements.indexOf(node.nodeName.toLowerCase()) !== -1 -1 21685 ) { -1 21686 return true; -1 21687 } -1 21688 return false; -1 21689 }; -1 21690 -1 21691 // CSS Block Styles indexed from: -1 21692 // https://developer.mozilla.org/en-US/docs/Web/Guide/CSS/Block_formatting_context -1 21693 var blockStyles = { -1 21694 display: ["block", "grid", "table", "flow-root", "flex"], -1 21695 position: ["absolute", "fixed"], -1 21696 float: ["left", "right", "inline"], -1 21697 clear: ["left", "right", "both", "inline"], -1 21698 overflow: ["hidden", "scroll", "auto"], -1 21699 "column-count": ["!auto"], -1 21700 "column-width": ["!auto"], -1 21701 "column-span": ["all"], -1 21702 contain: ["layout", "content", "strict"] -1 21703 }; -1 21704 -1 21705 // HTML5 Block Elements indexed from: -1 21706 // https://github.com/webmodules/block-elements -1 21707 // Note: 'br' was added to this array because it impacts visual display and should thus add a space . -1 21708 // Reference issue: https://github.com/w3c/accname/issues/4 -1 21709 // Note: Added in 1.13, td, th, tr, and legend -1 21710 var blockElements = [ -1 21711 "address", -1 21712 "article", -1 21713 "aside", -1 21714 "blockquote", -1 21715 "br", -1 21716 "canvas", -1 21717 "dd", -1 21718 "div", -1 21719 "dl", -1 21720 "dt", -1 21721 "fieldset", -1 21722 "figcaption", -1 21723 "figure", -1 21724 "footer", -1 21725 "form", 19951 21726 "h1", 19952 21727 "h2", 19953 21728 "h3", 19954 21729 "h4", 19955 21730 "h5", 19956 21731 "h6",19957 -1 "menuitem",19958 -1 "option",19959 -1 "td",19960 -1 "th"19961 -1 ]19962 -1 };19963 -1 // Never include name from content when current node matches list219964 -1 var list2 = {19965 -1 roles: [19966 -1 "application",19967 -1 "alert",19968 -1 "log",19969 -1 "marquee",19970 -1 "timer",19971 -1 "alertdialog",19972 -1 "dialog",19973 -1 "banner",19974 -1 "complementary",19975 -1 "form",19976 -1 "main",19977 -1 "navigation",19978 -1 "region",19979 -1 "search",19980 -1 "article",19981 -1 "document",19982 -1 "feed",19983 -1 "figure",19984 -1 "img",19985 -1 "math",19986 -1 "toolbar",19987 -1 "menu",19988 -1 "menubar",19989 -1 "grid",19990 -1 "listbox",19991 -1 "radiogroup",19992 -1 "textbox",19993 -1 "searchbox",19994 -1 "spinbutton",19995 -1 "scrollbar",19996 -1 "slider",19997 -1 "tablist",19998 -1 "tabpanel",19999 -1 "tree",20000 -1 "treegrid",20001 -1 "separator"20002 -1 ],20003 -1 tags: [20004 -1 "article",20005 -1 "aside",20006 -1 "body",20007 -1 "select",20008 -1 "datalist",20009 -1 "optgroup",20010 -1 "dialog",20011 -1 "figure",20012 -1 "footer",20013 -1 "form",20014 21732 "header", -1 21733 "hgroup", 20015 21734 "hr",20016 -1 "img",20017 -1 "textarea",20018 -1 "input",-1 21735 "legend", -1 21736 "li", 20019 21737 "main",20020 -1 "math",20021 -1 "menu",20022 21738 "nav",20023 -1 "section"20024 -1 ]20025 -1 };20026 -1 // As an override of list2, conditionally include name from content if current node is focusable, or if the current node matches list3 while the referenced parent node matches list1.20027 -1 var list3 = {20028 -1 roles: [20029 -1 "term",20030 -1 "definition",20031 -1 "directory",20032 -1 "list",20033 -1 "group",20034 -1 "note",20035 -1 "status",20036 -1 "table",20037 -1 "rowgroup",20038 -1 "row",20039 -1 "contentinfo"20040 -1 ],20041 -1 tags: [20042 -1 "dl",20043 -1 "ul",-1 21739 "noscript", 20044 21740 "ol",20045 -1 "dd",20046 -1 "details",20047 21741 "output", -1 21742 "p", -1 21743 "pre", -1 21744 "section", 20048 21745 "table",20049 -1 "thead",20050 -1 "tbody",-1 21746 "td", 20051 21747 "tfoot",20052 -1 "tr"20053 -1 ]20054 -1 };20055 -120056 -1 var nativeFormFields = ["button", "input", "select", "textarea"];20057 -1 var rangeWidgetRoles = ["scrollbar", "slider", "spinbutton"];20058 -1 var editWidgetRoles = ["searchbox", "textbox"];20059 -1 var selectWidgetRoles = ["grid", "listbox", "tablist", "tree", "treegrid"];20060 -1 var otherWidgetRoles = [20061 -1 "button",20062 -1 "checkbox",20063 -1 "link",20064 -1 "switch",20065 -1 "option",20066 -1 "menu",20067 -1 "menubar",20068 -1 "menuitem",20069 -1 "menuitemcheckbox",20070 -1 "menuitemradio",20071 -1 "radio",20072 -1 "tab",20073 -1 "treeitem",20074 -1 "gridcell"20075 -1 ];20076 -1 var presentationRoles = ["presentation", "none"];20077 -120078 -1 var hasGlobalAttr = function(node) {20079 -1 var globalPropsAndStates = [20080 -1 "busy",20081 -1 "controls",20082 -1 "current",20083 -1 "describedby",20084 -1 "details",20085 -1 "disabled",20086 -1 "dropeffect",20087 -1 "errormessage",20088 -1 "flowto",20089 -1 "grabbed",20090 -1 "haspopup",20091 -1 "invalid",20092 -1 "keyshortcuts",20093 -1 "live",20094 -1 "owns",20095 -1 "roledescription"-1 21748 "th", -1 21749 "tr", -1 21750 "ul", -1 21751 "video" 20096 21752 ];20097 -1 for (var i = 0; i < globalPropsAndStates.length; i++) {20098 -1 var a = trim(node.getAttribute("aria-" + globalPropsAndStates[i]));20099 -1 if (a) {20100 -1 return true;20101 -1 }20102 -1 }20103 -1 return false;20104 -1 };20105 -120106 -1 var isHidden = function(node, refNode) {20107 -1 var hidden = function(node) {20108 -1 if (!node || node.nodeType !== 1 || node === refNode) {20109 -1 return false;20110 -1 }20111 -1 if (node.getAttribute("aria-hidden") === "true") {20112 -1 return true;20113 -1 }20114 -1 if (node.getAttribute("hidden")) {20115 -1 return true;20116 -1 }20117 -1 var style = getStyleObject(node);20118 -1 if (style["display"] === "none" || style["visibility"] === "hidden") {20119 -1 return true;20120 -1 }20121 -1 return false;20122 -1 };20123 -1 return hidden(node);20124 -1 };20125 -120126 -1 var isParentHidden = function(node, refNode, skipOwned, skipCurrent) {20127 -1 while (node && node !== refNode) {20128 -1 if (!skipCurrent && node.nodeType === 1 && isHidden(node, refNode)) {20129 -1 return true;20130 -1 } else skipCurrent = false;20131 -1 node = node.parentNode;20132 -1 }20133 -1 return false;20134 -1 };20135 -120136 -1 var getStyleObject = function(node) {20137 -1 var style = {};20138 -1 if (document.defaultView && document.defaultView.getComputedStyle) {20139 -1 style = document.defaultView.getComputedStyle(node, "");20140 -1 } else if (node.currentStyle) {20141 -1 style = node.currentStyle;20142 -1 }20143 -1 return style;20144 -1 };20145 -120146 -1 var cleanCSSText = function(node, text) {20147 -1 var s = text;20148 -1 if (s.indexOf("attr(") !== -1) {20149 -1 var m = s.match(/attr\((.|\n|\r\n)*?\)/g);20150 -1 for (var i = 0; i < m.length; i++) {20151 -1 var b = m[i].slice(5, -1);20152 -1 b = node.getAttribute(b) || "";20153 -1 s = s.replace(m[i], b);20154 -1 }20155 -1 }20156 -1 return s || text;20157 -1 };20158 2175320159 -1 var isBlockLevelElement = function(node, cssObj) {20160 -1 var styleObject = cssObj || getStyleObject(node);20161 -1 for (var prop in blockStyles) {20162 -1 var values = blockStyles[prop];20163 -1 for (var i = 0; i < values.length; i++) {20164 -1 if (20165 -1 styleObject[prop] &&20166 -1 ((values[i].indexOf("!") === 0 &&20167 -1 [values[i].slice(1), "inherit", "initial", "unset"].indexOf(20168 -1 styleObject[prop]20169 -1 ) === -1) ||20170 -1 styleObject[prop].indexOf(values[i]) !== -1)20171 -1 ) {20172 -1 return true;20173 -1 }20174 -1 }20175 -1 }20176 -1 if (20177 -1 !cssObj &&20178 -1 node.nodeName &&20179 -1 blockElements.indexOf(node.nodeName.toLowerCase()) !== -1-1 21754 var getObjectValue = function( -1 21755 role, -1 21756 node, -1 21757 isRange, -1 21758 isEdit, -1 21759 isSelect, -1 21760 isNative 20180 21761 ) {20181 -1 return true;20182 -1 }20183 -1 return false;20184 -1 };20185 -120186 -1 // CSS Block Styles indexed from:20187 -1 // https://developer.mozilla.org/en-US/docs/Web/Guide/CSS/Block_formatting_context20188 -1 var blockStyles = {20189 -1 display: ["block", "grid", "table", "flow-root", "flex"],20190 -1 position: ["absolute", "fixed"],20191 -1 float: ["left", "right", "inline"],20192 -1 clear: ["left", "right", "both", "inline"],20193 -1 overflow: ["hidden", "scroll", "auto"],20194 -1 "column-count": ["!auto"],20195 -1 "column-width": ["!auto"],20196 -1 "column-span": ["all"],20197 -1 contain: ["layout", "content", "strict"]20198 -1 };20199 -120200 -1 // HTML5 Block Elements indexed from:20201 -1 // https://github.com/webmodules/block-elements20202 -1 // Note: 'br' was added to this array because it impacts visual display and should thus add a space .20203 -1 // Reference issue: https://github.com/w3c/accname/issues/420204 -1 // Note: Added in 1.13, td, th, tr, and legend20205 -1 var blockElements = [20206 -1 "address",20207 -1 "article",20208 -1 "aside",20209 -1 "blockquote",20210 -1 "br",20211 -1 "canvas",20212 -1 "dd",20213 -1 "div",20214 -1 "dl",20215 -1 "dt",20216 -1 "fieldset",20217 -1 "figcaption",20218 -1 "figure",20219 -1 "footer",20220 -1 "form",20221 -1 "h1",20222 -1 "h2",20223 -1 "h3",20224 -1 "h4",20225 -1 "h5",20226 -1 "h6",20227 -1 "header",20228 -1 "hgroup",20229 -1 "hr",20230 -1 "legend",20231 -1 "li",20232 -1 "main",20233 -1 "nav",20234 -1 "noscript",20235 -1 "ol",20236 -1 "output",20237 -1 "p",20238 -1 "pre",20239 -1 "section",20240 -1 "table",20241 -1 "td",20242 -1 "tfoot",20243 -1 "th",20244 -1 "tr",20245 -1 "ul",20246 -1 "video"20247 -1 ];20248 -120249 -1 var getObjectValue = function(20250 -1 role,20251 -1 node,20252 -1 isRange,20253 -1 isEdit,20254 -1 isSelect,20255 -1 isNative20256 -1 ) {20257 -1 var val = "";20258 -1 var bypass = false;20259 -120260 -1 if (isRange && !isNative) {20261 -1 val =20262 -1 node.getAttribute("aria-valuetext") ||20263 -1 node.getAttribute("aria-valuenow") ||20264 -1 "";20265 -1 } else if (isEdit && !isNative) {20266 -1 val = getText(node) || "";20267 -1 } else if (isSelect && !isNative) {20268 -1 var childRoles = [];20269 -1 if (role === "grid" || role === "treegrid") {20270 -1 childRoles = ["gridcell", "rowheader", "columnheader"];20271 -1 } else if (role === "listbox") {20272 -1 childRoles = ["option"];20273 -1 } else if (role === "tablist") {20274 -1 childRoles = ["tab"];20275 -1 } else if (role === "tree") {20276 -1 childRoles = ["treeitem"];20277 -1 }20278 -1 val = joinSelectedParts(20279 -1 node,20280 -1 node.querySelectorAll('*[aria-selected="true"]'),20281 -1 false,20282 -1 childRoles20283 -1 );20284 -1 bypass = true;20285 -1 }20286 -1 val = trim(val);20287 -1 if (!val && (isRange || isEdit) && node.value) {20288 -1 val = node.value;20289 -1 }20290 -1 if (!bypass && !val && isNative) {20291 -1 if (isSelect) {-1 21762 var val = ""; -1 21763 var bypass = false; -1 21764 -1 21765 if (isRange && !isNative) { -1 21766 val = -1 21767 node.getAttribute("aria-valuetext") || -1 21768 node.getAttribute("aria-valuenow") || -1 21769 ""; -1 21770 } else if (isEdit && !isNative) { -1 21771 val = getText(node) || ""; -1 21772 } else if (isSelect && !isNative) { -1 21773 var childRoles = []; -1 21774 if (role === "grid" || role === "treegrid") { -1 21775 childRoles = ["gridcell", "rowheader", "columnheader"]; -1 21776 } else if (role === "listbox") { -1 21777 childRoles = ["option"]; -1 21778 } else if (role === "tablist") { -1 21779 childRoles = ["tab"]; -1 21780 } else if (role === "tree") { -1 21781 childRoles = ["treeitem"]; -1 21782 } 20292 21783 val = joinSelectedParts( 20293 21784 node,20294 -1 node.querySelectorAll("option[selected]"),20295 -1 true-1 21785 node.querySelectorAll('*[aria-selected="true"]'), -1 21786 false, -1 21787 childRoles 20296 21788 );20297 -1 } else {-1 21789 bypass = true; -1 21790 } -1 21791 val = trim(val); -1 21792 if (!val && (isRange || isEdit) && node.value) { 20298 21793 val = node.value; 20299 21794 }20300 -1 }-1 21795 if (!bypass && !val && isNative) { -1 21796 if (isSelect) { -1 21797 val = joinSelectedParts( -1 21798 node, -1 21799 node.querySelectorAll("option[selected]"), -1 21800 true -1 21801 ); -1 21802 } else { -1 21803 val = node.value; -1 21804 } -1 21805 } 20301 2180620302 -1 return val;20303 -1 };-1 21807 return val; -1 21808 }; 20304 2180920305 -1 var addSpacing = function(s) {20306 -1 return trim(s).length ? " " + s + " " : " ";20307 -1 };-1 21810 var addSpacing = function(s) { -1 21811 return trim(s).length ? " " + s + " " : " "; -1 21812 }; 20308 2181320309 -1 var joinSelectedParts = function(node, nOA, isNative, childRoles) {20310 -1 if (!nOA || !nOA.length) {20311 -1 return "";20312 -1 }20313 -1 var parts = [];20314 -1 for (var i = 0; i < nOA.length; i++) {20315 -1 var role = getRole(nOA[i]);20316 -1 var isValidChildRole = !childRoles || childRoles.indexOf(role) !== -1;20317 -1 if (isValidChildRole) {20318 -1 parts.push(20319 -1 isNative20320 -1 ? getText(nOA[i])20321 -1 : walk(nOA[i], true, false, [], false, { top: nOA[i] }).name20322 -1 );-1 21814 var joinSelectedParts = function(node, nOA, isNative, childRoles) { -1 21815 if (!nOA || !nOA.length) { -1 21816 return ""; -1 21817 } -1 21818 var parts = []; -1 21819 for (var i = 0; i < nOA.length; i++) { -1 21820 var role = getRole(nOA[i]); -1 21821 var isValidChildRole = !childRoles || childRoles.indexOf(role) !== -1; -1 21822 if (isValidChildRole) { -1 21823 parts.push( -1 21824 isNative -1 21825 ? getText(nOA[i]) -1 21826 : walk(nOA[i], true, false, [], false, { top: nOA[i] }).name -1 21827 ); -1 21828 } 20323 21829 }20324 -1 }20325 -1 return parts.join(" ");20326 -1 };-1 21830 return parts.join(" "); -1 21831 }; 20327 2183220328 -1 var getPseudoElStyleObj = function(node, position) {20329 -1 var styleObj = {};20330 -1 for (var prop in blockStyles) {20331 -1 styleObj[prop] = document.defaultView-1 21833 var getPseudoElStyleObj = function(node, position) { -1 21834 var styleObj = {}; -1 21835 for (var prop in blockStyles) { -1 21836 styleObj[prop] = document.defaultView -1 21837 .getComputedStyle(node, position) -1 21838 .getPropertyValue(prop); -1 21839 } -1 21840 styleObj["content"] = document.defaultView 20332 21841 .getComputedStyle(node, position)20333 -1 .getPropertyValue(prop);20334 -1 }20335 -1 styleObj["content"] = document.defaultView20336 -1 .getComputedStyle(node, position)20337 -1 .getPropertyValue("content")20338 -1 .replace(/^"|\\|"$/g, "");20339 -1 return styleObj;20340 -1 };-1 21842 .getPropertyValue("content") -1 21843 .replace(/^"|\\|"$/g, ""); -1 21844 return styleObj; -1 21845 }; 20341 2184620342 -1 var getText = function(node, position) {20343 -1 if (!position && node.nodeType === 1) {20344 -1 return node.innerText || node.textContent || "";20345 -1 }20346 -1 var styles = getPseudoElStyleObj(node, position);20347 -1 var text = styles["content"];20348 -1 if (!text || text === "none") {20349 -1 return "";20350 -1 }20351 -1 if (isBlockLevelElement({}, styles)) {20352 -1 if (position === ":before") {20353 -1 text += " ";20354 -1 } else if (position === ":after") {20355 -1 text = " " + text;-1 21847 var getText = function(node, position) { -1 21848 if (!position && node.nodeType === 1) { -1 21849 return node.innerText || node.textContent || ""; 20356 21850 }20357 -1 }20358 -1 return text;20359 -1 };20360 -120361 -1 var getCSSText = function(node, refNode) {20362 -1 if (20363 -1 (node && node.nodeType !== 1) ||20364 -1 node === refNode ||20365 -1 ["input", "select", "textarea", "img", "iframe"].indexOf(20366 -1 node.nodeName.toLowerCase()20367 -1 ) !== -120368 -1 ) {20369 -1 return { before: "", after: "" };20370 -1 }20371 -1 if (document.defaultView && document.defaultView.getComputedStyle) {20372 -1 return {20373 -1 before: cleanCSSText(node, getText(node, ":before")),20374 -1 after: cleanCSSText(node, getText(node, ":after"))20375 -1 };20376 -1 } else {20377 -1 return { before: "", after: "" };20378 -1 }20379 -1 };20380 -120381 -1 var getParent = function(node, nTag) {20382 -1 while (node) {20383 -1 node = node.parentNode;20384 -1 if (node && node.nodeName && node.nodeName.toLowerCase() === nTag) {20385 -1 return node;-1 21851 var styles = getPseudoElStyleObj(node, position); -1 21852 var text = styles["content"]; -1 21853 if (!text || text === "none") { -1 21854 return ""; 20386 21855 }20387 -1 }20388 -1 return {};20389 -1 };-1 21856 if (isBlockLevelElement({}, styles)) { -1 21857 if (position === ":before") { -1 21858 text += " "; -1 21859 } else if (position === ":after") { -1 21860 text = " " + text; -1 21861 } -1 21862 } -1 21863 return text; -1 21864 }; 20390 2186520391 -1 var hasParentLabelOrHidden = function(node, refNode, ownedBy, ignoreHidden) {20392 -1 var trackNodes = [];20393 -1 while (node && node !== refNode) {-1 21866 var getCSSText = function(node, refNode) { 20394 21867 if (20395 -1 node.id &&20396 -1 ownedBy &&20397 -1 ownedBy[node.id] &&20398 -1 ownedBy[node.id].node &&20399 -1 trackNodes.indexOf(node) === -1-1 21868 (node && node.nodeType !== 1) || -1 21869 node === refNode || -1 21870 ["input", "select", "textarea", "img", "iframe"].indexOf( -1 21871 node.nodeName.toLowerCase() -1 21872 ) !== -1 20400 21873 ) {20401 -1 trackNodes.push(node);20402 -1 node = ownedBy[node.id].node;-1 21874 return { before: "", after: "" }; -1 21875 } -1 21876 if (document.defaultView && document.defaultView.getComputedStyle) { -1 21877 return { -1 21878 before: cleanCSSText(node, getText(node, ":before")), -1 21879 after: cleanCSSText(node, getText(node, ":after")) -1 21880 }; 20403 21881 } else { -1 21882 return { before: "", after: "" }; -1 21883 } -1 21884 }; -1 21885 -1 21886 var getParent = function(node, nTag) { -1 21887 while (node) { 20404 21888 node = node.parentNode; -1 21889 if (node && node.nodeName && node.nodeName.toLowerCase() === nTag) { -1 21890 return node; -1 21891 } 20405 21892 }20406 -1 if (node && node.getAttribute) {-1 21893 return {}; -1 21894 }; -1 21895 -1 21896 var hasParentLabelOrHidden = function( -1 21897 node, -1 21898 refNode, -1 21899 ownedBy, -1 21900 ignoreHidden -1 21901 ) { -1 21902 var trackNodes = []; -1 21903 while (node && node !== refNode) { 20407 21904 if (20408 -1 trim(node.getAttribute("aria-label")) ||20409 -1 (!ignoreHidden && isHidden(node, refNode))-1 21905 node.id && -1 21906 ownedBy && -1 21907 ownedBy[node.id] && -1 21908 ownedBy[node.id].node && -1 21909 trackNodes.indexOf(node) === -1 20410 21910 ) {20411 -1 return true;-1 21911 trackNodes.push(node); -1 21912 node = ownedBy[node.id].node; -1 21913 } else { -1 21914 node = node.parentNode; -1 21915 } -1 21916 if (node && node.getAttribute) { -1 21917 if ( -1 21918 trim(node.getAttribute("aria-label")) || -1 21919 (!ignoreHidden && isHidden(node, refNode)) -1 21920 ) { -1 21921 return true; -1 21922 } 20412 21923 } 20413 21924 }20414 -1 }20415 -1 return false;20416 -1 };-1 21925 return false; -1 21926 }; 20417 2192720418 -1 var trim = function(str) {20419 -1 if (typeof str !== "string") {20420 -1 return "";20421 -1 }20422 -1 return str.replace(/^\s+|\s+$/g, "");20423 -1 };-1 21928 var trim = function(str) { -1 21929 if (typeof str !== "string") { -1 21930 return ""; -1 21931 } -1 21932 return str.replace(/^\s+|\s+$/g, ""); -1 21933 }; 20424 2193420425 -1 if (isParentHidden(node, document.body, true)) {20426 -1 return props;20427 -1 }-1 21935 if (isParentHidden(node, document.body, true)) { -1 21936 return props; -1 21937 } 20428 2193820429 -1 // Compute accessible Name and Description properties value for node20430 -1 var accProps = walk(node, false, false, [], false, { top: node });-1 21939 // Compute accessible Name and Description properties value for node -1 21940 var accProps = walk(node, false, false, [], false, { top: node }); 20431 2194120432 -1 var accName = trim(accProps.name.replace(/\s+/g, " "));20433 -1 var accDesc = trim(accProps.title.replace(/\s+/g, " "));-1 21942 var accName = trim(accProps.name.replace(/\s+/g, " ")); -1 21943 var accDesc = trim(accProps.title.replace(/\s+/g, " ")); 20434 2194420435 -1 if (accName === accDesc) {20436 -1 // If both Name and Description properties match, then clear the Description property value.20437 -1 accDesc = "";20438 -1 }-1 21945 if (accName === accDesc) { -1 21946 // If both Name and Description properties match, then clear the Description property value. -1 21947 accDesc = ""; -1 21948 } 20439 2194920440 -1 props.name = accName;20441 -1 props.desc = accDesc;-1 21950 props.name = accName; -1 21951 props.desc = accDesc; 20442 2195220443 -1 // Clear track variables20444 -1 nodes = [];20445 -1 owns = [];-1 21953 // Clear track variables -1 21954 nodes = []; -1 21955 owns = []; -1 21956 } catch (e) { -1 21957 props.error = e; -1 21958 } 20446 21959 20447 21960 if (fnc && typeof fnc === "function") {20448 -1 return fnc.apply(node, [node, props]);-1 21961 return fnc.apply(node, [props, node]); 20449 21962 } else { 20450 21963 return props; 20451 21964 } @@ -20453,17 +21966,28 @@ var calcNames = function(node, fnc, preventVisualARIASelfCSSRef) { 20453 21966 20454 21967 // Customize returned string for testable statements 20455 2196820456 -1 var getNames = function(node) {-1 21969 window.getAccNameMsg = getNames = function(node) { 20457 21970 var props = calcNames(node);20458 -1 return (20459 -1 'accName: "' +20460 -1 props.name +20461 -1 '"\n\naccDesc: "' +20462 -1 props.desc +20463 -1 '"\n\n(Running AccName Computation Prototype version: ' +20464 -1 currentVersion +20465 -1 ")"20466 -1 );-1 21971 if (props.error) { -1 21972 return ( -1 21973 props.error + -1 21974 "\n\n" + -1 21975 "An error has been thrown in AccName Prototype version " + -1 21976 window.getAccNameVersion + -1 21977 ". Please copy this error message and the HTML markup that caused it, and submit both as a new GitHub issue at\n" + -1 21978 "https://github.com/whatsock/w3c-alternative-text-computation" -1 21979 ); -1 21980 } else { -1 21981 return ( -1 21982 'accName: "' + -1 21983 props.name + -1 21984 '"\n\naccDesc: "' + -1 21985 props.desc + -1 21986 '"\n\n(Running AccName Computation Prototype version: ' + -1 21987 window.getAccNameVersion + -1 21988 ")" -1 21989 ); -1 21990 } 20467 21991 }; 20468 21992 20469 21993 if (typeof module === "object" && module.exports) { @@ -20473,7 +21997,7 @@ if (typeof module === "object" && module.exports) { 20473 21997 }; 20474 21998 } 20475 2199920476 -1 },{}],15:[function(require,module,exports){-1 22000 },{}],14:[function(require,module,exports){ 20477 22001 (function (global){ 20478 22002 global.goog = { 20479 22003 provide: function() {}, @@ -20498,7 +22022,7 @@ require('accessibility-developer-tools/src/js/Properties'); 20498 22022 module.exports = global.axs; 20499 22023 20500 22024 }).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})20501 -1 },{"accessibility-developer-tools/src/js/AccessibilityUtils":2,"accessibility-developer-tools/src/js/BrowserUtils":3,"accessibility-developer-tools/src/js/Color":4,"accessibility-developer-tools/src/js/Constants":5,"accessibility-developer-tools/src/js/DOMUtils":6,"accessibility-developer-tools/src/js/Properties":7}],16:[function(require,module,exports){-1 22025 },{"accessibility-developer-tools/src/js/AccessibilityUtils":1,"accessibility-developer-tools/src/js/BrowserUtils":2,"accessibility-developer-tools/src/js/Color":3,"accessibility-developer-tools/src/js/Constants":4,"accessibility-developer-tools/src/js/DOMUtils":5,"accessibility-developer-tools/src/js/Properties":6}],15:[function(require,module,exports){ 20502 22026 var ariaApi = require('aria-api'); 20503 22027 var accdc = require('w3c-alternative-text-computation'); 20504 22028 var axe = require('axe-core'); @@ -20517,7 +22041,7 @@ var ex = function(fn, args, _this) { 20517 22041 }; 20518 22042 20519 22043 var implementations = {20520 -1 'aria-api (0.2.6)': function(el) {-1 22044 'aria-api (0.2.7)': function(el) { 20521 22045 return { 20522 22046 name: ex(ariaApi.getName, [el]), 20523 22047 desc: ex(ariaApi.getDescription, [el]), @@ -20525,7 +22049,7 @@ var implementations = { 20525 22049 }; 20526 22050 }, 20527 22051 'accdc (2.20)': accdc.calcNames,20528 -1 'axe (3.1.2)': function(el) {-1 22052 'axe (3.2.2)': function(el) { 20529 22053 return { 20530 22054 name: ex(function(el) { 20531 22055 axe._tree = axe.utils.getFlattenedTree(document.body); @@ -20599,4 +22123,4 @@ try { 20599 22123 }); 20600 22124 } 20601 2212520602 -1 },{"./axs":15,"aria-api":8,"axe-core":13,"w3c-alternative-text-computation":14}]},{},[16]);-1 22126 },{"./axs":14,"aria-api":7,"axe-core":12,"w3c-alternative-text-computation":13}]},{},[15]);
diff --git a/fuzz.js b/fuzz.js
@@ -608,8 +608,8 @@ exports.nameFromDescendant = {
608 608 };
609 609
610 610 exports.nameDefaults = {
611 -1 '[type="submit"]': 'Submit',
612 -1 '[type="reset"]': 'Reset',
-1 611 'input[type="submit"]': 'Submit',
-1 612 'input[type="reset"]': 'Reset',
613 613 'summary': 'Details',
614 614 };
615 615
@@ -625,11 +625,21 @@ exports.labelable = [
625 625 ];
626 626
627 627 },{}],6:[function(require,module,exports){
628 -1 var cov_2q245nv9x6=function(){var path="node_modules/aria-api/lib/name.js";var hash="5c805f0e3f5a395e829925703a8d9d82cab75605";var Function=function(){}.constructor;var global=new Function("return this")();var gcv="__coverage__";var coverageData={path:"node_modules/aria-api/lib/name.js",statementMap:{"0":{start:{line:1,column:16},end:{line:1,column:41}},"1":{start:{line:2,column:12},end:{line:2,column:33}},"2":{start:{line:3,column:11},end:{line:3,column:31}},"3":{start:{line:5,column:23},end:{line:21,column:1}},"4":{start:{line:6,column:14},end:{line:6,column:53}},"5":{start:{line:7,column:11},end:{line:7,column:45}},"6":{start:{line:8,column:14},end:{line:8,column:54}},"7":{start:{line:9,column:1},end:{line:11,column:2}},"8":{start:{line:10,column:2},end:{line:10,column:12}},"9":{start:{line:12,column:1},end:{line:20,column:2}},"10":{start:{line:13,column:2},end:{line:13,column:12}},"11":{start:{line:15,column:2},end:{line:19,column:3}},"12":{start:{line:16,column:3},end:{line:16,column:27}},"13":{start:{line:18,column:3},end:{line:18,column:39}},"14":{start:{line:23,column:17},end:{line:61,column:1}},"15":{start:{line:24,column:16},end:{line:24,column:18}},"16":{start:{line:26,column:1},end:{line:31,column:2}},"17":{start:{line:26,column:14},end:{line:26,column:15}},"18":{start:{line:27,column:13},end:{line:27,column:31}},"19":{start:{line:28,column:2},end:{line:30,column:3}},"20":{start:{line:29,column:3},end:{line:29,column:23}},"21":{start:{line:33,column:12},end:{line:33,column:50}},"22":{start:{line:34,column:1},end:{line:40,column:2}},"23":{start:{line:34,column:14},end:{line:34,column:15}},"24":{start:{line:35,column:14},end:{line:35,column:46}},"25":{start:{line:36,column:2},end:{line:39,column:3}},"26":{start:{line:37,column:3},end:{line:37,column:24}},"27":{start:{line:38,column:3},end:{line:38,column:24}},"28":{start:{line:42,column:11},end:{line:42,column:13}},"29":{start:{line:43,column:1},end:{line:58,column:2}},"30":{start:{line:43,column:14},end:{line:43,column:15}},"31":{start:{line:44,column:13},end:{line:44,column:24}},"32":{start:{line:45,column:2},end:{line:57,column:3}},"33":{start:{line:46,column:3},end:{line:46,column:27}},"34":{start:{line:47,column:9},end:{line:57,column:3}},"35":{start:{line:48,column:3},end:{line:56,column:4}},"36":{start:{line:49,column:4},end:{line:49,column:16}},"37":{start:{line:50,column:10},end:{line:56,column:4}},"38":{start:{line:53,column:4},end:{line:53,column:50}},"39":{start:{line:55,column:4},end:{line:55,column:62}},"40":{start:{line:60,column:1},end:{line:60,column:12}},"41":{start:{line:63,column:27},end:{line:66,column:1}},"42":{start:{line:64,column:12},end:{line:64,column:29}},"43":{start:{line:65,column:1},end:{line:65,column:65}},"44":{start:{line:68,column:18},end:{line:71,column:1}},"45":{start:{line:69,column:16},end:{line:69,column:45}},"46":{start:{line:70,column:1},end:{line:70,column:29}},"47":{start:{line:74,column:20},end:{line:89,column:1}},"48":{start:{line:75,column:14},end:{line:75,column:16}},"49":{start:{line:76,column:17},end:{line:76,column:46}},"50":{start:{line:77,column:1},end:{line:87,column:4}},"51":{start:{line:78,column:2},end:{line:86,column:3}},"52":{start:{line:79,column:3},end:{line:85,column:4}},"53":{start:{line:80,column:4},end:{line:82,column:5}},"54":{start:{line:81,column:5},end:{line:81,column:23}},"55":{start:{line:83,column:10},end:{line:85,column:4}},"56":{start:{line:84,column:4},end:{line:84,column:22}},"57":{start:{line:88,column:1},end:{line:88,column:15}},"58":{start:{line:93,column:14},end:{line:170,column:1}},"59":{start:{line:94,column:11},end:{line:94,column:13}},"60":{start:{line:95,column:13},end:{line:95,column:24}},"61":{start:{line:97,column:1},end:{line:99,column:2}},"62":{start:{line:98,column:2},end:{line:98,column:12}},"63":{start:{line:100,column:1},end:{line:107,column:2}},"64":{start:{line:101,column:12},end:{line:101,column:59}},"65":{start:{line:102,column:16},end:{line:105,column:4}},"66":{start:{line:103,column:15},end:{line:103,column:42}},"67":{start:{line:104,column:3},end:{line:104,column:58}},"68":{start:{line:106,column:2},end:{line:106,column:26}},"69":{start:{line:108,column:1},end:{line:110,column:2}},"70":{start:{line:109,column:2},end:{line:109,column:38}},"71":{start:{line:111,column:1},end:{line:113,column:2}},"72":{start:{line:112,column:2},end:{line:112,column:43}},"73":{start:{line:114,column:1},end:{line:119,column:2}},"74":{start:{line:115,column:16},end:{line:117,column:4}},"75":{start:{line:116,column:3},end:{line:116,column:45}},"76":{start:{line:118,column:2},end:{line:118,column:26}},"77":{start:{line:120,column:1},end:{line:122,column:2}},"78":{start:{line:121,column:2},end:{line:121,column:29}},"79":{start:{line:123,column:1},end:{line:125,column:2}},"80":{start:{line:124,column:2},end:{line:124,column:21}},"81":{start:{line:126,column:1},end:{line:128,column:2}},"82":{start:{line:127,column:2},end:{line:127,column:17}},"83":{start:{line:129,column:1},end:{line:138,column:2}},"84":{start:{line:130,column:2},end:{line:137,column:3}},"85":{start:{line:131,column:3},end:{line:136,column:4}},"86":{start:{line:132,column:21},end:{line:132,column:77}},"87":{start:{line:133,column:4},end:{line:135,column:5}},"88":{start:{line:134,column:5},end:{line:134,column:56}},"89":{start:{line:139,column:1},end:{line:152,column:2}},"90":{start:{line:140,column:2},end:{line:151,column:3}},"91":{start:{line:141,column:3},end:{line:150,column:4}},"92":{start:{line:142,column:4},end:{line:142,column:37}},"93":{start:{line:143,column:10},end:{line:150,column:4}},"94":{start:{line:144,column:19},end:{line:144,column:92}},"95":{start:{line:145,column:4},end:{line:147,column:5}},"96":{start:{line:146,column:5},end:{line:146,column:59}},"97":{start:{line:148,column:10},end:{line:150,column:4}},"98":{start:{line:149,column:4},end:{line:149,column:103}},"99":{start:{line:153,column:1},end:{line:155,column:2}},"100":{start:{line:154,column:2},end:{line:154,column:42}},"101":{start:{line:156,column:1},end:{line:162,column:2}},"102":{start:{line:157,column:2},end:{line:161,column:3}},"103":{start:{line:158,column:3},end:{line:160,column:4}},"104":{start:{line:159,column:4},end:{line:159,column:43}},"105":{start:{line:163,column:1},end:{line:165,column:2}},"106":{start:{line:164,column:2},end:{line:164,column:23}},"107":{start:{line:167,column:14},end:{line:167,column:45}},"108":{start:{line:168,column:13},end:{line:168,column:43}},"109":{start:{line:169,column:1},end:{line:169,column:29}},"110":{start:{line:172,column:21},end:{line:174,column:1}},"111":{start:{line:173,column:1},end:{line:173,column:48}},"112":{start:{line:176,column:21},end:{line:200,column:1}},"113":{start:{line:177,column:11},end:{line:177,column:13}},"114":{start:{line:178,column:13},end:{line:178,column:15}},"115":{start:{line:180,column:1},end:{line:191,column:2}},"116":{start:{line:181,column:12},end:{line:181,column:60}},"117":{start:{line:182,column:16},end:{line:185,column:4}},"118":{start:{line:183,column:15},end:{line:183,column:42}},"119":{start:{line:184,column:3},end:{line:184,column:58}},"120":{start:{line:186,column:2},end:{line:186,column:26}},"121":{start:{line:187,column:8},end:{line:191,column:2}},"122":{start:{line:188,column:2},end:{line:188,column:17}},"123":{start:{line:189,column:8},end:{line:191,column:2}},"124":{start:{line:190,column:2},end:{line:190,column:23}},"125":{start:{line:193,column:1},end:{line:193,column:47}},"126":{start:{line:195,column:1},end:{line:197,column:2}},"127":{start:{line:196,column:2},end:{line:196,column:11}},"128":{start:{line:199,column:1},end:{line:199,column:12}},"129":{start:{line:202,column:0},end:{line:205,column:2}}},fnMap:{"0":{name:"(anonymous_0)",decl:{start:{line:5,column:23},end:{line:5,column:24}},loc:{start:{line:5,column:48},end:{line:21,column:1}},line:5},"1":{name:"(anonymous_1)",decl:{start:{line:23,column:17},end:{line:23,column:18}},loc:{start:{line:23,column:51},end:{line:61,column:1}},line:23},"2":{name:"(anonymous_2)",decl:{start:{line:63,column:27},end:{line:63,column:28}},loc:{start:{line:63,column:40},end:{line:66,column:1}},line:63},"3":{name:"(anonymous_3)",decl:{start:{line:68,column:18},end:{line:68,column:19}},loc:{start:{line:68,column:31},end:{line:71,column:1}},line:68},"4":{name:"(anonymous_4)",decl:{start:{line:74,column:20},end:{line:74,column:21}},loc:{start:{line:74,column:38},end:{line:89,column:1}},line:74},"5":{name:"(anonymous_5)",decl:{start:{line:77,column:29},end:{line:77,column:30}},loc:{start:{line:77,column:44},end:{line:87,column:2}},line:77},"6":{name:"(anonymous_6)",decl:{start:{line:93,column:14},end:{line:93,column:15}},loc:{start:{line:93,column:57},end:{line:170,column:1}},line:93},"7":{name:"(anonymous_7)",decl:{start:{line:102,column:24},end:{line:102,column:25}},loc:{start:{line:102,column:37},end:{line:105,column:3}},line:102},"8":{name:"(anonymous_8)",decl:{start:{line:115,column:38},end:{line:115,column:39}},loc:{start:{line:115,column:54},end:{line:117,column:3}},line:115},"9":{name:"(anonymous_9)",decl:{start:{line:172,column:21},end:{line:172,column:22}},loc:{start:{line:172,column:34},end:{line:174,column:1}},line:172},"10":{name:"(anonymous_10)",decl:{start:{line:176,column:21},end:{line:176,column:22}},loc:{start:{line:176,column:34},end:{line:200,column:1}},line:176},"11":{name:"(anonymous_11)",decl:{start:{line:182,column:24},end:{line:182,column:25}},loc:{start:{line:182,column:37},end:{line:185,column:3}},line:182}},branchMap:{"0":{loc:{start:{line:9,column:1},end:{line:11,column:2}},type:"if",locations:[{start:{line:9,column:1},end:{line:11,column:2}},{start:{line:9,column:1},end:{line:11,column:2}}],line:9},"1":{loc:{start:{line:12,column:1},end:{line:20,column:2}},type:"if",locations:[{start:{line:12,column:1},end:{line:20,column:2}},{start:{line:12,column:1},end:{line:20,column:2}}],line:12},"2":{loc:{start:{line:15,column:2},end:{line:19,column:3}},type:"if",locations:[{start:{line:15,column:2},end:{line:19,column:3}},{start:{line:15,column:2},end:{line:19,column:3}}],line:15},"3":{loc:{start:{line:28,column:2},end:{line:30,column:3}},type:"if",locations:[{start:{line:28,column:2},end:{line:30,column:3}},{start:{line:28,column:2},end:{line:30,column:3}}],line:28},"4":{loc:{start:{line:28,column:6},end:{line:28,column:75}},type:"binary-expr",locations:[{start:{line:28,column:6},end:{line:28,column:14}},{start:{line:28,column:18},end:{line:28,column:75}}],line:28},"5":{loc:{start:{line:33,column:12},end:{line:33,column:50}},type:"binary-expr",locations:[{start:{line:33,column:12},end:{line:33,column:44}},{start:{line:33,column:48},end:{line:33,column:50}}],line:33},"6":{loc:{start:{line:36,column:2},end:{line:39,column:3}},type:"if",locations:[{start:{line:36,column:2},end:{line:39,column:3}},{start:{line:36,column:2},end:{line:39,column:3}}],line:36},"7":{loc:{start:{line:36,column:6},end:{line:36,column:63}},type:"binary-expr",locations:[{start:{line:36,column:6},end:{line:36,column:11}},{start:{line:36,column:15},end:{line:36,column:29}},{start:{line:36,column:33},end:{line:36,column:63}}],line:36},"8":{loc:{start:{line:45,column:2},end:{line:57,column:3}},type:"if",locations:[{start:{line:45,column:2},end:{line:57,column:3}},{start:{line:45,column:2},end:{line:57,column:3}}],line:45},"9":{loc:{start:{line:47,column:9},end:{line:57,column:3}},type:"if",locations:[{start:{line:47,column:9},end:{line:57,column:3}},{start:{line:47,column:9},end:{line:57,column:3}}],line:47},"10":{loc:{start:{line:48,column:3},end:{line:56,column:4}},type:"if",locations:[{start:{line:48,column:3},end:{line:56,column:4}},{start:{line:48,column:3},end:{line:56,column:4}}],line:48},"11":{loc:{start:{line:50,column:10},end:{line:56,column:4}},type:"if",locations:[{start:{line:50,column:10},end:{line:56,column:4}},{start:{line:50,column:10},end:{line:56,column:4}}],line:50},"12":{loc:{start:{line:50,column:14},end:{line:52,column:41}},type:"binary-expr",locations:[{start:{line:50,column:14},end:{line:50,column:77}},{start:{line:51,column:5},end:{line:51,column:43}},{start:{line:52,column:5},end:{line:52,column:41}}],line:50},"13":{loc:{start:{line:65,column:8},end:{line:65,column:64}},type:"binary-expr",locations:[{start:{line:65,column:8},end:{line:65,column:13}},{start:{line:65,column:17},end:{line:65,column:64}}],line:65},"14":{loc:{start:{line:78,column:2},end:{line:86,column:3}},type:"if",locations:[{start:{line:78,column:2},end:{line:86,column:3}},{start:{line:78,column:2},end:{line:86,column:3}}],line:78},"15":{loc:{start:{line:78,column:6},end:{line:78,column:60}},type:"binary-expr",locations:[{start:{line:78,column:6},end:{line:78,column:18}},{start:{line:78,column:22},end:{line:78,column:60}}],line:78},"16":{loc:{start:{line:79,column:3},end:{line:85,column:4}},type:"if",locations:[{start:{line:79,column:3},end:{line:85,column:4}},{start:{line:79,column:3},end:{line:85,column:4}}],line:79},"17":{loc:{start:{line:80,column:4},end:{line:82,column:5}},type:"if",locations:[{start:{line:80,column:4},end:{line:82,column:5}},{start:{line:80,column:4},end:{line:82,column:5}}],line:80},"18":{loc:{start:{line:80,column:8},end:{line:80,column:61}},type:"binary-expr",locations:[{start:{line:80,column:8},end:{line:80,column:18}},{start:{line:80,column:22},end:{line:80,column:61}}],line:80},"19":{loc:{start:{line:83,column:10},end:{line:85,column:4}},type:"if",locations:[{start:{line:83,column:10},end:{line:85,column:4}},{start:{line:83,column:10},end:{line:85,column:4}}],line:83},"20":{loc:{start:{line:95,column:13},end:{line:95,column:24}},type:"binary-expr",locations:[{start:{line:95,column:13},end:{line:95,column:18}},{start:{line:95,column:22},end:{line:95,column:24}}],line:95},"21":{loc:{start:{line:97,column:1},end:{line:99,column:2}},type:"if",locations:[{start:{line:97,column:1},end:{line:99,column:2}},{start:{line:97,column:1},end:{line:99,column:2}}],line:97},"22":{loc:{start:{line:100,column:1},end:{line:107,column:2}},type:"if",locations:[{start:{line:100,column:1},end:{line:107,column:2}},{start:{line:100,column:1},end:{line:107,column:2}}],line:100},"23":{loc:{start:{line:100,column:5},end:{line:100,column:50}},type:"binary-expr",locations:[{start:{line:100,column:5},end:{line:100,column:15}},{start:{line:100,column:19},end:{line:100,column:50}}],line:100},"24":{loc:{start:{line:104,column:10},end:{line:104,column:57}},type:"cond-expr",locations:[{start:{line:104,column:18},end:{line:104,column:52}},{start:{line:104,column:55},end:{line:104,column:57}}],line:104},"25":{loc:{start:{line:108,column:1},end:{line:110,column:2}},type:"if",locations:[{start:{line:108,column:1},end:{line:110,column:2}},{start:{line:108,column:1},end:{line:110,column:2}}],line:108},"26":{loc:{start:{line:108,column:5},end:{line:108,column:46}},type:"binary-expr",locations:[{start:{line:108,column:5},end:{line:108,column:16}},{start:{line:108,column:20},end:{line:108,column:46}}],line:108},"27":{loc:{start:{line:111,column:1},end:{line:113,column:2}},type:"if",locations:[{start:{line:111,column:1},end:{line:113,column:2}},{start:{line:111,column:1},end:{line:113,column:2}}],line:111},"28":{loc:{start:{line:111,column:5},end:{line:111,column:53}},type:"binary-expr",locations:[{start:{line:111,column:5},end:{line:111,column:16}},{start:{line:111,column:20},end:{line:111,column:53}}],line:111},"29":{loc:{start:{line:114,column:1},end:{line:119,column:2}},type:"if",locations:[{start:{line:114,column:1},end:{line:119,column:2}},{start:{line:114,column:1},end:{line:119,column:2}}],line:114},"30":{loc:{start:{line:114,column:5},end:{line:114,column:42}},type:"binary-expr",locations:[{start:{line:114,column:5},end:{line:114,column:9}},{start:{line:114,column:13},end:{line:114,column:23}},{start:{line:114,column:27},end:{line:114,column:42}}],line:114},"31":{loc:{start:{line:120,column:1},end:{line:122,column:2}},type:"if",locations:[{start:{line:120,column:1},end:{line:122,column:2}},{start:{line:120,column:1},end:{line:122,column:2}}],line:120},"32":{loc:{start:{line:121,column:8},end:{line:121,column:28}},type:"binary-expr",locations:[{start:{line:121,column:8},end:{line:121,column:22}},{start:{line:121,column:26},end:{line:121,column:28}}],line:121},"33":{loc:{start:{line:123,column:1},end:{line:125,column:2}},type:"if",locations:[{start:{line:123,column:1},end:{line:125,column:2}},{start:{line:123,column:1},end:{line:125,column:2}}],line:123},"34":{loc:{start:{line:124,column:8},end:{line:124,column:20}},type:"binary-expr",locations:[{start:{line:124,column:8},end:{line:124,column:14}},{start:{line:124,column:18},end:{line:124,column:20}}],line:124},"35":{loc:{start:{line:126,column:1},end:{line:128,column:2}},type:"if",locations:[{start:{line:126,column:1},end:{line:128,column:2}},{start:{line:126,column:1},end:{line:128,column:2}}],line:126},"36":{loc:{start:{line:126,column:5},end:{line:126,column:58}},type:"binary-expr",locations:[{start:{line:126,column:5},end:{line:126,column:16}},{start:{line:126,column:20},end:{line:126,column:46}},{start:{line:126,column:50},end:{line:126,column:58}}],line:126},"37":{loc:{start:{line:129,column:1},end:{line:138,column:2}},type:"if",locations:[{start:{line:129,column:1},end:{line:138,column:2}},{start:{line:129,column:1},end:{line:138,column:2}}],line:129},"38":{loc:{start:{line:131,column:3},end:{line:136,column:4}},type:"if",locations:[{start:{line:131,column:3},end:{line:136,column:4}},{start:{line:131,column:3},end:{line:136,column:4}}],line:131},"39":{loc:{start:{line:133,column:4},end:{line:135,column:5}},type:"if",locations:[{start:{line:133,column:4},end:{line:135,column:5}},{start:{line:133,column:4},end:{line:135,column:5}}],line:133},"40":{loc:{start:{line:139,column:1},end:{line:152,column:2}},type:"if",locations:[{start:{line:139,column:1},end:{line:152,column:2}},{start:{line:139,column:1},end:{line:152,column:2}}],line:139},"41":{loc:{start:{line:139,column:5},end:{line:139,column:68}},type:"binary-expr",locations:[{start:{line:139,column:5},end:{line:139,column:24}},{start:{line:139,column:28},end:{line:139,column:37}},{start:{line:139,column:41},end:{line:139,column:68}}],line:139},"42":{loc:{start:{line:140,column:2},end:{line:151,column:3}},type:"if",locations:[{start:{line:140,column:2},end:{line:151,column:3}},{start:{line:140,column:2},end:{line:151,column:3}}],line:140},"43":{loc:{start:{line:140,column:6},end:{line:140,column:79}},type:"binary-expr",locations:[{start:{line:140,column:6},end:{line:140,column:17}},{start:{line:140,column:21},end:{line:140,column:79}}],line:140},"44":{loc:{start:{line:141,column:3},end:{line:150,column:4}},type:"if",locations:[{start:{line:141,column:3},end:{line:150,column:4}},{start:{line:141,column:3},end:{line:150,column:4}}],line:141},"45":{loc:{start:{line:142,column:10},end:{line:142,column:36}},type:"binary-expr",locations:[{start:{line:142,column:10},end:{line:142,column:18}},{start:{line:142,column:22},end:{line:142,column:36}}],line:142},"46":{loc:{start:{line:143,column:10},end:{line:150,column:4}},type:"if",locations:[{start:{line:143,column:10},end:{line:150,column:4}},{start:{line:143,column:10},end:{line:150,column:4}}],line:143},"47":{loc:{start:{line:144,column:19},end:{line:144,column:92}},type:"binary-expr",locations:[{start:{line:144,column:19},end:{line:144,column:55}},{start:{line:144,column:59},end:{line:144,column:92}}],line:144},"48":{loc:{start:{line:145,column:4},end:{line:147,column:5}},type:"if",locations:[{start:{line:145,column:4},end:{line:147,column:5}},{start:{line:145,column:4},end:{line:147,column:5}}],line:145},"49":{loc:{start:{line:148,column:10},end:{line:150,column:4}},type:"if",locations:[{start:{line:148,column:10},end:{line:150,column:4}},{start:{line:148,column:10},end:{line:150,column:4}}],line:148},"50":{loc:{start:{line:149,column:16},end:{line:149,column:101}},type:"binary-expr",locations:[{start:{line:149,column:16},end:{line:149,column:51}},{start:{line:149,column:55},end:{line:149,column:89}},{start:{line:149,column:93},end:{line:149,column:101}}],line:149},"51":{loc:{start:{line:153,column:1},end:{line:155,column:2}},type:"if",locations:[{start:{line:153,column:1},end:{line:155,column:2}},{start:{line:153,column:1},end:{line:155,column:2}}],line:153},"52":{loc:{start:{line:153,column:5},end:{line:153,column:89}},type:"binary-expr",locations:[{start:{line:153,column:5},end:{line:153,column:16}},{start:{line:153,column:21},end:{line:153,column:30}},{start:{line:153,column:34},end:{line:153,column:58}},{start:{line:153,column:63},end:{line:153,column:89}}],line:153},"53":{loc:{start:{line:156,column:1},end:{line:162,column:2}},type:"if",locations:[{start:{line:156,column:1},end:{line:162,column:2}},{start:{line:156,column:1},end:{line:162,column:2}}],line:156},"54":{loc:{start:{line:158,column:3},end:{line:160,column:4}},type:"if",locations:[{start:{line:158,column:3},end:{line:160,column:4}},{start:{line:158,column:3},end:{line:160,column:4}}],line:158},"55":{loc:{start:{line:163,column:1},end:{line:165,column:2}},type:"if",locations:[{start:{line:163,column:1},end:{line:165,column:2}},{start:{line:163,column:1},end:{line:165,column:2}}],line:163},"56":{loc:{start:{line:164,column:8},end:{line:164,column:22}},type:"binary-expr",locations:[{start:{line:164,column:8},end:{line:164,column:16}},{start:{line:164,column:20},end:{line:164,column:22}}],line:164},"57":{loc:{start:{line:180,column:1},end:{line:191,column:2}},type:"if",locations:[{start:{line:180,column:1},end:{line:191,column:2}},{start:{line:180,column:1},end:{line:191,column:2}}],line:180},"58":{loc:{start:{line:184,column:10},end:{line:184,column:57}},type:"cond-expr",locations:[{start:{line:184,column:18},end:{line:184,column:52}},{start:{line:184,column:55},end:{line:184,column:57}}],line:184},"59":{loc:{start:{line:187,column:8},end:{line:191,column:2}},type:"if",locations:[{start:{line:187,column:8},end:{line:191,column:2}},{start:{line:187,column:8},end:{line:191,column:2}}],line:187},"60":{loc:{start:{line:189,column:8},end:{line:191,column:2}},type:"if",locations:[{start:{line:189,column:8},end:{line:191,column:2}},{start:{line:189,column:8},end:{line:191,column:2}}],line:189},"61":{loc:{start:{line:193,column:8},end:{line:193,column:17}},type:"binary-expr",locations:[{start:{line:193,column:8},end:{line:193,column:11}},{start:{line:193,column:15},end:{line:193,column:17}}],line:193},"62":{loc:{start:{line:195,column:1},end:{line:197,column:2}},type:"if",locations:[{start:{line:195,column:1},end:{line:197,column:2}},{start:{line:195,column:1},end:{line:197,column:2}}],line:195}},s:{"0":0,"1":0,"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0,"50":0,"51":0,"52":0,"53":0,"54":0,"55":0,"56":0,"57":0,"58":0,"59":0,"60":0,"61":0,"62":0,"63":0,"64":0,"65":0,"66":0,"67":0,"68":0,"69":0,"70":0,"71":0,"72":0,"73":0,"74":0,"75":0,"76":0,"77":0,"78":0,"79":0,"80":0,"81":0,"82":0,"83":0,"84":0,"85":0,"86":0,"87":0,"88":0,"89":0,"90":0,"91":0,"92":0,"93":0,"94":0,"95":0,"96":0,"97":0,"98":0,"99":0,"100":0,"101":0,"102":0,"103":0,"104":0,"105":0,"106":0,"107":0,"108":0,"109":0,"110":0,"111":0,"112":0,"113":0,"114":0,"115":0,"116":0,"117":0,"118":0,"119":0,"120":0,"121":0,"122":0,"123":0,"124":0,"125":0,"126":0,"127":0,"128":0,"129":0},f:{"0":0,"1":0,"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0},b:{"0":[0,0],"1":[0,0],"2":[0,0],"3":[0,0],"4":[0,0],"5":[0,0],"6":[0,0],"7":[0,0,0],"8":[0,0],"9":[0,0],"10":[0,0],"11":[0,0],"12":[0,0,0],"13":[0,0],"14":[0,0],"15":[0,0],"16":[0,0],"17":[0,0],"18":[0,0],"19":[0,0],"20":[0,0],"21":[0,0],"22":[0,0],"23":[0,0],"24":[0,0],"25":[0,0],"26":[0,0],"27":[0,0],"28":[0,0],"29":[0,0],"30":[0,0,0],"31":[0,0],"32":[0,0],"33":[0,0],"34":[0,0],"35":[0,0],"36":[0,0,0],"37":[0,0],"38":[0,0],"39":[0,0],"40":[0,0],"41":[0,0,0],"42":[0,0],"43":[0,0],"44":[0,0],"45":[0,0],"46":[0,0],"47":[0,0],"48":[0,0],"49":[0,0],"50":[0,0,0],"51":[0,0],"52":[0,0,0,0],"53":[0,0],"54":[0,0],"55":[0,0],"56":[0,0],"57":[0,0],"58":[0,0],"59":[0,0],"60":[0,0],"61":[0,0],"62":[0,0]},_coverageSchema:"43e27e138ebf9cfc5966b082cf9a028302ed4184"};var coverage=global[gcv]||(global[gcv]={});if(coverage[path]&&coverage[path].hash===hash){return coverage[path];}coverageData.hash=hash;return coverage[path]=coverageData;}();var constants=(cov_2q245nv9x6.s[0]++,require('./constants.js'));var query=(cov_2q245nv9x6.s[1]++,require('./query.js'));var util=(cov_2q245nv9x6.s[2]++,require('./util.js'));cov_2q245nv9x6.s[3]++;var getPseudoContent=function(node,selector){cov_2q245nv9x6.f[0]++;var styles=(cov_2q245nv9x6.s[4]++,window.getComputedStyle(node,selector));var ret=(cov_2q245nv9x6.s[5]++,styles.getPropertyValue('content'));var inline=(cov_2q245nv9x6.s[6]++,styles.display.substr(0,6)==='inline');cov_2q245nv9x6.s[7]++;if(!ret){cov_2q245nv9x6.b[0][0]++;cov_2q245nv9x6.s[8]++;return'';}else{cov_2q245nv9x6.b[0][1]++;}cov_2q245nv9x6.s[9]++;if(ret.substr(0,1)!=='"'){cov_2q245nv9x6.b[1][0]++;cov_2q245nv9x6.s[10]++;return'';}else{cov_2q245nv9x6.b[1][1]++;cov_2q245nv9x6.s[11]++;if(inline){cov_2q245nv9x6.b[2][0]++;cov_2q245nv9x6.s[12]++;return ret.slice(1,-1);}else{cov_2q245nv9x6.b[2][1]++;cov_2q245nv9x6.s[13]++;return' '+ret.slice(1,-1)+' ';}}};cov_2q245nv9x6.s[14]++;var getContent=function(root,referenced,owned){cov_2q245nv9x6.f[1]++;var children=(cov_2q245nv9x6.s[15]++,[]);cov_2q245nv9x6.s[16]++;for(var i=(cov_2q245nv9x6.s[17]++,0);i<root.childNodes.length;i++){var node=(cov_2q245nv9x6.s[18]++,root.childNodes[i]);cov_2q245nv9x6.s[19]++;if((cov_2q245nv9x6.b[4][0]++,!node.id)||(cov_2q245nv9x6.b[4][1]++,!document.querySelector('[aria-owns~="'+node.id+'"]'))){cov_2q245nv9x6.b[3][0]++;cov_2q245nv9x6.s[20]++;children.push(node);}else{cov_2q245nv9x6.b[3][1]++;}}var owns=(cov_2q245nv9x6.s[21]++,(cov_2q245nv9x6.b[5][0]++,query.getAttribute(root,'owns'))||(cov_2q245nv9x6.b[5][1]++,[]));cov_2q245nv9x6.s[22]++;for(var i=(cov_2q245nv9x6.s[23]++,0);i<owns.length;i++){var child=(cov_2q245nv9x6.s[24]++,document.getElementById(owns[i]));cov_2q245nv9x6.s[25]++;if((cov_2q245nv9x6.b[7][0]++,child)&&(cov_2q245nv9x6.b[7][1]++,child!==root)&&(cov_2q245nv9x6.b[7][2]++,owned.indexOf(child.id)===-1)){cov_2q245nv9x6.b[6][0]++;cov_2q245nv9x6.s[26]++;children.push(child);cov_2q245nv9x6.s[27]++;owned.push(child.id);}else{cov_2q245nv9x6.b[6][1]++;}}var ret=(cov_2q245nv9x6.s[28]++,'');cov_2q245nv9x6.s[29]++;for(var i=(cov_2q245nv9x6.s[30]++,0);i<children.length;i++){var node=(cov_2q245nv9x6.s[31]++,children[i]);cov_2q245nv9x6.s[32]++;if(node.nodeType===node.TEXT_NODE){cov_2q245nv9x6.b[8][0]++;cov_2q245nv9x6.s[33]++;ret+=node.textContent;}else{cov_2q245nv9x6.b[8][1]++;cov_2q245nv9x6.s[34]++;if(node.nodeType===node.ELEMENT_NODE){cov_2q245nv9x6.b[9][0]++;cov_2q245nv9x6.s[35]++;if(node.tagName.toLowerCase()==='br'){cov_2q245nv9x6.b[10][0]++;cov_2q245nv9x6.s[36]++;ret+='\n';}else{cov_2q245nv9x6.b[10][1]++;cov_2q245nv9x6.s[37]++;if((cov_2q245nv9x6.b[12][0]++,window.getComputedStyle(node).display.substr(0,6)==='inline')&&(cov_2q245nv9x6.b[12][1]++,node.tagName.toLowerCase()!=='input')&&(cov_2q245nv9x6.b[12][2]++,node.tagName.toLowerCase()!=='img')){cov_2q245nv9x6.b[11][0]++;cov_2q245nv9x6.s[38]++;// https://github.com/w3c/accname/issues/3
629 -1 ret+=getName(node,true,referenced,owned);}else{cov_2q245nv9x6.b[11][1]++;cov_2q245nv9x6.s[39]++;ret+=' '+getName(node,true,referenced,owned)+' ';}}}else{cov_2q245nv9x6.b[9][1]++;}}}cov_2q245nv9x6.s[40]++;return ret;};cov_2q245nv9x6.s[41]++;var allowNameFromContent=function(el){cov_2q245nv9x6.f[2]++;var role=(cov_2q245nv9x6.s[42]++,query.getRole(el));cov_2q245nv9x6.s[43]++;return(cov_2q245nv9x6.b[13][0]++,!role)||(cov_2q245nv9x6.b[13][1]++,constants.nameFromContents.indexOf(role)!==-1);};cov_2q245nv9x6.s[44]++;var isLabelable=function(el){cov_2q245nv9x6.f[3]++;var selector=(cov_2q245nv9x6.s[45]++,constants.labelable.join(','));cov_2q245nv9x6.s[46]++;return el.matches(selector);};// Control.labels is part of the standard, but not supported in most browsers
630 -1 cov_2q245nv9x6.s[47]++;var getLabelNodes=function(element){cov_2q245nv9x6.f[4]++;var labels=(cov_2q245nv9x6.s[48]++,[]);var labelable=(cov_2q245nv9x6.s[49]++,constants.labelable.join(','));cov_2q245nv9x6.s[50]++;util.walkDOM(document.body,function(node){cov_2q245nv9x6.f[5]++;cov_2q245nv9x6.s[51]++;if((cov_2q245nv9x6.b[15][0]++,node.tagName)&&(cov_2q245nv9x6.b[15][1]++,node.tagName.toLowerCase()==='label')){cov_2q245nv9x6.b[14][0]++;cov_2q245nv9x6.s[52]++;if(node.getAttribute('for')){cov_2q245nv9x6.b[16][0]++;cov_2q245nv9x6.s[53]++;if((cov_2q245nv9x6.b[18][0]++,element.id)&&(cov_2q245nv9x6.b[18][1]++,node.getAttribute('for')===element.id)){cov_2q245nv9x6.b[17][0]++;cov_2q245nv9x6.s[54]++;labels.push(node);}else{cov_2q245nv9x6.b[17][1]++;}}else{cov_2q245nv9x6.b[16][1]++;cov_2q245nv9x6.s[55]++;if(node.querySelector(labelable)===element){cov_2q245nv9x6.b[19][0]++;cov_2q245nv9x6.s[56]++;labels.push(node);}else{cov_2q245nv9x6.b[19][1]++;}}}else{cov_2q245nv9x6.b[14][1]++;}});cov_2q245nv9x6.s[57]++;return labels;};// http://www.ssbbartgroup.com/blog/how-the-w3c-text-alternative-computation-works/
631 -1 // https://www.w3.org/TR/accname-aam-1.1/#h-mapping_additional_nd_te
632 -1 cov_2q245nv9x6.s[58]++;var getName=function(el,recursive,referenced,owned){cov_2q245nv9x6.f[6]++;var ret=(cov_2q245nv9x6.s[59]++,'');var owned=(cov_2q245nv9x6.s[60]++,(cov_2q245nv9x6.b[20][0]++,owned)||(cov_2q245nv9x6.b[20][1]++,[]));cov_2q245nv9x6.s[61]++;if(query.getAttribute(el,'hidden',referenced)){cov_2q245nv9x6.b[21][0]++;cov_2q245nv9x6.s[62]++;return'';}else{cov_2q245nv9x6.b[21][1]++;}cov_2q245nv9x6.s[63]++;if((cov_2q245nv9x6.b[23][0]++,!recursive)&&(cov_2q245nv9x6.b[23][1]++,el.matches('[aria-labelledby]'))){cov_2q245nv9x6.b[22][0]++;var ids=(cov_2q245nv9x6.s[64]++,el.getAttribute('aria-labelledby').split(/\s+/));var strings=(cov_2q245nv9x6.s[65]++,ids.map(function(id){cov_2q245nv9x6.f[7]++;var label=(cov_2q245nv9x6.s[66]++,document.getElementById(id));cov_2q245nv9x6.s[67]++;return label?(cov_2q245nv9x6.b[24][0]++,getName(label,true,label,owned)):(cov_2q245nv9x6.b[24][1]++,'');}));cov_2q245nv9x6.s[68]++;ret=strings.join(' ');}else{cov_2q245nv9x6.b[22][1]++;}cov_2q245nv9x6.s[69]++;if((cov_2q245nv9x6.b[26][0]++,!ret.trim())&&(cov_2q245nv9x6.b[26][1]++,el.matches('[aria-label]'))){cov_2q245nv9x6.b[25][0]++;cov_2q245nv9x6.s[70]++;ret=el.getAttribute('aria-label');}else{cov_2q245nv9x6.b[25][1]++;}cov_2q245nv9x6.s[71]++;if((cov_2q245nv9x6.b[28][0]++,!ret.trim())&&(cov_2q245nv9x6.b[28][1]++,query.matches(el,'presentation'))){cov_2q245nv9x6.b[27][0]++;cov_2q245nv9x6.s[72]++;return getContent(el,referenced,owned);}else{cov_2q245nv9x6.b[27][1]++;}cov_2q245nv9x6.s[73]++;if((cov_2q245nv9x6.b[30][0]++,!ret)&&(cov_2q245nv9x6.b[30][1]++,!recursive)&&(cov_2q245nv9x6.b[30][2]++,isLabelable(el))){cov_2q245nv9x6.b[29][0]++;var strings=(cov_2q245nv9x6.s[74]++,getLabelNodes(el).map(function(label){cov_2q245nv9x6.f[8]++;cov_2q245nv9x6.s[75]++;return getName(label,true,label,owned);}));cov_2q245nv9x6.s[76]++;ret=strings.join(' ');}else{cov_2q245nv9x6.b[29][1]++;}cov_2q245nv9x6.s[77]++;if(!ret.trim()){cov_2q245nv9x6.b[31][0]++;cov_2q245nv9x6.s[78]++;ret=(cov_2q245nv9x6.b[32][0]++,el.placeholder)||(cov_2q245nv9x6.b[32][1]++,'');}else{cov_2q245nv9x6.b[31][1]++;}cov_2q245nv9x6.s[79]++;if(!ret.trim()){cov_2q245nv9x6.b[33][0]++;cov_2q245nv9x6.s[80]++;ret=(cov_2q245nv9x6.b[34][0]++,el.alt)||(cov_2q245nv9x6.b[34][1]++,'');}else{cov_2q245nv9x6.b[33][1]++;}cov_2q245nv9x6.s[81]++;if((cov_2q245nv9x6.b[36][0]++,!ret.trim())&&(cov_2q245nv9x6.b[36][1]++,el.matches('abbr,acronym'))&&(cov_2q245nv9x6.b[36][2]++,el.title)){cov_2q245nv9x6.b[35][0]++;cov_2q245nv9x6.s[82]++;ret=el.title;}else{cov_2q245nv9x6.b[35][1]++;}cov_2q245nv9x6.s[83]++;if(!ret.trim()){cov_2q245nv9x6.b[37][0]++;cov_2q245nv9x6.s[84]++;for(var selector in constants.nameFromDescendant){cov_2q245nv9x6.s[85]++;if(el.matches(selector)){cov_2q245nv9x6.b[38][0]++;var descendant=(cov_2q245nv9x6.s[86]++,el.querySelector(constants.nameFromDescendant[selector]));cov_2q245nv9x6.s[87]++;if(descendant){cov_2q245nv9x6.b[39][0]++;cov_2q245nv9x6.s[88]++;ret=getName(descendant,true,descendant,owned);}else{cov_2q245nv9x6.b[39][1]++;}}else{cov_2q245nv9x6.b[38][1]++;}}}else{cov_2q245nv9x6.b[37][1]++;}cov_2q245nv9x6.s[89]++;if((cov_2q245nv9x6.b[41][0]++,el.closest('label'))||(cov_2q245nv9x6.b[41][1]++,recursive)||(cov_2q245nv9x6.b[41][2]++,query.matches(el,'button'))){cov_2q245nv9x6.b[40][0]++;cov_2q245nv9x6.s[90]++;if((cov_2q245nv9x6.b[43][0]++,!ret.trim())&&(cov_2q245nv9x6.b[43][1]++,query.matches(el,'textbox,button,combobox,listbox,range'))){cov_2q245nv9x6.b[42][0]++;cov_2q245nv9x6.s[91]++;if(query.matches(el,'textbox,button')){cov_2q245nv9x6.b[44][0]++;cov_2q245nv9x6.s[92]++;ret=(cov_2q245nv9x6.b[45][0]++,el.value)||(cov_2q245nv9x6.b[45][1]++,el.textContent);}else{cov_2q245nv9x6.b[44][1]++;cov_2q245nv9x6.s[93]++;if(query.matches(el,'combobox,listbox')){cov_2q245nv9x6.b[46][0]++;var selected=(cov_2q245nv9x6.s[94]++,(cov_2q245nv9x6.b[47][0]++,query.querySelector(el,':selected'))||(cov_2q245nv9x6.b[47][1]++,query.querySelector(el,'option')));cov_2q245nv9x6.s[95]++;if(selected){cov_2q245nv9x6.b[48][0]++;cov_2q245nv9x6.s[96]++;ret=getName(selected,recursive,referenced,owned);}else{cov_2q245nv9x6.b[48][1]++;}}else{cov_2q245nv9x6.b[46][1]++;cov_2q245nv9x6.s[97]++;if(query.matches(el,'range')){cov_2q245nv9x6.b[49][0]++;cov_2q245nv9x6.s[98]++;ret=''+((cov_2q245nv9x6.b[50][0]++,query.getAttribute(el,'valuetext'))||(cov_2q245nv9x6.b[50][1]++,query.getAttribute(el,'valuenow'))||(cov_2q245nv9x6.b[50][2]++,el.value));}else{cov_2q245nv9x6.b[49][1]++;}}}}else{cov_2q245nv9x6.b[42][1]++;}}else{cov_2q245nv9x6.b[40][1]++;}cov_2q245nv9x6.s[99]++;if((cov_2q245nv9x6.b[52][0]++,!ret.trim())&&((cov_2q245nv9x6.b[52][1]++,recursive)||(cov_2q245nv9x6.b[52][2]++,allowNameFromContent(el)))&&(cov_2q245nv9x6.b[52][3]++,!query.matches(el,'menu'))){cov_2q245nv9x6.b[51][0]++;cov_2q245nv9x6.s[100]++;ret=getContent(el,referenced,owned);}else{cov_2q245nv9x6.b[51][1]++;}cov_2q245nv9x6.s[101]++;if(!ret.trim()){cov_2q245nv9x6.b[53][0]++;cov_2q245nv9x6.s[102]++;for(var selector in constants.nameDefaults){cov_2q245nv9x6.s[103]++;if(el.matches(selector)){cov_2q245nv9x6.b[54][0]++;cov_2q245nv9x6.s[104]++;ret=constants.nameDefaults[selector];}else{cov_2q245nv9x6.b[54][1]++;}}}else{cov_2q245nv9x6.b[53][1]++;}cov_2q245nv9x6.s[105]++;if(!ret.trim()){cov_2q245nv9x6.b[55][0]++;cov_2q245nv9x6.s[106]++;ret=(cov_2q245nv9x6.b[56][0]++,el.title)||(cov_2q245nv9x6.b[56][1]++,'');}else{cov_2q245nv9x6.b[55][1]++;}var before=(cov_2q245nv9x6.s[107]++,getPseudoContent(el,':before'));var after=(cov_2q245nv9x6.s[108]++,getPseudoContent(el,':after'));cov_2q245nv9x6.s[109]++;return before+ret+after;};cov_2q245nv9x6.s[110]++;var getNameTrimmed=function(el){cov_2q245nv9x6.f[9]++;cov_2q245nv9x6.s[111]++;return getName(el).replace(/\s+/g,' ').trim();};cov_2q245nv9x6.s[112]++;var getDescription=function(el){cov_2q245nv9x6.f[10]++;var ret=(cov_2q245nv9x6.s[113]++,'');var owned=(cov_2q245nv9x6.s[114]++,[]);cov_2q245nv9x6.s[115]++;if(el.matches('[aria-describedby]')){cov_2q245nv9x6.b[57][0]++;var ids=(cov_2q245nv9x6.s[116]++,el.getAttribute('aria-describedby').split(/\s+/));var strings=(cov_2q245nv9x6.s[117]++,ids.map(function(id){cov_2q245nv9x6.f[11]++;var label=(cov_2q245nv9x6.s[118]++,document.getElementById(id));cov_2q245nv9x6.s[119]++;return label?(cov_2q245nv9x6.b[58][0]++,getName(label,true,label,owned)):(cov_2q245nv9x6.b[58][1]++,'');}));cov_2q245nv9x6.s[120]++;ret=strings.join(' ');}else{cov_2q245nv9x6.b[57][1]++;cov_2q245nv9x6.s[121]++;if(el.title){cov_2q245nv9x6.b[59][0]++;cov_2q245nv9x6.s[122]++;ret=el.title;}else{cov_2q245nv9x6.b[59][1]++;cov_2q245nv9x6.s[123]++;if(el.placeholder){cov_2q245nv9x6.b[60][0]++;cov_2q245nv9x6.s[124]++;ret=el.placeholder;}else{cov_2q245nv9x6.b[60][1]++;}}}cov_2q245nv9x6.s[125]++;ret=((cov_2q245nv9x6.b[61][0]++,ret)||(cov_2q245nv9x6.b[61][1]++,'')).trim().replace(/\s+/g,' ');cov_2q245nv9x6.s[126]++;if(ret===getNameTrimmed(el)){cov_2q245nv9x6.b[62][0]++;cov_2q245nv9x6.s[127]++;ret='';}else{cov_2q245nv9x6.b[62][1]++;}cov_2q245nv9x6.s[128]++;return ret;};cov_2q245nv9x6.s[129]++;module.exports={getName:getNameTrimmed,getDescription:getDescription};
-1 628 var cov_2q245nv9x6=function(){var path="node_modules/aria-api/lib/name.js";var hash="93a6713c2560ab0da7818aecac970728fca1f799";var Function=function(){}.constructor;var global=new Function("return this")();var gcv="__coverage__";var coverageData={path:"node_modules/aria-api/lib/name.js",statementMap:{"0":{start:{line:1,column:16},end:{line:1,column:41}},"1":{start:{line:2,column:12},end:{line:2,column:33}},"2":{start:{line:3,column:11},end:{line:3,column:31}},"3":{start:{line:5,column:23},end:{line:21,column:1}},"4":{start:{line:6,column:14},end:{line:6,column:53}},"5":{start:{line:7,column:11},end:{line:7,column:45}},"6":{start:{line:8,column:14},end:{line:8,column:54}},"7":{start:{line:9,column:1},end:{line:11,column:2}},"8":{start:{line:10,column:2},end:{line:10,column:12}},"9":{start:{line:12,column:1},end:{line:20,column:2}},"10":{start:{line:13,column:2},end:{line:13,column:12}},"11":{start:{line:15,column:2},end:{line:19,column:3}},"12":{start:{line:16,column:3},end:{line:16,column:27}},"13":{start:{line:18,column:3},end:{line:18,column:39}},"14":{start:{line:23,column:17},end:{line:61,column:1}},"15":{start:{line:24,column:16},end:{line:24,column:18}},"16":{start:{line:26,column:1},end:{line:31,column:2}},"17":{start:{line:26,column:14},end:{line:26,column:15}},"18":{start:{line:27,column:13},end:{line:27,column:31}},"19":{start:{line:28,column:2},end:{line:30,column:3}},"20":{start:{line:29,column:3},end:{line:29,column:23}},"21":{start:{line:33,column:12},end:{line:33,column:50}},"22":{start:{line:34,column:1},end:{line:40,column:2}},"23":{start:{line:34,column:14},end:{line:34,column:15}},"24":{start:{line:35,column:14},end:{line:35,column:46}},"25":{start:{line:36,column:2},end:{line:39,column:3}},"26":{start:{line:37,column:3},end:{line:37,column:24}},"27":{start:{line:38,column:3},end:{line:38,column:24}},"28":{start:{line:42,column:11},end:{line:42,column:13}},"29":{start:{line:43,column:1},end:{line:58,column:2}},"30":{start:{line:43,column:14},end:{line:43,column:15}},"31":{start:{line:44,column:13},end:{line:44,column:24}},"32":{start:{line:45,column:2},end:{line:57,column:3}},"33":{start:{line:46,column:3},end:{line:46,column:27}},"34":{start:{line:47,column:9},end:{line:57,column:3}},"35":{start:{line:48,column:3},end:{line:56,column:4}},"36":{start:{line:49,column:4},end:{line:49,column:16}},"37":{start:{line:50,column:10},end:{line:56,column:4}},"38":{start:{line:53,column:4},end:{line:53,column:50}},"39":{start:{line:55,column:4},end:{line:55,column:62}},"40":{start:{line:60,column:1},end:{line:60,column:12}},"41":{start:{line:63,column:27},end:{line:66,column:1}},"42":{start:{line:64,column:12},end:{line:64,column:29}},"43":{start:{line:65,column:1},end:{line:65,column:64}},"44":{start:{line:68,column:18},end:{line:71,column:1}},"45":{start:{line:69,column:16},end:{line:69,column:45}},"46":{start:{line:70,column:1},end:{line:70,column:29}},"47":{start:{line:74,column:20},end:{line:89,column:1}},"48":{start:{line:75,column:14},end:{line:75,column:16}},"49":{start:{line:76,column:17},end:{line:76,column:46}},"50":{start:{line:77,column:1},end:{line:87,column:4}},"51":{start:{line:78,column:2},end:{line:86,column:3}},"52":{start:{line:79,column:3},end:{line:85,column:4}},"53":{start:{line:80,column:4},end:{line:82,column:5}},"54":{start:{line:81,column:5},end:{line:81,column:23}},"55":{start:{line:83,column:10},end:{line:85,column:4}},"56":{start:{line:84,column:4},end:{line:84,column:22}},"57":{start:{line:88,column:1},end:{line:88,column:15}},"58":{start:{line:91,column:30},end:{line:95,column:1}},"59":{start:{line:92,column:13},end:{line:92,column:46}},"60":{start:{line:93,column:17},end:{line:93,column:34}},"61":{start:{line:94,column:1},end:{line:94,column:49}},"62":{start:{line:97,column:14},end:{line:197,column:1}},"63":{start:{line:98,column:11},end:{line:98,column:13}},"64":{start:{line:99,column:13},end:{line:99,column:24}},"65":{start:{line:102,column:1},end:{line:104,column:2}},"66":{start:{line:103,column:2},end:{line:103,column:12}},"67":{start:{line:107,column:1},end:{line:114,column:2}},"68":{start:{line:108,column:12},end:{line:108,column:59}},"69":{start:{line:109,column:16},end:{line:112,column:4}},"70":{start:{line:110,column:15},end:{line:110,column:42}},"71":{start:{line:111,column:3},end:{line:111,column:58}},"72":{start:{line:113,column:2},end:{line:113,column:26}},"73":{start:{line:117,column:1},end:{line:119,column:2}},"74":{start:{line:118,column:2},end:{line:118,column:38}},"75":{start:{line:122,column:1},end:{line:127,column:2}},"76":{start:{line:123,column:16},end:{line:125,column:4}},"77":{start:{line:124,column:3},end:{line:124,column:45}},"78":{start:{line:126,column:2},end:{line:126,column:26}},"79":{start:{line:128,column:1},end:{line:130,column:2}},"80":{start:{line:129,column:2},end:{line:129,column:29}},"81":{start:{line:131,column:1},end:{line:133,column:2}},"82":{start:{line:132,column:2},end:{line:132,column:21}},"83":{start:{line:134,column:1},end:{line:136,column:2}},"84":{start:{line:135,column:2},end:{line:135,column:17}},"85":{start:{line:137,column:1},end:{line:146,column:2}},"86":{start:{line:138,column:2},end:{line:145,column:3}},"87":{start:{line:139,column:3},end:{line:144,column:4}},"88":{start:{line:140,column:21},end:{line:140,column:77}},"89":{start:{line:141,column:4},end:{line:143,column:5}},"90":{start:{line:142,column:5},end:{line:142,column:56}},"91":{start:{line:149,column:1},end:{line:164,column:2}},"92":{start:{line:150,column:2},end:{line:163,column:3}},"93":{start:{line:151,column:3},end:{line:162,column:4}},"94":{start:{line:152,column:4},end:{line:152,column:37}},"95":{start:{line:153,column:10},end:{line:162,column:4}},"96":{start:{line:154,column:19},end:{line:154,column:92}},"97":{start:{line:155,column:4},end:{line:159,column:5}},"98":{start:{line:156,column:5},end:{line:156,column:59}},"99":{start:{line:158,column:5},end:{line:158,column:26}},"100":{start:{line:160,column:10},end:{line:162,column:4}},"101":{start:{line:161,column:4},end:{line:161,column:103}},"102":{start:{line:168,column:1},end:{line:170,column:2}},"103":{start:{line:169,column:2},end:{line:169,column:42}},"104":{start:{line:176,column:1},end:{line:178,column:2}},"105":{start:{line:177,column:2},end:{line:177,column:43}},"106":{start:{line:181,column:1},end:{line:187,column:2}},"107":{start:{line:182,column:2},end:{line:186,column:3}},"108":{start:{line:183,column:3},end:{line:185,column:4}},"109":{start:{line:184,column:4},end:{line:184,column:43}},"110":{start:{line:190,column:1},end:{line:192,column:2}},"111":{start:{line:191,column:2},end:{line:191,column:23}},"112":{start:{line:194,column:14},end:{line:194,column:45}},"113":{start:{line:195,column:13},end:{line:195,column:43}},"114":{start:{line:196,column:1},end:{line:196,column:29}},"115":{start:{line:199,column:21},end:{line:201,column:1}},"116":{start:{line:200,column:1},end:{line:200,column:48}},"117":{start:{line:203,column:21},end:{line:227,column:1}},"118":{start:{line:204,column:11},end:{line:204,column:13}},"119":{start:{line:205,column:13},end:{line:205,column:15}},"120":{start:{line:207,column:1},end:{line:218,column:2}},"121":{start:{line:208,column:12},end:{line:208,column:60}},"122":{start:{line:209,column:16},end:{line:212,column:4}},"123":{start:{line:210,column:15},end:{line:210,column:42}},"124":{start:{line:211,column:3},end:{line:211,column:58}},"125":{start:{line:213,column:2},end:{line:213,column:26}},"126":{start:{line:214,column:8},end:{line:218,column:2}},"127":{start:{line:215,column:2},end:{line:215,column:17}},"128":{start:{line:216,column:8},end:{line:218,column:2}},"129":{start:{line:217,column:2},end:{line:217,column:23}},"130":{start:{line:220,column:1},end:{line:220,column:47}},"131":{start:{line:222,column:1},end:{line:224,column:2}},"132":{start:{line:223,column:2},end:{line:223,column:11}},"133":{start:{line:226,column:1},end:{line:226,column:12}},"134":{start:{line:229,column:0},end:{line:232,column:2}}},fnMap:{"0":{name:"(anonymous_0)",decl:{start:{line:5,column:23},end:{line:5,column:24}},loc:{start:{line:5,column:48},end:{line:21,column:1}},line:5},"1":{name:"(anonymous_1)",decl:{start:{line:23,column:17},end:{line:23,column:18}},loc:{start:{line:23,column:51},end:{line:61,column:1}},line:23},"2":{name:"(anonymous_2)",decl:{start:{line:63,column:27},end:{line:63,column:28}},loc:{start:{line:63,column:40},end:{line:66,column:1}},line:63},"3":{name:"(anonymous_3)",decl:{start:{line:68,column:18},end:{line:68,column:19}},loc:{start:{line:68,column:31},end:{line:71,column:1}},line:68},"4":{name:"(anonymous_4)",decl:{start:{line:74,column:20},end:{line:74,column:21}},loc:{start:{line:74,column:38},end:{line:89,column:1}},line:74},"5":{name:"(anonymous_5)",decl:{start:{line:77,column:29},end:{line:77,column:30}},loc:{start:{line:77,column:44},end:{line:87,column:2}},line:77},"6":{name:"(anonymous_6)",decl:{start:{line:91,column:30},end:{line:91,column:31}},loc:{start:{line:91,column:43},end:{line:95,column:1}},line:91},"7":{name:"(anonymous_7)",decl:{start:{line:97,column:14},end:{line:97,column:15}},loc:{start:{line:97,column:57},end:{line:197,column:1}},line:97},"8":{name:"(anonymous_8)",decl:{start:{line:109,column:24},end:{line:109,column:25}},loc:{start:{line:109,column:37},end:{line:112,column:3}},line:109},"9":{name:"(anonymous_9)",decl:{start:{line:123,column:38},end:{line:123,column:39}},loc:{start:{line:123,column:54},end:{line:125,column:3}},line:123},"10":{name:"(anonymous_10)",decl:{start:{line:199,column:21},end:{line:199,column:22}},loc:{start:{line:199,column:34},end:{line:201,column:1}},line:199},"11":{name:"(anonymous_11)",decl:{start:{line:203,column:21},end:{line:203,column:22}},loc:{start:{line:203,column:34},end:{line:227,column:1}},line:203},"12":{name:"(anonymous_12)",decl:{start:{line:209,column:24},end:{line:209,column:25}},loc:{start:{line:209,column:37},end:{line:212,column:3}},line:209}},branchMap:{"0":{loc:{start:{line:9,column:1},end:{line:11,column:2}},type:"if",locations:[{start:{line:9,column:1},end:{line:11,column:2}},{start:{line:9,column:1},end:{line:11,column:2}}],line:9},"1":{loc:{start:{line:12,column:1},end:{line:20,column:2}},type:"if",locations:[{start:{line:12,column:1},end:{line:20,column:2}},{start:{line:12,column:1},end:{line:20,column:2}}],line:12},"2":{loc:{start:{line:15,column:2},end:{line:19,column:3}},type:"if",locations:[{start:{line:15,column:2},end:{line:19,column:3}},{start:{line:15,column:2},end:{line:19,column:3}}],line:15},"3":{loc:{start:{line:28,column:2},end:{line:30,column:3}},type:"if",locations:[{start:{line:28,column:2},end:{line:30,column:3}},{start:{line:28,column:2},end:{line:30,column:3}}],line:28},"4":{loc:{start:{line:28,column:6},end:{line:28,column:75}},type:"binary-expr",locations:[{start:{line:28,column:6},end:{line:28,column:14}},{start:{line:28,column:18},end:{line:28,column:75}}],line:28},"5":{loc:{start:{line:33,column:12},end:{line:33,column:50}},type:"binary-expr",locations:[{start:{line:33,column:12},end:{line:33,column:44}},{start:{line:33,column:48},end:{line:33,column:50}}],line:33},"6":{loc:{start:{line:36,column:2},end:{line:39,column:3}},type:"if",locations:[{start:{line:36,column:2},end:{line:39,column:3}},{start:{line:36,column:2},end:{line:39,column:3}}],line:36},"7":{loc:{start:{line:36,column:6},end:{line:36,column:63}},type:"binary-expr",locations:[{start:{line:36,column:6},end:{line:36,column:11}},{start:{line:36,column:15},end:{line:36,column:29}},{start:{line:36,column:33},end:{line:36,column:63}}],line:36},"8":{loc:{start:{line:45,column:2},end:{line:57,column:3}},type:"if",locations:[{start:{line:45,column:2},end:{line:57,column:3}},{start:{line:45,column:2},end:{line:57,column:3}}],line:45},"9":{loc:{start:{line:47,column:9},end:{line:57,column:3}},type:"if",locations:[{start:{line:47,column:9},end:{line:57,column:3}},{start:{line:47,column:9},end:{line:57,column:3}}],line:47},"10":{loc:{start:{line:48,column:3},end:{line:56,column:4}},type:"if",locations:[{start:{line:48,column:3},end:{line:56,column:4}},{start:{line:48,column:3},end:{line:56,column:4}}],line:48},"11":{loc:{start:{line:50,column:10},end:{line:56,column:4}},type:"if",locations:[{start:{line:50,column:10},end:{line:56,column:4}},{start:{line:50,column:10},end:{line:56,column:4}}],line:50},"12":{loc:{start:{line:50,column:14},end:{line:52,column:41}},type:"binary-expr",locations:[{start:{line:50,column:14},end:{line:50,column:77}},{start:{line:51,column:5},end:{line:51,column:43}},{start:{line:52,column:5},end:{line:52,column:41}}],line:50},"13":{loc:{start:{line:65,column:8},end:{line:65,column:63}},type:"binary-expr",locations:[{start:{line:65,column:8},end:{line:65,column:12}},{start:{line:65,column:16},end:{line:65,column:63}}],line:65},"14":{loc:{start:{line:78,column:2},end:{line:86,column:3}},type:"if",locations:[{start:{line:78,column:2},end:{line:86,column:3}},{start:{line:78,column:2},end:{line:86,column:3}}],line:78},"15":{loc:{start:{line:78,column:6},end:{line:78,column:60}},type:"binary-expr",locations:[{start:{line:78,column:6},end:{line:78,column:18}},{start:{line:78,column:22},end:{line:78,column:60}}],line:78},"16":{loc:{start:{line:79,column:3},end:{line:85,column:4}},type:"if",locations:[{start:{line:79,column:3},end:{line:85,column:4}},{start:{line:79,column:3},end:{line:85,column:4}}],line:79},"17":{loc:{start:{line:80,column:4},end:{line:82,column:5}},type:"if",locations:[{start:{line:80,column:4},end:{line:82,column:5}},{start:{line:80,column:4},end:{line:82,column:5}}],line:80},"18":{loc:{start:{line:80,column:8},end:{line:80,column:61}},type:"binary-expr",locations:[{start:{line:80,column:8},end:{line:80,column:18}},{start:{line:80,column:22},end:{line:80,column:61}}],line:80},"19":{loc:{start:{line:83,column:10},end:{line:85,column:4}},type:"if",locations:[{start:{line:83,column:10},end:{line:85,column:4}},{start:{line:83,column:10},end:{line:85,column:4}}],line:83},"20":{loc:{start:{line:94,column:8},end:{line:94,column:48}},type:"binary-expr",locations:[{start:{line:94,column:8},end:{line:94,column:13}},{start:{line:94,column:17},end:{line:94,column:48}}],line:94},"21":{loc:{start:{line:99,column:13},end:{line:99,column:24}},type:"binary-expr",locations:[{start:{line:99,column:13},end:{line:99,column:18}},{start:{line:99,column:22},end:{line:99,column:24}}],line:99},"22":{loc:{start:{line:102,column:1},end:{line:104,column:2}},type:"if",locations:[{start:{line:102,column:1},end:{line:104,column:2}},{start:{line:102,column:1},end:{line:104,column:2}}],line:102},"23":{loc:{start:{line:107,column:1},end:{line:114,column:2}},type:"if",locations:[{start:{line:107,column:1},end:{line:114,column:2}},{start:{line:107,column:1},end:{line:114,column:2}}],line:107},"24":{loc:{start:{line:107,column:5},end:{line:107,column:50}},type:"binary-expr",locations:[{start:{line:107,column:5},end:{line:107,column:15}},{start:{line:107,column:19},end:{line:107,column:50}}],line:107},"25":{loc:{start:{line:111,column:10},end:{line:111,column:57}},type:"cond-expr",locations:[{start:{line:111,column:18},end:{line:111,column:52}},{start:{line:111,column:55},end:{line:111,column:57}}],line:111},"26":{loc:{start:{line:117,column:1},end:{line:119,column:2}},type:"if",locations:[{start:{line:117,column:1},end:{line:119,column:2}},{start:{line:117,column:1},end:{line:119,column:2}}],line:117},"27":{loc:{start:{line:117,column:5},end:{line:117,column:46}},type:"binary-expr",locations:[{start:{line:117,column:5},end:{line:117,column:16}},{start:{line:117,column:20},end:{line:117,column:46}}],line:117},"28":{loc:{start:{line:122,column:1},end:{line:127,column:2}},type:"if",locations:[{start:{line:122,column:1},end:{line:127,column:2}},{start:{line:122,column:1},end:{line:127,column:2}}],line:122},"29":{loc:{start:{line:122,column:5},end:{line:122,column:49}},type:"binary-expr",locations:[{start:{line:122,column:5},end:{line:122,column:16}},{start:{line:122,column:20},end:{line:122,column:30}},{start:{line:122,column:34},end:{line:122,column:49}}],line:122},"30":{loc:{start:{line:128,column:1},end:{line:130,column:2}},type:"if",locations:[{start:{line:128,column:1},end:{line:130,column:2}},{start:{line:128,column:1},end:{line:130,column:2}}],line:128},"31":{loc:{start:{line:129,column:8},end:{line:129,column:28}},type:"binary-expr",locations:[{start:{line:129,column:8},end:{line:129,column:22}},{start:{line:129,column:26},end:{line:129,column:28}}],line:129},"32":{loc:{start:{line:131,column:1},end:{line:133,column:2}},type:"if",locations:[{start:{line:131,column:1},end:{line:133,column:2}},{start:{line:131,column:1},end:{line:133,column:2}}],line:131},"33":{loc:{start:{line:132,column:8},end:{line:132,column:20}},type:"binary-expr",locations:[{start:{line:132,column:8},end:{line:132,column:14}},{start:{line:132,column:18},end:{line:132,column:20}}],line:132},"34":{loc:{start:{line:134,column:1},end:{line:136,column:2}},type:"if",locations:[{start:{line:134,column:1},end:{line:136,column:2}},{start:{line:134,column:1},end:{line:136,column:2}}],line:134},"35":{loc:{start:{line:134,column:5},end:{line:134,column:58}},type:"binary-expr",locations:[{start:{line:134,column:5},end:{line:134,column:16}},{start:{line:134,column:20},end:{line:134,column:46}},{start:{line:134,column:50},end:{line:134,column:58}}],line:134},"36":{loc:{start:{line:137,column:1},end:{line:146,column:2}},type:"if",locations:[{start:{line:137,column:1},end:{line:146,column:2}},{start:{line:137,column:1},end:{line:146,column:2}}],line:137},"37":{loc:{start:{line:139,column:3},end:{line:144,column:4}},type:"if",locations:[{start:{line:139,column:3},end:{line:144,column:4}},{start:{line:139,column:3},end:{line:144,column:4}}],line:139},"38":{loc:{start:{line:141,column:4},end:{line:143,column:5}},type:"if",locations:[{start:{line:141,column:4},end:{line:143,column:5}},{start:{line:141,column:4},end:{line:143,column:5}}],line:141},"39":{loc:{start:{line:149,column:1},end:{line:164,column:2}},type:"if",locations:[{start:{line:149,column:1},end:{line:164,column:2}},{start:{line:149,column:1},end:{line:164,column:2}}],line:149},"40":{loc:{start:{line:149,column:5},end:{line:149,column:93}},type:"binary-expr",locations:[{start:{line:149,column:5},end:{line:149,column:16}},{start:{line:149,column:21},end:{line:149,column:30}},{start:{line:149,column:34},end:{line:149,column:61}},{start:{line:149,column:65},end:{line:149,column:92}}],line:149},"41":{loc:{start:{line:150,column:2},end:{line:163,column:3}},type:"if",locations:[{start:{line:150,column:2},end:{line:163,column:3}},{start:{line:150,column:2},end:{line:163,column:3}}],line:150},"42":{loc:{start:{line:151,column:3},end:{line:162,column:4}},type:"if",locations:[{start:{line:151,column:3},end:{line:162,column:4}},{start:{line:151,column:3},end:{line:162,column:4}}],line:151},"43":{loc:{start:{line:152,column:10},end:{line:152,column:36}},type:"binary-expr",locations:[{start:{line:152,column:10},end:{line:152,column:18}},{start:{line:152,column:22},end:{line:152,column:36}}],line:152},"44":{loc:{start:{line:153,column:10},end:{line:162,column:4}},type:"if",locations:[{start:{line:153,column:10},end:{line:162,column:4}},{start:{line:153,column:10},end:{line:162,column:4}}],line:153},"45":{loc:{start:{line:154,column:19},end:{line:154,column:92}},type:"binary-expr",locations:[{start:{line:154,column:19},end:{line:154,column:55}},{start:{line:154,column:59},end:{line:154,column:92}}],line:154},"46":{loc:{start:{line:155,column:4},end:{line:159,column:5}},type:"if",locations:[{start:{line:155,column:4},end:{line:159,column:5}},{start:{line:155,column:4},end:{line:159,column:5}}],line:155},"47":{loc:{start:{line:158,column:11},end:{line:158,column:25}},type:"binary-expr",locations:[{start:{line:158,column:11},end:{line:158,column:19}},{start:{line:158,column:23},end:{line:158,column:25}}],line:158},"48":{loc:{start:{line:160,column:10},end:{line:162,column:4}},type:"if",locations:[{start:{line:160,column:10},end:{line:162,column:4}},{start:{line:160,column:10},end:{line:162,column:4}}],line:160},"49":{loc:{start:{line:161,column:16},end:{line:161,column:101}},type:"binary-expr",locations:[{start:{line:161,column:16},end:{line:161,column:51}},{start:{line:161,column:55},end:{line:161,column:89}},{start:{line:161,column:93},end:{line:161,column:101}}],line:161},"50":{loc:{start:{line:168,column:1},end:{line:170,column:2}},type:"if",locations:[{start:{line:168,column:1},end:{line:170,column:2}},{start:{line:168,column:1},end:{line:170,column:2}}],line:168},"51":{loc:{start:{line:168,column:5},end:{line:168,column:112}},type:"binary-expr",locations:[{start:{line:168,column:5},end:{line:168,column:16}},{start:{line:168,column:21},end:{line:168,column:30}},{start:{line:168,column:34},end:{line:168,column:58}},{start:{line:168,column:62},end:{line:168,column:81}},{start:{line:168,column:86},end:{line:168,column:112}}],line:168},"52":{loc:{start:{line:176,column:1},end:{line:178,column:2}},type:"if",locations:[{start:{line:176,column:1},end:{line:178,column:2}},{start:{line:176,column:1},end:{line:178,column:2}}],line:176},"53":{loc:{start:{line:176,column:5},end:{line:176,column:53}},type:"binary-expr",locations:[{start:{line:176,column:5},end:{line:176,column:16}},{start:{line:176,column:20},end:{line:176,column:53}}],line:176},"54":{loc:{start:{line:181,column:1},end:{line:187,column:2}},type:"if",locations:[{start:{line:181,column:1},end:{line:187,column:2}},{start:{line:181,column:1},end:{line:187,column:2}}],line:181},"55":{loc:{start:{line:183,column:3},end:{line:185,column:4}},type:"if",locations:[{start:{line:183,column:3},end:{line:185,column:4}},{start:{line:183,column:3},end:{line:185,column:4}}],line:183},"56":{loc:{start:{line:190,column:1},end:{line:192,column:2}},type:"if",locations:[{start:{line:190,column:1},end:{line:192,column:2}},{start:{line:190,column:1},end:{line:192,column:2}}],line:190},"57":{loc:{start:{line:191,column:8},end:{line:191,column:22}},type:"binary-expr",locations:[{start:{line:191,column:8},end:{line:191,column:16}},{start:{line:191,column:20},end:{line:191,column:22}}],line:191},"58":{loc:{start:{line:207,column:1},end:{line:218,column:2}},type:"if",locations:[{start:{line:207,column:1},end:{line:218,column:2}},{start:{line:207,column:1},end:{line:218,column:2}}],line:207},"59":{loc:{start:{line:211,column:10},end:{line:211,column:57}},type:"cond-expr",locations:[{start:{line:211,column:18},end:{line:211,column:52}},{start:{line:211,column:55},end:{line:211,column:57}}],line:211},"60":{loc:{start:{line:214,column:8},end:{line:218,column:2}},type:"if",locations:[{start:{line:214,column:8},end:{line:218,column:2}},{start:{line:214,column:8},end:{line:218,column:2}}],line:214},"61":{loc:{start:{line:216,column:8},end:{line:218,column:2}},type:"if",locations:[{start:{line:216,column:8},end:{line:218,column:2}},{start:{line:216,column:8},end:{line:218,column:2}}],line:216},"62":{loc:{start:{line:220,column:8},end:{line:220,column:17}},type:"binary-expr",locations:[{start:{line:220,column:8},end:{line:220,column:11}},{start:{line:220,column:15},end:{line:220,column:17}}],line:220},"63":{loc:{start:{line:222,column:1},end:{line:224,column:2}},type:"if",locations:[{start:{line:222,column:1},end:{line:224,column:2}},{start:{line:222,column:1},end:{line:224,column:2}}],line:222}},s:{"0":0,"1":0,"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0,"50":0,"51":0,"52":0,"53":0,"54":0,"55":0,"56":0,"57":0,"58":0,"59":0,"60":0,"61":0,"62":0,"63":0,"64":0,"65":0,"66":0,"67":0,"68":0,"69":0,"70":0,"71":0,"72":0,"73":0,"74":0,"75":0,"76":0,"77":0,"78":0,"79":0,"80":0,"81":0,"82":0,"83":0,"84":0,"85":0,"86":0,"87":0,"88":0,"89":0,"90":0,"91":0,"92":0,"93":0,"94":0,"95":0,"96":0,"97":0,"98":0,"99":0,"100":0,"101":0,"102":0,"103":0,"104":0,"105":0,"106":0,"107":0,"108":0,"109":0,"110":0,"111":0,"112":0,"113":0,"114":0,"115":0,"116":0,"117":0,"118":0,"119":0,"120":0,"121":0,"122":0,"123":0,"124":0,"125":0,"126":0,"127":0,"128":0,"129":0,"130":0,"131":0,"132":0,"133":0,"134":0},f:{"0":0,"1":0,"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0},b:{"0":[0,0],"1":[0,0],"2":[0,0],"3":[0,0],"4":[0,0],"5":[0,0],"6":[0,0],"7":[0,0,0],"8":[0,0],"9":[0,0],"10":[0,0],"11":[0,0],"12":[0,0,0],"13":[0,0],"14":[0,0],"15":[0,0],"16":[0,0],"17":[0,0],"18":[0,0],"19":[0,0],"20":[0,0],"21":[0,0],"22":[0,0],"23":[0,0],"24":[0,0],"25":[0,0],"26":[0,0],"27":[0,0],"28":[0,0],"29":[0,0,0],"30":[0,0],"31":[0,0],"32":[0,0],"33":[0,0],"34":[0,0],"35":[0,0,0],"36":[0,0],"37":[0,0],"38":[0,0],"39":[0,0],"40":[0,0,0,0],"41":[0,0],"42":[0,0],"43":[0,0],"44":[0,0],"45":[0,0],"46":[0,0],"47":[0,0],"48":[0,0],"49":[0,0,0],"50":[0,0],"51":[0,0,0,0,0],"52":[0,0],"53":[0,0],"54":[0,0],"55":[0,0],"56":[0,0],"57":[0,0],"58":[0,0],"59":[0,0],"60":[0,0],"61":[0,0],"62":[0,0],"63":[0,0]},_coverageSchema:"43e27e138ebf9cfc5966b082cf9a028302ed4184"};var coverage=global[gcv]||(global[gcv]={});if(coverage[path]&&coverage[path].hash===hash){return coverage[path];}coverageData.hash=hash;return coverage[path]=coverageData;}();var constants=(cov_2q245nv9x6.s[0]++,require('./constants.js'));var query=(cov_2q245nv9x6.s[1]++,require('./query.js'));var util=(cov_2q245nv9x6.s[2]++,require('./util.js'));cov_2q245nv9x6.s[3]++;var getPseudoContent=function(node,selector){cov_2q245nv9x6.f[0]++;var styles=(cov_2q245nv9x6.s[4]++,window.getComputedStyle(node,selector));var ret=(cov_2q245nv9x6.s[5]++,styles.getPropertyValue('content'));var inline=(cov_2q245nv9x6.s[6]++,styles.display.substr(0,6)==='inline');cov_2q245nv9x6.s[7]++;if(!ret){cov_2q245nv9x6.b[0][0]++;cov_2q245nv9x6.s[8]++;return'';}else{cov_2q245nv9x6.b[0][1]++;}cov_2q245nv9x6.s[9]++;if(ret.substr(0,1)!=='"'){cov_2q245nv9x6.b[1][0]++;cov_2q245nv9x6.s[10]++;return'';}else{cov_2q245nv9x6.b[1][1]++;cov_2q245nv9x6.s[11]++;if(inline){cov_2q245nv9x6.b[2][0]++;cov_2q245nv9x6.s[12]++;return ret.slice(1,-1);}else{cov_2q245nv9x6.b[2][1]++;cov_2q245nv9x6.s[13]++;return' '+ret.slice(1,-1)+' ';}}};cov_2q245nv9x6.s[14]++;var getContent=function(root,referenced,owned){cov_2q245nv9x6.f[1]++;var children=(cov_2q245nv9x6.s[15]++,[]);cov_2q245nv9x6.s[16]++;for(var i=(cov_2q245nv9x6.s[17]++,0);i<root.childNodes.length;i++){var node=(cov_2q245nv9x6.s[18]++,root.childNodes[i]);cov_2q245nv9x6.s[19]++;if((cov_2q245nv9x6.b[4][0]++,!node.id)||(cov_2q245nv9x6.b[4][1]++,!document.querySelector('[aria-owns~="'+node.id+'"]'))){cov_2q245nv9x6.b[3][0]++;cov_2q245nv9x6.s[20]++;children.push(node);}else{cov_2q245nv9x6.b[3][1]++;}}var owns=(cov_2q245nv9x6.s[21]++,(cov_2q245nv9x6.b[5][0]++,query.getAttribute(root,'owns'))||(cov_2q245nv9x6.b[5][1]++,[]));cov_2q245nv9x6.s[22]++;for(var i=(cov_2q245nv9x6.s[23]++,0);i<owns.length;i++){var child=(cov_2q245nv9x6.s[24]++,document.getElementById(owns[i]));cov_2q245nv9x6.s[25]++;if((cov_2q245nv9x6.b[7][0]++,child)&&(cov_2q245nv9x6.b[7][1]++,child!==root)&&(cov_2q245nv9x6.b[7][2]++,owned.indexOf(child.id)===-1)){cov_2q245nv9x6.b[6][0]++;cov_2q245nv9x6.s[26]++;children.push(child);cov_2q245nv9x6.s[27]++;owned.push(child.id);}else{cov_2q245nv9x6.b[6][1]++;}}var ret=(cov_2q245nv9x6.s[28]++,'');cov_2q245nv9x6.s[29]++;for(var i=(cov_2q245nv9x6.s[30]++,0);i<children.length;i++){var node=(cov_2q245nv9x6.s[31]++,children[i]);cov_2q245nv9x6.s[32]++;if(node.nodeType===node.TEXT_NODE){cov_2q245nv9x6.b[8][0]++;cov_2q245nv9x6.s[33]++;ret+=node.textContent;}else{cov_2q245nv9x6.b[8][1]++;cov_2q245nv9x6.s[34]++;if(node.nodeType===node.ELEMENT_NODE){cov_2q245nv9x6.b[9][0]++;cov_2q245nv9x6.s[35]++;if(node.tagName.toLowerCase()==='br'){cov_2q245nv9x6.b[10][0]++;cov_2q245nv9x6.s[36]++;ret+='\n';}else{cov_2q245nv9x6.b[10][1]++;cov_2q245nv9x6.s[37]++;if((cov_2q245nv9x6.b[12][0]++,window.getComputedStyle(node).display.substr(0,6)==='inline')&&(cov_2q245nv9x6.b[12][1]++,node.tagName.toLowerCase()!=='input')&&(cov_2q245nv9x6.b[12][2]++,node.tagName.toLowerCase()!=='img')){cov_2q245nv9x6.b[11][0]++;cov_2q245nv9x6.s[38]++;// https://github.com/w3c/accname/issues/3
-1 629 ret+=getName(node,true,referenced,owned);}else{cov_2q245nv9x6.b[11][1]++;cov_2q245nv9x6.s[39]++;ret+=' '+getName(node,true,referenced,owned)+' ';}}}else{cov_2q245nv9x6.b[9][1]++;}}}cov_2q245nv9x6.s[40]++;return ret;};cov_2q245nv9x6.s[41]++;var allowNameFromContent=function(el){cov_2q245nv9x6.f[2]++;var role=(cov_2q245nv9x6.s[42]++,query.getRole(el));cov_2q245nv9x6.s[43]++;return(cov_2q245nv9x6.b[13][0]++,role)&&(cov_2q245nv9x6.b[13][1]++,constants.nameFromContents.indexOf(role)!==-1);};cov_2q245nv9x6.s[44]++;var isLabelable=function(el){cov_2q245nv9x6.f[3]++;var selector=(cov_2q245nv9x6.s[45]++,constants.labelable.join(','));cov_2q245nv9x6.s[46]++;return el.matches(selector);};// Control.labels is part of the standard, but not supported in most browsers
-1 630 cov_2q245nv9x6.s[47]++;var getLabelNodes=function(element){cov_2q245nv9x6.f[4]++;var labels=(cov_2q245nv9x6.s[48]++,[]);var labelable=(cov_2q245nv9x6.s[49]++,constants.labelable.join(','));cov_2q245nv9x6.s[50]++;util.walkDOM(document.body,function(node){cov_2q245nv9x6.f[5]++;cov_2q245nv9x6.s[51]++;if((cov_2q245nv9x6.b[15][0]++,node.tagName)&&(cov_2q245nv9x6.b[15][1]++,node.tagName.toLowerCase()==='label')){cov_2q245nv9x6.b[14][0]++;cov_2q245nv9x6.s[52]++;if(node.getAttribute('for')){cov_2q245nv9x6.b[16][0]++;cov_2q245nv9x6.s[53]++;if((cov_2q245nv9x6.b[18][0]++,element.id)&&(cov_2q245nv9x6.b[18][1]++,node.getAttribute('for')===element.id)){cov_2q245nv9x6.b[17][0]++;cov_2q245nv9x6.s[54]++;labels.push(node);}else{cov_2q245nv9x6.b[17][1]++;}}else{cov_2q245nv9x6.b[16][1]++;cov_2q245nv9x6.s[55]++;if(node.querySelector(labelable)===element){cov_2q245nv9x6.b[19][0]++;cov_2q245nv9x6.s[56]++;labels.push(node);}else{cov_2q245nv9x6.b[19][1]++;}}}else{cov_2q245nv9x6.b[14][1]++;}});cov_2q245nv9x6.s[57]++;return labels;};cov_2q245nv9x6.s[58]++;var isInLabelForOtherWidget=function(el){cov_2q245nv9x6.f[6]++;var label=(cov_2q245nv9x6.s[59]++,el.parentElement.closest('label'));var ownLabels=(cov_2q245nv9x6.s[60]++,getLabelNodes(el));cov_2q245nv9x6.s[61]++;return(cov_2q245nv9x6.b[20][0]++,label)&&(cov_2q245nv9x6.b[20][1]++,ownLabels.indexOf(label)===-1);};cov_2q245nv9x6.s[62]++;var getName=function(el,recursive,referenced,owned){cov_2q245nv9x6.f[7]++;var ret=(cov_2q245nv9x6.s[63]++,'');var owned=(cov_2q245nv9x6.s[64]++,(cov_2q245nv9x6.b[21][0]++,owned)||(cov_2q245nv9x6.b[21][1]++,[]));// A
-1 631 cov_2q245nv9x6.s[65]++;if(query.getAttribute(el,'hidden',referenced)){cov_2q245nv9x6.b[22][0]++;cov_2q245nv9x6.s[66]++;return'';}else{cov_2q245nv9x6.b[22][1]++;}// B
-1 632 cov_2q245nv9x6.s[67]++;if((cov_2q245nv9x6.b[24][0]++,!recursive)&&(cov_2q245nv9x6.b[24][1]++,el.matches('[aria-labelledby]'))){cov_2q245nv9x6.b[23][0]++;var ids=(cov_2q245nv9x6.s[68]++,el.getAttribute('aria-labelledby').split(/\s+/));var strings=(cov_2q245nv9x6.s[69]++,ids.map(function(id){cov_2q245nv9x6.f[8]++;var label=(cov_2q245nv9x6.s[70]++,document.getElementById(id));cov_2q245nv9x6.s[71]++;return label?(cov_2q245nv9x6.b[25][0]++,getName(label,true,label,owned)):(cov_2q245nv9x6.b[25][1]++,'');}));cov_2q245nv9x6.s[72]++;ret=strings.join(' ');}else{cov_2q245nv9x6.b[23][1]++;}// C
-1 633 cov_2q245nv9x6.s[73]++;if((cov_2q245nv9x6.b[27][0]++,!ret.trim())&&(cov_2q245nv9x6.b[27][1]++,el.matches('[aria-label]'))){cov_2q245nv9x6.b[26][0]++;cov_2q245nv9x6.s[74]++;ret=el.getAttribute('aria-label');}else{cov_2q245nv9x6.b[26][1]++;}// D
-1 634 cov_2q245nv9x6.s[75]++;if((cov_2q245nv9x6.b[29][0]++,!ret.trim())&&(cov_2q245nv9x6.b[29][1]++,!recursive)&&(cov_2q245nv9x6.b[29][2]++,isLabelable(el))){cov_2q245nv9x6.b[28][0]++;var strings=(cov_2q245nv9x6.s[76]++,getLabelNodes(el).map(function(label){cov_2q245nv9x6.f[9]++;cov_2q245nv9x6.s[77]++;return getName(label,true,label,owned);}));cov_2q245nv9x6.s[78]++;ret=strings.join(' ');}else{cov_2q245nv9x6.b[28][1]++;}cov_2q245nv9x6.s[79]++;if(!ret.trim()){cov_2q245nv9x6.b[30][0]++;cov_2q245nv9x6.s[80]++;ret=(cov_2q245nv9x6.b[31][0]++,el.placeholder)||(cov_2q245nv9x6.b[31][1]++,'');}else{cov_2q245nv9x6.b[30][1]++;}cov_2q245nv9x6.s[81]++;if(!ret.trim()){cov_2q245nv9x6.b[32][0]++;cov_2q245nv9x6.s[82]++;ret=(cov_2q245nv9x6.b[33][0]++,el.alt)||(cov_2q245nv9x6.b[33][1]++,'');}else{cov_2q245nv9x6.b[32][1]++;}cov_2q245nv9x6.s[83]++;if((cov_2q245nv9x6.b[35][0]++,!ret.trim())&&(cov_2q245nv9x6.b[35][1]++,el.matches('abbr,acronym'))&&(cov_2q245nv9x6.b[35][2]++,el.title)){cov_2q245nv9x6.b[34][0]++;cov_2q245nv9x6.s[84]++;ret=el.title;}else{cov_2q245nv9x6.b[34][1]++;}cov_2q245nv9x6.s[85]++;if(!ret.trim()){cov_2q245nv9x6.b[36][0]++;cov_2q245nv9x6.s[86]++;for(var selector in constants.nameFromDescendant){cov_2q245nv9x6.s[87]++;if(el.matches(selector)){cov_2q245nv9x6.b[37][0]++;var descendant=(cov_2q245nv9x6.s[88]++,el.querySelector(constants.nameFromDescendant[selector]));cov_2q245nv9x6.s[89]++;if(descendant){cov_2q245nv9x6.b[38][0]++;cov_2q245nv9x6.s[90]++;ret=getName(descendant,true,descendant,owned);}else{cov_2q245nv9x6.b[38][1]++;}}else{cov_2q245nv9x6.b[37][1]++;}}}else{cov_2q245nv9x6.b[36][1]++;}// E
-1 635 cov_2q245nv9x6.s[91]++;if((cov_2q245nv9x6.b[40][0]++,!ret.trim())&&((cov_2q245nv9x6.b[40][1]++,recursive)||(cov_2q245nv9x6.b[40][2]++,isInLabelForOtherWidget(el))||(cov_2q245nv9x6.b[40][3]++,query.matches(el,'button')))){cov_2q245nv9x6.b[39][0]++;cov_2q245nv9x6.s[92]++;if(query.matches(el,'textbox,button,combobox,listbox,range')){cov_2q245nv9x6.b[41][0]++;cov_2q245nv9x6.s[93]++;if(query.matches(el,'textbox,button')){cov_2q245nv9x6.b[42][0]++;cov_2q245nv9x6.s[94]++;ret=(cov_2q245nv9x6.b[43][0]++,el.value)||(cov_2q245nv9x6.b[43][1]++,el.textContent);}else{cov_2q245nv9x6.b[42][1]++;cov_2q245nv9x6.s[95]++;if(query.matches(el,'combobox,listbox')){cov_2q245nv9x6.b[44][0]++;var selected=(cov_2q245nv9x6.s[96]++,(cov_2q245nv9x6.b[45][0]++,query.querySelector(el,':selected'))||(cov_2q245nv9x6.b[45][1]++,query.querySelector(el,'option')));cov_2q245nv9x6.s[97]++;if(selected){cov_2q245nv9x6.b[46][0]++;cov_2q245nv9x6.s[98]++;ret=getName(selected,recursive,referenced,owned);}else{cov_2q245nv9x6.b[46][1]++;cov_2q245nv9x6.s[99]++;ret=(cov_2q245nv9x6.b[47][0]++,el.value)||(cov_2q245nv9x6.b[47][1]++,'');}}else{cov_2q245nv9x6.b[44][1]++;cov_2q245nv9x6.s[100]++;if(query.matches(el,'range')){cov_2q245nv9x6.b[48][0]++;cov_2q245nv9x6.s[101]++;ret=''+((cov_2q245nv9x6.b[49][0]++,query.getAttribute(el,'valuetext'))||(cov_2q245nv9x6.b[49][1]++,query.getAttribute(el,'valuenow'))||(cov_2q245nv9x6.b[49][2]++,el.value));}else{cov_2q245nv9x6.b[48][1]++;}}}}else{cov_2q245nv9x6.b[41][1]++;}}else{cov_2q245nv9x6.b[39][1]++;}// F
-1 636 // FIXME: menu is not mentioned in the spec
-1 637 cov_2q245nv9x6.s[102]++;if((cov_2q245nv9x6.b[51][0]++,!ret.trim())&&((cov_2q245nv9x6.b[51][1]++,recursive)||(cov_2q245nv9x6.b[51][2]++,allowNameFromContent(el))||(cov_2q245nv9x6.b[51][3]++,el.closest('label')))&&(cov_2q245nv9x6.b[51][4]++,!query.matches(el,'menu'))){cov_2q245nv9x6.b[50][0]++;cov_2q245nv9x6.s[103]++;ret=getContent(el,referenced,owned);}else{cov_2q245nv9x6.b[50][1]++;}// TODO: G
-1 638 // TODO: H
-1 639 // FIXME: not mentioned in the spec
-1 640 cov_2q245nv9x6.s[104]++;if((cov_2q245nv9x6.b[53][0]++,!ret.trim())&&(cov_2q245nv9x6.b[53][1]++,query.matches(el,'presentation'))){cov_2q245nv9x6.b[52][0]++;cov_2q245nv9x6.s[105]++;return getContent(el,referenced,owned);}else{cov_2q245nv9x6.b[52][1]++;}// FIXME: not mentioned in the spec
-1 641 cov_2q245nv9x6.s[106]++;if(!ret.trim()){cov_2q245nv9x6.b[54][0]++;cov_2q245nv9x6.s[107]++;for(var selector in constants.nameDefaults){cov_2q245nv9x6.s[108]++;if(el.matches(selector)){cov_2q245nv9x6.b[55][0]++;cov_2q245nv9x6.s[109]++;ret=constants.nameDefaults[selector];}else{cov_2q245nv9x6.b[55][1]++;}}}else{cov_2q245nv9x6.b[54][1]++;}// I
-1 642 cov_2q245nv9x6.s[110]++;if(!ret.trim()){cov_2q245nv9x6.b[56][0]++;cov_2q245nv9x6.s[111]++;ret=(cov_2q245nv9x6.b[57][0]++,el.title)||(cov_2q245nv9x6.b[57][1]++,'');}else{cov_2q245nv9x6.b[56][1]++;}var before=(cov_2q245nv9x6.s[112]++,getPseudoContent(el,':before'));var after=(cov_2q245nv9x6.s[113]++,getPseudoContent(el,':after'));cov_2q245nv9x6.s[114]++;return before+ret+after;};cov_2q245nv9x6.s[115]++;var getNameTrimmed=function(el){cov_2q245nv9x6.f[10]++;cov_2q245nv9x6.s[116]++;return getName(el).replace(/\s+/g,' ').trim();};cov_2q245nv9x6.s[117]++;var getDescription=function(el){cov_2q245nv9x6.f[11]++;var ret=(cov_2q245nv9x6.s[118]++,'');var owned=(cov_2q245nv9x6.s[119]++,[]);cov_2q245nv9x6.s[120]++;if(el.matches('[aria-describedby]')){cov_2q245nv9x6.b[58][0]++;var ids=(cov_2q245nv9x6.s[121]++,el.getAttribute('aria-describedby').split(/\s+/));var strings=(cov_2q245nv9x6.s[122]++,ids.map(function(id){cov_2q245nv9x6.f[12]++;var label=(cov_2q245nv9x6.s[123]++,document.getElementById(id));cov_2q245nv9x6.s[124]++;return label?(cov_2q245nv9x6.b[59][0]++,getName(label,true,label,owned)):(cov_2q245nv9x6.b[59][1]++,'');}));cov_2q245nv9x6.s[125]++;ret=strings.join(' ');}else{cov_2q245nv9x6.b[58][1]++;cov_2q245nv9x6.s[126]++;if(el.title){cov_2q245nv9x6.b[60][0]++;cov_2q245nv9x6.s[127]++;ret=el.title;}else{cov_2q245nv9x6.b[60][1]++;cov_2q245nv9x6.s[128]++;if(el.placeholder){cov_2q245nv9x6.b[61][0]++;cov_2q245nv9x6.s[129]++;ret=el.placeholder;}else{cov_2q245nv9x6.b[61][1]++;}}}cov_2q245nv9x6.s[130]++;ret=((cov_2q245nv9x6.b[62][0]++,ret)||(cov_2q245nv9x6.b[62][1]++,'')).trim().replace(/\s+/g,' ');cov_2q245nv9x6.s[131]++;if(ret===getNameTrimmed(el)){cov_2q245nv9x6.b[63][0]++;cov_2q245nv9x6.s[132]++;ret='';}else{cov_2q245nv9x6.b[63][1]++;}cov_2q245nv9x6.s[133]++;return ret;};cov_2q245nv9x6.s[134]++;module.exports={getName:getNameTrimmed,getDescription:getDescription};
633 643
634 644 },{"./constants.js":5,"./query.js":7,"./util.js":8}],7:[function(require,module,exports){
635 645 var constants = require('./constants.js');
@@ -821,7 +831,7 @@ module.exports = {
821 831 };
822 832
823 833 },{}],9:[function(require,module,exports){
824 -1 var currentVersion = "2.20";
-1 834 window.getAccNameVersion = "2.20";
825 835
826 836 /*!
827 837 CalcNames: The AccName Computation Prototype, compute the Name and Description property values for a DOM node
@@ -834,1160 +844,1183 @@ Distributed under the terms of the Open Source Initiative OSI - MIT License
834 844 */
835 845
836 846 // AccName Computation Prototype
837 -1 var calcNames = function(node, fnc, preventVisualARIASelfCSSRef) {
838 -1 var props = { name: "", desc: "" };
839 -1 if (!node || node.nodeType !== 1) {
840 -1 return props;
841 -1 }
842 -1 var rootNode = node;
843 -1
844 -1 // Track nodes to prevent duplicate node reference parsing.
845 -1 var nodes = [];
846 -1 // Track aria-owns references to prevent duplicate parsing.
847 -1 var owns = [];
848 -1
849 -1 // Recursively process a DOM node to compute an accessible name in accordance with the spec
850 -1 var walk = function(
851 -1 refNode,
852 -1 stop,
853 -1 skip,
854 -1 nodesToIgnoreValues,
855 -1 skipAbort,
856 -1 ownedBy
857 -1 ) {
858 -1 var fullResult = {
859 -1 name: "",
860 -1 title: ""
861 -1 };
-1 847 window.getAccName = calcNames = function(
-1 848 node,
-1 849 fnc,
-1 850 preventVisualARIASelfCSSRef
-1 851 ) {
-1 852 var props = { name: "", desc: "", error: "" };
-1 853 try {
-1 854 if (!node || node.nodeType !== 1) {
-1 855 return props;
-1 856 }
-1 857 var rootNode = node;
862 858
863 -1 /*
-1 859 // Track nodes to prevent duplicate node reference parsing.
-1 860 var nodes = [];
-1 861 // Track aria-owns references to prevent duplicate parsing.
-1 862 var owns = [];
-1 863
-1 864 // Recursively process a DOM node to compute an accessible name in accordance with the spec
-1 865 var walk = function(
-1 866 refNode,
-1 867 stop,
-1 868 skip,
-1 869 nodesToIgnoreValues,
-1 870 skipAbort,
-1 871 ownedBy
-1 872 ) {
-1 873 var fullResult = {
-1 874 name: "",
-1 875 title: ""
-1 876 };
-1 877
-1 878 /*
864 879 ARIA Role Exception Rule Set 1.1
865 880 The following Role Exception Rule Set is based on the following ARIA Working Group discussion involving all relevant browser venders.
866 881 https://lists.w3.org/Archives/Public/public-aria/2017Jun/0057.html
867 882 */
868 -1 var isException = function(node, refNode) {
869 -1 if (!refNode || !node || refNode.nodeType !== 1 || node.nodeType !== 1) {
870 -1 return false;
871 -1 }
872 -1
873 -1 var inList = function(node, list) {
874 -1 var role = getRole(node);
875 -1 var tag = node.nodeName.toLowerCase();
876 -1 return (
877 -1 (role && list.roles.indexOf(role) >= 0) ||
878 -1 (!role && list.tags.indexOf(tag) >= 0)
879 -1 );
880 -1 };
881 -1
882 -1 // The list3 overrides must be checked first.
883 -1 if (inList(node, list3)) {
-1 883 var isException = function(node, refNode) {
884 884 if (
885 -1 node === refNode &&
886 -1 !(node.id && ownedBy[node.id] && ownedBy[node.id].node)
-1 885 !refNode ||
-1 886 !node ||
-1 887 refNode.nodeType !== 1 ||
-1 888 node.nodeType !== 1
887 889 ) {
888 -1 return !isFocusable(node);
889 -1 } else {
890 -1 // Note: the inParent checker needs to be present to allow for embedded roles matching list3 when the referenced parent is referenced using aria-labelledby, aria-describedby, or aria-owns.
891 -1 return !(
892 -1 (inParent(node, ownedBy.top) &&
893 -1 node.nodeName.toLowerCase() !== "select") ||
894 -1 inList(refNode, list1)
895 -1 );
-1 890 return false;
896 891 }
897 -1 }
898 -1 // Otherwise process list2 to identify roles to ignore processing name from content.
899 -1 else if (
900 -1 inList(node, list2) ||
901 -1 (node === rootNode && !inList(node, list1))
902 -1 ) {
903 -1 return true;
904 -1 } else {
905 -1 return false;
906 -1 }
907 -1 };
908 892
909 -1 var inParent = function(node, parent) {
910 -1 var trackNodes = [];
911 -1 while (node) {
912 -1 if (
913 -1 node.id &&
914 -1 ownedBy[node.id] &&
915 -1 ownedBy[node.id].node &&
916 -1 trackNodes.indexOf(node) === -1
917 -1 ) {
918 -1 trackNodes.push(node);
919 -1 node = ownedBy[node.id].node;
920 -1 } else {
921 -1 node = node.parentNode;
-1 893 var inList = function(node, list) {
-1 894 var role = getRole(node);
-1 895 var tag = node.nodeName.toLowerCase();
-1 896 return (
-1 897 (role && list.roles.indexOf(role) >= 0) ||
-1 898 (!role && list.tags.indexOf(tag) >= 0)
-1 899 );
-1 900 };
-1 901
-1 902 // The list3 overrides must be checked first.
-1 903 if (inList(node, list3)) {
-1 904 if (
-1 905 node === refNode &&
-1 906 !(node.id && ownedBy[node.id] && ownedBy[node.id].node)
-1 907 ) {
-1 908 return !isFocusable(node);
-1 909 } else {
-1 910 // Note: the inParent checker needs to be present to allow for embedded roles matching list3 when the referenced parent is referenced using aria-labelledby, aria-describedby, or aria-owns.
-1 911 return !(
-1 912 (inParent(node, ownedBy.top) &&
-1 913 node.nodeName.toLowerCase() !== "select") ||
-1 914 inList(refNode, list1)
-1 915 );
-1 916 }
922 917 }
923 -1 if (node && node === parent) {
-1 918 // Otherwise process list2 to identify roles to ignore processing name from content.
-1 919 else if (
-1 920 inList(node, list2) ||
-1 921 (node === rootNode && !inList(node, list1))
-1 922 ) {
924 923 return true;
925 -1 } else if (!node || node === ownedBy.top || node === document.body) {
-1 924 } else {
926 925 return false;
927 926 }
928 -1 }
929 -1 return false;
930 -1 };
931 -1
932 -1 // Placeholder for storing CSS before and after pseudo element text values for the top level node
933 -1 var cssOP = {
934 -1 before: "",
935 -1 after: ""
936 -1 };
-1 927 };
937 928
938 -1 if (ownedBy.ref) {
939 -1 if (isParentHidden(refNode, document.body, true, true)) {
940 -1 // If referenced via aria-labelledby or aria-describedby, do not return a name or description if a parent node is hidden.
941 -1 return fullResult;
942 -1 } else if (isHidden(refNode, document.body)) {
943 -1 // Otherwise, if aria-labelledby or aria-describedby reference a node that is explicitly hidden, then process all children regardless of their individual hidden states.
944 -1 var ignoreHidden = true;
945 -1 }
946 -1 }
-1 929 var inParent = function(node, parent) {
-1 930 var trackNodes = [];
-1 931 while (node) {
-1 932 if (
-1 933 node.id &&
-1 934 ownedBy[node.id] &&
-1 935 ownedBy[node.id].node &&
-1 936 trackNodes.indexOf(node) === -1
-1 937 ) {
-1 938 trackNodes.push(node);
-1 939 node = ownedBy[node.id].node;
-1 940 } else {
-1 941 node = node.parentNode;
-1 942 }
-1 943 if (node && node === parent) {
-1 944 return true;
-1 945 } else if (!node || node === ownedBy.top || node === document.body) {
-1 946 return false;
-1 947 }
-1 948 }
-1 949 return false;
-1 950 };
947 951
948 -1 if (nodes.indexOf(refNode) === -1) {
949 -1 // Store the before and after pseudo element 'content' values for the top level DOM node
950 -1 // Note: If the pseudo element includes block level styling, a space will be added, otherwise inline is asumed and no spacing is added.
951 -1 cssOP = getCSSText(refNode, null);
-1 952 // Placeholder for storing CSS before and after pseudo element text values for the top level node
-1 953 var cssOP = {
-1 954 before: "",
-1 955 after: ""
-1 956 };
952 957
953 -1 // Enabled in Visual ARIA to prevent self referencing by Visual ARIA tooltips
954 -1 if (preventVisualARIASelfCSSRef) {
955 -1 if (
956 -1 cssOP.before.indexOf(" [ARIA] ") !== -1 ||
957 -1 cssOP.before.indexOf(" aria-") !== -1 ||
958 -1 cssOP.before.indexOf(" accName: ") !== -1
959 -1 )
960 -1 cssOP.before = "";
961 -1 if (
962 -1 cssOP.after.indexOf(" [ARIA] ") !== -1 ||
963 -1 cssOP.after.indexOf(" aria-") !== -1 ||
964 -1 cssOP.after.indexOf(" accDescription: ") !== -1
965 -1 )
966 -1 cssOP.after = "";
-1 958 if (ownedBy.ref) {
-1 959 if (isParentHidden(refNode, document.body, true, true)) {
-1 960 // If referenced via aria-labelledby or aria-describedby, do not return a name or description if a parent node is hidden.
-1 961 return fullResult;
-1 962 } else if (isHidden(refNode, document.body)) {
-1 963 // Otherwise, if aria-labelledby or aria-describedby reference a node that is explicitly hidden, then process all children regardless of their individual hidden states.
-1 964 var ignoreHidden = true;
-1 965 }
967 966 }
968 -1 }
969 967
970 -1 // Recursively apply the same naming computation to all nodes within the referenced structure
971 -1 var walkDOM = function(node, fn, refNode) {
972 -1 var res = {
973 -1 name: "",
974 -1 title: ""
975 -1 };
976 -1 if (!node) {
977 -1 return res;
978 -1 }
979 -1 var nodeIsBlock =
980 -1 node && node.nodeType === 1 && isBlockLevelElement(node) ? true : false;
981 -1 var fResult = fn(node) || {};
982 -1 if (fResult.name && fResult.name.length) {
983 -1 res.name += fResult.name;
984 -1 }
985 -1 if (!isException(node, ownedBy.top, ownedBy)) {
986 -1 node = node.firstChild;
987 -1 while (node) {
988 -1 res.name += walkDOM(node, fn, refNode).name;
989 -1 node = node.nextSibling;
-1 968 if (nodes.indexOf(refNode) === -1) {
-1 969 // Store the before and after pseudo element 'content' values for the top level DOM node
-1 970 // Note: If the pseudo element includes block level styling, a space will be added, otherwise inline is asumed and no spacing is added.
-1 971 cssOP = getCSSText(refNode, null);
-1 972
-1 973 // Enabled in Visual ARIA to prevent self referencing by Visual ARIA tooltips
-1 974 if (preventVisualARIASelfCSSRef) {
-1 975 if (
-1 976 cssOP.before.indexOf(" [ARIA] ") !== -1 ||
-1 977 cssOP.before.indexOf(" aria-") !== -1 ||
-1 978 cssOP.before.indexOf(" accName: ") !== -1
-1 979 )
-1 980 cssOP.before = "";
-1 981 if (
-1 982 cssOP.after.indexOf(" [ARIA] ") !== -1 ||
-1 983 cssOP.after.indexOf(" aria-") !== -1 ||
-1 984 cssOP.after.indexOf(" accDescription: ") !== -1
-1 985 )
-1 986 cssOP.after = "";
990 987 }
991 988 }
992 -1 res.name += fResult.owns || "";
993 -1 if (rootNode === refNode && !trim(res.name) && trim(fResult.title)) {
994 -1 res.name = addSpacing(fResult.title);
995 -1 } else if (rootNode === refNode && trim(fResult.title)) {
996 -1 res.title = addSpacing(fResult.title);
997 -1 }
998 -1 if (rootNode === refNode && trim(fResult.desc)) {
999 -1 res.title = addSpacing(fResult.desc);
1000 -1 }
1001 -1 if (nodeIsBlock || fResult.isWidget) {
1002 -1 res.name = addSpacing(res.name);
1003 -1 }
1004 -1 return res;
1005 -1 };
1006 989
1007 -1 fullResult = walkDOM(
1008 -1 refNode,
1009 -1 function(node) {
1010 -1 var i = 0;
1011 -1 var element = null;
1012 -1 var ids = [];
1013 -1 var parts = [];
1014 -1 var result = {
-1 990 // Recursively apply the same naming computation to all nodes within the referenced structure
-1 991 var walkDOM = function(node, fn, refNode) {
-1 992 var res = {
1015 993 name: "",
1016 -1 title: "",
1017 -1 owns: ""
-1 994 title: ""
1018 995 };
1019 -1 var isEmbeddedNode =
1020 -1 node &&
1021 -1 node.nodeType === 1 &&
1022 -1 nodesToIgnoreValues &&
1023 -1 nodesToIgnoreValues.length &&
1024 -1 nodesToIgnoreValues.indexOf(node) !== -1 &&
1025 -1 node === rootNode &&
1026 -1 node !== refNode
-1 996 if (!node) {
-1 997 return res;
-1 998 }
-1 999 var nodeIsBlock =
-1 1000 node && node.nodeType === 1 && isBlockLevelElement(node)
1027 1001 ? true
1028 1002 : false;
1029 -1
1030 -1 if (
1031 -1 (skip ||
1032 -1 !node ||
1033 -1 nodes.indexOf(node) !== -1 ||
1034 -1 (!ignoreHidden && isHidden(node, ownedBy.top))) &&
1035 -1 !skipAbort &&
1036 -1 !isEmbeddedNode
1037 -1 ) {
1038 -1 // Abort if algorithm step is already completed, or if node is a hidden child of refNode, or if this node has already been processed, or skip abort if aria-labelledby self references same node.
1039 -1 return result;
1040 -1 }
1041 -1
1042 -1 if (nodes.indexOf(node) === -1) {
1043 -1 nodes.push(node);
-1 1003 var fResult = fn(node) || {};
-1 1004 if (fResult.name && fResult.name.length) {
-1 1005 res.name += fResult.name;
1044 1006 }
1045 -1
1046 -1 // Store name for the current node.
1047 -1 var name = "";
1048 -1 // Store name from aria-owns references if detected.
1049 -1 var ariaO = "";
1050 -1 // Placeholder for storing CSS before and after pseudo element text values for the current node container element
1051 -1 var cssO = {
1052 -1 before: "",
1053 -1 after: ""
1054 -1 };
1055 -1
1056 -1 var parent = refNode === node ? node : node.parentNode;
1057 -1 if (nodes.indexOf(parent) === -1) {
1058 -1 nodes.push(parent);
1059 -1 // Store the before and after pseudo element 'content' values for the current node container element
1060 -1 // Note: If the pseudo element includes block level styling, a space will be added, otherwise inline is asumed and no spacing is added.
1061 -1 cssO = getCSSText(parent, refNode);
1062 -1
1063 -1 // Enabled in Visual ARIA to prevent self referencing by Visual ARIA tooltips
1064 -1 if (preventVisualARIASelfCSSRef) {
1065 -1 if (
1066 -1 cssO.before.indexOf(" [ARIA] ") !== -1 ||
1067 -1 cssO.before.indexOf(" aria-") !== -1 ||
1068 -1 cssO.before.indexOf(" accName: ") !== -1
1069 -1 )
1070 -1 cssO.before = "";
1071 -1 if (
1072 -1 cssO.after.indexOf(" [ARIA] ") !== -1 ||
1073 -1 cssO.after.indexOf(" aria-") !== -1 ||
1074 -1 cssO.after.indexOf(" accDescription: ") !== -1
1075 -1 )
1076 -1 cssO.after = "";
-1 1007 if (!isException(node, ownedBy.top, ownedBy)) {
-1 1008 node = node.firstChild;
-1 1009 while (node) {
-1 1010 res.name += walkDOM(node, fn, refNode).name;
-1 1011 node = node.nextSibling;
1077 1012 }
1078 1013 }
-1 1014 res.name += fResult.owns || "";
-1 1015 if (rootNode === refNode && !trim(res.name) && trim(fResult.title)) {
-1 1016 res.name = addSpacing(fResult.title);
-1 1017 } else if (rootNode === refNode && trim(fResult.title)) {
-1 1018 res.title = addSpacing(fResult.title);
-1 1019 }
-1 1020 if (rootNode === refNode && trim(fResult.desc)) {
-1 1021 res.title = addSpacing(fResult.desc);
-1 1022 }
-1 1023 if (nodeIsBlock || fResult.isWidget) {
-1 1024 res.name = addSpacing(res.name);
-1 1025 }
-1 1026 return res;
-1 1027 };
1079 1028
1080 -1 // Process standard DOM element node
1081 -1 if (node.nodeType === 1) {
1082 -1 var aLabelledby = node.getAttribute("aria-labelledby") || "";
1083 -1 var aDescribedby = node.getAttribute("aria-describedby") || "";
1084 -1 var aLabel = node.getAttribute("aria-label") || "";
1085 -1 var nTitle = node.getAttribute("title") || "";
1086 -1 var nTag = node.nodeName.toLowerCase();
1087 -1 var nRole = getRole(node);
1088 -1
1089 -1 var isNativeFormField = nativeFormFields.indexOf(nTag) !== -1;
1090 -1 var isNativeButton = ["input"].indexOf(nTag) !== -1;
1091 -1 var isRangeWidgetRole = rangeWidgetRoles.indexOf(nRole) !== -1;
1092 -1 var isEditWidgetRole = editWidgetRoles.indexOf(nRole) !== -1;
1093 -1 var isSelectWidgetRole = selectWidgetRoles.indexOf(nRole) !== -1;
1094 -1 var isSimulatedFormField =
1095 -1 isRangeWidgetRole ||
1096 -1 isEditWidgetRole ||
1097 -1 isSelectWidgetRole ||
1098 -1 nRole === "combobox";
1099 -1 var isWidgetRole =
1100 -1 (isSimulatedFormField || otherWidgetRoles.indexOf(nRole) !== -1) &&
1101 -1 nRole !== "link";
1102 -1 result.isWidget = isNativeFormField || isWidgetRole;
1103 -1
1104 -1 var hasName = false;
1105 -1 var aOwns = node.getAttribute("aria-owns") || "";
1106 -1 var isSeparatChildFormField =
1107 -1 !isEmbeddedNode &&
1108 -1 ((node !== refNode &&
1109 -1 (isNativeFormField || isSimulatedFormField)) ||
1110 -1 (node.id &&
1111 -1 ownedBy[node.id] &&
1112 -1 ownedBy[node.id].target &&
1113 -1 ownedBy[node.id].target === node))
-1 1029 fullResult = walkDOM(
-1 1030 refNode,
-1 1031 function(node) {
-1 1032 var i = 0;
-1 1033 var element = null;
-1 1034 var ids = [];
-1 1035 var parts = [];
-1 1036 var result = {
-1 1037 name: "",
-1 1038 title: "",
-1 1039 owns: ""
-1 1040 };
-1 1041 var isEmbeddedNode =
-1 1042 node &&
-1 1043 node.nodeType === 1 &&
-1 1044 nodesToIgnoreValues &&
-1 1045 nodesToIgnoreValues.length &&
-1 1046 nodesToIgnoreValues.indexOf(node) !== -1 &&
-1 1047 node === rootNode &&
-1 1048 node !== refNode
1114 1049 ? true
1115 1050 : false;
1116 1051
1117 -1 if (!stop && node === refNode) {
1118 -1 // Check for non-empty value of aria-labelledby if current node equals reference node, follow each ID ref, then stop and process no deeper.
1119 -1 if (aLabelledby) {
1120 -1 ids = aLabelledby.split(/\s+/);
1121 -1 parts = [];
1122 -1 for (i = 0; i < ids.length; i++) {
1123 -1 element = document.getElementById(ids[i]);
1124 -1 // Also prevent the current form field from having its value included in the naming computation if nested as a child of label
1125 -1 parts.push(
1126 -1 walk(element, true, skip, [node], element === refNode, {
1127 -1 ref: ownedBy,
1128 -1 top: element
1129 -1 }).name
1130 -1 );
1131 -1 }
1132 -1 // Check for blank value, since whitespace chars alone are not valid as a name
1133 -1 name = trim(parts.join(" "));
-1 1052 if (
-1 1053 (skip ||
-1 1054 !node ||
-1 1055 nodes.indexOf(node) !== -1 ||
-1 1056 (!ignoreHidden && isHidden(node, ownedBy.top))) &&
-1 1057 !skipAbort &&
-1 1058 !isEmbeddedNode
-1 1059 ) {
-1 1060 // Abort if algorithm step is already completed, or if node is a hidden child of refNode, or if this node has already been processed, or skip abort if aria-labelledby self references same node.
-1 1061 return result;
-1 1062 }
1134 1063
1135 -1 if (trim(name)) {
1136 -1 hasName = true;
1137 -1 // Abort further recursion if name is valid.
1138 -1 skip = true;
1139 -1 }
-1 1064 if (nodes.indexOf(node) === -1) {
-1 1065 nodes.push(node);
-1 1066 }
-1 1067
-1 1068 // Store name for the current node.
-1 1069 var name = "";
-1 1070 // Store name from aria-owns references if detected.
-1 1071 var ariaO = "";
-1 1072 // Placeholder for storing CSS before and after pseudo element text values for the current node container element
-1 1073 var cssO = {
-1 1074 before: "",
-1 1075 after: ""
-1 1076 };
-1 1077
-1 1078 var parent = refNode === node ? node : node.parentNode;
-1 1079 if (nodes.indexOf(parent) === -1) {
-1 1080 nodes.push(parent);
-1 1081 // Store the before and after pseudo element 'content' values for the current node container element
-1 1082 // Note: If the pseudo element includes block level styling, a space will be added, otherwise inline is asumed and no spacing is added.
-1 1083 cssO = getCSSText(parent, refNode);
-1 1084
-1 1085 // Enabled in Visual ARIA to prevent self referencing by Visual ARIA tooltips
-1 1086 if (preventVisualARIASelfCSSRef) {
-1 1087 if (
-1 1088 cssO.before.indexOf(" [ARIA] ") !== -1 ||
-1 1089 cssO.before.indexOf(" aria-") !== -1 ||
-1 1090 cssO.before.indexOf(" accName: ") !== -1
-1 1091 )
-1 1092 cssO.before = "";
-1 1093 if (
-1 1094 cssO.after.indexOf(" [ARIA] ") !== -1 ||
-1 1095 cssO.after.indexOf(" aria-") !== -1 ||
-1 1096 cssO.after.indexOf(" accDescription: ") !== -1
-1 1097 )
-1 1098 cssO.after = "";
1140 1099 }
-1 1100 }
1141 1101
1142 -1 // Check for non-empty value of aria-describedby if current node equals reference node, follow each ID ref, then stop and process no deeper.
1143 -1 if (aDescribedby) {
1144 -1 var desc = "";
1145 -1 ids = aDescribedby.split(/\s+/);
1146 -1 parts = [];
1147 -1 for (i = 0; i < ids.length; i++) {
1148 -1 element = document.getElementById(ids[i]);
1149 -1 // Also prevent the current form field from having its value included in the naming computation if nested as a child of label
1150 -1 parts.push(
1151 -1 walk(element, true, false, [node], false, {
1152 -1 ref: ownedBy,
1153 -1 top: element
1154 -1 }).name
1155 -1 );
-1 1102 // Process standard DOM element node
-1 1103 if (node.nodeType === 1) {
-1 1104 var aLabelledby = node.getAttribute("aria-labelledby") || "";
-1 1105 var aDescribedby = node.getAttribute("aria-describedby") || "";
-1 1106 var aLabel = node.getAttribute("aria-label") || "";
-1 1107 var nTitle = node.getAttribute("title") || "";
-1 1108 var nTag = node.nodeName.toLowerCase();
-1 1109 var nRole = getRole(node);
-1 1110
-1 1111 var isNativeFormField = nativeFormFields.indexOf(nTag) !== -1;
-1 1112 var isNativeButton = ["input"].indexOf(nTag) !== -1;
-1 1113 var isRangeWidgetRole = rangeWidgetRoles.indexOf(nRole) !== -1;
-1 1114 var isEditWidgetRole = editWidgetRoles.indexOf(nRole) !== -1;
-1 1115 var isSelectWidgetRole = selectWidgetRoles.indexOf(nRole) !== -1;
-1 1116 var isSimulatedFormField =
-1 1117 isRangeWidgetRole ||
-1 1118 isEditWidgetRole ||
-1 1119 isSelectWidgetRole ||
-1 1120 nRole === "combobox";
-1 1121 var isWidgetRole =
-1 1122 (isSimulatedFormField ||
-1 1123 otherWidgetRoles.indexOf(nRole) !== -1) &&
-1 1124 nRole !== "link";
-1 1125 result.isWidget = isNativeFormField || isWidgetRole;
-1 1126
-1 1127 var hasName = false;
-1 1128 var aOwns = node.getAttribute("aria-owns") || "";
-1 1129 var isSeparatChildFormField =
-1 1130 !isEmbeddedNode &&
-1 1131 ((node !== refNode &&
-1 1132 (isNativeFormField || isSimulatedFormField)) ||
-1 1133 (node.id &&
-1 1134 ownedBy[node.id] &&
-1 1135 ownedBy[node.id].target &&
-1 1136 ownedBy[node.id].target === node))
-1 1137 ? true
-1 1138 : false;
-1 1139
-1 1140 if (!stop && node === refNode) {
-1 1141 // Check for non-empty value of aria-labelledby if current node equals reference node, follow each ID ref, then stop and process no deeper.
-1 1142 if (aLabelledby) {
-1 1143 ids = aLabelledby.split(/\s+/);
-1 1144 parts = [];
-1 1145 for (i = 0; i < ids.length; i++) {
-1 1146 element = document.getElementById(ids[i]);
-1 1147 // Also prevent the current form field from having its value included in the naming computation if nested as a child of label
-1 1148 parts.push(
-1 1149 walk(element, true, skip, [node], element === refNode, {
-1 1150 ref: ownedBy,
-1 1151 top: element
-1 1152 }).name
-1 1153 );
-1 1154 }
-1 1155 // Check for blank value, since whitespace chars alone are not valid as a name
-1 1156 name = trim(parts.join(" "));
-1 1157
-1 1158 if (trim(name)) {
-1 1159 hasName = true;
-1 1160 // Abort further recursion if name is valid.
-1 1161 skip = true;
-1 1162 }
1156 1163 }
1157 -1 // Check for blank value, since whitespace chars alone are not valid as a name
1158 -1 desc = trim(parts.join(" "));
1159 1164
1160 -1 if (trim(desc)) {
1161 -1 result.desc = desc;
-1 1165 // Check for non-empty value of aria-describedby if current node equals reference node, follow each ID ref, then stop and process no deeper.
-1 1166 if (aDescribedby) {
-1 1167 var desc = "";
-1 1168 ids = aDescribedby.split(/\s+/);
-1 1169 parts = [];
-1 1170 for (i = 0; i < ids.length; i++) {
-1 1171 element = document.getElementById(ids[i]);
-1 1172 // Also prevent the current form field from having its value included in the naming computation if nested as a child of label
-1 1173 parts.push(
-1 1174 walk(element, true, false, [node], false, {
-1 1175 ref: ownedBy,
-1 1176 top: element
-1 1177 }).name
-1 1178 );
-1 1179 }
-1 1180 // Check for blank value, since whitespace chars alone are not valid as a name
-1 1181 desc = trim(parts.join(" "));
-1 1182
-1 1183 if (trim(desc)) {
-1 1184 result.desc = desc;
-1 1185 }
1162 1186 }
1163 1187 }
1164 -1 }
1165 1188
1166 -1 // Otherwise, if the current node is a nested widget control within the parent ref obj, then add only its value and process no deeper within the branch.
1167 -1 if (isSeparatChildFormField) {
1168 -1 // Prevent the referencing node from having its value included in the case of form control labels that contain the element with focus.
1169 -1 if (
1170 -1 !(
1171 -1 nodesToIgnoreValues &&
1172 -1 nodesToIgnoreValues.length &&
1173 -1 nodesToIgnoreValues.indexOf(node) !== -1
1174 -1 )
1175 -1 ) {
1176 -1 if (isRangeWidgetRole) {
1177 -1 // For range widgets, append aria-valuetext if non-empty, or aria-valuenow if non-empty, or node.value if applicable.
1178 -1 name = getObjectValue(nRole, node, true);
1179 -1 } else if (
1180 -1 isEditWidgetRole ||
1181 -1 (nRole === "combobox" && isNativeFormField)
1182 -1 ) {
1183 -1 // For simulated edit widgets, append text from content if applicable, or node.value if applicable.
1184 -1 name = getObjectValue(nRole, node, false, true);
1185 -1 } else if (isSelectWidgetRole) {
1186 -1 // For simulated select widgets, append same naming computation algorithm for all child nodes including aria-selected="true" separated by a space when multiple.
1187 -1 // Also filter nodes so that only valid child roles of relevant parent role that include aria-selected="true" are included.
1188 -1 name = getObjectValue(nRole, node, false, false, true);
1189 -1 } else if (
1190 -1 isNativeFormField &&
1191 -1 ["input", "textarea"].indexOf(nTag) !== -1 &&
1192 -1 (!isWidgetRole || isEditWidgetRole)
1193 -1 ) {
1194 -1 // For native edit fields, append node.value when applicable.
1195 -1 name = getObjectValue(nRole, node, false, false, false, true);
1196 -1 } else if (
1197 -1 isNativeFormField &&
1198 -1 nTag === "select" &&
1199 -1 (!isWidgetRole || nRole === "combobox")
-1 1189 // Otherwise, if the current node is a nested widget control within the parent ref obj, then add only its value and process no deeper within the branch.
-1 1190 if (isSeparatChildFormField) {
-1 1191 // Prevent the referencing node from having its value included in the case of form control labels that contain the element with focus.
-1 1192 if (
-1 1193 !(
-1 1194 nodesToIgnoreValues &&
-1 1195 nodesToIgnoreValues.length &&
-1 1196 nodesToIgnoreValues.indexOf(node) !== -1
-1 1197 )
1200 1198 ) {
1201 -1 // For native select fields, get text from content for all options with selected attribute separated by a space when multiple, but don't process if another widget role is present unless it matches role="combobox".
1202 -1 // Reference: https://github.com/WhatSock/w3c-alternative-text-computation/issues/7
1203 -1 name = getObjectValue(nRole, node, false, false, true, true);
-1 1199 if (isRangeWidgetRole) {
-1 1200 // For range widgets, append aria-valuetext if non-empty, or aria-valuenow if non-empty, or node.value if applicable.
-1 1201 name = getObjectValue(nRole, node, true);
-1 1202 } else if (
-1 1203 isEditWidgetRole ||
-1 1204 (nRole === "combobox" && isNativeFormField)
-1 1205 ) {
-1 1206 // For simulated edit widgets, append text from content if applicable, or node.value if applicable.
-1 1207 name = getObjectValue(nRole, node, false, true);
-1 1208 } else if (isSelectWidgetRole) {
-1 1209 // For simulated select widgets, append same naming computation algorithm for all child nodes including aria-selected="true" separated by a space when multiple.
-1 1210 // Also filter nodes so that only valid child roles of relevant parent role that include aria-selected="true" are included.
-1 1211 name = getObjectValue(nRole, node, false, false, true);
-1 1212 } else if (
-1 1213 isNativeFormField &&
-1 1214 ["input", "textarea"].indexOf(nTag) !== -1 &&
-1 1215 (!isWidgetRole || isEditWidgetRole)
-1 1216 ) {
-1 1217 // For native edit fields, append node.value when applicable.
-1 1218 name = getObjectValue(nRole, node, false, false, false, true);
-1 1219 } else if (
-1 1220 isNativeFormField &&
-1 1221 nTag === "select" &&
-1 1222 (!isWidgetRole || nRole === "combobox")
-1 1223 ) {
-1 1224 // For native select fields, get text from content for all options with selected attribute separated by a space when multiple, but don't process if another widget role is present unless it matches role="combobox".
-1 1225 // Reference: https://github.com/WhatSock/w3c-alternative-text-computation/issues/7
-1 1226 name = getObjectValue(nRole, node, false, false, true, true);
-1 1227 }
-1 1228
-1 1229 // Check for blank value, since whitespace chars alone are not valid as a name
-1 1230 name = trim(name);
1204 1231 }
1205 1232
1206 -1 // Check for blank value, since whitespace chars alone are not valid as a name
1207 -1 name = trim(name);
-1 1233 if (trim(name)) {
-1 1234 hasName = true;
-1 1235 }
1208 1236 }
1209 1237
1210 -1 if (trim(name)) {
1211 -1 hasName = true;
-1 1238 // Otherwise, if current node has a non-empty aria-label then set as name and process no deeper within the branch.
-1 1239 if (!hasName && trim(aLabel) && !isSeparatChildFormField) {
-1 1240 name = aLabel;
-1 1241
-1 1242 // Check for blank value, since whitespace chars alone are not valid as a name
-1 1243 if (trim(name)) {
-1 1244 hasName = true;
-1 1245 if (node === refNode) {
-1 1246 // If name is non-empty and both the current and refObject nodes match, then don't process any deeper within the branch.
-1 1247 skip = true;
-1 1248 }
-1 1249 }
1212 1250 }
1213 -1 }
1214 1251
1215 -1 // Otherwise, if current node has a non-empty aria-label then set as name and process no deeper within the branch.
1216 -1 if (!hasName && trim(aLabel) && !isSeparatChildFormField) {
1217 -1 name = aLabel;
-1 1252 // Otherwise, if name is still empty and the current node matches the ref node and is a standard form field with a non-empty associated label element, process label with same naming computation algorithm.
-1 1253 if (!hasName && node === refNode && isNativeFormField) {
-1 1254 // Logic modified to match issue
-1 1255 // https://github.com/WhatSock/w3c-alternative-text-computation/issues/12 */
-1 1256 var labels = document.querySelectorAll("label");
-1 1257 var implicitLabel = getParent(node, "label") || false;
-1 1258 var explicitLabel =
-1 1259 node.id &&
-1 1260 document.querySelectorAll('label[for="' + node.id + '"]').length
-1 1261 ? document.querySelector('label[for="' + node.id + '"]')
-1 1262 : false;
-1 1263 var implicitI = 0;
-1 1264 var explicitI = 0;
-1 1265 for (i = 0; i < labels.length; i++) {
-1 1266 if (labels[i] === implicitLabel) {
-1 1267 implicitI = i;
-1 1268 } else if (labels[i] === explicitLabel) {
-1 1269 explicitI = i;
-1 1270 }
-1 1271 }
-1 1272 var isImplicitFirst =
-1 1273 implicitLabel &&
-1 1274 implicitLabel.nodeType === 1 &&
-1 1275 explicitLabel &&
-1 1276 explicitLabel.nodeType === 1 &&
-1 1277 implicitI < explicitI
-1 1278 ? true
-1 1279 : false;
-1 1280
-1 1281 if (explicitLabel) {
-1 1282 var eLblName = trim(
-1 1283 walk(explicitLabel, true, skip, [node], false, {
-1 1284 ref: ownedBy,
-1 1285 top: explicitLabel
-1 1286 }).name
-1 1287 );
-1 1288 }
-1 1289 if (implicitLabel && implicitLabel !== explicitLabel) {
-1 1290 var iLblName = trim(
-1 1291 walk(implicitLabel, true, skip, [node], false, {
-1 1292 ref: ownedBy,
-1 1293 top: implicitLabel
-1 1294 }).name
-1 1295 );
-1 1296 }
1218 1297
1219 -1 // Check for blank value, since whitespace chars alone are not valid as a name
1220 -1 if (trim(name)) {
1221 -1 hasName = true;
1222 -1 if (node === refNode) {
1223 -1 // If name is non-empty and both the current and refObject nodes match, then don't process any deeper within the branch.
1224 -1 skip = true;
-1 1298 if (iLblName && eLblName && isImplicitFirst) {
-1 1299 name = iLblName + " " + eLblName;
-1 1300 } else if (eLblName && iLblName) {
-1 1301 name = eLblName + " " + iLblName;
-1 1302 } else if (eLblName) {
-1 1303 name = eLblName;
-1 1304 } else if (iLblName) {
-1 1305 name = iLblName;
1225 1306 }
1226 -1 }
1227 -1 }
1228 1307
1229 -1 // Otherwise, if name is still empty and the current node matches the ref node and is a standard form field with a non-empty associated label element, process label with same naming computation algorithm.
1230 -1 if (!hasName && node === refNode && isNativeFormField) {
1231 -1 // Logic modified to match issue
1232 -1 // https://github.com/WhatSock/w3c-alternative-text-computation/issues/12 */
1233 -1 var labels = document.querySelectorAll("label");
1234 -1 var implicitLabel = getParent(node, "label") || false;
1235 -1 var explicitLabel =
1236 -1 node.id &&
1237 -1 document.querySelectorAll('label[for="' + node.id + '"]').length
1238 -1 ? document.querySelector('label[for="' + node.id + '"]')
1239 -1 : false;
1240 -1 var implicitI = 0;
1241 -1 var explicitI = 0;
1242 -1 for (i = 0; i < labels.length; i++) {
1243 -1 if (labels[i] === implicitLabel) {
1244 -1 implicitI = i;
1245 -1 } else if (labels[i] === explicitLabel) {
1246 -1 explicitI = i;
-1 1308 if (trim(name)) {
-1 1309 hasName = true;
1247 1310 }
1248 1311 }
1249 -1 var isImplicitFirst =
1250 -1 implicitLabel &&
1251 -1 implicitLabel.nodeType === 1 &&
1252 -1 explicitLabel &&
1253 -1 explicitLabel.nodeType === 1 &&
1254 -1 implicitI < explicitI
-1 1312
-1 1313 // Process native form field buttons in accordance with the HTML AAM
-1 1314 // https://w3c.github.io/html-aam/#accessible-name-and-description-computation
-1 1315 var btnType =
-1 1316 (isNativeButton && node.getAttribute("type")) || false;
-1 1317 var btnValue =
-1 1318 (btnType && trim(node.getAttribute("value"))) || false;
-1 1319
-1 1320 var rolePresentation =
-1 1321 !hasName &&
-1 1322 nRole &&
-1 1323 presentationRoles.indexOf(nRole) !== -1 &&
-1 1324 !isFocusable(node) &&
-1 1325 !hasGlobalAttr(node)
1255 1326 ? true
1256 1327 : false;
-1 1328 var nAlt = rolePresentation ? "" : trim(node.getAttribute("alt"));
1257 1329
1258 -1 if (explicitLabel) {
1259 -1 var eLblName = trim(
1260 -1 walk(explicitLabel, true, skip, [node], false, {
1261 -1 ref: ownedBy,
1262 -1 top: explicitLabel
1263 -1 }).name
1264 -1 );
1265 -1 }
1266 -1 if (implicitLabel && implicitLabel !== explicitLabel) {
1267 -1 var iLblName = trim(
1268 -1 walk(implicitLabel, true, skip, [node], false, {
1269 -1 ref: ownedBy,
1270 -1 top: implicitLabel
1271 -1 }).name
1272 -1 );
-1 1330 // Otherwise, if name is still empty and current node is a standard non-presentational img or image button with a non-empty alt attribute, set alt attribute value as the accessible name.
-1 1331 if (
-1 1332 !hasName &&
-1 1333 !rolePresentation &&
-1 1334 (nTag === "img" || btnType === "image") &&
-1 1335 nAlt
-1 1336 ) {
-1 1337 // Check for blank value, since whitespace chars alone are not valid as a name
-1 1338 name = trim(nAlt);
-1 1339 if (trim(name)) {
-1 1340 hasName = true;
-1 1341 }
1273 1342 }
1274 1343
1275 -1 if (iLblName && eLblName && isImplicitFirst) {
1276 -1 name = iLblName + " " + eLblName;
1277 -1 } else if (eLblName && iLblName) {
1278 -1 name = eLblName + " " + iLblName;
1279 -1 } else if (eLblName) {
1280 -1 name = eLblName;
1281 -1 } else if (iLblName) {
1282 -1 name = iLblName;
-1 1344 if (
-1 1345 !hasName &&
-1 1346 node === refNode &&
-1 1347 btnType &&
-1 1348 ["button", "image", "submit", "reset"].indexOf(btnType) !== -1
-1 1349 ) {
-1 1350 if (btnValue) {
-1 1351 name = btnValue;
-1 1352 } else {
-1 1353 switch (btnType) {
-1 1354 case "submit":
-1 1355 case "image":
-1 1356 name = "Submit Query";
-1 1357 break;
-1 1358 case "reset":
-1 1359 name = "Reset";
-1 1360 break;
-1 1361 default:
-1 1362 name = "";
-1 1363 }
-1 1364 }
-1 1365 if (trim(name)) {
-1 1366 hasName = true;
-1 1367 }
1283 1368 }
1284 1369
1285 -1 if (trim(name)) {
1286 -1 hasName = true;
-1 1370 if (
-1 1371 hasName &&
-1 1372 node === refNode &&
-1 1373 btnType &&
-1 1374 ["button", "submit", "reset"].indexOf(btnType) !== -1 &&
-1 1375 btnValue &&
-1 1376 btnValue !== name &&
-1 1377 !result.desc
-1 1378 ) {
-1 1379 result.desc = btnValue;
1287 1380 }
1288 -1 }
1289 1381
1290 -1 // Process native form field buttons in accordance with the HTML AAM
1291 -1 // https://w3c.github.io/html-aam/#accessible-name-and-description-computation
1292 -1 var btnType = (isNativeButton && node.getAttribute("type")) || false;
1293 -1 var btnValue = (btnType && trim(node.getAttribute("value"))) || false;
1294 -1
1295 -1 var rolePresentation =
1296 -1 !hasName &&
1297 -1 nRole &&
1298 -1 presentationRoles.indexOf(nRole) !== -1 &&
1299 -1 !isFocusable(node) &&
1300 -1 !hasGlobalAttr(node)
1301 -1 ? true
1302 -1 : false;
1303 -1 var nAlt = rolePresentation ? "" : trim(node.getAttribute("alt"));
1304 -1
1305 -1 // Otherwise, if name is still empty and current node is a standard non-presentational img or image button with a non-empty alt attribute, set alt attribute value as the accessible name.
1306 -1 if (
1307 -1 !hasName &&
1308 -1 !rolePresentation &&
1309 -1 (nTag === "img" || btnType === "image") &&
1310 -1 nAlt
1311 -1 ) {
1312 -1 // Check for blank value, since whitespace chars alone are not valid as a name
1313 -1 name = trim(nAlt);
1314 -1 if (trim(name)) {
1315 -1 hasName = true;
-1 1382 // Otherwise, if current node is the same as rootNode and is non-presentational and includes a non-empty title attribute and is not a separate embedded form field, store title attribute value as the accessible name if name is still empty, or the description if not.
-1 1383 if (
-1 1384 node === rootNode &&
-1 1385 !rolePresentation &&
-1 1386 trim(nTitle) &&
-1 1387 !isSeparatChildFormField
-1 1388 ) {
-1 1389 result.title = trim(nTitle);
1316 1390 }
1317 -1 }
1318 1391
1319 -1 if (
1320 -1 !hasName &&
1321 -1 node === refNode &&
1322 -1 btnType &&
1323 -1 ["button", "image", "submit", "reset"].indexOf(btnType) !== -1
1324 -1 ) {
1325 -1 if (btnValue) {
1326 -1 name = btnValue;
1327 -1 } else {
1328 -1 switch (btnType) {
1329 -1 case "submit":
1330 -1 case "image":
1331 -1 name = "Submit Query";
1332 -1 break;
1333 -1 case "reset":
1334 -1 name = "Reset";
1335 -1 break;
1336 -1 default:
1337 -1 name = "";
-1 1392 // Check for non-empty value of aria-owns, follow each ID ref, then process with same naming computation.
-1 1393 // Also abort aria-owns processing if contained on an element that does not support child elements.
-1 1394 if (aOwns && !isNativeFormField && nTag !== "img") {
-1 1395 ids = aOwns.split(/\s+/);
-1 1396 parts = [];
-1 1397 for (i = 0; i < ids.length; i++) {
-1 1398 element = document.getElementById(ids[i]);
-1 1399 // Abort processing if the referenced node has already been traversed
-1 1400 if (element && owns.indexOf(ids[i]) === -1) {
-1 1401 owns.push(ids[i]);
-1 1402 var oBy = { ref: ownedBy, top: ownedBy.top };
-1 1403 oBy[ids[i]] = {
-1 1404 refNode: refNode,
-1 1405 node: node,
-1 1406 target: element
-1 1407 };
-1 1408 if (!isParentHidden(element, document.body, true)) {
-1 1409 parts.push(walk(element, true, skip, [], false, oBy).name);
-1 1410 }
-1 1411 }
1338 1412 }
1339 -1 }
1340 -1 if (trim(name)) {
1341 -1 hasName = true;
-1 1413 // Join without adding whitespace since this is already handled by parsing individual nodes within the algorithm steps.
-1 1414 ariaO = parts.join("");
1342 1415 }
1343 1416 }
1344 1417
1345 -1 if (
1346 -1 hasName &&
1347 -1 node === refNode &&
1348 -1 btnType &&
1349 -1 ["button", "submit", "reset"].indexOf(btnType) !== -1 &&
1350 -1 btnValue &&
1351 -1 btnValue !== name &&
1352 -1 !result.desc
1353 -1 ) {
1354 -1 result.desc = btnValue;
-1 1418 // Otherwise, process text node
-1 1419 else if (node.nodeType === 3) {
-1 1420 name = node.data;
1355 1421 }
1356 1422
1357 -1 // Otherwise, if current node is the same as rootNode and is non-presentational and includes a non-empty title attribute and is not a separate embedded form field, store title attribute value as the accessible name if name is still empty, or the description if not.
-1 1423 // Prepend and append the current CSS pseudo element text, plus normalize all whitespace such as newline characters and others into flat spaces.
-1 1424 name = cssO.before + name.replace(/\s+/g, " ") + cssO.after;
-1 1425
1358 1426 if (
1359 -1 node === rootNode &&
1360 -1 !rolePresentation &&
1361 -1 trim(nTitle) &&
1362 -1 !isSeparatChildFormField
-1 1427 name.length &&
-1 1428 !hasParentLabelOrHidden(node, ownedBy.top, ownedBy, ignoreHidden)
1363 1429 ) {
1364 -1 result.title = trim(nTitle);
-1 1430 result.name = name;
1365 1431 }
1366 1432
1367 -1 // Check for non-empty value of aria-owns, follow each ID ref, then process with same naming computation.
1368 -1 // Also abort aria-owns processing if contained on an element that does not support child elements.
1369 -1 if (aOwns && !isNativeFormField && nTag !== "img") {
1370 -1 ids = aOwns.split(/\s+/);
1371 -1 parts = [];
1372 -1 for (i = 0; i < ids.length; i++) {
1373 -1 element = document.getElementById(ids[i]);
1374 -1 // Abort processing if the referenced node has already been traversed
1375 -1 if (element && owns.indexOf(ids[i]) === -1) {
1376 -1 owns.push(ids[i]);
1377 -1 var oBy = { ref: ownedBy, top: ownedBy.top };
1378 -1 oBy[ids[i]] = {
1379 -1 refNode: refNode,
1380 -1 node: node,
1381 -1 target: element
1382 -1 };
1383 -1 if (!isParentHidden(element, document.body, true)) {
1384 -1 parts.push(walk(element, true, skip, [], false, oBy).name);
1385 -1 }
1386 -1 }
1387 -1 }
1388 -1 // Join without adding whitespace since this is already handled by parsing individual nodes within the algorithm steps.
1389 -1 ariaO = parts.join("");
1390 -1 }
1391 -1 }
-1 1433 result.owns = ariaO;
1392 1434
1393 -1 // Otherwise, process text node
1394 -1 else if (node.nodeType === 3) {
1395 -1 name = node.data;
1396 -1 }
-1 1435 return result;
-1 1436 },
-1 1437 refNode
-1 1438 );
1397 1439
1398 -1 // Prepend and append the current CSS pseudo element text, plus normalize all whitespace such as newline characters and others into flat spaces.
1399 -1 name = cssO.before + name.replace(/\s+/g, " ") + cssO.after;
-1 1440 // Prepend and append the refObj CSS pseudo element text, plus normalize whitespace chars into flat spaces.
-1 1441 fullResult.name =
-1 1442 cssOP.before + fullResult.name.replace(/\s+/g, " ") + cssOP.after;
1400 1443
-1 1444 return fullResult;
-1 1445 };
-1 1446
-1 1447 var getRole = function(node) {
-1 1448 var role = node && node.getAttribute ? node.getAttribute("role") : "";
-1 1449 if (!trim(role)) {
-1 1450 return "";
-1 1451 }
-1 1452 var inList = function(list) {
-1 1453 return trim(role).length > 0 && list.roles.indexOf(role) >= 0;
-1 1454 };
-1 1455 var roles = role.split(/\s+/);
-1 1456 for (var i = 0; i < roles.length; i++) {
-1 1457 role = roles[i];
1401 1458 if (
1402 -1 name.length &&
1403 -1 !hasParentLabelOrHidden(node, ownedBy.top, ownedBy, ignoreHidden)
-1 1459 inList(list1) ||
-1 1460 inList(list2) ||
-1 1461 inList(list3) ||
-1 1462 presentationRoles.indexOf(role) !== -1
1404 1463 ) {
1405 -1 result.name = name;
-1 1464 return role;
1406 1465 }
1407 -1
1408 -1 result.owns = ariaO;
1409 -1
1410 -1 return result;
1411 -1 },
1412 -1 refNode
1413 -1 );
1414 -1
1415 -1 // Prepend and append the refObj CSS pseudo element text, plus normalize whitespace chars into flat spaces.
1416 -1 fullResult.name =
1417 -1 cssOP.before + fullResult.name.replace(/\s+/g, " ") + cssOP.after;
1418 -1
1419 -1 return fullResult;
1420 -1 };
1421 -1
1422 -1 var getRole = function(node) {
1423 -1 var role = node && node.getAttribute ? node.getAttribute("role") : "";
1424 -1 if (!trim(role)) {
-1 1466 }
1425 1467 return "";
1426 -1 }
1427 -1 var inList = function(list) {
1428 -1 return trim(role).length > 0 && list.roles.indexOf(role) >= 0;
1429 1468 };
1430 -1 var roles = role.split(/\s+/);
1431 -1 for (var i = 0; i < roles.length; i++) {
1432 -1 role = roles[i];
-1 1469
-1 1470 var isFocusable = function(node) {
-1 1471 var nodeName = node.nodeName.toLowerCase();
-1 1472 if (node.getAttribute("tabindex")) {
-1 1473 return true;
-1 1474 }
-1 1475 if (nodeName === "a" && node.getAttribute("href")) {
-1 1476 return true;
-1 1477 }
1433 1478 if (
1434 -1 inList(list1) ||
1435 -1 inList(list2) ||
1436 -1 inList(list3) ||
1437 -1 presentationRoles.indexOf(role) !== -1
-1 1479 ["button", "input", "select", "textarea"].indexOf(nodeName) !== -1 &&
-1 1480 node.getAttribute("type") !== "hidden"
1438 1481 ) {
1439 -1 return role;
-1 1482 return true;
1440 1483 }
1441 -1 }
1442 -1 return "";
1443 -1 };
1444 -1
1445 -1 var isFocusable = function(node) {
1446 -1 var nodeName = node.nodeName.toLowerCase();
1447 -1 if (node.getAttribute("tabindex")) {
1448 -1 return true;
1449 -1 }
1450 -1 if (nodeName === "a" && node.getAttribute("href")) {
1451 -1 return true;
1452 -1 }
1453 -1 if (
1454 -1 ["button", "input", "select", "textarea"].indexOf(nodeName) !== -1 &&
1455 -1 node.getAttribute("type") !== "hidden"
1456 -1 ) {
1457 -1 return true;
1458 -1 }
1459 -1 return false;
1460 -1 };
-1 1484 return false;
-1 1485 };
1461 1486
1462 -1 // ARIA Role Exception Rule Set 1.1
1463 -1 // The following Role Exception Rule Set is based on the following ARIA Working Group discussion involving all relevant browser venders.
1464 -1 // https://lists.w3.org/Archives/Public/public-aria/2017Jun/0057.html
-1 1487 // ARIA Role Exception Rule Set 1.1
-1 1488 // The following Role Exception Rule Set is based on the following ARIA Working Group discussion involving all relevant browser venders.
-1 1489 // https://lists.w3.org/Archives/Public/public-aria/2017Jun/0057.html
-1 1490
-1 1491 // Always include name from content when the referenced node matches list1, as well as when child nodes match those within list3
-1 1492 // Note: gridcell was added to list1 to account for focusable gridcells that match the ARIA 1.0 paradigm for interactive grids.
-1 1493 var list1 = {
-1 1494 roles: [
-1 1495 "button",
-1 1496 "checkbox",
-1 1497 "link",
-1 1498 "option",
-1 1499 "radio",
-1 1500 "switch",
-1 1501 "tab",
-1 1502 "treeitem",
-1 1503 "menuitem",
-1 1504 "menuitemcheckbox",
-1 1505 "menuitemradio",
-1 1506 "cell",
-1 1507 "gridcell",
-1 1508 "columnheader",
-1 1509 "rowheader",
-1 1510 "tooltip",
-1 1511 "heading"
-1 1512 ],
-1 1513 tags: [
-1 1514 "a",
-1 1515 "button",
-1 1516 "summary",
-1 1517 "input",
-1 1518 "h1",
-1 1519 "h2",
-1 1520 "h3",
-1 1521 "h4",
-1 1522 "h5",
-1 1523 "h6",
-1 1524 "menuitem",
-1 1525 "option",
-1 1526 "td",
-1 1527 "th"
-1 1528 ]
-1 1529 };
-1 1530 // Never include name from content when current node matches list2
-1 1531 var list2 = {
-1 1532 roles: [
-1 1533 "application",
-1 1534 "alert",
-1 1535 "log",
-1 1536 "marquee",
-1 1537 "timer",
-1 1538 "alertdialog",
-1 1539 "dialog",
-1 1540 "banner",
-1 1541 "complementary",
-1 1542 "form",
-1 1543 "main",
-1 1544 "navigation",
-1 1545 "region",
-1 1546 "search",
-1 1547 "article",
-1 1548 "document",
-1 1549 "feed",
-1 1550 "figure",
-1 1551 "img",
-1 1552 "math",
-1 1553 "toolbar",
-1 1554 "menu",
-1 1555 "menubar",
-1 1556 "grid",
-1 1557 "listbox",
-1 1558 "radiogroup",
-1 1559 "textbox",
-1 1560 "searchbox",
-1 1561 "spinbutton",
-1 1562 "scrollbar",
-1 1563 "slider",
-1 1564 "tablist",
-1 1565 "tabpanel",
-1 1566 "tree",
-1 1567 "treegrid",
-1 1568 "separator"
-1 1569 ],
-1 1570 tags: [
-1 1571 "article",
-1 1572 "aside",
-1 1573 "body",
-1 1574 "select",
-1 1575 "datalist",
-1 1576 "optgroup",
-1 1577 "dialog",
-1 1578 "figure",
-1 1579 "footer",
-1 1580 "form",
-1 1581 "header",
-1 1582 "hr",
-1 1583 "img",
-1 1584 "textarea",
-1 1585 "input",
-1 1586 "main",
-1 1587 "math",
-1 1588 "menu",
-1 1589 "nav",
-1 1590 "section"
-1 1591 ]
-1 1592 };
-1 1593 // As an override of list2, conditionally include name from content if current node is focusable, or if the current node matches list3 while the referenced parent node matches list1.
-1 1594 var list3 = {
-1 1595 roles: [
-1 1596 "term",
-1 1597 "definition",
-1 1598 "directory",
-1 1599 "list",
-1 1600 "group",
-1 1601 "note",
-1 1602 "status",
-1 1603 "table",
-1 1604 "rowgroup",
-1 1605 "row",
-1 1606 "contentinfo"
-1 1607 ],
-1 1608 tags: [
-1 1609 "dl",
-1 1610 "ul",
-1 1611 "ol",
-1 1612 "dd",
-1 1613 "details",
-1 1614 "output",
-1 1615 "table",
-1 1616 "thead",
-1 1617 "tbody",
-1 1618 "tfoot",
-1 1619 "tr"
-1 1620 ]
-1 1621 };
1465 1622
1466 -1 // Always include name from content when the referenced node matches list1, as well as when child nodes match those within list3
1467 -1 // Note: gridcell was added to list1 to account for focusable gridcells that match the ARIA 1.0 paradigm for interactive grids.
1468 -1 var list1 = {
1469 -1 roles: [
-1 1623 var nativeFormFields = ["button", "input", "select", "textarea"];
-1 1624 var rangeWidgetRoles = ["scrollbar", "slider", "spinbutton"];
-1 1625 var editWidgetRoles = ["searchbox", "textbox"];
-1 1626 var selectWidgetRoles = ["grid", "listbox", "tablist", "tree", "treegrid"];
-1 1627 var otherWidgetRoles = [
1470 1628 "button",
1471 1629 "checkbox",
1472 1630 "link",
1473 -1 "option",
1474 -1 "radio",
1475 1631 "switch",
1476 -1 "tab",
1477 -1 "treeitem",
-1 1632 "option",
-1 1633 "menu",
-1 1634 "menubar",
1478 1635 "menuitem",
1479 1636 "menuitemcheckbox",
1480 1637 "menuitemradio",
1481 -1 "cell",
1482 -1 "gridcell",
1483 -1 "columnheader",
1484 -1 "rowheader",
1485 -1 "tooltip",
1486 -1 "heading"
1487 -1 ],
1488 -1 tags: [
1489 -1 "a",
1490 -1 "button",
1491 -1 "summary",
1492 -1 "input",
-1 1638 "radio",
-1 1639 "tab",
-1 1640 "treeitem",
-1 1641 "gridcell"
-1 1642 ];
-1 1643 var presentationRoles = ["presentation", "none"];
-1 1644
-1 1645 var hasGlobalAttr = function(node) {
-1 1646 var globalPropsAndStates = [
-1 1647 "busy",
-1 1648 "controls",
-1 1649 "current",
-1 1650 "describedby",
-1 1651 "details",
-1 1652 "disabled",
-1 1653 "dropeffect",
-1 1654 "errormessage",
-1 1655 "flowto",
-1 1656 "grabbed",
-1 1657 "haspopup",
-1 1658 "invalid",
-1 1659 "keyshortcuts",
-1 1660 "live",
-1 1661 "owns",
-1 1662 "roledescription"
-1 1663 ];
-1 1664 for (var i = 0; i < globalPropsAndStates.length; i++) {
-1 1665 var a = trim(node.getAttribute("aria-" + globalPropsAndStates[i]));
-1 1666 if (a) {
-1 1667 return true;
-1 1668 }
-1 1669 }
-1 1670 return false;
-1 1671 };
-1 1672
-1 1673 var isHidden = function(node, refNode) {
-1 1674 var hidden = function(node) {
-1 1675 if (!node || node.nodeType !== 1 || node === refNode) {
-1 1676 return false;
-1 1677 }
-1 1678 if (node.getAttribute("aria-hidden") === "true") {
-1 1679 return true;
-1 1680 }
-1 1681 if (node.getAttribute("hidden")) {
-1 1682 return true;
-1 1683 }
-1 1684 var style = getStyleObject(node);
-1 1685 if (style["display"] === "none" || style["visibility"] === "hidden") {
-1 1686 return true;
-1 1687 }
-1 1688 return false;
-1 1689 };
-1 1690 return hidden(node);
-1 1691 };
-1 1692
-1 1693 var isParentHidden = function(node, refNode, skipOwned, skipCurrent) {
-1 1694 while (node && node !== refNode) {
-1 1695 if (!skipCurrent && node.nodeType === 1 && isHidden(node, refNode)) {
-1 1696 return true;
-1 1697 } else skipCurrent = false;
-1 1698 node = node.parentNode;
-1 1699 }
-1 1700 return false;
-1 1701 };
-1 1702
-1 1703 var getStyleObject = function(node) {
-1 1704 var style = {};
-1 1705 if (document.defaultView && document.defaultView.getComputedStyle) {
-1 1706 style = document.defaultView.getComputedStyle(node, "");
-1 1707 } else if (node.currentStyle) {
-1 1708 style = node.currentStyle;
-1 1709 }
-1 1710 return style;
-1 1711 };
-1 1712
-1 1713 var cleanCSSText = function(node, text) {
-1 1714 var s = text;
-1 1715 if (s.indexOf("attr(") !== -1) {
-1 1716 var m = s.match(/attr\((.|\n|\r\n)*?\)/g);
-1 1717 for (var i = 0; i < m.length; i++) {
-1 1718 var b = m[i].slice(5, -1);
-1 1719 b = node.getAttribute(b) || "";
-1 1720 s = s.replace(m[i], b);
-1 1721 }
-1 1722 }
-1 1723 return s || text;
-1 1724 };
-1 1725
-1 1726 var isBlockLevelElement = function(node, cssObj) {
-1 1727 var styleObject = cssObj || getStyleObject(node);
-1 1728 for (var prop in blockStyles) {
-1 1729 var values = blockStyles[prop];
-1 1730 for (var i = 0; i < values.length; i++) {
-1 1731 if (
-1 1732 styleObject[prop] &&
-1 1733 ((values[i].indexOf("!") === 0 &&
-1 1734 [values[i].slice(1), "inherit", "initial", "unset"].indexOf(
-1 1735 styleObject[prop]
-1 1736 ) === -1) ||
-1 1737 styleObject[prop].indexOf(values[i]) !== -1)
-1 1738 ) {
-1 1739 return true;
-1 1740 }
-1 1741 }
-1 1742 }
-1 1743 if (
-1 1744 !cssObj &&
-1 1745 node.nodeName &&
-1 1746 blockElements.indexOf(node.nodeName.toLowerCase()) !== -1
-1 1747 ) {
-1 1748 return true;
-1 1749 }
-1 1750 return false;
-1 1751 };
-1 1752
-1 1753 // CSS Block Styles indexed from:
-1 1754 // https://developer.mozilla.org/en-US/docs/Web/Guide/CSS/Block_formatting_context
-1 1755 var blockStyles = {
-1 1756 display: ["block", "grid", "table", "flow-root", "flex"],
-1 1757 position: ["absolute", "fixed"],
-1 1758 float: ["left", "right", "inline"],
-1 1759 clear: ["left", "right", "both", "inline"],
-1 1760 overflow: ["hidden", "scroll", "auto"],
-1 1761 "column-count": ["!auto"],
-1 1762 "column-width": ["!auto"],
-1 1763 "column-span": ["all"],
-1 1764 contain: ["layout", "content", "strict"]
-1 1765 };
-1 1766
-1 1767 // HTML5 Block Elements indexed from:
-1 1768 // https://github.com/webmodules/block-elements
-1 1769 // Note: 'br' was added to this array because it impacts visual display and should thus add a space .
-1 1770 // Reference issue: https://github.com/w3c/accname/issues/4
-1 1771 // Note: Added in 1.13, td, th, tr, and legend
-1 1772 var blockElements = [
-1 1773 "address",
-1 1774 "article",
-1 1775 "aside",
-1 1776 "blockquote",
-1 1777 "br",
-1 1778 "canvas",
-1 1779 "dd",
-1 1780 "div",
-1 1781 "dl",
-1 1782 "dt",
-1 1783 "fieldset",
-1 1784 "figcaption",
-1 1785 "figure",
-1 1786 "footer",
-1 1787 "form",
1493 1788 "h1",
1494 1789 "h2",
1495 1790 "h3",
1496 1791 "h4",
1497 1792 "h5",
1498 1793 "h6",
1499 -1 "menuitem",
1500 -1 "option",
1501 -1 "td",
1502 -1 "th"
1503 -1 ]
1504 -1 };
1505 -1 // Never include name from content when current node matches list2
1506 -1 var list2 = {
1507 -1 roles: [
1508 -1 "application",
1509 -1 "alert",
1510 -1 "log",
1511 -1 "marquee",
1512 -1 "timer",
1513 -1 "alertdialog",
1514 -1 "dialog",
1515 -1 "banner",
1516 -1 "complementary",
1517 -1 "form",
1518 -1 "main",
1519 -1 "navigation",
1520 -1 "region",
1521 -1 "search",
1522 -1 "article",
1523 -1 "document",
1524 -1 "feed",
1525 -1 "figure",
1526 -1 "img",
1527 -1 "math",
1528 -1 "toolbar",
1529 -1 "menu",
1530 -1 "menubar",
1531 -1 "grid",
1532 -1 "listbox",
1533 -1 "radiogroup",
1534 -1 "textbox",
1535 -1 "searchbox",
1536 -1 "spinbutton",
1537 -1 "scrollbar",
1538 -1 "slider",
1539 -1 "tablist",
1540 -1 "tabpanel",
1541 -1 "tree",
1542 -1 "treegrid",
1543 -1 "separator"
1544 -1 ],
1545 -1 tags: [
1546 -1 "article",
1547 -1 "aside",
1548 -1 "body",
1549 -1 "select",
1550 -1 "datalist",
1551 -1 "optgroup",
1552 -1 "dialog",
1553 -1 "figure",
1554 -1 "footer",
1555 -1 "form",
1556 1794 "header",
-1 1795 "hgroup",
1557 1796 "hr",
1558 -1 "img",
1559 -1 "textarea",
1560 -1 "input",
-1 1797 "legend",
-1 1798 "li",
1561 1799 "main",
1562 -1 "math",
1563 -1 "menu",
1564 1800 "nav",
1565 -1 "section"
1566 -1 ]
1567 -1 };
1568 -1 // As an override of list2, conditionally include name from content if current node is focusable, or if the current node matches list3 while the referenced parent node matches list1.
1569 -1 var list3 = {
1570 -1 roles: [
1571 -1 "term",
1572 -1 "definition",
1573 -1 "directory",
1574 -1 "list",
1575 -1 "group",
1576 -1 "note",
1577 -1 "status",
1578 -1 "table",
1579 -1 "rowgroup",
1580 -1 "row",
1581 -1 "contentinfo"
1582 -1 ],
1583 -1 tags: [
1584 -1 "dl",
1585 -1 "ul",
-1 1801 "noscript",
1586 1802 "ol",
1587 -1 "dd",
1588 -1 "details",
1589 1803 "output",
-1 1804 "p",
-1 1805 "pre",
-1 1806 "section",
1590 1807 "table",
1591 -1 "thead",
1592 -1 "tbody",
-1 1808 "td",
1593 1809 "tfoot",
1594 -1 "tr"
1595 -1 ]
1596 -1 };
1597 -1
1598 -1 var nativeFormFields = ["button", "input", "select", "textarea"];
1599 -1 var rangeWidgetRoles = ["scrollbar", "slider", "spinbutton"];
1600 -1 var editWidgetRoles = ["searchbox", "textbox"];
1601 -1 var selectWidgetRoles = ["grid", "listbox", "tablist", "tree", "treegrid"];
1602 -1 var otherWidgetRoles = [
1603 -1 "button",
1604 -1 "checkbox",
1605 -1 "link",
1606 -1 "switch",
1607 -1 "option",
1608 -1 "menu",
1609 -1 "menubar",
1610 -1 "menuitem",
1611 -1 "menuitemcheckbox",
1612 -1 "menuitemradio",
1613 -1 "radio",
1614 -1 "tab",
1615 -1 "treeitem",
1616 -1 "gridcell"
1617 -1 ];
1618 -1 var presentationRoles = ["presentation", "none"];
1619 -1
1620 -1 var hasGlobalAttr = function(node) {
1621 -1 var globalPropsAndStates = [
1622 -1 "busy",
1623 -1 "controls",
1624 -1 "current",
1625 -1 "describedby",
1626 -1 "details",
1627 -1 "disabled",
1628 -1 "dropeffect",
1629 -1 "errormessage",
1630 -1 "flowto",
1631 -1 "grabbed",
1632 -1 "haspopup",
1633 -1 "invalid",
1634 -1 "keyshortcuts",
1635 -1 "live",
1636 -1 "owns",
1637 -1 "roledescription"
-1 1810 "th",
-1 1811 "tr",
-1 1812 "ul",
-1 1813 "video"
1638 1814 ];
1639 -1 for (var i = 0; i < globalPropsAndStates.length; i++) {
1640 -1 var a = trim(node.getAttribute("aria-" + globalPropsAndStates[i]));
1641 -1 if (a) {
1642 -1 return true;
1643 -1 }
1644 -1 }
1645 -1 return false;
1646 -1 };
1647 -1
1648 -1 var isHidden = function(node, refNode) {
1649 -1 var hidden = function(node) {
1650 -1 if (!node || node.nodeType !== 1 || node === refNode) {
1651 -1 return false;
1652 -1 }
1653 -1 if (node.getAttribute("aria-hidden") === "true") {
1654 -1 return true;
1655 -1 }
1656 -1 if (node.getAttribute("hidden")) {
1657 -1 return true;
1658 -1 }
1659 -1 var style = getStyleObject(node);
1660 -1 if (style["display"] === "none" || style["visibility"] === "hidden") {
1661 -1 return true;
1662 -1 }
1663 -1 return false;
1664 -1 };
1665 -1 return hidden(node);
1666 -1 };
1667 -1
1668 -1 var isParentHidden = function(node, refNode, skipOwned, skipCurrent) {
1669 -1 while (node && node !== refNode) {
1670 -1 if (!skipCurrent && node.nodeType === 1 && isHidden(node, refNode)) {
1671 -1 return true;
1672 -1 } else skipCurrent = false;
1673 -1 node = node.parentNode;
1674 -1 }
1675 -1 return false;
1676 -1 };
1677 -1
1678 -1 var getStyleObject = function(node) {
1679 -1 var style = {};
1680 -1 if (document.defaultView && document.defaultView.getComputedStyle) {
1681 -1 style = document.defaultView.getComputedStyle(node, "");
1682 -1 } else if (node.currentStyle) {
1683 -1 style = node.currentStyle;
1684 -1 }
1685 -1 return style;
1686 -1 };
1687 -1
1688 -1 var cleanCSSText = function(node, text) {
1689 -1 var s = text;
1690 -1 if (s.indexOf("attr(") !== -1) {
1691 -1 var m = s.match(/attr\((.|\n|\r\n)*?\)/g);
1692 -1 for (var i = 0; i < m.length; i++) {
1693 -1 var b = m[i].slice(5, -1);
1694 -1 b = node.getAttribute(b) || "";
1695 -1 s = s.replace(m[i], b);
1696 -1 }
1697 -1 }
1698 -1 return s || text;
1699 -1 };
1700 1815
1701 -1 var isBlockLevelElement = function(node, cssObj) {
1702 -1 var styleObject = cssObj || getStyleObject(node);
1703 -1 for (var prop in blockStyles) {
1704 -1 var values = blockStyles[prop];
1705 -1 for (var i = 0; i < values.length; i++) {
1706 -1 if (
1707 -1 styleObject[prop] &&
1708 -1 ((values[i].indexOf("!") === 0 &&
1709 -1 [values[i].slice(1), "inherit", "initial", "unset"].indexOf(
1710 -1 styleObject[prop]
1711 -1 ) === -1) ||
1712 -1 styleObject[prop].indexOf(values[i]) !== -1)
1713 -1 ) {
1714 -1 return true;
1715 -1 }
1716 -1 }
1717 -1 }
1718 -1 if (
1719 -1 !cssObj &&
1720 -1 node.nodeName &&
1721 -1 blockElements.indexOf(node.nodeName.toLowerCase()) !== -1
-1 1816 var getObjectValue = function(
-1 1817 role,
-1 1818 node,
-1 1819 isRange,
-1 1820 isEdit,
-1 1821 isSelect,
-1 1822 isNative
1722 1823 ) {
1723 -1 return true;
1724 -1 }
1725 -1 return false;
1726 -1 };
1727 -1
1728 -1 // CSS Block Styles indexed from:
1729 -1 // https://developer.mozilla.org/en-US/docs/Web/Guide/CSS/Block_formatting_context
1730 -1 var blockStyles = {
1731 -1 display: ["block", "grid", "table", "flow-root", "flex"],
1732 -1 position: ["absolute", "fixed"],
1733 -1 float: ["left", "right", "inline"],
1734 -1 clear: ["left", "right", "both", "inline"],
1735 -1 overflow: ["hidden", "scroll", "auto"],
1736 -1 "column-count": ["!auto"],
1737 -1 "column-width": ["!auto"],
1738 -1 "column-span": ["all"],
1739 -1 contain: ["layout", "content", "strict"]
1740 -1 };
1741 -1
1742 -1 // HTML5 Block Elements indexed from:
1743 -1 // https://github.com/webmodules/block-elements
1744 -1 // Note: 'br' was added to this array because it impacts visual display and should thus add a space .
1745 -1 // Reference issue: https://github.com/w3c/accname/issues/4
1746 -1 // Note: Added in 1.13, td, th, tr, and legend
1747 -1 var blockElements = [
1748 -1 "address",
1749 -1 "article",
1750 -1 "aside",
1751 -1 "blockquote",
1752 -1 "br",
1753 -1 "canvas",
1754 -1 "dd",
1755 -1 "div",
1756 -1 "dl",
1757 -1 "dt",
1758 -1 "fieldset",
1759 -1 "figcaption",
1760 -1 "figure",
1761 -1 "footer",
1762 -1 "form",
1763 -1 "h1",
1764 -1 "h2",
1765 -1 "h3",
1766 -1 "h4",
1767 -1 "h5",
1768 -1 "h6",
1769 -1 "header",
1770 -1 "hgroup",
1771 -1 "hr",
1772 -1 "legend",
1773 -1 "li",
1774 -1 "main",
1775 -1 "nav",
1776 -1 "noscript",
1777 -1 "ol",
1778 -1 "output",
1779 -1 "p",
1780 -1 "pre",
1781 -1 "section",
1782 -1 "table",
1783 -1 "td",
1784 -1 "tfoot",
1785 -1 "th",
1786 -1 "tr",
1787 -1 "ul",
1788 -1 "video"
1789 -1 ];
1790 -1
1791 -1 var getObjectValue = function(
1792 -1 role,
1793 -1 node,
1794 -1 isRange,
1795 -1 isEdit,
1796 -1 isSelect,
1797 -1 isNative
1798 -1 ) {
1799 -1 var val = "";
1800 -1 var bypass = false;
1801 -1
1802 -1 if (isRange && !isNative) {
1803 -1 val =
1804 -1 node.getAttribute("aria-valuetext") ||
1805 -1 node.getAttribute("aria-valuenow") ||
1806 -1 "";
1807 -1 } else if (isEdit && !isNative) {
1808 -1 val = getText(node) || "";
1809 -1 } else if (isSelect && !isNative) {
1810 -1 var childRoles = [];
1811 -1 if (role === "grid" || role === "treegrid") {
1812 -1 childRoles = ["gridcell", "rowheader", "columnheader"];
1813 -1 } else if (role === "listbox") {
1814 -1 childRoles = ["option"];
1815 -1 } else if (role === "tablist") {
1816 -1 childRoles = ["tab"];
1817 -1 } else if (role === "tree") {
1818 -1 childRoles = ["treeitem"];
1819 -1 }
1820 -1 val = joinSelectedParts(
1821 -1 node,
1822 -1 node.querySelectorAll('*[aria-selected="true"]'),
1823 -1 false,
1824 -1 childRoles
1825 -1 );
1826 -1 bypass = true;
1827 -1 }
1828 -1 val = trim(val);
1829 -1 if (!val && (isRange || isEdit) && node.value) {
1830 -1 val = node.value;
1831 -1 }
1832 -1 if (!bypass && !val && isNative) {
1833 -1 if (isSelect) {
-1 1824 var val = "";
-1 1825 var bypass = false;
-1 1826
-1 1827 if (isRange && !isNative) {
-1 1828 val =
-1 1829 node.getAttribute("aria-valuetext") ||
-1 1830 node.getAttribute("aria-valuenow") ||
-1 1831 "";
-1 1832 } else if (isEdit && !isNative) {
-1 1833 val = getText(node) || "";
-1 1834 } else if (isSelect && !isNative) {
-1 1835 var childRoles = [];
-1 1836 if (role === "grid" || role === "treegrid") {
-1 1837 childRoles = ["gridcell", "rowheader", "columnheader"];
-1 1838 } else if (role === "listbox") {
-1 1839 childRoles = ["option"];
-1 1840 } else if (role === "tablist") {
-1 1841 childRoles = ["tab"];
-1 1842 } else if (role === "tree") {
-1 1843 childRoles = ["treeitem"];
-1 1844 }
1834 1845 val = joinSelectedParts(
1835 1846 node,
1836 -1 node.querySelectorAll("option[selected]"),
1837 -1 true
-1 1847 node.querySelectorAll('*[aria-selected="true"]'),
-1 1848 false,
-1 1849 childRoles
1838 1850 );
1839 -1 } else {
-1 1851 bypass = true;
-1 1852 }
-1 1853 val = trim(val);
-1 1854 if (!val && (isRange || isEdit) && node.value) {
1840 1855 val = node.value;
1841 1856 }
1842 -1 }
-1 1857 if (!bypass && !val && isNative) {
-1 1858 if (isSelect) {
-1 1859 val = joinSelectedParts(
-1 1860 node,
-1 1861 node.querySelectorAll("option[selected]"),
-1 1862 true
-1 1863 );
-1 1864 } else {
-1 1865 val = node.value;
-1 1866 }
-1 1867 }
1843 1868
1844 -1 return val;
1845 -1 };
-1 1869 return val;
-1 1870 };
1846 1871
1847 -1 var addSpacing = function(s) {
1848 -1 return trim(s).length ? " " + s + " " : " ";
1849 -1 };
-1 1872 var addSpacing = function(s) {
-1 1873 return trim(s).length ? " " + s + " " : " ";
-1 1874 };
1850 1875
1851 -1 var joinSelectedParts = function(node, nOA, isNative, childRoles) {
1852 -1 if (!nOA || !nOA.length) {
1853 -1 return "";
1854 -1 }
1855 -1 var parts = [];
1856 -1 for (var i = 0; i < nOA.length; i++) {
1857 -1 var role = getRole(nOA[i]);
1858 -1 var isValidChildRole = !childRoles || childRoles.indexOf(role) !== -1;
1859 -1 if (isValidChildRole) {
1860 -1 parts.push(
1861 -1 isNative
1862 -1 ? getText(nOA[i])
1863 -1 : walk(nOA[i], true, false, [], false, { top: nOA[i] }).name
1864 -1 );
-1 1876 var joinSelectedParts = function(node, nOA, isNative, childRoles) {
-1 1877 if (!nOA || !nOA.length) {
-1 1878 return "";
1865 1879 }
1866 -1 }
1867 -1 return parts.join(" ");
1868 -1 };
-1 1880 var parts = [];
-1 1881 for (var i = 0; i < nOA.length; i++) {
-1 1882 var role = getRole(nOA[i]);
-1 1883 var isValidChildRole = !childRoles || childRoles.indexOf(role) !== -1;
-1 1884 if (isValidChildRole) {
-1 1885 parts.push(
-1 1886 isNative
-1 1887 ? getText(nOA[i])
-1 1888 : walk(nOA[i], true, false, [], false, { top: nOA[i] }).name
-1 1889 );
-1 1890 }
-1 1891 }
-1 1892 return parts.join(" ");
-1 1893 };
1869 1894
1870 -1 var getPseudoElStyleObj = function(node, position) {
1871 -1 var styleObj = {};
1872 -1 for (var prop in blockStyles) {
1873 -1 styleObj[prop] = document.defaultView
-1 1895 var getPseudoElStyleObj = function(node, position) {
-1 1896 var styleObj = {};
-1 1897 for (var prop in blockStyles) {
-1 1898 styleObj[prop] = document.defaultView
-1 1899 .getComputedStyle(node, position)
-1 1900 .getPropertyValue(prop);
-1 1901 }
-1 1902 styleObj["content"] = document.defaultView
1874 1903 .getComputedStyle(node, position)
1875 -1 .getPropertyValue(prop);
1876 -1 }
1877 -1 styleObj["content"] = document.defaultView
1878 -1 .getComputedStyle(node, position)
1879 -1 .getPropertyValue("content")
1880 -1 .replace(/^"|\\|"$/g, "");
1881 -1 return styleObj;
1882 -1 };
-1 1904 .getPropertyValue("content")
-1 1905 .replace(/^"|\\|"$/g, "");
-1 1906 return styleObj;
-1 1907 };
1883 1908
1884 -1 var getText = function(node, position) {
1885 -1 if (!position && node.nodeType === 1) {
1886 -1 return node.innerText || node.textContent || "";
1887 -1 }
1888 -1 var styles = getPseudoElStyleObj(node, position);
1889 -1 var text = styles["content"];
1890 -1 if (!text || text === "none") {
1891 -1 return "";
1892 -1 }
1893 -1 if (isBlockLevelElement({}, styles)) {
1894 -1 if (position === ":before") {
1895 -1 text += " ";
1896 -1 } else if (position === ":after") {
1897 -1 text = " " + text;
-1 1909 var getText = function(node, position) {
-1 1910 if (!position && node.nodeType === 1) {
-1 1911 return node.innerText || node.textContent || "";
1898 1912 }
1899 -1 }
1900 -1 return text;
1901 -1 };
1902 -1
1903 -1 var getCSSText = function(node, refNode) {
1904 -1 if (
1905 -1 (node && node.nodeType !== 1) ||
1906 -1 node === refNode ||
1907 -1 ["input", "select", "textarea", "img", "iframe"].indexOf(
1908 -1 node.nodeName.toLowerCase()
1909 -1 ) !== -1
1910 -1 ) {
1911 -1 return { before: "", after: "" };
1912 -1 }
1913 -1 if (document.defaultView && document.defaultView.getComputedStyle) {
1914 -1 return {
1915 -1 before: cleanCSSText(node, getText(node, ":before")),
1916 -1 after: cleanCSSText(node, getText(node, ":after"))
1917 -1 };
1918 -1 } else {
1919 -1 return { before: "", after: "" };
1920 -1 }
1921 -1 };
1922 -1
1923 -1 var getParent = function(node, nTag) {
1924 -1 while (node) {
1925 -1 node = node.parentNode;
1926 -1 if (node && node.nodeName && node.nodeName.toLowerCase() === nTag) {
1927 -1 return node;
-1 1913 var styles = getPseudoElStyleObj(node, position);
-1 1914 var text = styles["content"];
-1 1915 if (!text || text === "none") {
-1 1916 return "";
1928 1917 }
1929 -1 }
1930 -1 return {};
1931 -1 };
-1 1918 if (isBlockLevelElement({}, styles)) {
-1 1919 if (position === ":before") {
-1 1920 text += " ";
-1 1921 } else if (position === ":after") {
-1 1922 text = " " + text;
-1 1923 }
-1 1924 }
-1 1925 return text;
-1 1926 };
1932 1927
1933 -1 var hasParentLabelOrHidden = function(node, refNode, ownedBy, ignoreHidden) {
1934 -1 var trackNodes = [];
1935 -1 while (node && node !== refNode) {
-1 1928 var getCSSText = function(node, refNode) {
1936 1929 if (
1937 -1 node.id &&
1938 -1 ownedBy &&
1939 -1 ownedBy[node.id] &&
1940 -1 ownedBy[node.id].node &&
1941 -1 trackNodes.indexOf(node) === -1
-1 1930 (node && node.nodeType !== 1) ||
-1 1931 node === refNode ||
-1 1932 ["input", "select", "textarea", "img", "iframe"].indexOf(
-1 1933 node.nodeName.toLowerCase()
-1 1934 ) !== -1
1942 1935 ) {
1943 -1 trackNodes.push(node);
1944 -1 node = ownedBy[node.id].node;
-1 1936 return { before: "", after: "" };
-1 1937 }
-1 1938 if (document.defaultView && document.defaultView.getComputedStyle) {
-1 1939 return {
-1 1940 before: cleanCSSText(node, getText(node, ":before")),
-1 1941 after: cleanCSSText(node, getText(node, ":after"))
-1 1942 };
1945 1943 } else {
-1 1944 return { before: "", after: "" };
-1 1945 }
-1 1946 };
-1 1947
-1 1948 var getParent = function(node, nTag) {
-1 1949 while (node) {
1946 1950 node = node.parentNode;
-1 1951 if (node && node.nodeName && node.nodeName.toLowerCase() === nTag) {
-1 1952 return node;
-1 1953 }
1947 1954 }
1948 -1 if (node && node.getAttribute) {
-1 1955 return {};
-1 1956 };
-1 1957
-1 1958 var hasParentLabelOrHidden = function(
-1 1959 node,
-1 1960 refNode,
-1 1961 ownedBy,
-1 1962 ignoreHidden
-1 1963 ) {
-1 1964 var trackNodes = [];
-1 1965 while (node && node !== refNode) {
1949 1966 if (
1950 -1 trim(node.getAttribute("aria-label")) ||
1951 -1 (!ignoreHidden && isHidden(node, refNode))
-1 1967 node.id &&
-1 1968 ownedBy &&
-1 1969 ownedBy[node.id] &&
-1 1970 ownedBy[node.id].node &&
-1 1971 trackNodes.indexOf(node) === -1
1952 1972 ) {
1953 -1 return true;
-1 1973 trackNodes.push(node);
-1 1974 node = ownedBy[node.id].node;
-1 1975 } else {
-1 1976 node = node.parentNode;
-1 1977 }
-1 1978 if (node && node.getAttribute) {
-1 1979 if (
-1 1980 trim(node.getAttribute("aria-label")) ||
-1 1981 (!ignoreHidden && isHidden(node, refNode))
-1 1982 ) {
-1 1983 return true;
-1 1984 }
1954 1985 }
1955 1986 }
1956 -1 }
1957 -1 return false;
1958 -1 };
-1 1987 return false;
-1 1988 };
1959 1989
1960 -1 var trim = function(str) {
1961 -1 if (typeof str !== "string") {
1962 -1 return "";
1963 -1 }
1964 -1 return str.replace(/^\s+|\s+$/g, "");
1965 -1 };
-1 1990 var trim = function(str) {
-1 1991 if (typeof str !== "string") {
-1 1992 return "";
-1 1993 }
-1 1994 return str.replace(/^\s+|\s+$/g, "");
-1 1995 };
1966 1996
1967 -1 if (isParentHidden(node, document.body, true)) {
1968 -1 return props;
1969 -1 }
-1 1997 if (isParentHidden(node, document.body, true)) {
-1 1998 return props;
-1 1999 }
1970 2000
1971 -1 // Compute accessible Name and Description properties value for node
1972 -1 var accProps = walk(node, false, false, [], false, { top: node });
-1 2001 // Compute accessible Name and Description properties value for node
-1 2002 var accProps = walk(node, false, false, [], false, { top: node });
1973 2003
1974 -1 var accName = trim(accProps.name.replace(/\s+/g, " "));
1975 -1 var accDesc = trim(accProps.title.replace(/\s+/g, " "));
-1 2004 var accName = trim(accProps.name.replace(/\s+/g, " "));
-1 2005 var accDesc = trim(accProps.title.replace(/\s+/g, " "));
1976 2006
1977 -1 if (accName === accDesc) {
1978 -1 // If both Name and Description properties match, then clear the Description property value.
1979 -1 accDesc = "";
1980 -1 }
-1 2007 if (accName === accDesc) {
-1 2008 // If both Name and Description properties match, then clear the Description property value.
-1 2009 accDesc = "";
-1 2010 }
1981 2011
1982 -1 props.name = accName;
1983 -1 props.desc = accDesc;
-1 2012 props.name = accName;
-1 2013 props.desc = accDesc;
1984 2014
1985 -1 // Clear track variables
1986 -1 nodes = [];
1987 -1 owns = [];
-1 2015 // Clear track variables
-1 2016 nodes = [];
-1 2017 owns = [];
-1 2018 } catch (e) {
-1 2019 props.error = e;
-1 2020 }
1988 2021
1989 2022 if (fnc && typeof fnc === "function") {
1990 -1 return fnc.apply(node, [node, props]);
-1 2023 return fnc.apply(node, [props, node]);
1991 2024 } else {
1992 2025 return props;
1993 2026 }
@@ -1995,17 +2028,28 @@ var calcNames = function(node, fnc, preventVisualARIASelfCSSRef) {
1995 2028
1996 2029 // Customize returned string for testable statements
1997 2030
1998 -1 var getNames = function(node) {
-1 2031 window.getAccNameMsg = getNames = function(node) {
1999 2032 var props = calcNames(node);
2000 -1 return (
2001 -1 'accName: "' +
2002 -1 props.name +
2003 -1 '"\n\naccDesc: "' +
2004 -1 props.desc +
2005 -1 '"\n\n(Running AccName Computation Prototype version: ' +
2006 -1 currentVersion +
2007 -1 ")"
2008 -1 );
-1 2033 if (props.error) {
-1 2034 return (
-1 2035 props.error +
-1 2036 "\n\n" +
-1 2037 "An error has been thrown in AccName Prototype version " +
-1 2038 window.getAccNameVersion +
-1 2039 ". Please copy this error message and the HTML markup that caused it, and submit both as a new GitHub issue at\n" +
-1 2040 "https://github.com/whatsock/w3c-alternative-text-computation"
-1 2041 );
-1 2042 } else {
-1 2043 return (
-1 2044 'accName: "' +
-1 2045 props.name +
-1 2046 '"\n\naccDesc: "' +
-1 2047 props.desc +
-1 2048 '"\n\n(Running AccName Computation Prototype version: ' +
-1 2049 window.getAccNameVersion +
-1 2050 ")"
-1 2051 );
-1 2052 }
2009 2053 };
2010 2054
2011 2055 if (typeof module === "object" && module.exports) {