From f13bc74f4a41dfcf1cc5feeaa4b00006022a6302 Mon Sep 17 00:00:00 2001 From: Jed Fox Date: Thu, 27 Apr 2023 12:52:58 -0400 Subject: [PATCH] Move JS to assets/main.js --- assets/main.js | 48 ++++++++++++++++++++++++++++++++++- layouts/partials/sidebar.html | 43 ------------------------------- 2 files changed, 47 insertions(+), 44 deletions(-) diff --git a/assets/main.js b/assets/main.js index 35c7f745..ca459c0f 100644 --- a/assets/main.js +++ b/assets/main.js @@ -2,7 +2,53 @@ 'use strict'; const onLoaded = () => { - // Nothing for now + document.documentElement.classList.add('js'); + + for (const header of document.querySelectorAll('.sidebar .sub-title')) { + header.role = 'button'; + header.tabIndex = 0; + header.ariaExpanded = true; + header.ariaControlsElement = header.nextElementSibling; + const toggle = () => { + header.nextElementSibling.classList.toggle('collapsed'); + const collapsed = + header.nextElementSibling.classList.contains('collapsed'); + header.ariaExpanded = !collapsed; + header.parentNode.classList.toggle('collapsed', collapsed); + }; + header.addEventListener('click', toggle); + header.addEventListener('keydown', (e) => { + if (e.key === 'Enter' || e.key === 'Space' || e.key === ' ') { + toggle(); + e.preventDefault(); + } + }); + if (!header.nextElementSibling.querySelector('.active')) { + toggle(); + } + } + + const toggle = document.querySelector('.sidebar .toggle-button'); + toggle.addEventListener('click', () => { + const collapsed = document.querySelectorAll( + '.sidebar li.collapsed:not(.stay-collapsed)' + ); + if (collapsed.length) { + for (const collapsible of collapsed) { + collapsible.querySelector('.sub-title').click(); + } + toggle.querySelector('strong').textContent = '\u2212'; // minus sign + toggle.querySelector('span').textContent = 'Collapse All'; + } else { + for (const collapsible of document.querySelectorAll( + '.sidebar > ul > li:not(.stay-collapsed)' + )) { + collapsible.querySelector('.sub-title').click(); + } + toggle.querySelector('strong').textContent = '+'; + toggle.querySelector('span').textContent = 'Expand All'; + } + }); }; if (['interactive', 'complete'].indexOf(document.readyState) !== -1) { diff --git a/layouts/partials/sidebar.html b/layouts/partials/sidebar.html index e6512940..7c839615 100644 --- a/layouts/partials/sidebar.html +++ b/layouts/partials/sidebar.html @@ -35,46 +35,3 @@ {{ end }} - -