Fix accessible panel toggles
This commit is contained in:
+2
-2
@@ -29,7 +29,7 @@
|
|||||||
<header class="connected-only invisible" aria-hidden="true">
|
<header class="connected-only invisible" aria-hidden="true">
|
||||||
<nav class="topnav navbar navbar-expand navbar-light fixed-top">
|
<nav class="topnav navbar navbar-expand navbar-light fixed-top">
|
||||||
<div id="header">
|
<div id="header">
|
||||||
<button class="collapse" aria-label="Toggle left panel" aria-expanded="true" id="sidebarCollapse">
|
<button class="collapse" aria-label="Toggle left panel" aria-expanded="true" aria-controls="left-sidebar" id="sidebarCollapse">
|
||||||
<i class="fas fa-align-left" aria-hidden="true"></i>
|
<i class="fas fa-align-left" aria-hidden="true"></i>
|
||||||
</button>
|
</button>
|
||||||
<h1 id="title" class="header-title">Skald</h1>
|
<h1 id="title" class="header-title">Skald</h1>
|
||||||
@@ -54,7 +54,7 @@
|
|||||||
</li>
|
</li>
|
||||||
|
|
||||||
<li>
|
<li>
|
||||||
<button class="nav-button nav-link nav-more" id="openside" aria-label="More options" aria-haspopup="true">
|
<button class="nav-button nav-link nav-more" id="openside" aria-label="More options" aria-haspopup="true" aria-expanded="false" aria-controls="sidebarnav">
|
||||||
<span><i class="fas fa-ellipsis-v" aria-hidden="true"></i></span>
|
<span><i class="fas fa-ellipsis-v" aria-hidden="true"></i></span>
|
||||||
</button>
|
</button>
|
||||||
</li>
|
</li>
|
||||||
|
|||||||
+59
-48
@@ -447,6 +447,8 @@ function setConnected(connected) {
|
|||||||
clearChat();
|
clearChat();
|
||||||
userbox.classList.remove('invisible');
|
userbox.classList.remove('invisible');
|
||||||
connectionbox.classList.add('invisible');
|
connectionbox.classList.add('invisible');
|
||||||
|
closeNav();
|
||||||
|
setLeftPanelExpanded(true);
|
||||||
displayUsername();
|
displayUsername();
|
||||||
window.onresize = function(e) {
|
window.onresize = function(e) {
|
||||||
scheduleReconsiderDownRate();
|
scheduleReconsiderDownRate();
|
||||||
@@ -3604,57 +3606,73 @@ document.getElementById('disconnectbutton').onclick = function(e) {
|
|||||||
closeNav();
|
closeNav();
|
||||||
};
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param {HTMLElement} elt
|
||||||
|
* @param {boolean} hidden
|
||||||
|
*/
|
||||||
|
function setAccessibleHidden(elt, hidden) {
|
||||||
|
if(hidden) {
|
||||||
|
elt.setAttribute('aria-hidden', 'true');
|
||||||
|
elt.inert = true;
|
||||||
|
} else {
|
||||||
|
elt.removeAttribute('aria-hidden');
|
||||||
|
elt.inert = false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
function openNav() {
|
function openNav() {
|
||||||
document.getElementById("sidebarnav").style.width = "250px";
|
let sidebarnav = document.getElementById("sidebarnav");
|
||||||
|
let openside = document.getElementById("openside");
|
||||||
|
sidebarnav.style.width = "250px";
|
||||||
|
setAccessibleHidden(sidebarnav, false);
|
||||||
|
openside.setAttribute("aria-expanded", "true");
|
||||||
}
|
}
|
||||||
|
|
||||||
function closeNav() {
|
function closeNav() {
|
||||||
document.getElementById("sidebarnav").style.width = "0";
|
let sidebarnav = document.getElementById("sidebarnav");
|
||||||
|
let openside = document.getElementById("openside");
|
||||||
|
sidebarnav.style.width = "0";
|
||||||
|
setAccessibleHidden(sidebarnav, true);
|
||||||
|
openside.setAttribute("aria-expanded", "false");
|
||||||
|
if(sidebarnav.contains(document.activeElement))
|
||||||
|
openside.focus();
|
||||||
|
}
|
||||||
|
|
||||||
|
function toggleNav() {
|
||||||
|
let sidebarnav = document.getElementById("sidebarnav");
|
||||||
|
if(sidebarnav.getAttribute("aria-hidden") === "true")
|
||||||
|
openNav();
|
||||||
|
else
|
||||||
|
closeNav();
|
||||||
|
}
|
||||||
|
|
||||||
|
function setLeftPanelExpanded(expanded) {
|
||||||
|
let sidebar = document.getElementById("left-sidebar");
|
||||||
|
let mainrow = document.getElementById("mainrow");
|
||||||
|
let sidebarCollapse = document.getElementById("sidebarCollapse");
|
||||||
|
sidebar.classList.toggle("active", !expanded);
|
||||||
|
mainrow.classList.toggle("full-width-active", !expanded);
|
||||||
|
sidebarCollapse.setAttribute("aria-expanded", expanded ? "true" : "false");
|
||||||
|
setAccessibleHidden(sidebar, !expanded);
|
||||||
|
if(!expanded && sidebar.contains(document.activeElement))
|
||||||
|
sidebarCollapse.focus();
|
||||||
|
}
|
||||||
|
|
||||||
|
function toggleLeftPanel() {
|
||||||
|
let sidebarCollapse = document.getElementById("sidebarCollapse");
|
||||||
|
setLeftPanelExpanded(
|
||||||
|
sidebarCollapse.getAttribute("aria-expanded") !== "true",
|
||||||
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
document.getElementById('sidebarCollapse').onclick = function(e) {
|
document.getElementById('sidebarCollapse').onclick = function(e) {
|
||||||
let sidebar = document.getElementById("left-sidebar");
|
e.preventDefault();
|
||||||
sidebar.classList.toggle("active");
|
toggleLeftPanel();
|
||||||
document.getElementById("mainrow").classList.toggle("full-width-active");
|
|
||||||
// Update aria-expanded to reflect the state
|
|
||||||
let isCollapsed = sidebar.classList.contains("active");
|
|
||||||
e.currentTarget.setAttribute("aria-expanded", isCollapsed ? "false" : "true");
|
|
||||||
};
|
|
||||||
|
|
||||||
document.getElementById('sidebarCollapse').onkeydown = function(e) {
|
|
||||||
if(e.key === 'Enter' || e.key === ' ') {
|
|
||||||
e.preventDefault();
|
|
||||||
let sidebar = document.getElementById("left-sidebar");
|
|
||||||
sidebar.classList.toggle("active");
|
|
||||||
document.getElementById("mainrow").classList.toggle("full-width-active");
|
|
||||||
// Update aria-expanded to reflect the state
|
|
||||||
let isCollapsed = sidebar.classList.contains("active");
|
|
||||||
e.currentTarget.setAttribute("aria-expanded", isCollapsed ? "false" : "true");
|
|
||||||
}
|
|
||||||
};
|
};
|
||||||
|
|
||||||
document.getElementById('openside').onclick = function(e) {
|
document.getElementById('openside').onclick = function(e) {
|
||||||
e.preventDefault();
|
e.preventDefault();
|
||||||
let sidewidth = document.getElementById("sidebarnav").style.width;
|
toggleNav();
|
||||||
if (sidewidth !== "0px" && sidewidth !== "") {
|
|
||||||
closeNav();
|
|
||||||
return;
|
|
||||||
} else {
|
|
||||||
openNav();
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
document.getElementById('openside').onkeydown = function(e) {
|
|
||||||
if(e.key === 'Enter' || e.key === ' ') {
|
|
||||||
e.preventDefault();
|
|
||||||
let sidewidth = document.getElementById("sidebarnav").style.width;
|
|
||||||
if (sidewidth !== "0px" && sidewidth !== "") {
|
|
||||||
closeNav();
|
|
||||||
return;
|
|
||||||
} else {
|
|
||||||
openNav();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
@@ -3663,13 +3681,6 @@ document.getElementById('closeside').onclick = function(e) {
|
|||||||
closeNav();
|
closeNav();
|
||||||
};
|
};
|
||||||
|
|
||||||
document.getElementById('closeside').onkeydown = function(e) {
|
|
||||||
if(e.key === 'Enter' || e.key === ' ') {
|
|
||||||
e.preventDefault();
|
|
||||||
closeNav();
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
document.getElementById('close-chat').onclick = function(e) {
|
document.getElementById('close-chat').onclick = function(e) {
|
||||||
|
|||||||
Reference in New Issue
Block a user