diff --git a/static/skald.html b/static/skald.html index 9f31f87..3e3784f 100644 --- a/static/skald.html +++ b/static/skald.html @@ -29,7 +29,7 @@ - + Skald @@ -54,7 +54,7 @@ - + diff --git a/static/skald.js b/static/skald.js index 63f1214..61a6cf0 100644 --- a/static/skald.js +++ b/static/skald.js @@ -447,6 +447,8 @@ function setConnected(connected) { clearChat(); userbox.classList.remove('invisible'); connectionbox.classList.add('invisible'); + closeNav(); + setLeftPanelExpanded(true); displayUsername(); window.onresize = function(e) { scheduleReconsiderDownRate(); @@ -3604,57 +3606,73 @@ document.getElementById('disconnectbutton').onclick = function(e) { 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() { - 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() { - 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) { - 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('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"); - } + e.preventDefault(); + toggleLeftPanel(); }; document.getElementById('openside').onclick = function(e) { - e.preventDefault(); - let sidewidth = document.getElementById("sidebarnav").style.width; - 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(); - } - } + e.preventDefault(); + toggleNav(); }; @@ -3663,13 +3681,6 @@ document.getElementById('closeside').onclick = function(e) { closeNav(); }; -document.getElementById('closeside').onkeydown = function(e) { - if(e.key === 'Enter' || e.key === ' ') { - e.preventDefault(); - closeNav(); - } -}; - document.getElementById('close-chat').onclick = function(e) {