axe-core 4.4.2-canary.cd5f8a6 → 4.4.2-canary.fd85f39

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/axe.d.ts CHANGED
@@ -233,6 +233,7 @@ declare namespace axe {
233
233
  none?: string[];
234
234
  tags?: string[];
235
235
  matches?: string;
236
+ reviewOnFail?: boolean;
236
237
  }
237
238
  interface AxePlugin {
238
239
  id: string;
package/axe.js CHANGED
@@ -1,4 +1,4 @@
1
- /*! axe v4.4.2-canary.cd5f8a6
1
+ /*! axe v4.4.2-canary.fd85f39
2
2
  * Copyright (c) 2022 Deque Systems, Inc.
3
3
  *
4
4
  * Your use of this Source Code Form is subject to the terms of the Mozilla Public
@@ -22,7 +22,7 @@
22
22
  }, _typeof(obj);
23
23
  }
24
24
  var axe = axe || {};
25
- axe.version = '4.4.2-canary.cd5f8a6';
25
+ axe.version = '4.4.2-canary.fd85f39';
26
26
  if (typeof define === 'function' && define.amd) {
27
27
  define('axe-core', [], function() {
28
28
  return axe;
@@ -7058,6 +7058,9 @@
7058
7058
  hasContentVirtual: function hasContentVirtual() {
7059
7059
  return has_content_virtual_default;
7060
7060
  },
7061
+ hasLangText: function hasLangText() {
7062
+ return _hasLangText;
7063
+ },
7061
7064
  idrefs: function idrefs() {
7062
7065
  return idrefs_default;
7063
7066
  },
@@ -7814,31 +7817,32 @@
7814
7817
  });
7815
7818
  }
7816
7819
  var get_text_element_stack_default = getTextElementStack;
7817
- var visualRoles = [ 'checkbox', 'img', 'radio', 'range', 'slider', 'spinbutton', 'textbox' ];
7818
- function isVisualContent(element) {
7819
- var role = element.getAttribute('role');
7820
+ var visualRoles = [ 'checkbox', 'img', 'meter', 'progressbar', 'scrollbar', 'radio', 'slider', 'spinbutton', 'textbox' ];
7821
+ function isVisualContent(el) {
7822
+ var vNode = el instanceof abstract_virtual_node_default ? el : get_node_from_tree_default(el);
7823
+ var role = axe.commons.aria.getExplicitRole(vNode);
7820
7824
  if (role) {
7821
7825
  return visualRoles.indexOf(role) !== -1;
7822
7826
  }
7823
- switch (element.nodeName.toUpperCase()) {
7824
- case 'IMG':
7825
- case 'IFRAME':
7826
- case 'OBJECT':
7827
- case 'VIDEO':
7828
- case 'AUDIO':
7829
- case 'CANVAS':
7830
- case 'SVG':
7831
- case 'MATH':
7832
- case 'BUTTON':
7833
- case 'SELECT':
7834
- case 'TEXTAREA':
7835
- case 'KEYGEN':
7836
- case 'PROGRESS':
7837
- case 'METER':
7827
+ switch (vNode.props.nodeName) {
7828
+ case 'img':
7829
+ case 'iframe':
7830
+ case 'object':
7831
+ case 'video':
7832
+ case 'audio':
7833
+ case 'canvas':
7834
+ case 'svg':
7835
+ case 'math':
7836
+ case 'button':
7837
+ case 'select':
7838
+ case 'textarea':
7839
+ case 'keygen':
7840
+ case 'progress':
7841
+ case 'meter':
7838
7842
  return true;
7839
7843
 
7840
- case 'INPUT':
7841
- return element.type !== 'hidden';
7844
+ case 'input':
7845
+ return vNode.props.type !== 'hidden';
7842
7846
 
7843
7847
  default:
7844
7848
  return false;
@@ -7901,14 +7905,15 @@
7901
7905
  return null;
7902
7906
  }
7903
7907
  var label_virtual_default = labelVirtual;
7904
- var hiddenTextElms = [ 'HEAD', 'TITLE', 'TEMPLATE', 'SCRIPT', 'STYLE', 'IFRAME', 'OBJECT', 'VIDEO', 'AUDIO', 'NOSCRIPT' ];
7908
+ var hiddenTextElms = [ 'head', 'title', 'template', 'script', 'style', 'iframe', 'object', 'video', 'audio', 'noscript' ];
7905
7909
  function hasChildTextNodes(elm) {
7906
- if (!hiddenTextElms.includes(elm.actualNode.nodeName.toUpperCase())) {
7907
- return elm.children.some(function(_ref10) {
7908
- var actualNode = _ref10.actualNode;
7909
- return actualNode.nodeType === 3 && actualNode.nodeValue.trim();
7910
- });
7910
+ if (hiddenTextElms.includes(elm.props.nodeName)) {
7911
+ return false;
7911
7912
  }
7913
+ return elm.children.some(function(_ref10) {
7914
+ var props = _ref10.props;
7915
+ return props.nodeType === 3 && props.nodeValue.trim();
7916
+ });
7912
7917
  }
7913
7918
  function hasContentVirtual(elm, noRecursion, ignoreAria) {
7914
7919
  return hasChildTextNodes(elm) || is_visual_content_default(elm.actualNode) || !ignoreAria && !!label_virtual_default(elm) || !noRecursion && elm.children.some(function(child) {
@@ -7921,6 +7926,17 @@
7921
7926
  return has_content_virtual_default(elm, noRecursion, ignoreAria);
7922
7927
  }
7923
7928
  var has_content_default = hasContent;
7929
+ function _hasLangText(virtualNode) {
7930
+ if (typeof virtualNode.children === 'undefined' || hasChildTextNodes(virtualNode)) {
7931
+ return true;
7932
+ }
7933
+ if (virtualNode.props.nodeType === 1 && is_visual_content_default(virtualNode)) {
7934
+ return !!axe.commons.text.accessibleTextVirtual(virtualNode);
7935
+ }
7936
+ return virtualNode.children.some(function(child) {
7937
+ return !child.attr('lang') && _hasLangText(child) && is_visible_default(child, true);
7938
+ });
7939
+ }
7924
7940
  function isHiddenWithCSS(el, descendentVisibilityValue) {
7925
7941
  var vNode = get_node_from_tree_default(el);
7926
7942
  if (!vNode) {
@@ -17980,11 +17996,14 @@
17980
17996
  invalid.push(langAttr + '="' + virtualNode.attr(langAttr) + '"');
17981
17997
  }
17982
17998
  });
17983
- if (invalid.length) {
17984
- this.data(invalid);
17985
- return true;
17999
+ if (!invalid.length) {
18000
+ return false;
17986
18001
  }
17987
- return false;
18002
+ if (virtualNode.props.nodeName !== 'html' && !_hasLangText(virtualNode)) {
18003
+ return false;
18004
+ }
18005
+ this.data(invalid);
18006
+ return true;
17988
18007
  }
17989
18008
  var valid_lang_evaluate_default = validLangEvaluate;
17990
18009
  function xmlLangMismatchEvaluate(node, options, vNode) {
@@ -19010,11 +19029,27 @@
19010
19029
  });
19011
19030
  }
19012
19031
  var internal_link_present_evaluate_default = internalLinkPresentEvaluate;
19032
+ var separatorRegex = /[;,\s]/;
19033
+ var validRedirectNumRegex = /^[0-9.]+$/;
19013
19034
  function metaRefreshEvaluate(node, options, virtualNode) {
19014
- var content = virtualNode.attr('content') || '', parsedParams = content.split(/[;,]/);
19015
- return content === '' || parsedParams[0] === '0';
19035
+ var _ref83 = options || {}, minDelay = _ref83.minDelay, maxDelay = _ref83.maxDelay;
19036
+ var content = (virtualNode.attr('content') || '').trim();
19037
+ var _content$split = content.split(separatorRegex), _content$split2 = _slicedToArray(_content$split, 1), redirectStr = _content$split2[0];
19038
+ if (!redirectStr.match(validRedirectNumRegex)) {
19039
+ return true;
19040
+ }
19041
+ var redirectDelay = parseFloat(redirectStr);
19042
+ this.data({
19043
+ redirectDelay: redirectDelay
19044
+ });
19045
+ if (typeof minDelay === 'number' && redirectDelay <= options.minDelay) {
19046
+ return true;
19047
+ }
19048
+ if (typeof maxDelay === 'number' && redirectDelay > options.maxDelay) {
19049
+ return true;
19050
+ }
19051
+ return false;
19016
19052
  }
19017
- var meta_refresh_evaluate_default = metaRefreshEvaluate;
19018
19053
  function normalizeFontWeight(weight) {
19019
19054
  switch (weight) {
19020
19055
  case 'lighter':
@@ -19164,8 +19199,8 @@
19164
19199
  } else if (node !== document.body && has_content_default(node, true)) {
19165
19200
  return [ virtualNode ];
19166
19201
  } else {
19167
- return virtualNode.children.filter(function(_ref83) {
19168
- var actualNode = _ref83.actualNode;
19202
+ return virtualNode.children.filter(function(_ref84) {
19203
+ var actualNode = _ref84.actualNode;
19169
19204
  return actualNode.nodeType === 1;
19170
19205
  }).map(function(vNode) {
19171
19206
  return findRegionlessElms(vNode, options);
@@ -19343,8 +19378,8 @@
19343
19378
  if (!virtualNode.children) {
19344
19379
  return void 0;
19345
19380
  }
19346
- var titleNode = virtualNode.children.find(function(_ref84) {
19347
- var props = _ref84.props;
19381
+ var titleNode = virtualNode.children.find(function(_ref85) {
19382
+ var props = _ref85.props;
19348
19383
  return props.nodeName === 'title';
19349
19384
  });
19350
19385
  if (!titleNode) {
@@ -19919,7 +19954,7 @@
19919
19954
  if (!role || [ 'none', 'presentation' ].includes(role)) {
19920
19955
  return true;
19921
19956
  }
19922
- var _ref85 = aria_roles_default[role] || {}, accessibleNameRequired = _ref85.accessibleNameRequired;
19957
+ var _ref86 = aria_roles_default[role] || {}, accessibleNameRequired = _ref86.accessibleNameRequired;
19923
19958
  if (accessibleNameRequired || _isFocusable(virtualNode)) {
19924
19959
  return true;
19925
19960
  }
@@ -20116,7 +20151,7 @@
20116
20151
  'link-in-text-block-matches': link_in_text_block_matches_default,
20117
20152
  'listitem-evaluate': listitemEvaluate,
20118
20153
  'matches-definition-evaluate': matches_definition_evaluate_default,
20119
- 'meta-refresh-evaluate': meta_refresh_evaluate_default,
20154
+ 'meta-refresh-evaluate': metaRefreshEvaluate,
20120
20155
  'meta-viewport-scale-evaluate': meta_viewport_scale_evaluate_default,
20121
20156
  'multiple-label-evaluate': multiple_label_evaluate_default,
20122
20157
  'nested-interactive-matches': nested_interactive_matches_default,
@@ -21171,8 +21206,8 @@
21171
21206
  });
21172
21207
  };
21173
21208
  }
21174
- function getHelpUrl(_ref86, ruleId, version) {
21175
- var brand = _ref86.brand, application = _ref86.application, lang = _ref86.lang;
21209
+ function getHelpUrl(_ref87, ruleId, version) {
21210
+ var brand = _ref87.brand, application = _ref87.application, lang = _ref87.lang;
21176
21211
  return constants_default.helpUrlBase + brand + '/' + (version || axe.version.substring(0, axe.version.lastIndexOf('.'))) + '/' + ruleId + '?application=' + encodeURIComponent(application) + (lang && lang !== 'en' ? '&lang=' + encodeURIComponent(lang) : '');
21177
21212
  }
21178
21213
  var audit_default = Audit;
@@ -21587,9 +21622,9 @@
21587
21622
  });
21588
21623
  }
21589
21624
  var run_virtual_rule_default = runVirtualRule;
21590
- function normalizeRunParams(_ref87) {
21591
- var _ref89, _options$reporter, _axe$_audit;
21592
- var _ref88 = _slicedToArray(_ref87, 3), context5 = _ref88[0], options = _ref88[1], callback = _ref88[2];
21625
+ function normalizeRunParams(_ref88) {
21626
+ var _ref90, _options$reporter, _axe$_audit;
21627
+ var _ref89 = _slicedToArray(_ref88, 3), context5 = _ref89[0], options = _ref89[1], callback = _ref89[2];
21593
21628
  var typeErr = new TypeError('axe.run arguments are invalid');
21594
21629
  if (!isContext(context5)) {
21595
21630
  if (callback !== void 0) {
@@ -21610,7 +21645,7 @@
21610
21645
  throw typeErr;
21611
21646
  }
21612
21647
  options = clone_default(options);
21613
- options.reporter = (_ref89 = (_options$reporter = options.reporter) !== null && _options$reporter !== void 0 ? _options$reporter : (_axe$_audit = axe._audit) === null || _axe$_audit === void 0 ? void 0 : _axe$_audit.reporter) !== null && _ref89 !== void 0 ? _ref89 : 'v1';
21648
+ options.reporter = (_ref90 = (_options$reporter = options.reporter) !== null && _options$reporter !== void 0 ? _options$reporter : (_axe$_audit = axe._audit) === null || _axe$_audit === void 0 ? void 0 : _axe$_audit.reporter) !== null && _ref90 !== void 0 ? _ref90 : 'v1';
21614
21649
  return {
21615
21650
  context: context5,
21616
21651
  options: options,
@@ -21735,14 +21770,14 @@
21735
21770
  return new Promise(function(res, rej) {
21736
21771
  axe._audit.run(contextObj, options, res, rej);
21737
21772
  }).then(function(results) {
21738
- results = results.map(function(_ref90) {
21739
- var nodes = _ref90.nodes, result = _objectWithoutProperties(_ref90, _excluded8);
21773
+ results = results.map(function(_ref91) {
21774
+ var nodes = _ref91.nodes, result = _objectWithoutProperties(_ref91, _excluded8);
21740
21775
  return _extends({
21741
21776
  nodes: nodes.map(serializeNode)
21742
21777
  }, result);
21743
21778
  });
21744
- var frames = contextObj.frames.map(function(_ref91) {
21745
- var node = _ref91.node;
21779
+ var frames = contextObj.frames.map(function(_ref92) {
21780
+ var node = _ref92.node;
21746
21781
  return new dq_element_default(node, options).toJSON();
21747
21782
  });
21748
21783
  var environmentData;
@@ -21762,13 +21797,13 @@
21762
21797
  return Promise.reject(err2);
21763
21798
  });
21764
21799
  }
21765
- function serializeNode(_ref92) {
21766
- var node = _ref92.node, nodeResult = _objectWithoutProperties(_ref92, _excluded9);
21800
+ function serializeNode(_ref93) {
21801
+ var node = _ref93.node, nodeResult = _objectWithoutProperties(_ref93, _excluded9);
21767
21802
  nodeResult.node = node.toJSON();
21768
21803
  for (var _i32 = 0, _arr2 = [ 'any', 'all', 'none' ]; _i32 < _arr2.length; _i32++) {
21769
21804
  var type = _arr2[_i32];
21770
- nodeResult[type] = nodeResult[type].map(function(_ref93) {
21771
- var relatedNodes = _ref93.relatedNodes, checkResult = _objectWithoutProperties(_ref93, _excluded10);
21805
+ nodeResult[type] = nodeResult[type].map(function(_ref94) {
21806
+ var relatedNodes = _ref94.relatedNodes, checkResult = _objectWithoutProperties(_ref94, _excluded10);
21772
21807
  return _extends({}, checkResult, {
21773
21808
  relatedNodes: relatedNodes.map(function(node2) {
21774
21809
  return node2.toJSON();
@@ -21779,14 +21814,14 @@
21779
21814
  return nodeResult;
21780
21815
  }
21781
21816
  function finishRun(partialResults) {
21782
- var _ref95, _options$reporter2, _axe$_audit2;
21817
+ var _ref96, _options$reporter2, _axe$_audit2;
21783
21818
  var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
21784
21819
  options = clone_default(options);
21785
- var _ref94 = partialResults.find(function(r) {
21820
+ var _ref95 = partialResults.find(function(r) {
21786
21821
  return r.environmentData;
21787
- }) || {}, environmentData = _ref94.environmentData;
21822
+ }) || {}, environmentData = _ref95.environmentData;
21788
21823
  axe._audit.normalizeOptions(options);
21789
- options.reporter = (_ref95 = (_options$reporter2 = options.reporter) !== null && _options$reporter2 !== void 0 ? _options$reporter2 : (_axe$_audit2 = axe._audit) === null || _axe$_audit2 === void 0 ? void 0 : _axe$_audit2.reporter) !== null && _ref95 !== void 0 ? _ref95 : 'v1';
21824
+ options.reporter = (_ref96 = (_options$reporter2 = options.reporter) !== null && _options$reporter2 !== void 0 ? _options$reporter2 : (_axe$_audit2 = axe._audit) === null || _axe$_audit2 === void 0 ? void 0 : _axe$_audit2.reporter) !== null && _ref96 !== void 0 ? _ref96 : 'v1';
21790
21825
  setFrameSpec(partialResults);
21791
21826
  var results = merge_results_default(partialResults);
21792
21827
  results = axe._audit.after(results, options);
@@ -21816,8 +21851,8 @@
21816
21851
  _iterator4.f();
21817
21852
  }
21818
21853
  }
21819
- function getMergedFrameSpecs(_ref96) {
21820
- var childFrameSpecs = _ref96.frames, parentFrameSpec = _ref96.frameSpec;
21854
+ function getMergedFrameSpecs(_ref97) {
21855
+ var childFrameSpecs = _ref97.frames, parentFrameSpec = _ref97.frameSpec;
21821
21856
  if (!parentFrameSpec) {
21822
21857
  return childFrameSpecs;
21823
21858
  }
@@ -21880,9 +21915,9 @@
21880
21915
  for (var _i33 = 0, _types = types; _i33 < _types.length; _i33++) {
21881
21916
  var type = _types[_i33];
21882
21917
  if (transformedResult[type] && Array.isArray(transformedResult[type])) {
21883
- transformedResult[type] = transformedResult[type].map(function(_ref97) {
21918
+ transformedResult[type] = transformedResult[type].map(function(_ref98) {
21884
21919
  var _node;
21885
- var node = _ref97.node, typeResult = _objectWithoutProperties(_ref97, _excluded13);
21920
+ var node = _ref98.node, typeResult = _objectWithoutProperties(_ref98, _excluded13);
21886
21921
  node = typeof ((_node = node) === null || _node === void 0 ? void 0 : _node.toJSON) === 'function' ? node.toJSON() : node;
21887
21922
  return _extends({
21888
21923
  node: node
@@ -22285,9 +22320,13 @@
22285
22320
  description: 'Ensures <marquee> elements are not used',
22286
22321
  help: '<marquee> elements are deprecated and must not be used'
22287
22322
  },
22323
+ 'meta-refresh-no-exceptions': {
22324
+ description: 'Ensures <meta http-equiv="refresh"> is not used for delayed refresh',
22325
+ help: 'Delayed refresh must not be used'
22326
+ },
22288
22327
  'meta-refresh': {
22289
- description: 'Ensures <meta http-equiv="refresh"> is not used',
22290
- help: 'Timed refresh must not exist'
22328
+ description: 'Ensures <meta http-equiv="refresh"> is not used for delayed refresh',
22329
+ help: 'Delayed refresh under 20 hours must not be used'
22291
22330
  },
22292
22331
  'meta-viewport-large': {
22293
22332
  description: 'Ensures <meta name="viewport"> can scale a significant amount',
@@ -23038,11 +23077,18 @@
23038
23077
  fail: 'Page does not have a landmark region'
23039
23078
  }
23040
23079
  },
23080
+ 'meta-refresh-no-exceptions': {
23081
+ impact: 'minor',
23082
+ messages: {
23083
+ pass: '<meta> tag does not immediately refresh the page',
23084
+ fail: '<meta> tag forces timed refresh of page'
23085
+ }
23086
+ },
23041
23087
  'meta-refresh': {
23042
23088
  impact: 'critical',
23043
23089
  messages: {
23044
23090
  pass: '<meta> tag does not immediately refresh the page',
23045
- fail: '<meta> tag forces timed refresh of page'
23091
+ fail: '<meta> tag forces timed refresh of page (less than 20 hours)'
23046
23092
  }
23047
23093
  },
23048
23094
  'p-as-heading': {
@@ -23903,7 +23949,7 @@
23903
23949
  id: 'frame-title',
23904
23950
  selector: 'frame, iframe',
23905
23951
  matches: 'no-negative-tabindex-matches',
23906
- tags: [ 'cat.text-alternatives', 'wcag2a', 'wcag241', 'wcag412', 'section508', 'section508.22.i' ],
23952
+ tags: [ 'cat.text-alternatives', 'wcag2a', 'wcag412', 'section508', 'section508.22.i' ],
23907
23953
  actIds: [ 'cae760' ],
23908
23954
  all: [],
23909
23955
  any: [ {
@@ -24215,14 +24261,36 @@
24215
24261
  all: [],
24216
24262
  any: [],
24217
24263
  none: [ 'is-on-screen' ]
24264
+ }, {
24265
+ id: 'meta-refresh-no-exceptions',
24266
+ selector: 'meta[http-equiv="refresh"][content]',
24267
+ excludeHidden: false,
24268
+ enabled: false,
24269
+ tags: [ 'cat.time-and-media', 'wcag2aaa', 'wcag224', 'wcag325' ],
24270
+ actIds: [ 'bisz58' ],
24271
+ all: [],
24272
+ any: [ {
24273
+ options: {
24274
+ minDelay: 0,
24275
+ maxDelay: false
24276
+ },
24277
+ id: 'meta-refresh-no-exceptions'
24278
+ } ],
24279
+ none: []
24218
24280
  }, {
24219
24281
  id: 'meta-refresh',
24220
- selector: 'meta[http-equiv="refresh"]',
24282
+ selector: 'meta[http-equiv="refresh"][content]',
24221
24283
  excludeHidden: false,
24222
24284
  tags: [ 'cat.time-and-media', 'wcag2a', 'wcag221', 'wcag224', 'wcag325' ],
24223
24285
  actIds: [ 'bc659a' ],
24224
24286
  all: [],
24225
- any: [ 'meta-refresh' ],
24287
+ any: [ {
24288
+ options: {
24289
+ minDelay: 0,
24290
+ maxDelay: 72e3
24291
+ },
24292
+ id: 'meta-refresh'
24293
+ } ],
24226
24294
  none: []
24227
24295
  }, {
24228
24296
  id: 'meta-viewport-large',
@@ -24477,8 +24545,7 @@
24477
24545
  none: []
24478
24546
  }, {
24479
24547
  id: 'valid-lang',
24480
- selector: '[lang], [xml\\:lang]',
24481
- matches: 'not-html-matches',
24548
+ selector: '[lang]:not(html), [xml\\:lang]:not(html)',
24482
24549
  tags: [ 'cat.language', 'wcag2aa', 'wcag312', 'ACT' ],
24483
24550
  actIds: [ 'de46e4' ],
24484
24551
  all: [],
@@ -24849,9 +24916,20 @@
24849
24916
  options: {
24850
24917
  selector: 'main, [role=main]'
24851
24918
  }
24919
+ }, {
24920
+ id: 'meta-refresh-no-exceptions',
24921
+ evaluate: 'meta-refresh-evaluate',
24922
+ options: {
24923
+ minDelay: 0,
24924
+ maxDelay: false
24925
+ }
24852
24926
  }, {
24853
24927
  id: 'meta-refresh',
24854
- evaluate: 'meta-refresh-evaluate'
24928
+ evaluate: 'meta-refresh-evaluate',
24929
+ options: {
24930
+ minDelay: 0,
24931
+ maxDelay: 72e3
24932
+ }
24855
24933
  }, {
24856
24934
  id: 'p-as-heading',
24857
24935
  evaluate: 'p-as-heading-evaluate',