drupal/core/themes/olivero/js/second-level-navigation.js

73 lines
2.3 KiB
JavaScript

/**
* DO NOT EDIT THIS FILE.
* See the following change record for more information,
* https://www.drupal.org/node/2815083
* @preserve
**/
(function (Drupal) {
var isDesktopNav = Drupal.olivero.isDesktopNav;
var secondLevelNavMenus = document.querySelectorAll('.primary-nav__menu-item--has-children');
function toggleSubNav(topLevelMenuITem, toState) {
var button = topLevelMenuITem.querySelector('.primary-nav__button-toggle, .primary-nav__menu-link--button');
var state = toState !== undefined ? toState : button.getAttribute('aria-expanded') !== 'true';
if (state) {
button.setAttribute('aria-expanded', 'true');
topLevelMenuITem.querySelector('.primary-nav__menu--level-2').classList.add('is-active');
} else {
button.setAttribute('aria-expanded', 'false');
topLevelMenuITem.querySelector('.primary-nav__menu--level-2').classList.remove('is-active');
}
}
Drupal.olivero.toggleSubNav = toggleSubNav;
secondLevelNavMenus.forEach(function (el) {
var button = el.querySelector('.primary-nav__button-toggle, .primary-nav__menu-link--button');
button.removeAttribute('aria-hidden');
button.removeAttribute('tabindex');
button.addEventListener('click', function (e) {
var topLevelMenuITem = e.currentTarget.parentNode;
toggleSubNav(topLevelMenuITem);
});
el.addEventListener('mouseover', function (e) {
if (isDesktopNav()) {
toggleSubNav(e.currentTarget, true);
}
});
el.addEventListener('mouseout', function (e) {
if (isDesktopNav()) {
toggleSubNav(e.currentTarget, false);
}
});
});
function closeAllSubNav() {
secondLevelNavMenus.forEach(function (el) {
toggleSubNav(el, false);
});
}
Drupal.olivero.closeAllSubNav = closeAllSubNav;
function areAnySubNavsOpen() {
var subNavsAreOpen = false;
secondLevelNavMenus.forEach(function (el) {
var button = el.querySelector('.primary-nav__button-toggle');
var state = button.getAttribute('aria-expanded') === 'true';
if (state) {
subNavsAreOpen = true;
}
});
return subNavsAreOpen;
}
Drupal.olivero.areAnySubNavsOpen = areAnySubNavsOpen;
document.addEventListener('keyup', function (e) {
if (e.keyCode === 27 && isDesktopNav()) {
closeAllSubNav();
}
});
})(Drupal);