Skip to content

Commit 99f82e0

Browse files
committed
fix(progress-bar): clear aria-valuenow in indeterminate or query mode
Clears the `aria-valuenow` attribute when the progress bar is in indeterminate or query mode, [based on the a11y spec](https://www.w3.org/TR/wai-aria-1.1/#progressbar). Fixes #15016.
1 parent 64010d7 commit 99f82e0

File tree

2 files changed

+45
-2
lines changed

2 files changed

+45
-2
lines changed

src/lib/progress-bar/progress-bar.spec.ts

Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -141,6 +141,49 @@ describe('MatProgressBar', () => {
141141

142142
expect(rect.getAttribute('fill')).toMatch(/^url\(['"]?\/another-fake-path#.*['"]?\)$/);
143143
});
144+
145+
it('should remove the `aria-valuenow` attribute in indeterminate mode', () => {
146+
const fixture = createComponent(BasicProgressBar);
147+
fixture.detectChanges();
148+
149+
const progressElement = fixture.debugElement.query(By.css('mat-progress-bar'));
150+
const progressComponent = progressElement.componentInstance;
151+
152+
progressComponent.mode = 'determinate';
153+
progressComponent.value = 50;
154+
fixture.detectChanges();
155+
156+
expect(progressElement.nativeElement.getAttribute('aria-valuenow'))
157+
.toBe('50', 'Expected aria-valuenow to be set in determinate mode.');
158+
159+
progressComponent.mode = 'indeterminate';
160+
fixture.detectChanges();
161+
162+
expect(progressElement.nativeElement.hasAttribute('aria-valuenow'))
163+
.toBe(false, 'Expect aria-valuenow to be cleared in indeterminate mode.');
164+
});
165+
166+
it('should remove the `aria-valuenow` attribute in query mode', () => {
167+
const fixture = createComponent(BasicProgressBar);
168+
fixture.detectChanges();
169+
170+
const progressElement = fixture.debugElement.query(By.css('mat-progress-bar'));
171+
const progressComponent = progressElement.componentInstance;
172+
173+
progressComponent.mode = 'determinate';
174+
progressComponent.value = 50;
175+
fixture.detectChanges();
176+
177+
expect(progressElement.nativeElement.getAttribute('aria-valuenow'))
178+
.toBe('50', 'Expected aria-valuenow to be set in determinate mode.');
179+
180+
progressComponent.mode = 'query';
181+
fixture.detectChanges();
182+
183+
expect(progressElement.nativeElement.hasAttribute('aria-valuenow'))
184+
.toBe(false, 'Expect aria-valuenow to be cleared in query mode.');
185+
});
186+
144187
});
145188

146189
describe('animation trigger on determinate setting', () => {

src/lib/progress-bar/progress-bar.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -90,10 +90,10 @@ let progressbarId = 0;
9090
'role': 'progressbar',
9191
'aria-valuemin': '0',
9292
'aria-valuemax': '100',
93-
'[attr.aria-valuenow]': 'value',
93+
'[attr.aria-valuenow]': '(mode === "indeterminate" || mode === "query") ? null : value',
9494
'[attr.mode]': 'mode',
9595
'class': 'mat-progress-bar',
96-
'[class._mat-animation-noopable]': `_isNoopAnimation`,
96+
'[class._mat-animation-noopable]': '_isNoopAnimation',
9797
},
9898
inputs: ['color'],
9999
templateUrl: 'progress-bar.html',

0 commit comments

Comments
 (0)