govuk_publishing_components 21.22.1 → 21.22.2
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +4 -3
- data/app/assets/stylesheets/govuk_publishing_components/components/_breadcrumbs.scss +34 -0
- data/app/assets/stylesheets/govuk_publishing_components/components/_document-list.scss +2 -2
- data/app/views/govuk_publishing_components/components/_breadcrumbs.html.erb +0 -3
- data/app/views/govuk_publishing_components/components/_contextual_breadcrumbs.html.erb +0 -2
- data/lib/govuk_publishing_components/version.rb +1 -1
- data/node_modules/axe-core/CHANGELOG.md +70 -10
- data/node_modules/axe-core/axe.js +1295 -632
- data/node_modules/axe-core/axe.min.js +2 -2
- data/node_modules/axe-core/bower.json +1 -1
- data/node_modules/axe-core/doc/API.md +1 -0
- data/node_modules/axe-core/doc/aria-supported.md +0 -1
- data/node_modules/axe-core/doc/developer-guide.md +2 -2
- data/node_modules/axe-core/doc/rule-descriptions.md +91 -87
- data/node_modules/axe-core/lib/checks/aria/abstractrole.js +10 -1
- data/node_modules/axe-core/lib/checks/aria/abstractrole.json +4 -1
- data/node_modules/axe-core/lib/checks/aria/fallbackrole.js +1 -0
- data/node_modules/axe-core/lib/checks/aria/fallbackrole.json +11 -0
- data/node_modules/axe-core/lib/checks/aria/invalidrole.js +14 -3
- data/node_modules/axe-core/lib/checks/aria/invalidrole.json +4 -1
- data/node_modules/axe-core/lib/checks/aria/required-children.js +41 -30
- data/node_modules/axe-core/lib/checks/aria/valid-attr-value.js +24 -9
- data/node_modules/axe-core/lib/checks/aria/valid-attr-value.json +2 -2
- data/node_modules/axe-core/lib/checks/color/color-contrast.js +23 -7
- data/node_modules/axe-core/lib/checks/color/color-contrast.json +7 -1
- data/node_modules/axe-core/lib/checks/keyboard/focusable-disabled.js +5 -0
- data/node_modules/axe-core/lib/checks/keyboard/focusable-modal-open.js +14 -0
- data/node_modules/axe-core/lib/checks/keyboard/focusable-modal-open.json +11 -0
- data/node_modules/axe-core/lib/checks/keyboard/focusable-not-tabbable.js +5 -0
- data/node_modules/axe-core/lib/checks/keyboard/page-has-elm.js +5 -1
- data/node_modules/axe-core/lib/checks/keyboard/page-no-duplicate-after.js +2 -0
- data/node_modules/axe-core/lib/checks/keyboard/page-no-duplicate-banner.json +1 -0
- data/node_modules/axe-core/lib/checks/keyboard/page-no-duplicate-contentinfo.json +1 -0
- data/node_modules/axe-core/lib/checks/keyboard/page-no-duplicate-main.json +1 -0
- data/node_modules/axe-core/lib/checks/keyboard/page-no-duplicate.js +14 -2
- data/node_modules/axe-core/lib/checks/lists/only-listitems.js +43 -49
- data/node_modules/axe-core/lib/checks/lists/only-listitems.json +4 -1
- data/node_modules/axe-core/lib/checks/media/no-autoplay-audio.js +93 -0
- data/node_modules/axe-core/lib/checks/media/no-autoplay-audio.json +15 -0
- data/node_modules/axe-core/lib/checks/navigation/identical-links-same-purpose-after.js +100 -0
- data/node_modules/axe-core/lib/checks/navigation/identical-links-same-purpose.js +31 -0
- data/node_modules/axe-core/lib/checks/navigation/identical-links-same-purpose.json +12 -0
- data/node_modules/axe-core/lib/checks/navigation/region.js +42 -8
- data/node_modules/axe-core/lib/checks/navigation/region.json +0 -1
- data/node_modules/axe-core/lib/checks/shared/svg-non-empty-title.js +4 -0
- data/node_modules/axe-core/lib/checks/shared/svg-non-empty-title.json +11 -0
- data/node_modules/axe-core/lib/commons/aria/index.js +12 -4
- data/node_modules/axe-core/lib/commons/color/get-background-color.js +5 -157
- data/node_modules/axe-core/lib/commons/dom/get-element-stack.js +272 -174
- data/node_modules/axe-core/lib/commons/dom/is-focusable.js +3 -1
- data/node_modules/axe-core/lib/commons/dom/is-hidden-with-css.js +2 -2
- data/node_modules/axe-core/lib/commons/dom/is-modal-open.js +98 -0
- data/node_modules/axe-core/lib/commons/dom/is-visible.js +57 -2
- data/node_modules/axe-core/lib/commons/dom/url-props-from-attribute.js +143 -0
- data/node_modules/axe-core/lib/commons/dom/visually-contains.js +62 -12
- data/node_modules/axe-core/lib/commons/matches/attributes.js +12 -8
- data/node_modules/axe-core/lib/commons/matches/from-definition.js +15 -10
- data/node_modules/axe-core/lib/commons/matches/index.js +11 -9
- data/node_modules/axe-core/lib/commons/matches/node-name.js +11 -21
- data/node_modules/axe-core/lib/commons/matches/properties.js +12 -9
- data/node_modules/axe-core/lib/commons/text/unicode.js +27 -24
- data/node_modules/axe-core/lib/core/base/virtual-node/virtual-node.js +11 -3
- data/node_modules/axe-core/lib/core/constants.js +1 -1
- data/node_modules/axe-core/lib/core/reporters/v1.js +6 -3
- data/node_modules/axe-core/lib/core/utils/contains.js +1 -1
- data/node_modules/axe-core/lib/core/utils/is-hidden.js +6 -6
- data/node_modules/axe-core/lib/core/utils/matches.js +263 -0
- data/node_modules/axe-core/lib/core/utils/preload-media.js +65 -0
- data/node_modules/axe-core/lib/core/utils/preload.js +33 -24
- data/node_modules/axe-core/lib/core/utils/qsa.js +7 -208
- data/node_modules/axe-core/lib/rules/aria-hidden-focus.json +5 -1
- data/node_modules/axe-core/lib/rules/aria-roles.json +1 -1
- data/node_modules/axe-core/lib/rules/button-name.json +1 -1
- data/node_modules/axe-core/lib/rules/color-contrast-matches.js +1 -1
- data/node_modules/axe-core/lib/rules/color-contrast.json +0 -3
- data/node_modules/axe-core/lib/rules/html-namespace-matches.js +1 -0
- data/node_modules/axe-core/lib/rules/identical-links-same-purpose-matches.js +13 -0
- data/node_modules/axe-core/lib/rules/identical-links-same-purpose.json +14 -0
- data/node_modules/axe-core/lib/rules/landmark-no-duplicate-banner.json +1 -1
- data/node_modules/axe-core/lib/rules/landmark-no-duplicate-contentinfo.json +1 -1
- data/node_modules/axe-core/lib/rules/landmark-no-duplicate-main.json +12 -0
- data/node_modules/axe-core/lib/rules/landmark-one-main.json +2 -2
- data/node_modules/axe-core/lib/rules/link-name.json +2 -4
- data/node_modules/axe-core/lib/rules/meta-viewport.json +1 -1
- data/node_modules/axe-core/lib/rules/no-autoplay-audio-matches.js +18 -0
- data/node_modules/axe-core/lib/rules/no-autoplay-audio.json +15 -0
- data/node_modules/axe-core/lib/rules/region.json +1 -2
- data/node_modules/axe-core/lib/rules/role-img-alt.json +2 -1
- data/node_modules/axe-core/lib/rules/svg-img-alt.json +24 -0
- data/node_modules/axe-core/lib/rules/svg-namespace-matches.js +1 -0
- data/node_modules/axe-core/locales/da.json +782 -0
- data/node_modules/axe-core/locales/fr.json +221 -42
- data/node_modules/axe-core/locales/ja.json +124 -24
- data/node_modules/axe-core/package.json +29 -26
- data/node_modules/axe-core/sri-history.json +26 -10
- metadata +27 -9
- data/node_modules/axe-core/doc/examples/jasmine/package-lock.json +0 -1489
- data/node_modules/axe-core/doc/examples/jest_react/package-lock.json +0 -7525
- data/node_modules/axe-core/doc/examples/mocha/package-lock.json +0 -1671
- data/node_modules/axe-core/doc/examples/phantomjs/package-lock.json +0 -862
- data/node_modules/axe-core/doc/examples/qunit/package-lock.json +0 -2951
- data/node_modules/axe-core/lib/checks/navigation/region-after.js +0 -1
- data/node_modules/axe-core/typings/axe-core/axe-core-tests.js +0 -151
@@ -0,0 +1 @@
|
|
1
|
+
return node.namespaceURI === 'http://www.w3.org/1999/xhtml';
|
@@ -0,0 +1,14 @@
|
|
1
|
+
{
|
2
|
+
"id": "identical-links-same-purpose",
|
3
|
+
"selector": "a[href], area[href], [role=\"link\"]",
|
4
|
+
"excludeHidden": false,
|
5
|
+
"matches": "identical-links-same-purpose-matches.js",
|
6
|
+
"tags": ["wcag2aaa", "wcag249", "best-practice"],
|
7
|
+
"metadata": {
|
8
|
+
"description": "Ensure that links with the same accessible name serve a similar purpose",
|
9
|
+
"help": "Links with the same name have a similar purpose"
|
10
|
+
},
|
11
|
+
"all": ["identical-links-same-purpose"],
|
12
|
+
"any": [],
|
13
|
+
"none": []
|
14
|
+
}
|
@@ -0,0 +1,12 @@
|
|
1
|
+
{
|
2
|
+
"id": "landmark-no-duplicate-main",
|
3
|
+
"selector": "main:not([role]), [role=main]",
|
4
|
+
"tags": ["cat.semantics", "best-practice"],
|
5
|
+
"metadata": {
|
6
|
+
"description": "Ensures the document has at most one main landmark",
|
7
|
+
"help": "Document must not have more than one main landmark"
|
8
|
+
},
|
9
|
+
"all": [],
|
10
|
+
"any": ["page-no-duplicate-main"],
|
11
|
+
"none": []
|
12
|
+
}
|
@@ -3,10 +3,10 @@
|
|
3
3
|
"selector": "html",
|
4
4
|
"tags": ["cat.semantics", "best-practice"],
|
5
5
|
"metadata": {
|
6
|
-
"description": "Ensures the document has
|
6
|
+
"description": "Ensures the document has a main landmark",
|
7
7
|
"help": "Document must have one main landmark"
|
8
8
|
},
|
9
|
-
"all": ["page-has-main"
|
9
|
+
"all": ["page-has-main"],
|
10
10
|
"any": [],
|
11
11
|
"none": []
|
12
12
|
}
|
@@ -2,7 +2,7 @@
|
|
2
2
|
"id": "meta-viewport",
|
3
3
|
"selector": "meta[name=\"viewport\"]",
|
4
4
|
"excludeHidden": false,
|
5
|
-
"tags": ["cat.sensory-and-visual-cues", "
|
5
|
+
"tags": ["cat.sensory-and-visual-cues", "best-practice"],
|
6
6
|
"metadata": {
|
7
7
|
"description": "Ensures <meta name=\"viewport\"> does not disable text scaling and zooming",
|
8
8
|
"help": "Zooming and scaling must not be disabled"
|
@@ -0,0 +1,18 @@
|
|
1
|
+
/**
|
2
|
+
* Ignore media nodes without `currenSrc`
|
3
|
+
* Notes:
|
4
|
+
* - https://developer.mozilla.org/en-US/docs/Web/API/HTMLMediaElement/currentSrc
|
5
|
+
* - https://developer.mozilla.org/en-US/docs/Web/API/HTMLMediaElement/src
|
6
|
+
*/
|
7
|
+
if (!node.currentSrc) {
|
8
|
+
return false;
|
9
|
+
}
|
10
|
+
|
11
|
+
/**
|
12
|
+
* Ignore media nodes which are `paused` or `muted`
|
13
|
+
*/
|
14
|
+
if (node.hasAttribute('paused') || node.hasAttribute('muted')) {
|
15
|
+
return false;
|
16
|
+
}
|
17
|
+
|
18
|
+
return true;
|
@@ -0,0 +1,15 @@
|
|
1
|
+
{
|
2
|
+
"id": "no-autoplay-audio",
|
3
|
+
"excludeHidden": false,
|
4
|
+
"selector": "audio[autoplay], video[autoplay]",
|
5
|
+
"matches": "no-autoplay-audio-matches.js",
|
6
|
+
"tags": ["wcag2a", "wcag142", "experimental"],
|
7
|
+
"metadata": {
|
8
|
+
"description": "Ensures <video> or <audio> elements do not autoplay audio for more than 3 seconds without a control mechanism to stop or mute the audio",
|
9
|
+
"help": "<video> or <audio> elements do not autoplay audio"
|
10
|
+
},
|
11
|
+
"preload": true,
|
12
|
+
"all": ["no-autoplay-audio"],
|
13
|
+
"any": [],
|
14
|
+
"none": []
|
15
|
+
}
|
@@ -1,6 +1,7 @@
|
|
1
1
|
{
|
2
2
|
"id": "role-img-alt",
|
3
|
-
"selector": "[role='img']:not(
|
3
|
+
"selector": "[role='img']:not(img):not(area):not(input):not(object)",
|
4
|
+
"matches": "html-namespace-matches.js",
|
4
5
|
"tags": [
|
5
6
|
"cat.text-alternatives",
|
6
7
|
"wcag2a",
|
@@ -0,0 +1,24 @@
|
|
1
|
+
{
|
2
|
+
"id": "svg-img-alt",
|
3
|
+
"selector": "[role=\"img\"], [role=\"graphics-symbol\"], svg[role=\"graphics-document\"]",
|
4
|
+
"matches": "svg-namespace-matches.js",
|
5
|
+
"tags": [
|
6
|
+
"cat.text-alternatives",
|
7
|
+
"wcag2a",
|
8
|
+
"wcag111",
|
9
|
+
"section508",
|
10
|
+
"section508.22.a"
|
11
|
+
],
|
12
|
+
"metadata": {
|
13
|
+
"description": "Ensures svg elements with an img, graphics-document or graphics-symbol role have an accessible text",
|
14
|
+
"help": "svg elements with an img role have an alternative text"
|
15
|
+
},
|
16
|
+
"all": [],
|
17
|
+
"any": [
|
18
|
+
"svg-non-empty-title",
|
19
|
+
"aria-label",
|
20
|
+
"aria-labelledby",
|
21
|
+
"non-empty-title"
|
22
|
+
],
|
23
|
+
"none": []
|
24
|
+
}
|
@@ -0,0 +1 @@
|
|
1
|
+
return node.namespaceURI === 'http://www.w3.org/2000/svg';
|
@@ -0,0 +1,782 @@
|
|
1
|
+
{
|
2
|
+
"lang": "da",
|
3
|
+
"rules": {
|
4
|
+
"accesskeys": {
|
5
|
+
"description": "",
|
6
|
+
"help": "Værdien for attributten 'accesskey' skal være unik"
|
7
|
+
},
|
8
|
+
"area-alt": {
|
9
|
+
"description": "",
|
10
|
+
"help": "Aktive <area> elementer skal have alternativ tekst"
|
11
|
+
},
|
12
|
+
"aria-allowed-attr": {
|
13
|
+
"description": "",
|
14
|
+
"help": "Elementer må kun bruge tilladte ARIA-attributter"
|
15
|
+
},
|
16
|
+
"aria-allowed-role": {
|
17
|
+
"description": "",
|
18
|
+
"help": "ARIA-attributten 'role' skal være passende for elementet"
|
19
|
+
},
|
20
|
+
"aria-dpub-role-fallback": {
|
21
|
+
"description": "",
|
22
|
+
"help": "Ikke-understøttede DPUB ARIA-roller bør kun bruges på elementer med implicitte fallback-roller"
|
23
|
+
},
|
24
|
+
"aria-hidden-body": {
|
25
|
+
"description": "",
|
26
|
+
"help": "aria-hidden='true' må ikke bruges på dokumentets <body> element"
|
27
|
+
},
|
28
|
+
"aria-hidden-focus": {
|
29
|
+
"description": "",
|
30
|
+
"help": "Elementer med ARIA-'hidden' må ikke indeholde fokuserbare elementer"
|
31
|
+
},
|
32
|
+
"aria-input-field-name": {
|
33
|
+
"description": "",
|
34
|
+
"help": "ARIA-input-felter skal have et tilgængeligt navn"
|
35
|
+
},
|
36
|
+
"aria-required-attr": {
|
37
|
+
"description": "",
|
38
|
+
"help": "Krævede ARIA-attributter skal være angivet"
|
39
|
+
},
|
40
|
+
"aria-required-children": {
|
41
|
+
"description": "",
|
42
|
+
"help": "Bestemte ARIA-roller skal indeholde specifikke under-elementer"
|
43
|
+
},
|
44
|
+
"aria-required-parent": {
|
45
|
+
"description": "",
|
46
|
+
"help": "Bestemte ARIA-roller skal være under-element til specifikke over-elementer"
|
47
|
+
},
|
48
|
+
"aria-roledescription": {
|
49
|
+
"description": "",
|
50
|
+
"help": "Brug 'aria-roledescription' på elementer med en semantisk rolle"
|
51
|
+
},
|
52
|
+
"aria-roles": {
|
53
|
+
"description": "",
|
54
|
+
"help": "ARIA-roller skal have en korrekt værdi"
|
55
|
+
},
|
56
|
+
"aria-toggle-field-name": {
|
57
|
+
"description": "",
|
58
|
+
"help": "ARIA afkrydsningsfelter skal have et tilgængeligt navn"
|
59
|
+
},
|
60
|
+
"aria-valid-attr-value": {
|
61
|
+
"description": "",
|
62
|
+
"help": "ARIA-attributter skal have en korrekt værdi"
|
63
|
+
},
|
64
|
+
"aria-valid-attr": {
|
65
|
+
"description": "",
|
66
|
+
"help": "ARIA-attributter skal have et korrekt navn"
|
67
|
+
},
|
68
|
+
"audio-caption": {
|
69
|
+
"description": "",
|
70
|
+
"help": "<audio> elementer skal have en transskription ('captions track')"
|
71
|
+
},
|
72
|
+
"autocomplete-valid": {
|
73
|
+
"description": "",
|
74
|
+
"help": "Attributten 'autocomplete' skal benyttes korrekt"
|
75
|
+
},
|
76
|
+
"avoid-inline-spacing": {
|
77
|
+
"description": "",
|
78
|
+
"help": "Inline tekst-afstande skal være justerbare med brugerdefinerede stylesheets"
|
79
|
+
},
|
80
|
+
"blink": {
|
81
|
+
"description": "",
|
82
|
+
"help": "Elementet <blink> er udfaset og må ikke bruges"
|
83
|
+
},
|
84
|
+
"button-name": {
|
85
|
+
"description": "",
|
86
|
+
"help": "Knapper skal have forståelig (dvs. detekterbar) tekst"
|
87
|
+
},
|
88
|
+
"bypass": {
|
89
|
+
"description": "",
|
90
|
+
"help": "Sider skal have en metode til at springe over gentaget indhold"
|
91
|
+
},
|
92
|
+
"checkboxgroup": {
|
93
|
+
"description": "",
|
94
|
+
"help": "Afkrydsningsfelter med den samme 'name' attributværdi skal være del af en gruppe"
|
95
|
+
},
|
96
|
+
"color-contrast": {
|
97
|
+
"description": "",
|
98
|
+
"help": "Elementer skal have tilstrækkelig farvekontrast"
|
99
|
+
},
|
100
|
+
"css-orientation-lock": {
|
101
|
+
"description": "",
|
102
|
+
"help": "'CSS Media queries' bør ikke bruges til at låse skærmretningen ('orientation')"
|
103
|
+
},
|
104
|
+
"definition-list": {
|
105
|
+
"description": "",
|
106
|
+
"help": "<dl> elementer må kun direkte indeholde velsorterede <dt> og <dd> grupper, <script> eller <template> elementer"
|
107
|
+
},
|
108
|
+
"dlitem": {
|
109
|
+
"description": "",
|
110
|
+
"help": "<dt> og <dd> elementer skal være under-element til et <dl> element"
|
111
|
+
},
|
112
|
+
"document-title": {
|
113
|
+
"description": "",
|
114
|
+
"help": "Dokumenter skal have et <title> element for at bidrage til nemmere navigation"
|
115
|
+
},
|
116
|
+
"duplicate-id-active": {
|
117
|
+
"description": "",
|
118
|
+
"help": "'id'-attributten for aktive elementer skal være unik"
|
119
|
+
},
|
120
|
+
"duplicate-id-aria": {
|
121
|
+
"description": "",
|
122
|
+
"help": "'id'-attributten brugt på ARIA-elementer og -labels skal være unik"
|
123
|
+
},
|
124
|
+
"duplicate-id": {
|
125
|
+
"description": "",
|
126
|
+
"help": "Værdien for 'id'-attributen skal være unik"
|
127
|
+
},
|
128
|
+
"empty-heading": {
|
129
|
+
"description": "",
|
130
|
+
"help": "Overskrifter må ikke være tomme"
|
131
|
+
},
|
132
|
+
"focus-order-semantics": {
|
133
|
+
"description": "",
|
134
|
+
"help": "Elementer i fokus-rækkefølgen bør have en 'role'-attribut, som er passende for det interaktive indhold"
|
135
|
+
},
|
136
|
+
"form-field-multiple-labels": {
|
137
|
+
"description": "",
|
138
|
+
"help": "Form-feltet bør ikke have flere label-elementer"
|
139
|
+
},
|
140
|
+
"frame-tested": {
|
141
|
+
"description": "",
|
142
|
+
"help": "Frame-elementer skal være testet med axe-core"
|
143
|
+
},
|
144
|
+
"frame-title-unique": {
|
145
|
+
"description": "",
|
146
|
+
"help": "Frame-elementer skal have en unik 'title'-attribut"
|
147
|
+
},
|
148
|
+
"frame-title": {
|
149
|
+
"description": "",
|
150
|
+
"help": "Frame-elementer skal have 'title'-attribut"
|
151
|
+
},
|
152
|
+
"heading-order": {
|
153
|
+
"description": "",
|
154
|
+
"help": "Overskriftsniveauer bør kun ændres sekventielt"
|
155
|
+
},
|
156
|
+
"hidden-content": {
|
157
|
+
"description": "",
|
158
|
+
"help": "Skjult indhold på siden kan ikke analyseres"
|
159
|
+
},
|
160
|
+
"html-has-lang": {
|
161
|
+
"description": "",
|
162
|
+
"help": "<html> elementet skal have en 'lang'-attribut"
|
163
|
+
},
|
164
|
+
"html-lang-valid": {
|
165
|
+
"description": "",
|
166
|
+
"help": "<html> elementet skal have en korrekt værdi for 'lang'-attributten"
|
167
|
+
},
|
168
|
+
"html-xml-lang-mismatch": {
|
169
|
+
"description": "",
|
170
|
+
"help": "<html> elementer med 'lang' og 'xml:lang' skal have det samme basesprog"
|
171
|
+
},
|
172
|
+
"image-alt": {
|
173
|
+
"description": "",
|
174
|
+
"help": "Billeder skal have en alternativ tekst"
|
175
|
+
},
|
176
|
+
"image-redundant-alt": {
|
177
|
+
"description": "",
|
178
|
+
"help": "Alternativ tekst til billeder (alt-tekst) bør ikke gentages som brødtekst"
|
179
|
+
},
|
180
|
+
"input-button-name": {
|
181
|
+
"description": "",
|
182
|
+
"help": "Input-knapper skal have en forståelig tekst"
|
183
|
+
},
|
184
|
+
"input-image-alt": {
|
185
|
+
"description": "",
|
186
|
+
"help": "Billed-knapper skal have en alternativ tekst"
|
187
|
+
},
|
188
|
+
"label-content-name-mismatch": {
|
189
|
+
"description": "",
|
190
|
+
"help": "Elementers synlige tekst skal være del af deres tilgængelige navn"
|
191
|
+
},
|
192
|
+
"label-title-only": {
|
193
|
+
"description": "",
|
194
|
+
"help": "Form-elementer bør have en synlig label"
|
195
|
+
},
|
196
|
+
"label": {
|
197
|
+
"description": "",
|
198
|
+
"help": "Form-elementer skal have labels"
|
199
|
+
},
|
200
|
+
"landmark-banner-is-top-level": {
|
201
|
+
"description": "",
|
202
|
+
"help": "Et 'banner'-landmark må ikke være indeholdt i et andet landmark"
|
203
|
+
},
|
204
|
+
"landmark-complementary-is-top-level": {
|
205
|
+
"description": "",
|
206
|
+
"help": "Et 'aside'- eller 'complimentary'-landmark må ikke være indeholdt i et andet landmark"
|
207
|
+
},
|
208
|
+
"landmark-contentinfo-is-top-level": {
|
209
|
+
"description": "",
|
210
|
+
"help": "Et 'contentinfo'-landmark må ikke være indeholdt i et andet landmark"
|
211
|
+
},
|
212
|
+
"landmark-main-is-top-level": {
|
213
|
+
"description": "",
|
214
|
+
"help": "Et 'main'-landmark må ikke være indeholdt i et andet landmark"
|
215
|
+
},
|
216
|
+
"landmark-no-duplicate-banner": {
|
217
|
+
"description": "",
|
218
|
+
"help": "Dokumentet må ikke have mere end ét 'banner'-landmark"
|
219
|
+
},
|
220
|
+
"landmark-no-duplicate-contentinfo": {
|
221
|
+
"description": "",
|
222
|
+
"help": "Dokumentet må ikke have mere end ét 'contentinfo'-landmark"
|
223
|
+
},
|
224
|
+
"landmark-one-main": {
|
225
|
+
"description": "",
|
226
|
+
"help": "Dokumentet skal have ét 'main'-landmark"
|
227
|
+
},
|
228
|
+
"landmark-unique": {
|
229
|
+
"description": "",
|
230
|
+
"help": "Sikrer at landmarks er unikke"
|
231
|
+
},
|
232
|
+
"layout-table": {
|
233
|
+
"description": "",
|
234
|
+
"help": "Tabeller brugt til layout må ikke bruge beskrivende elementer (så som <th> og <caption>)"
|
235
|
+
},
|
236
|
+
"link-in-text-block": {
|
237
|
+
"description": "",
|
238
|
+
"help": "Links skal være fremtrædende fra den omkringliggende tekst på en måde, som ikke afhænger af farve"
|
239
|
+
},
|
240
|
+
"link-name": {
|
241
|
+
"description": "",
|
242
|
+
"help": "Links skal have forståelig (detekterbar) tekst"
|
243
|
+
},
|
244
|
+
"list": {
|
245
|
+
"description": "",
|
246
|
+
"help": "<ul> og <ol> må kun direkte indeholde <li>, <script> eller <template> elementer"
|
247
|
+
},
|
248
|
+
"listitem": {
|
249
|
+
"description": "",
|
250
|
+
"help": "<li> elementer skal være indeholdt i et <ul> eller <ol> element"
|
251
|
+
},
|
252
|
+
"marquee": {
|
253
|
+
"description": "",
|
254
|
+
"help": "<marquee> elementer er udfaset og må ikke bruges"
|
255
|
+
},
|
256
|
+
"meta-refresh": {
|
257
|
+
"description": "",
|
258
|
+
"help": "Tidsindstillet 'refresh' må ikke bruges"
|
259
|
+
},
|
260
|
+
"meta-viewport-large": {
|
261
|
+
"description": "",
|
262
|
+
"help": "Brugere bør kunne zoome og skalere tekst op til 500%"
|
263
|
+
},
|
264
|
+
"meta-viewport": {
|
265
|
+
"description": "",
|
266
|
+
"help": "Zoom og skalering må ikke være slået fra"
|
267
|
+
},
|
268
|
+
"object-alt": {
|
269
|
+
"description": "",
|
270
|
+
"help": "<object> elementer skal have en alternativ tekst"
|
271
|
+
},
|
272
|
+
"p-as-heading": {
|
273
|
+
"description": "",
|
274
|
+
"help": "Fremhævelse med fed, kursiv og skriftstørrelse (font-size) må ikke bruges til at style <p> elementer som en overskrift"
|
275
|
+
},
|
276
|
+
"page-has-heading-one": {
|
277
|
+
"description": "",
|
278
|
+
"help": "Siden skal indeholde en overskrift på øverste niveau"
|
279
|
+
},
|
280
|
+
"radiogroup": {
|
281
|
+
"description": "",
|
282
|
+
"help": "Radioknapper med identiske 'name' attributværdier skal være del af samme gruppe"
|
283
|
+
},
|
284
|
+
"region": {
|
285
|
+
"description": "",
|
286
|
+
"help": "Alt indhold på siden skal være indeholdt i landmarks"
|
287
|
+
},
|
288
|
+
"role-img-alt": {
|
289
|
+
"description": "",
|
290
|
+
"help": "Elementer med 'role' attributværdien 'img' skal have en alternativ tekst"
|
291
|
+
},
|
292
|
+
"scope-attr-valid": {
|
293
|
+
"description": "",
|
294
|
+
"help": "'scope'-attributten skal bruges korrekt i tabeller"
|
295
|
+
},
|
296
|
+
"scrollable-region-focusable": {
|
297
|
+
"description": "",
|
298
|
+
"help": "Sørg for, at en scrollbar region er tilgængeligt via keyboard"
|
299
|
+
},
|
300
|
+
"server-side-image-map": {
|
301
|
+
"description": "",
|
302
|
+
"help": "Såkaldte 'server-side image-maps' må ikke bruges"
|
303
|
+
},
|
304
|
+
"skip-link": {
|
305
|
+
"description": "",
|
306
|
+
"help": "Et 'skip-link' skal pege på et eksisterende og fokuserbart element"
|
307
|
+
},
|
308
|
+
"tabindex": {
|
309
|
+
"description": "",
|
310
|
+
"help": "Elementer bør ikke have et 'tabindex' højere end 0"
|
311
|
+
},
|
312
|
+
"table-duplicate-name": {
|
313
|
+
"description": "",
|
314
|
+
"help": "Elementet <caption> bør ikke indeholde samme tekst som 'summary'-attributten"
|
315
|
+
},
|
316
|
+
"table-fake-caption": {
|
317
|
+
"description": "",
|
318
|
+
"help": "Data- eller overskrifts-celler bør ikke bruges til at beskrive indholdet af en data-tabel"
|
319
|
+
},
|
320
|
+
"td-has-header": {
|
321
|
+
"description": "",
|
322
|
+
"help": "Alle ikke-tomme <td> elementer i en tabel større end 3x3 bør have en tabeloverskrift (<th>)"
|
323
|
+
},
|
324
|
+
"td-headers-attr": {
|
325
|
+
"description": "",
|
326
|
+
"help": "Alle celler i en tabel, som bruger 'header'-attributten må kun referere til andre celler i samme tabel"
|
327
|
+
},
|
328
|
+
"th-has-data-cells": {
|
329
|
+
"description": "",
|
330
|
+
"help": "Alle <th> elementer og elementer med 'role=columnheader/rowheader' skal referere til de data-celler, som de beskriver"
|
331
|
+
},
|
332
|
+
"valid-lang": {
|
333
|
+
"description": "",
|
334
|
+
"help": "'lang'-attributten skal have en korrekt værdi"
|
335
|
+
},
|
336
|
+
"video-caption": {
|
337
|
+
"description": "",
|
338
|
+
"help": "<video> elementer skal have undertekster ('captions')"
|
339
|
+
},
|
340
|
+
"video-description": {
|
341
|
+
"description": "",
|
342
|
+
"help": "<video> elementer skal have et 'description' track"
|
343
|
+
}
|
344
|
+
},
|
345
|
+
"checks": {
|
346
|
+
"abstractrole": {
|
347
|
+
"pass": "Abstrakte roller er ikke brugt",
|
348
|
+
"fail": "Abstrakte roller bør ikke bruges"
|
349
|
+
},
|
350
|
+
"aria-allowed-attr": {
|
351
|
+
"pass": "ARIA-attribut er brugt korrekt for den angivede rolle",
|
352
|
+
"fail": "ARIA-attribut{{=it.data && it.data.length > 1 ? 'terne' : ''}} er ikke tilladt:{{~it.data:value}} {{=value}}{{~}}"
|
353
|
+
},
|
354
|
+
"aria-allowed-role": {
|
355
|
+
"pass": "ARIA-rollen er tilladt for det givne element",
|
356
|
+
"fail": "ARIA-rolle{{=it.data && it.data.length > 1 ? 'rne' : 'n'}} {{=it.data.join(', ')}} er ikke tilladt for det givne element",
|
357
|
+
"incomplete": "ARIA-rolle{{=it.data && it.data.length > 1 ? 'rne' : 'n'}} {{=it.data.join(', ')}} skal være fjernet, når elementet er synligt, da {{=it.data && it.data.length > 1 ? 'de' : 'det'}} ikke er tilladt for elementet"
|
358
|
+
},
|
359
|
+
"aria-hidden-body": {
|
360
|
+
"pass": "Ingen 'aria-hidden'-attribut er at finde i dokumentets <body> element",
|
361
|
+
"fail": "'aria-hidden=true' bør ikke bruges på dokumentets <body> element"
|
362
|
+
},
|
363
|
+
"aria-roledescription": {
|
364
|
+
"pass": "'aria-roledescription' bruges på en understøttet semantisk rolle",
|
365
|
+
"incomplete": "Tjek at 'aria-roledescription' bliver læst op af understøttet skærmlæser",
|
366
|
+
"fail": "Giv elementet en rolle, som understøtter 'aria-roledescription'"
|
367
|
+
},
|
368
|
+
"aria-errormessage": {
|
369
|
+
"pass": "Bruger en understøttet 'aria-errormessage'-teknik",
|
370
|
+
"fail": "'aria-errormessage'-værdi{{=it.data && it.data.length > 1 ? 'er' : ''}} {{~it.data:value}} `{{=value}}{{~}}` bør bruge en teknik til at annoncere beskeden (fx 'aria-live', 'aria-describedby', 'role=alert', osv.)"
|
371
|
+
},
|
372
|
+
"has-widget-role": {
|
373
|
+
"pass": "Elementet har en 'widget'-rolle.",
|
374
|
+
"fail": "Elementet har ikke en 'widget'-rolle."
|
375
|
+
},
|
376
|
+
"implicit-role-fallback": {
|
377
|
+
"pass": "Elementets implicitte ARIA-rolle er en passende fallback",
|
378
|
+
"fail": "Elementets implicitte ARIA-rolle er ikke en god fallback for den (ikke-supporterede) rolle"
|
379
|
+
},
|
380
|
+
"invalidrole": {
|
381
|
+
"pass": "ARIA-rollen er korrekt",
|
382
|
+
"fail": "Rollen skal være en af de mulige ARIA-roller"
|
383
|
+
},
|
384
|
+
"no-implicit-explicit-label": {
|
385
|
+
"pass": "Der er uoverensstemmelse mellem <label> og det tilgængelige navn",
|
386
|
+
"incomplete": "Tjek at <label> elementet ikke behøver være en del af {{=it.data}}-feltets navn"
|
387
|
+
},
|
388
|
+
"aria-required-attr": {
|
389
|
+
"pass": "Alle krævede ARIA-attributter er tilstede",
|
390
|
+
"fail": "Krævet ARIA-attribut{{=it.data && it.data.length > 1 ? 'ter' : ''}} er ikke til stede:{{~it.data:value}} {{=value}}{{~}}"
|
391
|
+
},
|
392
|
+
"aria-required-children": {
|
393
|
+
"pass": "Krævet ARIA-under-elementer er til stede",
|
394
|
+
"fail": "Krævet ARIA-under-element{{=it.data && it.data.length > 1 ? 'er' : ''}}s rolle er ikke til stede:{{~it.data:value}} {{=value}}{{~}}",
|
395
|
+
"incomplete": "Forventer at ARIA under-element{{=it.data && it.data.length > 1 ? 'er' : ''}}s rolle bliver tilføjet:{{~it.data:value}} {{=value}}{{~}}"
|
396
|
+
},
|
397
|
+
"aria-required-parent": {
|
398
|
+
"pass": "Krævet ARIA-over-elements rolle er til stede",
|
399
|
+
"fail": "Krævet ARIA-over-element{{=it.data && it.data.length > 1 ? 'er' : ''}}s rolle er ikke til stede:{{~it.data:value}} {{=value}}{{~}}"
|
400
|
+
},
|
401
|
+
"aria-unsupported-attr": {
|
402
|
+
"pass": "ARIA-attribut er understøttet",
|
403
|
+
"fail": "ARIA-attribut er ikke bredt understøttet i skærmlæsere og tilgængelighedsteknologier: {{~it.data:value}} {{=value}}{{~}}"
|
404
|
+
},
|
405
|
+
"unsupportedrole": {
|
406
|
+
"pass": "ARIA rollen er understøttet",
|
407
|
+
"fail": "Den brugte rolle er ikke bredt understøttet i skærmlæsere og tilgængelighedsteknologier: {{~it.data:value}} {{=value}}{{~}}"
|
408
|
+
},
|
409
|
+
"aria-valid-attr-value": {
|
410
|
+
"pass": "ARIA-attributværdien er valid",
|
411
|
+
"fail": "Ikke-korrekt ARIA-attributværdi{{=it.data && it.data.length > 1 ? 'er' : ''}}:{{~it.data:value}} {{=value}}{{~}}",
|
412
|
+
"incomplete": "ARIA-attribut{{=it.data && it.data.length > 1 ? 'ternes' : 'tens'}} element 'id' er ikke at finde på siden:{{~it.data:value}} {{=value}}{{~}}"
|
413
|
+
},
|
414
|
+
"aria-valid-attr": {
|
415
|
+
"pass": "ARIA-attributnavn{{=it.data && it.data.length > 1 ? 'ene' : 'et'}} er korrekt",
|
416
|
+
"fail": "Ikke-korrekt ARIA-attributnavn{{=it.data && it.data.length > 1 ? 'e' : ''}}:{{~it.data:value}} {{=value}}{{~}}"
|
417
|
+
},
|
418
|
+
"valid-scrollable-semantics": {
|
419
|
+
"pass": "Elementet har korrekt semantik for et element i fokus-rækkefølgen.",
|
420
|
+
"fail": "Elementet har ikke korrekt semantik for et element i fokus-rækkefølgen."
|
421
|
+
},
|
422
|
+
"color-contrast": {
|
423
|
+
"pass": "Elementet har stor farvekontrast, den er {{=it.data.contrastRatio}}",
|
424
|
+
"fail": "Elementet har ikke nok farvekontrast, den er {{=it.data.contrastRatio}} (forgrundsfarve: {{=it.data.fgColor}}, baggrundsfarve: {{=it.data.bgColor}}, tekststørrelse: {{=it.data.fontSize}}, teksttykkelse: {{=it.data.fontWeight}}). Forventet kontrastforhold er {{=it.data.expectedContrastRatio}}",
|
425
|
+
"incomplete": {
|
426
|
+
"bgImage": "Elementets baggrundsfarve kunne ikke detekteres på grund af et baggrundsbillede",
|
427
|
+
"bgGradient": "Elementets baggrundsfarve kunne ikke detekteres på grund af en baggrundsgradient",
|
428
|
+
"imgNode": "Elementets baggrundsfarve kunne ikke detekteres, fordi elementet indeholder et billedelement",
|
429
|
+
"bgOverlap": "Elementets baggrundsfarve kunne ikke detekteres, fordi det er overlappet af et andet element",
|
430
|
+
"fgAlpha": "Elementets forgrundsfarve kunne ikke detekteres på grund af dets gennemsigtighed",
|
431
|
+
"elmPartiallyObscured": "Elementets baggrundsfarve kunne ikke detekteres, fordi det er delvist dækket af et andet element",
|
432
|
+
"elmPartiallyObscuring": "Elementets baggrundsfarve kunne ikke detekteres, fordi det delvist dækker et andet element",
|
433
|
+
"outsideViewport": "Elementets baggrundsfarve kunne ikke detekteres, fordi det er udenfor sidens 'viewport'",
|
434
|
+
"equalRatio": "Elementet har et 1:1-kontrastforhold med baggrunden",
|
435
|
+
"shortTextContent": "Elementets indhold er for kort til at kunne afgøre, om indholdet ren faktisk ER tekst",
|
436
|
+
"default": "Kan ikke udregne kontrastforhold"
|
437
|
+
}
|
438
|
+
},
|
439
|
+
"link-in-text-block": {
|
440
|
+
"pass": "Links kan adskilles fra den omkringliggende tekst på anden måde end med farve",
|
441
|
+
"fail": "Links bør skille sig ud fra den omkringliggende tekst på anden måde end med farve",
|
442
|
+
"incomplete": {
|
443
|
+
"bgContrast": "Elementets kontrastforhold kunne ikke detekteres. Tjek for specifik 'hover'/'focus' styling",
|
444
|
+
"bgImage": "Elementets kontrastforhold kunne ikke detekteres på grund af et baggrundsbillede",
|
445
|
+
"bgGradient": "Elementets kontrastforhold kunne ikke detekteres på grund af en baggrundsgradient",
|
446
|
+
"imgNode": "Elementets kontrastforhold kunne ikke detekteres, fordi elementet indeholder et billedelement",
|
447
|
+
"bgOverlap": "Elementets kontrastforhold kunne ikke detekteres på grund af overlappende elementer",
|
448
|
+
"default": "Kan ikke udregne kontrastforhold"
|
449
|
+
}
|
450
|
+
},
|
451
|
+
"autocomplete-appropriate": {
|
452
|
+
"pass": "'autocomplete'-værdien er brugt på et passende element",
|
453
|
+
"fail": "'autocomplete'-værdien er ikke passende for denne type input"
|
454
|
+
},
|
455
|
+
"autocomplete-valid": {
|
456
|
+
"pass": "'autocomplete'-attributten er korrekt formateret",
|
457
|
+
"fail": "'autocomplete'-attributten er forkert formateret"
|
458
|
+
},
|
459
|
+
"fieldset": {
|
460
|
+
"pass": "Elementet er indhold i en gruppe af form-felter",
|
461
|
+
"fail": "{{var code = it.data && it.data.failureCode;}}{{? code === 'no-legend'}}Gruppen af form-felter ('fieldset') mangler et 'legend'-element som sit første under-element{{?? code === 'empty-legend'}}'Legend'-elementet har ikke tekst, som er synlig for skærmlæsere{{?? code === 'mixed-inputs'}}Gruppen af form-felter ('fieldset') indeholder ikke-relaterede input-elementer{{?? code === 'no-group-label'}}ARIA-gruppen mangler en 'aria-label' eller 'aria-labelledby'{{?? code === 'group-mixed-inputs'}}ARIA-gruppen indeholder ikke-relateret indhold{{??}}Elementet mangler en omkringliggende grupperingselement ('fieldset') eller ARIA-gruppe{{?}}"
|
462
|
+
},
|
463
|
+
"group-labelledby": {
|
464
|
+
"pass": "Elementer med navnet \"{{=it.data.name}}\" har både en delt og en unik label via 'aria-labelledby'-referencer",
|
465
|
+
"fail": "{{var code = it.data && it.data.failureCode;}}elementer med navnet \"{{=it.data.name}}\" har ikke alle {{? code === 'no-shared-label' }}en delt label{{?? code === 'no-unik-label' }}en unik label{{??}}både en delt og unik label{{?}}, via 'aria-labelledby'-referencer"
|
466
|
+
},
|
467
|
+
"accesskeys": {
|
468
|
+
"pass": "'Accesskey' attributværdien er unik",
|
469
|
+
"fail": "Dokumentet har flere elementer med den samme 'accesskey'-attribut"
|
470
|
+
},
|
471
|
+
"focusable-content": {
|
472
|
+
"pass": "Elementet indeholder fokuserbare elementer",
|
473
|
+
"fail": "Elementet bør have fokuserbart indhold"
|
474
|
+
},
|
475
|
+
"focusable-disabled": {
|
476
|
+
"pass": "Ingen fokuserbare elementer indeholdt i elementet",
|
477
|
+
"fail": "Fokuserbart indhold bør slås fra eller fjernes fra sidens DOM"
|
478
|
+
},
|
479
|
+
"focusable-element": {
|
480
|
+
"pass": "Elementet er fokuserbart",
|
481
|
+
"fail": "Elementet bør være fokuserbart"
|
482
|
+
},
|
483
|
+
"focusable-no-name": {
|
484
|
+
"pass": "Elementet er ikke i sidens tabulerings-rækkefølge ('tab order') eller har tilgængelig tekst",
|
485
|
+
"fail": "Elementet er i sidens tabulerings-rækkefølge ('tab order') og har ikke tilgængelig tekst"
|
486
|
+
},
|
487
|
+
"focusable-not-tabbable": {
|
488
|
+
"pass": "Ingen fokuserbare elementer indeholdt i element",
|
489
|
+
"fail": "Fokuserbart indhold bør have tabindex='-1' eller fjernes fra sidens DOM"
|
490
|
+
},
|
491
|
+
"landmark-is-top-level": {
|
492
|
+
"pass": "{{=it.data.role }} landmark er på det øverste niveau.",
|
493
|
+
"fail": "{{=it.data.role }} landmark er indhold i et andet landmark."
|
494
|
+
},
|
495
|
+
"page-has-heading-one": {
|
496
|
+
"pass": "Siden har mindst én overskrift på niveau 1",
|
497
|
+
"fail": "Siden skal have mindst én overskrift på niveau 1"
|
498
|
+
},
|
499
|
+
"page-has-main": {
|
500
|
+
"pass": "Dokumentet har mindst ét 'main'-landmark",
|
501
|
+
"fail": "Dokumentet har ikke et 'main'-landmark"
|
502
|
+
},
|
503
|
+
"page-no-duplicate-banner": {
|
504
|
+
"pass": "Dokumentet har ikke mere end ét 'banner'-landmark",
|
505
|
+
"fail": "Dokumentet har mere end ét 'banner-'landmark"
|
506
|
+
},
|
507
|
+
"page-no-duplicate-contentinfo": {
|
508
|
+
"pass": "Dokumentet har ikke mere end ét 'contentinfo'-landmark",
|
509
|
+
"fail": "Dokumentet har mere end ét 'contentinfo'-landmark"
|
510
|
+
},
|
511
|
+
"page-no-duplicate-main": {
|
512
|
+
"pass": "Dokumentet har ikke mere end ét 'main'-landmark",
|
513
|
+
"fail": "Dokumentet har mere end ét 'main'-landmark"
|
514
|
+
},
|
515
|
+
"tabindex": {
|
516
|
+
"pass": "Elementet har ikke et 'tabindex' større end 0",
|
517
|
+
"fail": "Elementet har et 'tabindex' større end 0"
|
518
|
+
},
|
519
|
+
"alt-space-value": {
|
520
|
+
"pass": "Elementet har en alt-attribut med valid værdi",
|
521
|
+
"fail": "Elementet har en alt-attribut, som kun indeholder et mellemrum, hvilket ikke ignoreres af alle skærmlæsere"
|
522
|
+
},
|
523
|
+
"duplicate-img-label": {
|
524
|
+
"pass": "Elementet duplikerer ikke den eksisterende tekst fra <img> elementets alt-tekst",
|
525
|
+
"fail": "Elementet indeholder et <img> element med alt-tekst, som duplikerer den eksisterende tekst"
|
526
|
+
},
|
527
|
+
"explicit-label": {
|
528
|
+
"pass": "Form-elementet har en eksplicit <label>",
|
529
|
+
"fail": "Form-elementet har ikke en eksplicit <label>"
|
530
|
+
},
|
531
|
+
"help-same-as-label": {
|
532
|
+
"pass": "Hjælpeteksten ('title' eller 'aria-describedby') duplikerer ikke label-teksten",
|
533
|
+
"fail": "Hjælpeteksten ('title' eller 'aria-describedby') er den samme som label-teksten"
|
534
|
+
},
|
535
|
+
"hidden-explicit-label": {
|
536
|
+
"pass": "Form-elementet har en synlig og eksplicit <label>",
|
537
|
+
"fail": "Form-elementet har en eksplicit <label>, som er skjult"
|
538
|
+
},
|
539
|
+
"implicit-label": {
|
540
|
+
"pass": "Form-elementet har en implicit (indeholdt i en) <label>",
|
541
|
+
"fail": "Form-elementet har ikke en implicit (indeholdt i en) <label>"
|
542
|
+
},
|
543
|
+
"label-content-name-mismatch": {
|
544
|
+
"pass": "Elementet indeholder synlig tekst som del af dets tilgængelige navn",
|
545
|
+
"fail": "Tekst i elementet er ikke inkluderet i det tilgængelige navn"
|
546
|
+
},
|
547
|
+
"multiple-label": {
|
548
|
+
"pass": "Form-feltet har ikke flere label-elementer",
|
549
|
+
"incomplete": "Flere label-elementer er ikke bredt understøttet i tilgængelighedsteknologier. Sørg for, at det første label-element indeholder alle de nødvendige informationer."
|
550
|
+
},
|
551
|
+
"title-only": {
|
552
|
+
"pass": "Form-elementet bruger ikke udelukkende 'title'-attributten som label",
|
553
|
+
"fail": "Kun 'title'-attributten er brugt som label for form-elementet"
|
554
|
+
},
|
555
|
+
"landmark-is-unique": {
|
556
|
+
"pass": "Landmarks skal have en unik rolle eller 'role'/'label'/'title'-attribut-kombination (som tilgængeligt navn)",
|
557
|
+
"fail": "Et landmark skal have en unik 'aria-label', 'aria-labelledby', eller 'title' for at gøre landmarks adskillelige"
|
558
|
+
},
|
559
|
+
"has-lang": {
|
560
|
+
"pass": "<html> elementet har en 'lang'-attribut",
|
561
|
+
"fail": "<html> elementet har ikke en 'lang'-attribut"
|
562
|
+
},
|
563
|
+
"valid-lang": {
|
564
|
+
"pass": "'lang'-attributtens værdi er inkluderet i listen over godkendte sprog",
|
565
|
+
"fail": "'lang'-attributtens værdi er ikke inkluderet i listen over godkendte sprog"
|
566
|
+
},
|
567
|
+
"xml-lang-mismatch": {
|
568
|
+
"pass": "Attributterne 'lang' og 'xml:lang' har samme basissprog",
|
569
|
+
"fail": "Attributterne 'lang' og 'xml:lang' har ikke samme basissprog"
|
570
|
+
},
|
571
|
+
"dlitem": {
|
572
|
+
"pass": "Beskrivelsesliste-elementet har et <dl>-over-element",
|
573
|
+
"fail": "Beskrivelsesliste-elementet har ikke et <dl>-over-element"
|
574
|
+
},
|
575
|
+
"listitem": {
|
576
|
+
"pass": "Elementet i listen har et <ul>, <ol> eller 'role=\"list\"'-over-element",
|
577
|
+
"fail": "Elementet i listen har ikke et <ul>, <ol> eller 'role=\"list\"'-over-element"
|
578
|
+
},
|
579
|
+
"only-dlitems": {
|
580
|
+
"pass": "Elementet i listen har kun direkte under-elementer, som er tilladt i <dt> eller <dd> elementer",
|
581
|
+
"fail": "Elementet i listen har direkte under-elementer, som ikke er tilladt inde i <dt> eller <dd> elementer"
|
582
|
+
},
|
583
|
+
"only-listitems": {
|
584
|
+
"pass": "Elementet i listen har kun direkte under-elementer, som er tilladt i <li> elementer",
|
585
|
+
"fail": "Elementet i listen har direkte under-elementer, som ikke er tilladt inde i <li> elementer"
|
586
|
+
},
|
587
|
+
"structured-dlitems": {
|
588
|
+
"pass": "Det ikke-tomme element har både <dt> og <dd> elementer",
|
589
|
+
"fail": "Det ikke-tomme element har ikke mindst ét <dt> element efterfulgt af mindst ét <dd> element"
|
590
|
+
},
|
591
|
+
"caption": {
|
592
|
+
"pass": "Multimedia-elementet har et track med undertekster",
|
593
|
+
"incomplete": "Tjek at undertekster er tilgængelige for elementet"
|
594
|
+
},
|
595
|
+
"description": {
|
596
|
+
"pass": "Multimedia-elementet har et lydbeskrivende ('audio-description') track",
|
597
|
+
"incomplete": "Tjek at elementet har et lydbeskrivende ('audio-description') track"
|
598
|
+
},
|
599
|
+
"frame-tested": {
|
600
|
+
"pass": "Denne <iframe> blev testet af axe-core",
|
601
|
+
"fail": "Denne <iframe> kunne ikke testes af axe-core",
|
602
|
+
"incomplete": "Denne <iframe> er endnu ikke blevet testet af axe-core"
|
603
|
+
},
|
604
|
+
"css-orientation-lock": {
|
605
|
+
"pass": "Skærmen kan styres, og sidens skærmretning er ikke låst med med 'css-orientation-lock'",
|
606
|
+
"fail": "Skærmretningen ('css-orientation-lock') er låst, hvilket gør sidevisning svær at styre på skærmen",
|
607
|
+
"incomplete": "Det kan ikke detekteres om skærmretning er låst (med 'css-orientation-lock')"
|
608
|
+
},
|
609
|
+
"meta-viewport-large": {
|
610
|
+
"pass": "<meta>-tagget begrænser ikke høj zoom på mobile enheder",
|
611
|
+
"fail": "<meta>-tagget begrænser zoom på mobile enheder"
|
612
|
+
},
|
613
|
+
"meta-viewport": {
|
614
|
+
"pass": "<meta>-tagget slår ikke zoom fra på mobile enheder",
|
615
|
+
"fail": "{{=it.data}} på <meta>-tagget slår zoom fra på mobile enheder"
|
616
|
+
},
|
617
|
+
"header-present": {
|
618
|
+
"pass": "Siden har en overskrift (header)",
|
619
|
+
"fail": "Siden har ikke en overskrift (header)"
|
620
|
+
},
|
621
|
+
"heading-order": {
|
622
|
+
"pass": "Rækkefølgen af overskiftsniveauer er korrekt",
|
623
|
+
"fail": "Rækkefølgen af overskiftsniveauer er ikke korrekt"
|
624
|
+
},
|
625
|
+
"internal-link-present": {
|
626
|
+
"pass": "Passende 'skip link' fundet",
|
627
|
+
"fail": "Intet passende 'skip link' fundet"
|
628
|
+
},
|
629
|
+
"landmark": {
|
630
|
+
"pass": "Siden har en 'landmark' region",
|
631
|
+
"fail": "Siden har ikke en 'landmark' region"
|
632
|
+
},
|
633
|
+
"meta-refresh": {
|
634
|
+
"pass": "<meta>-tagget genindlæser ikke siden med det samme",
|
635
|
+
"fail": "<meta>-tagget genindlæser siden med det samme"
|
636
|
+
},
|
637
|
+
"p-as-heading": {
|
638
|
+
"pass": "<p> elementer er ikke stylet som en overskrift",
|
639
|
+
"fail": "Overskrifts-elementer (<h1>, <h2>, osv.) bør bruges i stedet for stylet <p> elementer"
|
640
|
+
},
|
641
|
+
"region": {
|
642
|
+
"pass": "Al indhold på siden er lagt ind under landmarks",
|
643
|
+
"fail": "Dele af sidens indhold er ikke lagt under et landmark"
|
644
|
+
},
|
645
|
+
"skip-link": {
|
646
|
+
"pass": "Det element, som 'skip link' refererer til, eksisterer",
|
647
|
+
"incomplete": "Det element, som 'skip link' refererer til, bør blive synligt ved aktivering",
|
648
|
+
"fail": "Manglende 'skip link' 'target'-attribut"
|
649
|
+
},
|
650
|
+
"unique-frame-title": {
|
651
|
+
"pass": "Elementets 'title'-attribut er unik",
|
652
|
+
"fail": "Elementets 'title'-attribut er ikke unik"
|
653
|
+
},
|
654
|
+
"duplicate-id-active": {
|
655
|
+
"pass": "Dokumentet har ingen aktive elementer, der deler den samme 'id'-attribut",
|
656
|
+
"fail": "Dokumentet har aktive elementer, der deler den samme 'id'-attribut: {{=it.data}}"
|
657
|
+
},
|
658
|
+
"duplicate-id-aria": {
|
659
|
+
"pass": "Dokumentet har ingen elementer refereret med ARIA eller labels, der deler den samme 'id'-attribut",
|
660
|
+
"fail": "Dokumentet har flere elementer refereret med ARIA med den samme 'id'-attribut: {{=it.data}}"
|
661
|
+
},
|
662
|
+
"duplicate-id": {
|
663
|
+
"pass": "Dokumentet har ingen statiske elementer, der deler den samme 'id'-attribut",
|
664
|
+
"fail": "Dokumentet har flere statiske elementer med den samme 'id'-attribut"
|
665
|
+
},
|
666
|
+
"aria-label": {
|
667
|
+
"pass": "'aria-label'-attribut er til stede og er ikke tom",
|
668
|
+
"fail": "'aria-label'-attribut eksisterer ikke eller er tom"
|
669
|
+
},
|
670
|
+
"aria-labelledby": {
|
671
|
+
"pass": "'aria-labelledby'-attribut eksisterer og refererer elementer, der er synlige for skærmlæsere",
|
672
|
+
"fail": "'aria-labelledby'-attribut eksisterer ikke, eller refererer elementer, som ikke eksisterer - eller refererer til elementer, der er tomme"
|
673
|
+
},
|
674
|
+
"avoid-inline-spacing": {
|
675
|
+
"pass": "Ingen inline styling med '!important', som påvirker tekst-mellemrums-afstand er specificeret",
|
676
|
+
"fail": "Fjern '!important' fra inline styling{{=it.data && it.data.length > 1 ? 's' : ''}} {{=it.data.join(', ')}}, da overskrivning af dette, ikke er understøttet i de fleste browsere"
|
677
|
+
},
|
678
|
+
"button-has-visible-text": {
|
679
|
+
"pass": "Elementet har indre tekst, som er synlig for skærmlæsere",
|
680
|
+
"fail": "Elementet har ingen indre tekst, som er synlig for skærmlæsere"
|
681
|
+
},
|
682
|
+
"doc-has-title": {
|
683
|
+
"pass": "Dokumentet har et <title> element, der ikke er tomt",
|
684
|
+
"fail": "Dokumentet mangler et <title> element med indhold"
|
685
|
+
},
|
686
|
+
"exists": {
|
687
|
+
"pass": "Elementet eksisterer ikke",
|
688
|
+
"fail": "Elementet eksisterer"
|
689
|
+
},
|
690
|
+
"has-alt": {
|
691
|
+
"pass": "Elementet har en 'alt'-attribut",
|
692
|
+
"fail": "Elementet har ikke en 'alt'-attribut"
|
693
|
+
},
|
694
|
+
"has-visible-text": {
|
695
|
+
"pass": "Elementet har tekst, der er synligt for skærmlæsere",
|
696
|
+
"fail": "Elementet har ikke tekst, der er synligt for skærmlæsere"
|
697
|
+
},
|
698
|
+
"is-on-screen": {
|
699
|
+
"pass": "Elementet er ikke synligt",
|
700
|
+
"fail": "Elementet er synligt"
|
701
|
+
},
|
702
|
+
"non-empty-alt": {
|
703
|
+
"pass": "Elementet har 'alt'-attribut med indhold",
|
704
|
+
"fail": "Elementet har ingen 'alt'-attribut, eller 'alt'-attributten er tom"
|
705
|
+
},
|
706
|
+
"non-empty-if-present": {
|
707
|
+
"pass": "Elementet {{?it.data}} har en 'værdi'-attribut med indhold{{??}} har ikke en 'value'-attribut{{?}}",
|
708
|
+
"fail": "Elementet har en 'value'-attribut, og 'værdi'-attributten er tom"
|
709
|
+
},
|
710
|
+
"non-empty-title": {
|
711
|
+
"pass": "Elementet har en 'title'-attribut",
|
712
|
+
"fail": "Elementet har ingen 'title'-attribut, eller 'title'-attributten er tom"
|
713
|
+
},
|
714
|
+
"non-empty-value": {
|
715
|
+
"pass": "Elementet har 'value'-attribut med indhold",
|
716
|
+
"fail": "Elementet har ingen 'value'-attribut, eller 'value'-attributten er tom"
|
717
|
+
},
|
718
|
+
"role-none": {
|
719
|
+
"pass": "Elementets standard semantik blev overskrevet med attributten 'role=\"none\"'",
|
720
|
+
"fail": "Elementets standard semantik blev ikke overskrevet med attributten 'role=\"none\"'"
|
721
|
+
},
|
722
|
+
"role-presentation": {
|
723
|
+
"pass": "Elementets standard semantik blev overskrevet med attributten 'role=\"presentation\"'",
|
724
|
+
"fail": "Elementets standard semantik blev ikke overskrevet med attributten 'role=\"presentation\"'"
|
725
|
+
},
|
726
|
+
"caption-faked": {
|
727
|
+
"pass": "Den første række i tabellen er ikke brugt som en beskrivelse ('caption')",
|
728
|
+
"fail": "Det første element i tabellen bør være en beskrivelse (<caption>) i stedet for en celle"
|
729
|
+
},
|
730
|
+
"has-caption": {
|
731
|
+
"pass": "Layouttabellen bruger ikke et <caption> element",
|
732
|
+
"fail": "Layouttabellen bruger <caption> element"
|
733
|
+
},
|
734
|
+
"has-summary": {
|
735
|
+
"pass": "Layouttabellen bruger ikke 'summary'-attribut",
|
736
|
+
"fail": "Layouttabellen bruger 'summary'-attribut"
|
737
|
+
},
|
738
|
+
"has-th": {
|
739
|
+
"pass": "Layouttabellen bruger ikke <th> elementer",
|
740
|
+
"fail": "Layouttabellen bruger <th> elementer"
|
741
|
+
},
|
742
|
+
"html5-scope": {
|
743
|
+
"pass": "'Scope'-attributten bør kun bruges på tabellens header-elementer (<th>)",
|
744
|
+
"fail": "'Scope'-attributten bør kun bruges på tabellens header-elementer (<th>)"
|
745
|
+
},
|
746
|
+
"same-caption-summary": {
|
747
|
+
"pass": "Indholdet af 'summary'-attributten og <caption> elementet er ikke identisk",
|
748
|
+
"fail": "Indholdet af 'summary'-attributten og <caption> elementet er identisk"
|
749
|
+
},
|
750
|
+
"scope-value": {
|
751
|
+
"pass": "'scope'-attributten bruges korrekt",
|
752
|
+
"fail": "Værdien af 'scope'-attributten må kun være 'row' eller 'col'"
|
753
|
+
},
|
754
|
+
"td-has-header": {
|
755
|
+
"pass": "Alle data-celler med indhold har en tabel-header",
|
756
|
+
"fail": "Nogle data-celler med indhold har ikke tabel-headers"
|
757
|
+
},
|
758
|
+
"td-headers-attr": {
|
759
|
+
"pass": "Header-attributten bruges kun til at referere til andre celler i den samme tabel",
|
760
|
+
"fail": "Header-attributten bruges ikke kun til at referere til andre celler i den samme tabel"
|
761
|
+
},
|
762
|
+
"th-has-data-cells": {
|
763
|
+
"pass": "Alle tabellens header-celler refererer til data-celler",
|
764
|
+
"fail": "Ikke alle tabellens header-celler refererer til data-celler",
|
765
|
+
"incomplete": "Nogle af tabellens data-celler mangler eller er tomme"
|
766
|
+
},
|
767
|
+
"hidden-content": {
|
768
|
+
"pass": "Alt indhold på siden er blevet analyseret.",
|
769
|
+
"fail": "Der var problemer med at analysere dele af indholdet på denne side.",
|
770
|
+
"incomplete": "Der er skjult indhold på siden, som ikke blev analyseret. Du skal gøre dette indhold synligt for at kunne analysere det."
|
771
|
+
}
|
772
|
+
},
|
773
|
+
"failureSummaries": {
|
774
|
+
"any": {
|
775
|
+
"failureMessage": "Ret en af følgende:{{~it:value}}\n {{=value.split('\\n').join('\\n ')}}{{~}}"
|
776
|
+
},
|
777
|
+
"none": {
|
778
|
+
"failureMessage": "Ret alle de følgende:{{~it:value}}\n {{=value.split('\\n').join('\\n ')}}{{~}}"
|
779
|
+
}
|
780
|
+
},
|
781
|
+
"incompleteFallbackMessage": "axe kunne ikke give en årsag. Tid til at finde dit udviklingsværktøj frem!"
|
782
|
+
}
|