diff --git a/package.json b/package.json index 6e231751bd..44326a70d7 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "dependencies": { - "browser-ui-test": "^0.20.6", + "browser-ui-test": "^0.20.7", "eslint": "^8.57.1" }, "scripts": { diff --git a/src/front-end/css/chrome.css b/src/front-end/css/chrome.css index 69db06a16c..ce7fe04820 100644 --- a/src/front-end/css/chrome.css +++ b/src/front-end/css/chrome.css @@ -530,7 +530,6 @@ html:not(.sidebar-resizing) .sidebar { /* sidebar-hidden */ #sidebar-toggle-anchor:not(:checked) ~ .sidebar { transform: translateX(calc(0px - var(--sidebar-width) - var(--sidebar-resize-indicator-width))); - z-index: -1; } [dir=rtl] #sidebar-toggle-anchor:not(:checked) ~ .sidebar { transform: translateX(calc(var(--sidebar-width) + var(--sidebar-resize-indicator-width))); diff --git a/src/front-end/js/book.js b/src/front-end/js/book.js index 5df2096f7c..e188f9be0e 100644 --- a/src/front-end/js/book.js +++ b/src/front-end/js/book.js @@ -519,12 +519,31 @@ aria-label="Show hidden lines">'; const sidebar = document.getElementById('sidebar'); const sidebarLinks = document.querySelectorAll('#sidebar a'); const sidebarToggleButton = document.getElementById('sidebar-toggle'); - const sidebarToggleAnchor = document.getElementById('sidebar-toggle-anchor'); const sidebarResizeHandle = document.getElementById('sidebar-resize-handle'); + const sidebarCheckbox = document.getElementById('sidebar-toggle-anchor'); let firstContact = null; + + /* Because we cannot change the `display` using only CSS after/before the transition, we + need JS to do it. We change the display to prevent the browsers search to find text inside + the collapsed sidebar. */ + if (!document.documentElement.classList.contains('sidebar-visible')) { + sidebar.style.display = 'none'; + } + sidebar.addEventListener('transitionend', () => { + /* We only change the display to "none" if we're collapsing the sidebar. */ + if (!sidebarCheckbox.checked) { + sidebar.style.display = 'none'; + } + }); + sidebarToggleButton.addEventListener('click', () => { + /* To allow the sidebar expansion animation, we first need to put back the display. */ + if (!sidebarCheckbox.checked) { + sidebar.style.display = ''; + } + }); + function showSidebar() { - body.classList.remove('sidebar-hidden'); body.classList.add('sidebar-visible'); Array.from(sidebarLinks).forEach(function(link) { link.setAttribute('tabIndex', 0); @@ -540,7 +559,6 @@ aria-label="Show hidden lines">'; function hideSidebar() { body.classList.remove('sidebar-visible'); - body.classList.add('sidebar-hidden'); Array.from(sidebarLinks).forEach(function(link) { link.setAttribute('tabIndex', -1); }); @@ -554,8 +572,8 @@ aria-label="Show hidden lines">'; } // Toggle sidebar - sidebarToggleAnchor.addEventListener('change', function sidebarToggle() { - if (sidebarToggleAnchor.checked) { + sidebarCheckbox.addEventListener('change', function sidebarToggle() { + if (sidebarCheckbox.checked) { const current_width = parseInt( document.documentElement.style.getPropertyValue('--sidebar-target-width'), 10); if (current_width < 150) { @@ -579,7 +597,7 @@ aria-label="Show hidden lines">'; if (pos < 20) { hideSidebar(); } else { - if (body.classList.contains('sidebar-hidden')) { + if (!body.classList.contains('sidebar-visible')) { showSidebar(); } pos = Math.min(pos, window.innerWidth - 100); @@ -765,7 +783,7 @@ aria-label="Show hidden lines">'; let scrollTop = document.scrollingElement.scrollTop; let prevScrollTop = scrollTop; const minMenuY = -menu.clientHeight - 50; - // When the script loads, the page can be at any scroll (e.g. if you reforesh it). + // When the script loads, the page can be at any scroll (e.g. if you refresh it). menu.style.top = scrollTop + 'px'; // Same as parseInt(menu.style.top.slice(0, -2), but faster let topCache = menu.style.top.slice(0, -2); diff --git a/src/front-end/templates/index.hbs b/src/front-end/templates/index.hbs index 139503260a..d33d98f1ee 100644 --- a/src/front-end/templates/index.hbs +++ b/src/front-end/templates/index.hbs @@ -116,10 +116,13 @@ sidebar = sidebar || 'visible'; } else { sidebar = 'hidden'; + sidebar_toggle.checked = false; + } + if (sidebar === 'visible') { + sidebar_toggle.checked = true; + } else { + html.classList.remove('sidebar-visible'); } - sidebar_toggle.checked = sidebar === 'visible'; - html.classList.remove('sidebar-visible'); - html.classList.add("sidebar-" + sidebar);