A11Y: add title & aria-expanded for sidebar toggle (#19130)

This commit is contained in:
Kris 2022-11-21 18:17:45 -05:00 committed by GitHub
parent f5692edb5c
commit bb42016a72
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
6 changed files with 44 additions and 2 deletions

View File

@ -1,4 +1,4 @@
<DSection @pageClass="has-sidebar" @class="sidebar-container" @scrollTop={{false}}> <DSection @pageClass="has-sidebar" @id="d-sidebar" @class="sidebar-container" @scrollTop={{false}}>
<Sidebar::Sections @currentUser={{this.currentUser}} @collapsableSections={{true}} /> <Sidebar::Sections @currentUser={{this.currentUser}} @collapsableSections={{true}} />
<Sidebar::Footer /> <Sidebar::Footer />
</DSection> </DSection>

View File

@ -335,6 +335,7 @@ const SiteHeaderComponent = MountWidget.extend(
topic: this._topic, topic: this._topic,
canSignUp: this.canSignUp, canSignUp: this.canSignUp,
sidebarEnabled: this.sidebarEnabled, sidebarEnabled: this.sidebarEnabled,
showSidebar: this.showSidebar,
}; };
}, },

View File

@ -13,6 +13,7 @@
@toggleAnonymous={{route-action "toggleAnonymous"}} @toggleAnonymous={{route-action "toggleAnonymous"}}
@logout={{route-action "logout"}} @logout={{route-action "logout"}}
@sidebarEnabled={{this.sidebarEnabled}} @sidebarEnabled={{this.sidebarEnabled}}
@showSidebar={{this.showSidebar}}
@toggleSidebar={{action "toggleSidebar"}} /> @toggleSidebar={{action "toggleSidebar"}} />
{{/if}} {{/if}}

View File

@ -4,12 +4,17 @@ export default createWidget("sidebar-toggle", {
tagName: "span.header-sidebar-toggle", tagName: "span.header-sidebar-toggle",
html() { html() {
const attrs = this.attrs;
return [ return [
this.attach("button", { this.attach("button", {
title: "", title: attrs.showSidebar
? "sidebar.hide_sidebar"
: "sidebar.show_sidebar",
icon: "bars", icon: "bars",
action: "toggleSidebar", action: "toggleSidebar",
className: "btn btn-flat btn-sidebar-toggle", className: "btn btn-flat btn-sidebar-toggle",
ariaExpanded: attrs.showSidebar ? "true" : "false",
ariaControls: "d-sidebar",
}), }),
]; ];
}, },

View File

@ -4,6 +4,7 @@ import { click, visit } from "@ember/test-helpers";
import { import {
acceptance, acceptance,
exists, exists,
query,
updateCurrentUser, updateCurrentUser,
} from "discourse/tests/helpers/qunit-helpers"; } from "discourse/tests/helpers/qunit-helpers";
@ -215,5 +216,37 @@ acceptance(
"accessibility attributes are set correctly on sidebar section header when section is collapsed" "accessibility attributes are set correctly on sidebar section header when section is collapsed"
); );
}); });
test("accessibility of sidebar toggle", async function (assert) {
await visit("/");
assert.ok(
exists(
".btn-sidebar-toggle[aria-expanded='true'][aria-controls='d-sidebar']"
),
"has the right accessibility attributes set when sidebar is expanded"
);
assert.strictEqual(
query(".btn-sidebar-toggle").title,
I18n.t("sidebar.hide_sidebar"),
"has the right title attribute when sidebar is expanded"
);
await click(".btn-sidebar-toggle");
assert.ok(
exists(
".btn-sidebar-toggle[aria-expanded='false'][aria-controls='d-sidebar']"
),
"has the right accessibility attributes set when sidebar is collapsed"
);
assert.strictEqual(
query(".btn-sidebar-toggle").title,
I18n.t("sidebar.show_sidebar"),
"has the right title attribute when sidebar is collapsed"
);
});
} }
); );

View File

@ -4179,6 +4179,8 @@ en:
redirect_after_success: "Second factor authentication is successful. Redirecting to the previous page…" redirect_after_success: "Second factor authentication is successful. Redirecting to the previous page…"
sidebar: sidebar:
show_sidebar: "Show sidebar"
hide_sidebar: "Hide sidebar"
unread_count: unread_count:
one: "%{count} unread" one: "%{count} unread"
other: "%{count} unread" other: "%{count} unread"