govuk_publishing_components 21.22.0 → 21.22.1
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.
- checksums.yaml +4 -4
- data/app/assets/stylesheets/govuk_publishing_components/components/govspeak/_button.scss +2 -1
- data/app/views/govuk_publishing_components/components/_character_count.html.erb +14 -13
- data/app/views/govuk_publishing_components/components/docs/character_count.yml +8 -0
- data/app/views/govuk_publishing_components/components/docs/govspeak.yml +17 -4
- data/lib/govuk_publishing_components/version.rb +1 -1
- data/node_modules/axe-core/CHANGELOG.md +37 -0
- data/node_modules/axe-core/README.md +2 -2
- data/node_modules/axe-core/axe.d.ts +1 -1
- data/node_modules/axe-core/axe.js +2430 -2242
- data/node_modules/axe-core/axe.min.js +3 -3
- data/node_modules/axe-core/bower.json +1 -1
- data/node_modules/axe-core/doc/API.md +10 -0
- data/node_modules/axe-core/doc/check-message-template.md +124 -0
- data/node_modules/axe-core/doc/examples/jasmine/package-lock.json +1489 -0
- data/node_modules/axe-core/doc/examples/jest_react/package-lock.json +7525 -0
- data/node_modules/axe-core/doc/examples/mocha/package-lock.json +1671 -0
- data/node_modules/axe-core/doc/examples/phantomjs/package-lock.json +862 -0
- data/node_modules/axe-core/doc/examples/qunit/package-lock.json +2951 -0
- data/node_modules/axe-core/doc/rule-descriptions.md +2 -2
- data/node_modules/axe-core/lib/checks/aria/allowed-attr.json +4 -1
- data/node_modules/axe-core/lib/checks/aria/aria-allowed-role.json +8 -2
- data/node_modules/axe-core/lib/checks/aria/errormessage.json +4 -1
- data/node_modules/axe-core/lib/checks/aria/implicit-role-fallback.json +1 -0
- data/node_modules/axe-core/lib/checks/aria/no-implicit-explicit-label.json +1 -1
- data/node_modules/axe-core/lib/checks/aria/required-attr.json +4 -1
- data/node_modules/axe-core/lib/checks/aria/required-children.json +8 -2
- data/node_modules/axe-core/lib/checks/aria/required-parent.json +4 -1
- data/node_modules/axe-core/lib/checks/aria/unsupportedattr.json +1 -1
- data/node_modules/axe-core/lib/checks/aria/unsupportedrole.json +1 -1
- data/node_modules/axe-core/lib/checks/aria/valid-attr-value.json +8 -2
- data/node_modules/axe-core/lib/checks/aria/valid-attr.json +5 -2
- data/node_modules/axe-core/lib/checks/color/color-contrast.js +1 -1
- data/node_modules/axe-core/lib/checks/color/color-contrast.json +4 -4
- data/node_modules/axe-core/lib/checks/color/link-in-text-block.js +2 -2
- data/node_modules/axe-core/lib/checks/color/link-in-text-block.json +2 -2
- data/node_modules/axe-core/lib/checks/forms/fieldset.js +1 -1
- data/node_modules/axe-core/lib/checks/forms/fieldset.json +8 -1
- data/node_modules/axe-core/lib/checks/forms/group-labelledby.js +2 -2
- data/node_modules/axe-core/lib/checks/forms/group-labelledby.json +6 -2
- data/node_modules/axe-core/lib/checks/keyboard/landmark-is-top-level.json +2 -2
- data/node_modules/axe-core/lib/checks/lists/listitem.js +3 -1
- data/node_modules/axe-core/lib/checks/lists/listitem.json +4 -1
- data/node_modules/axe-core/lib/checks/mobile/css-orientation-lock.js +216 -99
- data/node_modules/axe-core/lib/checks/mobile/css-orientation-lock.json +3 -0
- data/node_modules/axe-core/lib/checks/mobile/meta-viewport.json +1 -1
- data/node_modules/axe-core/lib/checks/parsing/duplicate-id-active.json +1 -1
- data/node_modules/axe-core/lib/checks/parsing/duplicate-id-aria.json +1 -1
- data/node_modules/axe-core/lib/checks/shared/aria-label.js +1 -1
- data/node_modules/axe-core/lib/checks/shared/avoid-inline-spacing.json +4 -1
- data/node_modules/axe-core/lib/checks/shared/non-empty-if-present.js +5 -1
- data/node_modules/axe-core/lib/checks/shared/non-empty-if-present.json +4 -1
- data/node_modules/axe-core/lib/checks/tables/has-caption.json +1 -0
- data/node_modules/axe-core/lib/checks/tables/has-summary.json +1 -0
- data/node_modules/axe-core/lib/checks/tables/has-th.json +1 -0
- data/node_modules/axe-core/lib/commons/aria/arialabel-text.js +7 -4
- data/node_modules/axe-core/lib/commons/aria/get-element-unallowed-roles.js +21 -0
- data/node_modules/axe-core/lib/commons/dom/get-element-stack.js +465 -0
- data/node_modules/axe-core/lib/commons/dom/shadow-elements-from-point.js +2 -1
- data/node_modules/axe-core/lib/core/base/audit.js +39 -17
- data/node_modules/axe-core/lib/core/base/virtual-node/serial-virtual-node.js +2 -0
- data/node_modules/axe-core/lib/core/base/virtual-node/virtual-node.js +43 -0
- data/node_modules/axe-core/lib/core/reporters/helpers/incomplete-fallback-msg.js +3 -1
- data/node_modules/axe-core/lib/core/utils/parse-crossorigin-stylesheet.js +1 -0
- data/node_modules/axe-core/lib/core/utils/preload-cssom.js +4 -3
- data/node_modules/axe-core/lib/core/utils/process-message.js +72 -0
- data/node_modules/axe-core/lib/core/utils/publish-metadata.js +20 -7
- data/node_modules/axe-core/lib/rules/aria-dpub-role-fallback.json +2 -1
- data/node_modules/axe-core/lib/rules/label-content-name-mismatch-matches.js +1 -1
- data/node_modules/axe-core/lib/rules/layout-table.json +2 -1
- data/node_modules/axe-core/locales/ja.json +1 -1
- data/node_modules/axe-core/package.json +16 -16
- data/node_modules/axe-core/sri-history.json +4 -0
- data/node_modules/axe-core/typings/axe-core/axe-core-tests.js +151 -0
- data/node_modules/axe-core/typings/axe-core/axe-core-tests.ts +18 -0
- metadata +11 -2
|
@@ -14,7 +14,8 @@ dom.shadowElementsFromPoint = function(nodeX, nodeY, root = document, i = 0) {
|
|
|
14
14
|
throw new Error('Infinite loop detected');
|
|
15
15
|
}
|
|
16
16
|
return (
|
|
17
|
-
|
|
17
|
+
// IE can return null when there are no elements
|
|
18
|
+
Array.from(root.elementsFromPoint(nodeX, nodeY) || [])
|
|
18
19
|
// As of Chrome 66, elementFromPoint will return elements from parent trees.
|
|
19
20
|
// We only want to touch each tree once, so we're filtering out nodes on other trees.
|
|
20
21
|
.filter(nodes => dom.getRootNode(nodes) === root)
|
|
@@ -1,4 +1,6 @@
|
|
|
1
1
|
/*global Rule, Check, RuleResult, commons: true */
|
|
2
|
+
const dotRegex = /\{\{.+?\}\}/g;
|
|
3
|
+
|
|
2
4
|
/*eslint no-unused-vars: 0*/
|
|
3
5
|
function getDefaultConfiguration(audit) {
|
|
4
6
|
'use strict';
|
|
@@ -146,10 +148,10 @@ const mergeCheckLocale = (a, b) => {
|
|
|
146
148
|
let { pass, fail } = b;
|
|
147
149
|
// If the message(s) are Strings, they have not yet been run
|
|
148
150
|
// thru doT (which will return a Function).
|
|
149
|
-
if (typeof pass === 'string') {
|
|
151
|
+
if (typeof pass === 'string' && dotRegex.test(pass)) {
|
|
150
152
|
pass = axe.imports.doT.compile(pass);
|
|
151
153
|
}
|
|
152
|
-
if (typeof fail === 'string') {
|
|
154
|
+
if (typeof fail === 'string' && dotRegex.test(fail)) {
|
|
153
155
|
fail = axe.imports.doT.compile(fail);
|
|
154
156
|
}
|
|
155
157
|
return {
|
|
@@ -177,10 +179,10 @@ const mergeRuleLocale = (a, b) => {
|
|
|
177
179
|
let { help, description } = b;
|
|
178
180
|
// If the message(s) are Strings, they have not yet been run
|
|
179
181
|
// thru doT (which will return a Function).
|
|
180
|
-
if (typeof help === 'string') {
|
|
182
|
+
if (typeof help === 'string' && dotRegex.test(help)) {
|
|
181
183
|
help = axe.imports.doT.compile(help);
|
|
182
184
|
}
|
|
183
|
-
if (typeof description === 'string') {
|
|
185
|
+
if (typeof description === 'string' && dotRegex.test(description)) {
|
|
184
186
|
description = axe.imports.doT.compile(description);
|
|
185
187
|
}
|
|
186
188
|
return {
|
|
@@ -198,7 +200,7 @@ const mergeFailureMessage = (a, b) => {
|
|
|
198
200
|
let { failureMessage } = b;
|
|
199
201
|
// If the message(s) are Strings, they have not yet been run
|
|
200
202
|
// thru doT (which will return a Function).
|
|
201
|
-
if (typeof failureMessage === 'string') {
|
|
203
|
+
if (typeof failureMessage === 'string' && dotRegex.test(failureMessage)) {
|
|
202
204
|
failureMessage = axe.imports.doT.compile(failureMessage);
|
|
203
205
|
}
|
|
204
206
|
return {
|
|
@@ -212,7 +214,7 @@ const mergeFailureMessage = (a, b) => {
|
|
|
212
214
|
*/
|
|
213
215
|
|
|
214
216
|
const mergeFallbackMessage = (a, b) => {
|
|
215
|
-
if (typeof b === 'string') {
|
|
217
|
+
if (typeof b === 'string' && dotRegex.test(b)) {
|
|
216
218
|
b = axe.imports.doT.compile(b);
|
|
217
219
|
}
|
|
218
220
|
return b || a;
|
|
@@ -630,13 +632,37 @@ Audit.prototype.normalizeOptions = function(options) {
|
|
|
630
632
|
'use strict';
|
|
631
633
|
var audit = this;
|
|
632
634
|
|
|
635
|
+
const tags = [];
|
|
636
|
+
const ruleIds = [];
|
|
637
|
+
audit.rules.forEach(rule => {
|
|
638
|
+
ruleIds.push(rule.id);
|
|
639
|
+
rule.tags.forEach(tag => {
|
|
640
|
+
if (!tags.includes(tag)) {
|
|
641
|
+
tags.push(tag);
|
|
642
|
+
}
|
|
643
|
+
});
|
|
644
|
+
});
|
|
645
|
+
|
|
633
646
|
// Validate runOnly
|
|
634
647
|
if (typeof options.runOnly === 'object') {
|
|
635
648
|
if (Array.isArray(options.runOnly)) {
|
|
636
|
-
options.runOnly
|
|
637
|
-
|
|
638
|
-
|
|
639
|
-
|
|
649
|
+
const hasTag = options.runOnly.find(value => tags.includes(value));
|
|
650
|
+
const hasRule = options.runOnly.find(value => ruleIds.includes(value));
|
|
651
|
+
|
|
652
|
+
if (hasTag && hasRule) {
|
|
653
|
+
throw new Error('runOnly cannot be both rules and tags');
|
|
654
|
+
}
|
|
655
|
+
if (hasRule) {
|
|
656
|
+
options.runOnly = {
|
|
657
|
+
type: 'rule',
|
|
658
|
+
values: options.runOnly
|
|
659
|
+
};
|
|
660
|
+
} else {
|
|
661
|
+
options.runOnly = {
|
|
662
|
+
type: 'tag',
|
|
663
|
+
values: options.runOnly
|
|
664
|
+
};
|
|
665
|
+
}
|
|
640
666
|
}
|
|
641
667
|
const only = options.runOnly;
|
|
642
668
|
if (only.value && !only.values) {
|
|
@@ -652,7 +678,7 @@ Audit.prototype.normalizeOptions = function(options) {
|
|
|
652
678
|
if (['rule', 'rules'].includes(only.type)) {
|
|
653
679
|
only.type = 'rule';
|
|
654
680
|
only.values.forEach(function(ruleId) {
|
|
655
|
-
if (!
|
|
681
|
+
if (!ruleIds.includes(ruleId)) {
|
|
656
682
|
throw new Error('unknown rule `' + ruleId + '` in options.runOnly');
|
|
657
683
|
}
|
|
658
684
|
});
|
|
@@ -660,11 +686,7 @@ Audit.prototype.normalizeOptions = function(options) {
|
|
|
660
686
|
// Validate 'tags' (e.g. anything not 'rule')
|
|
661
687
|
} else if (['tag', 'tags', undefined].includes(only.type)) {
|
|
662
688
|
only.type = 'tag';
|
|
663
|
-
const unmatchedTags =
|
|
664
|
-
return unmatchedTags.length
|
|
665
|
-
? unmatchedTags.filter(tag => !rule.tags.includes(tag))
|
|
666
|
-
: unmatchedTags;
|
|
667
|
-
}, only.values);
|
|
689
|
+
const unmatchedTags = only.values.filter(tag => !tags.includes(tag));
|
|
668
690
|
|
|
669
691
|
if (unmatchedTags.length !== 0) {
|
|
670
692
|
axe.log('Could not find tags `' + unmatchedTags.join('`, `') + '`');
|
|
@@ -676,7 +698,7 @@ Audit.prototype.normalizeOptions = function(options) {
|
|
|
676
698
|
|
|
677
699
|
if (typeof options.rules === 'object') {
|
|
678
700
|
Object.keys(options.rules).forEach(function(ruleId) {
|
|
679
|
-
if (!
|
|
701
|
+
if (!ruleIds.includes(ruleId)) {
|
|
680
702
|
throw new Error('unknown rule `' + ruleId + '` in options.rules');
|
|
681
703
|
}
|
|
682
704
|
});
|
|
@@ -61,6 +61,23 @@ class VirtualNode extends axe.AbstractVirtualNode {
|
|
|
61
61
|
return this.actualNode.hasAttribute(attrName);
|
|
62
62
|
}
|
|
63
63
|
|
|
64
|
+
/**
|
|
65
|
+
* Return a property of the computed style for this element and cache the result. This is much faster than called `getPropteryValue` every time.
|
|
66
|
+
* @see https://jsperf.com/get-property-value
|
|
67
|
+
* @return {String}
|
|
68
|
+
*/
|
|
69
|
+
getComputedStylePropertyValue(property) {
|
|
70
|
+
const key = 'computedStyle_' + property;
|
|
71
|
+
if (!this._cache.hasOwnProperty(key)) {
|
|
72
|
+
if (!this._cache.hasOwnProperty('computedStyle')) {
|
|
73
|
+
this._cache.computedStyle = window.getComputedStyle(this.actualNode);
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
this._cache[key] = this._cache.computedStyle.getPropertyValue(property);
|
|
77
|
+
}
|
|
78
|
+
return this._cache[key];
|
|
79
|
+
}
|
|
80
|
+
|
|
64
81
|
/**
|
|
65
82
|
* Determine if the element is focusable and cache the result.
|
|
66
83
|
* @return {Boolean} True if the element is focusable, false otherwise.
|
|
@@ -82,4 +99,30 @@ class VirtualNode extends axe.AbstractVirtualNode {
|
|
|
82
99
|
}
|
|
83
100
|
return this._cache.tabbableElements;
|
|
84
101
|
}
|
|
102
|
+
|
|
103
|
+
/**
|
|
104
|
+
* Return the client rects for this element and cache the result.
|
|
105
|
+
* @return {DOMRect[]}
|
|
106
|
+
*/
|
|
107
|
+
get clientRects() {
|
|
108
|
+
if (!this._cache.hasOwnProperty('clientRects')) {
|
|
109
|
+
this._cache.clientRects = Array.from(
|
|
110
|
+
this.actualNode.getClientRects()
|
|
111
|
+
).filter(rect => rect.width > 0);
|
|
112
|
+
}
|
|
113
|
+
return this._cache.clientRects;
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
/**
|
|
117
|
+
* Return the bounding rect for this element and cache the result.
|
|
118
|
+
* @return {DOMRect}
|
|
119
|
+
*/
|
|
120
|
+
get boundingClientRect() {
|
|
121
|
+
if (!this._cache.hasOwnProperty('boundingClientRect')) {
|
|
122
|
+
this._cache.boundingClientRect = this.actualNode.getBoundingClientRect();
|
|
123
|
+
}
|
|
124
|
+
return this._cache.boundingClientRect;
|
|
125
|
+
}
|
|
85
126
|
}
|
|
127
|
+
|
|
128
|
+
axe.VirtualNode = VirtualNode;
|
|
@@ -7,5 +7,7 @@
|
|
|
7
7
|
*/
|
|
8
8
|
helpers.incompleteFallbackMessage = function incompleteFallbackMessage() {
|
|
9
9
|
'use strict';
|
|
10
|
-
return axe._audit.data.incompleteFallbackMessage
|
|
10
|
+
return typeof axe._audit.data.incompleteFallbackMessage === 'function'
|
|
11
|
+
? axe._audit.data.incompleteFallbackMessage()
|
|
12
|
+
: axe._audit.data.incompleteFallbackMessage;
|
|
11
13
|
};
|
|
@@ -33,9 +33,10 @@ axe.utils.preloadCssom = function preloadCssom({ treeRoot = axe._tree[0] }) {
|
|
|
33
33
|
|
|
34
34
|
const convertDataToStylesheet = axe.utils.getStyleSheetFactory(dynamicDoc);
|
|
35
35
|
|
|
36
|
-
return getCssomForAllRootNodes(
|
|
37
|
-
|
|
38
|
-
|
|
36
|
+
return getCssomForAllRootNodes(
|
|
37
|
+
rootNodes,
|
|
38
|
+
convertDataToStylesheet
|
|
39
|
+
).then(assets => flattenAssets(assets));
|
|
39
40
|
};
|
|
40
41
|
|
|
41
42
|
/**
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
/* global helpers */
|
|
2
|
+
const dataRegex = /\$\{\s?data\s?\}/g;
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* Replace a placeholder with the value of a data string or object
|
|
6
|
+
* @param {String} str
|
|
7
|
+
* @param {String|Object} data
|
|
8
|
+
*/
|
|
9
|
+
function substitute(str, data) {
|
|
10
|
+
// replace all instances of ${ data } with the value of the string
|
|
11
|
+
if (typeof data === 'string') {
|
|
12
|
+
return str.replace(dataRegex, data);
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
// replace all instances of ${ data[prop] } with the value of the property
|
|
16
|
+
for (const prop in data) {
|
|
17
|
+
if (data.hasOwnProperty(prop)) {
|
|
18
|
+
const regex = new RegExp('\\${\\s?data\\.' + prop + '\\s?}', 'g');
|
|
19
|
+
str = str.replace(regex, data[prop]);
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
return str;
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
/**
|
|
27
|
+
* Process a metadata message.
|
|
28
|
+
* @param {String|Object} message
|
|
29
|
+
* @param {Object} data
|
|
30
|
+
* @return {String}
|
|
31
|
+
*/
|
|
32
|
+
axe.utils.processMessage = function processMessage(message, data) {
|
|
33
|
+
if (!message) {
|
|
34
|
+
return;
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
// data as array
|
|
38
|
+
if (Array.isArray(data)) {
|
|
39
|
+
data.values = data.join(', ');
|
|
40
|
+
|
|
41
|
+
if (
|
|
42
|
+
typeof message.singular === 'string' &&
|
|
43
|
+
typeof message.plural === 'string'
|
|
44
|
+
) {
|
|
45
|
+
const str = data.length === 1 ? message.singular : message.plural;
|
|
46
|
+
return substitute(str, data);
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
// no singular/plural message so just pass data
|
|
50
|
+
return substitute(message, data);
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
// message is a string that uses data as a string or object properties
|
|
54
|
+
if (typeof message === 'string') {
|
|
55
|
+
return substitute(message, data);
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
// message is an object that uses value of data to determine message
|
|
59
|
+
if (typeof data === 'string') {
|
|
60
|
+
const str = message[data];
|
|
61
|
+
return substitute(str, data);
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
// message uses value of data property to determine message
|
|
65
|
+
let str = message.default || helpers.incompleteFallbackMessage();
|
|
66
|
+
|
|
67
|
+
if (data && data.messageKey && message[data.messageKey]) {
|
|
68
|
+
str = message[data.messageKey];
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
return processMessage(str, data);
|
|
72
|
+
};
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/*global helpers */
|
|
1
|
+
/* global helpers */
|
|
2
2
|
/**
|
|
3
3
|
* Construct incomplete message from check.data
|
|
4
4
|
* @param {Object} checkData Check result with reason specified
|
|
@@ -30,10 +30,13 @@ function getIncompleteReason(checkData, messages) {
|
|
|
30
30
|
return getDefaultMsg(messages);
|
|
31
31
|
}
|
|
32
32
|
}
|
|
33
|
+
} else if (checkData && checkData.messageKey) {
|
|
34
|
+
return messages.incomplete[checkData.messageKey];
|
|
33
35
|
} else {
|
|
34
36
|
return getDefaultMsg(messages);
|
|
35
37
|
}
|
|
36
38
|
}
|
|
39
|
+
|
|
37
40
|
/**
|
|
38
41
|
* Extend checksData with the correct result message
|
|
39
42
|
* @param {Object} checksData The check result data
|
|
@@ -49,18 +52,28 @@ function extender(checksData, shouldBeTrue) {
|
|
|
49
52
|
var data = Object.assign({}, sourceData);
|
|
50
53
|
delete data.messages;
|
|
51
54
|
if (check.result === undefined) {
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
55
|
+
// handle old doT template
|
|
56
|
+
if (
|
|
57
|
+
typeof messages.incomplete === 'object' &&
|
|
58
|
+
!Array.isArray(check.data)
|
|
59
|
+
) {
|
|
60
|
+
data.message = getIncompleteReason(check.data, messages);
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
// fallback to new process message style
|
|
64
|
+
if (!data.message) {
|
|
58
65
|
data.message = messages.incomplete;
|
|
59
66
|
}
|
|
60
67
|
} else {
|
|
61
68
|
data.message =
|
|
62
69
|
check.result === shouldBeTrue ? messages.pass : messages.fail;
|
|
63
70
|
}
|
|
71
|
+
|
|
72
|
+
// don't process doT template functions
|
|
73
|
+
if (typeof data.message !== 'function') {
|
|
74
|
+
data.message = axe.utils.processMessage(data.message, check.data);
|
|
75
|
+
}
|
|
76
|
+
|
|
64
77
|
axe.utils.extendMetaData(check, data);
|
|
65
78
|
};
|
|
66
79
|
}
|
|
@@ -2,11 +2,12 @@
|
|
|
2
2
|
"id": "aria-dpub-role-fallback",
|
|
3
3
|
"selector": "[role]",
|
|
4
4
|
"matches": "aria-dpub-role-fallback-matches.js",
|
|
5
|
-
"tags": ["cat.aria", "wcag2a", "wcag131"],
|
|
5
|
+
"tags": ["cat.aria", "wcag2a", "wcag131", "deprecated"],
|
|
6
6
|
"metadata": {
|
|
7
7
|
"description": "Ensures unsupported DPUB roles are only used on elements with implicit fallback roles",
|
|
8
8
|
"help": "Unsupported DPUB ARIA roles should be used on elements with implicit fallback roles"
|
|
9
9
|
},
|
|
10
|
+
"enabled": false,
|
|
10
11
|
"all": ["implicit-role-fallback"],
|
|
11
12
|
"any": [],
|
|
12
13
|
"none": []
|
|
@@ -26,7 +26,7 @@ if (!rolesWithNameFromContents.includes(role)) {
|
|
|
26
26
|
* if no `aria-label` or `aria-labelledby` attribute - ignore `node`
|
|
27
27
|
*/
|
|
28
28
|
if (
|
|
29
|
-
!text.sanitize(aria.arialabelText(
|
|
29
|
+
!text.sanitize(aria.arialabelText(virtualNode)) &&
|
|
30
30
|
!text.sanitize(aria.arialabelledbyText(node))
|
|
31
31
|
) {
|
|
32
32
|
return false;
|
|
@@ -2,11 +2,12 @@
|
|
|
2
2
|
"id": "layout-table",
|
|
3
3
|
"selector": "table",
|
|
4
4
|
"matches": "layout-table-matches.js",
|
|
5
|
-
"tags": ["cat.semantics", "wcag2a", "wcag131"],
|
|
5
|
+
"tags": ["cat.semantics", "wcag2a", "wcag131", "deprecated"],
|
|
6
6
|
"metadata": {
|
|
7
7
|
"description": "Ensures presentational <table> elements do not use <th>, <caption> elements or the summary attribute",
|
|
8
8
|
"help": "Layout tables must not use data table elements"
|
|
9
9
|
},
|
|
10
|
+
"enabled": false,
|
|
10
11
|
"all": [],
|
|
11
12
|
"any": [],
|
|
12
13
|
"none": ["has-th", "has-caption", "has-summary"]
|
|
@@ -15,19 +15,19 @@
|
|
|
15
15
|
],
|
|
16
16
|
"_from": "axe-core@>=3.4.1 <4.0.0",
|
|
17
17
|
"_hasShrinkwrap": false,
|
|
18
|
-
"_id": "axe-core@3.4.
|
|
18
|
+
"_id": "axe-core@3.4.2",
|
|
19
19
|
"_inCache": true,
|
|
20
20
|
"_location": "/axe-core",
|
|
21
|
-
"_nodeVersion": "10.
|
|
21
|
+
"_nodeVersion": "10.14.0",
|
|
22
22
|
"_npmOperationalInternal": {
|
|
23
23
|
"host": "s3://npm-registry-packages",
|
|
24
|
-
"tmp": "tmp/axe-core_3.4.
|
|
24
|
+
"tmp": "tmp/axe-core_3.4.2_1581014982110_0.3250163683829628"
|
|
25
25
|
},
|
|
26
26
|
"_npmUser": {
|
|
27
|
-
"name": "
|
|
28
|
-
"email": "
|
|
27
|
+
"name": "wilcofiers",
|
|
28
|
+
"email": "wilcofiers@gmail.com"
|
|
29
29
|
},
|
|
30
|
-
"_npmVersion": "6.
|
|
30
|
+
"_npmVersion": "6.13.4",
|
|
31
31
|
"_phantomChildren": {},
|
|
32
32
|
"_requested": {
|
|
33
33
|
"raw": "axe-core@^3.4.1",
|
|
@@ -41,8 +41,8 @@
|
|
|
41
41
|
"_requiredBy": [
|
|
42
42
|
"/"
|
|
43
43
|
],
|
|
44
|
-
"_resolved": "https://registry.npmjs.org/axe-core/-/axe-core-3.4.
|
|
45
|
-
"_shasum": "
|
|
44
|
+
"_resolved": "https://registry.npmjs.org/axe-core/-/axe-core-3.4.2.tgz",
|
|
45
|
+
"_shasum": "d51d2fcb401685e8b49a1dd94212da0759fd7ca0",
|
|
46
46
|
"_shrinkwrap": null,
|
|
47
47
|
"_spec": "axe-core@^3.4.1",
|
|
48
48
|
"_where": "/var/lib/jenkins/workspace/ublishing_components_master-N4FWJIUY4CIFHKGZOAAEVVXODRY3YBORQOPIBBXWX72VUPSGJRRQ",
|
|
@@ -131,17 +131,17 @@
|
|
|
131
131
|
},
|
|
132
132
|
"directories": {},
|
|
133
133
|
"dist": {
|
|
134
|
-
"integrity": "sha512
|
|
135
|
-
"shasum": "
|
|
136
|
-
"tarball": "https://registry.npmjs.org/axe-core/-/axe-core-3.4.
|
|
137
|
-
"fileCount":
|
|
138
|
-
"unpackedSize":
|
|
139
|
-
"npm-signature": "-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\
|
|
134
|
+
"integrity": "sha512-aPpM84KPiRfeaK3LhA9ag4OmjLUZkNKMH0sZuK+YRBS+QJcegjveidCyvWSBlBr/iIMQdn/1hU00e3YBiuTEdw==",
|
|
135
|
+
"shasum": "d51d2fcb401685e8b49a1dd94212da0759fd7ca0",
|
|
136
|
+
"tarball": "https://registry.npmjs.org/axe-core/-/axe-core-3.4.2.tgz",
|
|
137
|
+
"fileCount": 576,
|
|
138
|
+
"unpackedSize": 2929556,
|
|
139
|
+
"npm-signature": "-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJePF/GCRA9TVsSAnZWagAAbeEP/i0WNObH5qoxRV+5z1I5\nSWIaIj60P7FFPEyp39VQrmQM4uhCfb74+73yPOuTQF8PA/kicQ12Sb5IeDgb\nxpG1VBhC73YLa7/ab4WF5SrebQNPmejg+C2VLnxnctWz4irJVyap2qvIXGj1\nca+GdmvTz+gOqflv3eFjl5ByPGk5NOAbbIUL8WMu8dT4V/6MrHbHHeuNpRMO\nASDUxikTGbXGZspf8kezWmDr0n5VoikjkAefUINs2E3ZGDx5Of82a+8CGPTg\nhmjTGEPDpo9JYJweGNqDCgBTZgFWDht0T5PEj7/+w6GCd/ePAsDh5jD/5w3E\nn2mgY4zsiYNM/1gdU4LD3gD45h6MqtEETcY9OeDiKEWH17xv/3v05Z1fESek\nv+6sloZ8EExg/o5zsvhvWQNtmPtD37j/1hRhMYJFgp2oQskGfLBJUHSOnpxN\n+vbPtZDrp2+U4eBrX2dPgDIQABuOvWJ4gaTmNVwoSiV4ID/IOfBdE117nEAY\nVNR+rgpXnpt2AKaIQvTsHjFRrjiVoTXkQslMMGXjkOlD1fn3kMClW75yLy4I\nN/z/ErjWpmZ48vcT0u90LIgXLiJjcLsTG2rfNRnZe7H8Pjim85nRjXxze9gO\nUO+IGxMJ22VlGcCdBH1c5wO4PjO4LX7Au0aVaixq3xSaZrkIDE9bYO4i/dxr\nwgR6\r\n=Dtk7\r\n-----END PGP SIGNATURE-----\r\n"
|
|
140
140
|
},
|
|
141
141
|
"engines": {
|
|
142
142
|
"node": ">=4"
|
|
143
143
|
},
|
|
144
|
-
"gitHead": "
|
|
144
|
+
"gitHead": "467df229adab25b2c8ca4df92a23ea9a9c3459c8",
|
|
145
145
|
"homepage": "https://github.com/dequelabs/axe-core#readme",
|
|
146
146
|
"keywords": [
|
|
147
147
|
"Accessibility",
|
|
@@ -215,5 +215,5 @@
|
|
|
215
215
|
}
|
|
216
216
|
},
|
|
217
217
|
"typings": "axe.d.ts",
|
|
218
|
-
"version": "3.4.
|
|
218
|
+
"version": "3.4.2"
|
|
219
219
|
}
|