From 44c29609437ce6817ed674e5195c438a7a7f3c30 Mon Sep 17 00:00:00 2001 From: Joe Nelson Date: Mon, 21 Jun 2021 16:26:59 -0500 Subject: [PATCH] Maintain aria-expanded along with .current in menu Use jquery setter chaining for speed --- src/theme.js | 37 +++++++++++++++++++++++++++++-------- 1 file changed, 29 insertions(+), 8 deletions(-) diff --git a/src/theme.js b/src/theme.js index 19778a41d..504fa642b 100644 --- a/src/theme.js +++ b/src/theme.js @@ -145,11 +145,19 @@ function ThemeNav () { // If we found a matching link then reset current and re-apply // otherwise retain the existing match if (link.length > 0) { - $('.wy-menu-vertical .current').removeClass('current'); - link.addClass('current'); - link.closest('li.toctree-l1').parent().addClass('current'); + $('.wy-menu-vertical .current') + .removeClass('current') + .attr('aria-expanded','false'); + link.addClass('current') + .attr('aria-expanded','true'); + link.closest('li.toctree-l1') + .parent() + .addClass('current') + .attr('aria-expanded','true'); for (let i = 1; i <= 10; i++) { - link.closest('li.toctree-l' + i).addClass('current'); + link.closest('li.toctree-l' + i) + .addClass('current') + .attr('aria-expanded','true'); } link[0].scrollIntoView(); } @@ -188,13 +196,26 @@ function ThemeNav () { nav.toggleCurrent = function (elem) { var parent_li = elem.closest('li'); - parent_li.siblings('li.current').removeClass('current'); - parent_li.siblings().find('li.current').removeClass('current'); + parent_li + .siblings('li.current') + .removeClass('current') + .attr('aria-expanded','false'); + parent_li + .siblings() + .find('li.current') + .removeClass('current') + .attr('aria-expanded','false'); var children = parent_li.find('> ul li'); // Don't toggle terminal elements. if (children.length) { - children.removeClass('current'); - parent_li.toggleClass('current'); + children + .removeClass('current') + .attr('aria-expanded','false'); + parent_li + .toggleClass('current') + .attr('aria-expanded', function(i, old) { + return old == 'true' ? 'false' : 'true'; + }); } }