Skip to content
Snippets Groups Projects
Commit d1fee199 authored by henry's avatar henry Committed by morgan
Browse files

Bug 43072: Add aria label and description to moz-message-bar.

Ensures that moz-message-bar, including notifications, are announced on
Orca.

This addresses upstream bugzilla bug 1895857 and should likely be
replaced when it is fixed.
parent dbe52600
No related branches found
No related tags found
2 merge requests!1202Bug_43099: 2024 YEC Strings,!1194Bug 43072: Add aria label and description to moz-message-bar.
Pipeline #204717 passed
......@@ -62,6 +62,7 @@ export default class MozMessageBar extends MozLitElement {
dismissable: { type: Boolean },
messageL10nId: { type: String },
messageL10nArgs: { type: String },
useAlertRole: { type: Boolean },
};
constructor() {
......@@ -69,6 +70,7 @@ export default class MozMessageBar extends MozLitElement {
window.MozXULElement?.insertFTLIfNeeded("toolkit/global/mozMessageBar.ftl");
this.type = "info";
this.dismissable = false;
this.useAlertRole = true;
}
onSlotchange() {
......@@ -76,11 +78,6 @@ export default class MozMessageBar extends MozLitElement {
this.actionsEl.classList.toggle("active", actions.length);
}
connectedCallback() {
super.connectedCallback();
this.setAttribute("role", "alert");
}
disconnectedCallback() {
super.disconnectedCallback();
this.dispatchEvent(new CustomEvent("message-bar:close"));
......@@ -90,6 +87,17 @@ export default class MozMessageBar extends MozLitElement {
return this.supportLinkSlot.assignedElements();
}
setAlertRole() {
// Wait a little for this to render before setting the role for more
// consistent alerts to screen readers.
this.useAlertRole = false;
window.requestAnimationFrame(() => {
window.requestAnimationFrame(() => {
this.useAlertRole = true;
});
});
}
iconTemplate() {
let iconData = messageTypeToIconData[this.type];
if (iconData) {
......@@ -110,7 +118,9 @@ export default class MozMessageBar extends MozLitElement {
headingTemplate() {
if (this.heading) {
return html`<strong class="heading">${this.heading}</strong>`;
return html`
<strong id="heading" class="heading">${this.heading}</strong>
`;
}
return "";
}
......@@ -136,13 +146,18 @@ export default class MozMessageBar extends MozLitElement {
rel="stylesheet"
href="chrome://global/content/elements/moz-message-bar.css"
/>
<div class="container">
<div
class="container"
role=${ifDefined(this.useAlertRole ? "alert" : undefined)}
aria-labelledby=${this.heading ? "heading" : "content"}
aria-describedby=${ifDefined(this.heading ? "content" : undefined)}
>
<div class="content">
<div class="text-container">
${this.iconTemplate()}
<div class="text-content">
${this.headingTemplate()}
<div>
<div id="content">
<span
class="message"
data-l10n-id=${ifDefined(this.messageL10nId)}
......
......@@ -703,17 +703,6 @@
}
}
setAlertRole() {
// Wait a little for this to render before setting the role for more
// consistent alerts to screen readers.
this.removeAttribute("role");
window.requestAnimationFrame(() => {
window.requestAnimationFrame(() => {
this.setAttribute("role", "alert");
});
});
}
handleEvent(e) {
if (e.type == "click" && e.target.localName != "label") {
return;
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please to comment