Skip to content

Commit 2719253

Browse files
committed
feat(admin,ui): improve accessibility and testability
Add ARIA attributes, semantic roles, and proper label linkage across 22 components to enable reliable semantic locators and improve screen reader support.
1 parent 360bd6a commit 2719253

29 files changed

Lines changed: 110 additions & 17 deletions

packages/admin/src/components/DitoAccount.vue

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,20 @@
11
<template lang="pug">
22
.dito-account
33
a(
4+
role="button"
5+
v-bind="pulldownTriggerAttributes"
46
@mousedown.stop="onPulldownMouseDown()"
57
)
68
span {{ user.username }}
7-
ul.dito-pulldown(:class="{ 'dito-pulldown--open': pulldown.open }")
9+
ul.dito-pulldown(
10+
role="menu"
11+
:class="{ 'dito-pulldown--open': pulldown.open }"
12+
)
813
li(
914
v-for="(label, value) of items"
1015
)
1116
a.dito-pulldown__item(
17+
role="menuitem"
1218
@mousedown.stop="onPulldownMouseDown(value)"
1319
@mouseup="onPulldownMouseUp(value)"
1420
) {{ label }}

packages/admin/src/components/DitoCreateButton.vue

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,15 +13,19 @@
1313
button.dito-button(
1414
type="button"
1515
:disabled="disabled"
16-
v-bind="getButtonAttributes(verb)"
16+
v-bind="{ ...pulldownTriggerAttributes, ...getButtonAttributes(verb) }"
1717
@mousedown.stop="onPulldownMouseDown()"
1818
) {{ text }}
19-
ul.dito-pulldown(:class="{ 'dito-pulldown--open': pulldown.open }")
19+
ul.dito-pulldown(
20+
role="menu"
21+
:class="{ 'dito-pulldown--open': pulldown.open }"
22+
)
2023
li(
2124
v-for="(form, type) in creatableForms"
2225
v-show="shouldShowSchema(form)"
2326
)
2427
a.dito-pulldown__item(
28+
role="menuitem"
2529
:class=`{
2630
'dito-pulldown__item--disabled': shouldDisableSchema(form)
2731
}`

packages/admin/src/components/DitoDialog.vue

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
.dito-dialog(
33
ref="dialog"
44
role="dialog"
5-
aria-expanded="true"
5+
:aria-label="schema.label || 'Dialog'"
66
aria-modal="true"
77
:style="{ '--width': settings.width ? `${settings.width}px` : null }"
88
@mouseup="onMouseUp"

packages/admin/src/components/DitoErrors.vue

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
<template lang="pug">
22
.dito-errors(
33
v-if="errors"
4+
role="alert"
45
)
56
ul
67
li(

packages/admin/src/components/DitoForm.vue

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515
DitoFormInner(
1616
v-show="isActiveRoute"
1717
:nested="isNestedRoute"
18+
:label="itemLabel"
1819
)
1920
//- Prevent implicit submission of the form, for example when typing enter
2021
//- in an input field.

packages/admin/src/components/DitoFormInner.vue

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ div(
66
slot
77
form.dito-scroll-parent(
88
v-else
9+
:aria-label="label"
910
@submit.prevent
1011
)
1112
slot
@@ -20,6 +21,10 @@ export default DitoComponent.component('DitoFormInner', {
2021
nested: {
2122
type: Boolean,
2223
default: false
24+
},
25+
label: {
26+
type: String,
27+
default: null
2328
}
2429
}
2530
})

packages/admin/src/components/DitoHeader.vue

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
<template lang="pug">
2-
nav.dito-header
2+
nav.dito-header(:aria-busy="isLoading")
33
DitoTrail
44
DitoSpinner(
55
v-if="isLoading"

packages/admin/src/components/DitoLabel.vue

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -69,7 +69,12 @@ export default DitoComponent.component('DitoLabel', {
6969
},
7070
7171
attributes() {
72-
return this.collapsible ? { onClick: this.onClick } : {}
72+
return this.collapsible
73+
? {
74+
'onClick': this.onClick,
75+
'aria-expanded': !this.collapsed
76+
}
77+
: {}
7378
},
7479
7580
isActive() {

packages/admin/src/components/DitoMenu.vue

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ ul.dito-menu(
1212
a.dito-menu__link(
1313
:href="getItemHref(item)"
1414
:class="{ 'dito-menu__link--active': isActiveItem(item) }"
15+
:aria-current="isActiveItem(item) ? 'page' : null"
1516
@click.prevent.stop="onClickItem(item)"
1617
) {{ getLabel(item) }}
1718
DitoMenu.dito-menu__sub(

packages/admin/src/components/DitoNavigation.vue

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
<template lang="pug">
2-
nav.dito-navigation.dito-scroll-parent
2+
nav.dito-navigation.dito-scroll-parent(aria-label="Main navigation")
33
h1
44
RouterLink.dito-link(to="/") {{ appState.title }}
55
DitoMenu.dito-scroll(:items="views")

0 commit comments

Comments
 (0)