diff options
Diffstat (limited to 'helpcontent2/help3xsl/a11y-toggle.js')
-rw-r--r-- | helpcontent2/help3xsl/a11y-toggle.js | 54 |
1 files changed, 54 insertions, 0 deletions
diff --git a/helpcontent2/help3xsl/a11y-toggle.js b/helpcontent2/help3xsl/a11y-toggle.js new file mode 100644 index 0000000000..62e1032b02 --- /dev/null +++ b/helpcontent2/help3xsl/a11y-toggle.js @@ -0,0 +1,54 @@ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + */ + +function hideNavs() { + let navs = document.querySelectorAll('[data-a11y-toggle] + nav'); + navs.forEach((nav) => { + if (!nav.hasAttribute('hidden')) { + nav.previousElementSibling.setAttribute('aria-expanded', 'false'); + nav.setAttribute('hidden', 'true'); + } + }); +} +const navToggle = document.querySelectorAll('[data-a11y-toggle]'); +navToggle.forEach((toggle) => { + let navList = toggle.nextElementSibling; + let navLinks = navList.querySelectorAll('a'); + toggle.addEventListener('click', (event) => { + if (navList.hasAttribute('hidden')) { + toggle.setAttribute('aria-expanded', 'true'); + navList.removeAttribute('hidden'); + // Set focus on first link + // will be highlighted for keyboard users + navLinks[0].focus(); + } else { + navList.setAttribute('hidden', 'true'); + toggle.setAttribute('aria-expanded', 'false'); + } + event.stopPropagation(); + }, false); +}); +document.addEventListener('keydown', (event) => { + // Ignore IME composition + if (event.isComposing || event.keyCode === 229) { + return; + } + + // Close menu with ESC key + if (event.keyCode === 27) { + hideNavs(); + } +}, false); +document.addEventListener('click', (event) => { + // close navigation menus when clicking anywhere (except when on mobile) + if (event.target.closest('[data-a11y-toggle] + nav') || Math.max(document.documentElement.clientWidth, window.innerWidth || 0) < 960) return + hideNavs(); +}) + +/* vim:set shiftwidth=4 softtabstop=4 expandtab cinoptions=b1,g0,N-s cinkeys+=0=break: */ |