Skip to content

Commit e07af82

Browse files
authored
[ENG-9839] User Settings: Input fields missing labels (#807)
- Ticket: [ENG-9839] - Feature flag: n/a ## Summary of Changes 1. Fixed accessibility issues with labels and heading.
1 parent e75f239 commit e07af82

File tree

10 files changed

+28
-8
lines changed

10 files changed

+28
-8
lines changed

src/app/features/settings/account-settings/components/affiliated-institutions/affiliated-institutions.component.html

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,11 @@ <h2>{{ 'settings.accountSettings.affiliatedInstitutions.title' | translate }}</h
1313

1414
@for (institution of institutions(); track institution.id) {
1515
<div class="flex mt-3">
16-
<osf-readonly-input [value]="institution.name" (deleteItem)="deleteInstitution(institution)"></osf-readonly-input>
16+
<osf-readonly-input
17+
[value]="institution.name"
18+
[ariaLabelKey]="'settings.accountSettings.affiliatedInstitutions.title'"
19+
(deleteItem)="deleteInstitution(institution)"
20+
></osf-readonly-input>
1721
</div>
1822
}
1923
</p-card>

src/app/features/settings/account-settings/components/connected-emails/connected-emails.component.html

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@ <h2>{{ 'settings.accountSettings.connectedEmails.title' | translate }}</h2>
3131
<div class="flex align-items-center flex-wrap gap-2">
3232
<osf-readonly-input
3333
[value]="email.emailAddress"
34+
[ariaLabelKey]="'settings.accountSettings.connectedEmails.alternateEmails'"
3435
(deleteItem)="openConfirmDeleteEmail(email)"
3536
></osf-readonly-input>
3637

@@ -59,6 +60,7 @@ <h2>{{ 'settings.accountSettings.connectedEmails.title' | translate }}</h2>
5960
<div class="flex align-items-center flex-wrap gap-2">
6061
<osf-readonly-input
6162
[value]="email.emailAddress"
63+
[ariaLabelKey]="'settings.accountSettings.connectedEmails.unconfirmedEmails'"
6264
(deleteItem)="openConfirmDeleteEmail(email)"
6365
></osf-readonly-input>
6466

src/app/features/settings/account-settings/components/connected-identities/connected-identities.component.html

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ <h2>{{ 'settings.accountSettings.connectedIdentities.title' | translate }}</h2>
1010
<div class="flex mt-3">
1111
<osf-readonly-input
1212
[value]="`${identity.id}: ${identity.externalId} (${identity.status})`"
13+
[ariaLabelKey]="'settings.accountSettings.connectedIdentities.title'"
1314
(deleteItem)="deleteExternalIdentity(identity)"
1415
></osf-readonly-input>
1516
</div>

src/app/features/settings/developer-apps/pages/developer-app-details/developer-app-details.component.html

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ <h1>{{ developerApp()?.name }}</h1>
2424
<section class="flex flex-column gap-4 mt-4 md:mt-6">
2525
<p-card class="no-padding-card">
2626
<section class="p-3 md:p-4">
27-
<h2>
27+
<h2 id="clientId">
2828
{{ 'settings.developerApps.details.clientId.title' | translate }}
2929
</h2>
3030

@@ -34,7 +34,7 @@ <h2>
3434

3535
<div class="mt-3 w-4">
3636
<p-iconfield iconPosition="right">
37-
<input type="text" pInputText readonly [value]="clientId()" />
37+
<input type="text" pInputText readonly [value]="clientId()" aria-labelledby="clientId" />
3838
<p-inputicon>
3939
<osf-copy-button [copyItem]="clientId()"></osf-copy-button>
4040
</p-inputicon>
@@ -45,7 +45,7 @@ <h2>
4545

4646
<p-card class="no-padding-card">
4747
<section class="p-3 md:p-4">
48-
<h2>
48+
<h2 id="clientSecret">
4949
{{ 'settings.developerApps.details.clientSecret.title' | translate }}
5050
</h2>
5151

@@ -60,6 +60,7 @@ <h2>
6060
pInputText
6161
[value]="isClientSecretVisible() ? clientSecret() : hiddenClientSecret()"
6262
readonly
63+
aria-labelledby="clientSecret"
6364
/>
6465
<p-inputicon>
6566
<osf-copy-button [copyItem]="clientSecret()"></osf-copy-button>

src/app/shared/components/bar-chart/bar-chart.component.html

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ <h2>{{ title() | translate }}</h2>
1515
<p-accordion>
1616
<p-accordion-panel value="0">
1717
<p-accordion-header class="flex flex-row column-gap-3 align-items-center p-0">
18-
<h4>{{ title() | translate }}</h4>
18+
<p class="font-bold">{{ title() | translate }}</p>
1919
</p-accordion-header>
2020
<p-accordion-content>
2121
<div class="pt-3">

src/app/shared/components/doughnut-chart/doughnut-chart.component.html

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ <h2>{{ title() | translate }}</h2>
1717
<p-accordion>
1818
<p-accordion-panel value="0">
1919
<p-accordion-header class="flex flex-row column-gap-3 align-items-center p-0">
20-
<h4>{{ title() | translate }}</h4>
20+
<p class="font-bold">{{ title() | translate }}</p>
2121
</p-accordion-header>
2222
<p-accordion-content>
2323
<div class="pt-3">

src/app/shared/components/readonly-input/readonly-input.component.html

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,8 @@
66
[readonly]="readonly()"
77
[disabled]="disabled()"
88
[placeholder]="placeholder()"
9+
[attr.aria-label]="ariaLabelKey().length ? (ariaLabelKey() | translate) : null"
10+
[attr.aria-labelledby]="ariaLabelledBy() || null"
911
/>
1012
<p-inputicon
1113
class="fas fa-close remove-icon cursor-pointer"

src/app/shared/components/readonly-input/readonly-input.component.spec.ts

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,8 @@ import { ComponentFixture, TestBed } from '@angular/core/testing';
33

44
import { ReadonlyInputComponent } from './readonly-input.component';
55

6+
import { OSFTestingModule } from '@testing/osf.testing.module';
7+
68
describe('ReadonlyInputComponent', () => {
79
let component: ReadonlyInputComponent;
810
let fixture: ComponentFixture<ReadonlyInputComponent>;
@@ -12,7 +14,7 @@ describe('ReadonlyInputComponent', () => {
1214

1315
beforeEach(async () => {
1416
await TestBed.configureTestingModule({
15-
imports: [ReadonlyInputComponent],
17+
imports: [ReadonlyInputComponent, OSFTestingModule],
1618
}).compileComponents();
1719

1820
fixture = TestBed.createComponent(ReadonlyInputComponent);

src/app/shared/components/readonly-input/readonly-input.component.ts

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
import { TranslatePipe } from '@ngx-translate/core';
2+
13
import { IconField } from 'primeng/iconfield';
24
import { InputIcon } from 'primeng/inputicon';
35
import { InputText } from 'primeng/inputtext';
@@ -6,7 +8,7 @@ import { ChangeDetectionStrategy, Component, input, output } from '@angular/core
68

79
@Component({
810
selector: 'osf-readonly-input',
9-
imports: [IconField, InputIcon, InputText],
11+
imports: [IconField, InputIcon, InputText, TranslatePipe],
1012
templateUrl: './readonly-input.component.html',
1113
styleUrl: './readonly-input.component.scss',
1214
changeDetection: ChangeDetectionStrategy.OnPush,
@@ -16,6 +18,8 @@ export class ReadonlyInputComponent {
1618
readonly = input<boolean>(true);
1719
disabled = input<boolean>(false);
1820
placeholder = input<string>('');
21+
ariaLabelKey = input<string>('');
22+
ariaLabelledBy = input<string>('');
1923

2024
deleteItem = output<void>();
2125
}

src/styles/overrides/button.scss

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -69,3 +69,7 @@
6969
--p-button-padding-y: 0;
7070
--p-button-padding-x: 0;
7171
}
72+
73+
.copy-icon-btn .p-button {
74+
height: 1.5rem;
75+
}

0 commit comments

Comments
 (0)