Skip to content

Commit 6203cd9

Browse files
fix: aria-label i18n time range and seek buttons (#1253)
Co-authored-by: Emmanuel Pelletier <manu@habite.la>
1 parent a725fd4 commit 6203cd9

File tree

4 files changed

+19
-6
lines changed

4 files changed

+19
-6
lines changed

src/js/media-seek-backward-button.ts

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,10 @@ function getSlotTemplateHTML(_attrs: Record<string, string>, props: Record<strin
2525
`;
2626
}
2727

28+
const updateAriaLabel = (el: MediaSeekBackwardButton, seekOffset: number): void => {
29+
el.setAttribute('aria-label', t('seek back {seekOffset} seconds', { seekOffset: seekOffset }));
30+
};
31+
2832
function getTooltipContentHTML() {
2933
return t('Seek backward');
3034
}
@@ -66,6 +70,8 @@ class MediaSeekBackwardButton extends MediaChromeButton {
6670
newValue: string | null
6771
): void {
6872
super.attributeChangedCallback(attrName, _oldValue, newValue);
73+
updateAriaLabel(this, this.seekOffset);
74+
6975

7076
if (attrName === Attributes.SEEK_OFFSET) {
7177
this.seekOffset = getNumericAttr(

src/js/media-seek-forward-button.ts

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,10 @@ function getSlotTemplateHTML(_attrs: Record<string, string>, props: Record<strin
2525
`;
2626
}
2727

28+
const updateAriaLabel = (el: MediaSeekForwardButton, seekOffset: number): void => {
29+
el.setAttribute('aria-label', t('seek forward {seekOffset} seconds', { seekOffset: seekOffset }));
30+
};
31+
2832
function getTooltipContentHTML() {
2933
return t('Seek forward');
3034
}
@@ -66,6 +70,7 @@ class MediaSeekForwardButton extends MediaChromeButton {
6670
newValue: string | null
6771
): void {
6872
super.attributeChangedCallback(attrName, _oldValue, newValue);
73+
updateAriaLabel(this, this.seekOffset);
6974

7075
if (attrName === Attributes.SEEK_OFFSET) {
7176
this.seekOffset = getNumericAttr(

src/js/media-time-display.ts

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -51,8 +51,6 @@ const formatTimesLabel = (
5151
return `${timeLabel}${timesSep}${formatTime(endTime)}`;
5252
};
5353

54-
const DEFAULT_MISSING_TIME_PHRASE = 'video not loaded, unknown time.';
55-
5654
const updateAriaValueText = (el: MediaTimeDisplay): void => {
5755
const currentTime = el.mediaCurrentTime;
5856
const [, seekableEnd] = el.mediaSeekable ?? [];
@@ -63,7 +61,7 @@ const updateAriaValueText = (el: MediaTimeDisplay): void => {
6361
endTime = seekableEnd;
6462
}
6563
if (currentTime == null || endTime === null) {
66-
el.setAttribute('aria-valuetext', t(DEFAULT_MISSING_TIME_PHRASE));
64+
el.setAttribute('aria-valuetext', t('video not loaded, unknown time.'));
6765
return;
6866
}
6967

@@ -89,6 +87,11 @@ function getSlotTemplateHTML(_attrs: Record<string, string>, props: Record<strin
8987
`;
9088
}
9189

90+
const updateAriaLabel = (el: MediaTimeDisplay): void => {
91+
el.setAttribute('aria-label', t('playback time'));
92+
};
93+
94+
9295
/**
9396
* @attr {boolean} remaining - Toggle on to show the remaining time instead of elapsed time.
9497
* @attr {boolean} showduration - Toggle on to show the duration.
@@ -180,6 +183,7 @@ class MediaTimeDisplay extends MediaTextDisplay {
180183
oldValue: string | null,
181184
newValue: string | null
182185
): void {
186+
updateAriaLabel(this);
183187
if (CombinedAttributes.includes(attrName)) {
184188
this.update();
185189
} else if (attrName === 'disabled' && newValue !== oldValue) {

src/js/media-time-range.ts

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -28,14 +28,12 @@ type Rects = {
2828
bounds?: DOMRect;
2929
};
3030

31-
const DEFAULT_MISSING_TIME_PHRASE = 'video not loaded, unknown time.';
32-
3331
const updateAriaValueText = (el: any): void => {
3432
const range = el.range;
3533
const currentTimePhrase = formatAsTimePhrase(+calcTimeFromRangeValue(el));
3634
const totalTimePhrase = formatAsTimePhrase(+el.mediaSeekableEnd);
3735
const fullPhrase = !(currentTimePhrase && totalTimePhrase)
38-
? t(DEFAULT_MISSING_TIME_PHRASE)
36+
? t('video not loaded, unknown time.')
3937
: t('{currentTime} of {totalTime}', {
4038
currentTime: currentTimePhrase,
4139
totalTime: totalTimePhrase,

0 commit comments

Comments
 (0)