drupal/core/themes/olivero/js/scripts.js

103 lines
3.1 KiB
JavaScript

/**
* DO NOT EDIT THIS FILE.
* See the following change record for more information,
* https://www.drupal.org/node/2815083
* @preserve
**/
(function (Drupal) {
Drupal.olivero = {};
function isDesktopNav() {
var navButtons = document.querySelector('.mobile-buttons');
return window.getComputedStyle(navButtons).getPropertyValue('display') === 'none';
}
Drupal.olivero.isDesktopNav = isDesktopNav;
var wideNavButton = document.querySelector('.nav-primary__button');
var siteHeaderFixable = document.querySelector('.site-header__fixable');
function wideNavIsOpen() {
return wideNavButton.getAttribute('aria-expanded') === 'true';
}
function showWideNav() {
if (isDesktopNav()) {
wideNavButton.setAttribute('aria-expanded', 'true');
siteHeaderFixable.classList.add('is-expanded');
}
}
function hideWideNav() {
if (isDesktopNav()) {
wideNavButton.setAttribute('aria-expanded', 'false');
siteHeaderFixable.classList.remove('is-expanded');
}
}
if ('IntersectionObserver' in window && 'IntersectionObserverEntry' in window && 'intersectionRatio' in window.IntersectionObserverEntry.prototype) {
var fixableElements = document.querySelectorAll('.fixable');
function toggleDesktopNavVisibility(entries) {
if (!isDesktopNav()) return;
entries.forEach(function (entry) {
if (entry.intersectionRatio < 1) {
fixableElements.forEach(function (el) {
return el.classList.add('js-fixed');
});
} else {
fixableElements.forEach(function (el) {
return el.classList.remove('js-fixed');
});
}
});
}
function getRootMargin() {
var rootMarginTop = 72;
var _document = document,
body = _document.body;
if (body.classList.contains('toolbar-fixed')) {
rootMarginTop -= 39;
}
if (body.classList.contains('toolbar-horizontal') && body.classList.contains('toolbar-tray-open')) {
rootMarginTop -= 40;
}
return "".concat(rootMarginTop, "px 0px 0px 0px");
}
function monitorNavPosition() {
var primaryNav = document.querySelector('.site-header');
var options = {
rootMargin: getRootMargin(),
threshold: [0.999, 1]
};
var observer = new IntersectionObserver(toggleDesktopNavVisibility, options);
observer.observe(primaryNav);
}
wideNavButton.addEventListener('click', function () {
if (!wideNavIsOpen()) {
showWideNav();
} else {
hideWideNav();
}
});
siteHeaderFixable.querySelector('.site-header__inner').addEventListener('focusin', showWideNav);
document.querySelector('.skip-link').addEventListener('click', hideWideNav);
monitorNavPosition();
}
document.addEventListener('keyup', function (e) {
if (e.keyCode === 27) {
if ('toggleSearchVisibility' in Drupal.olivero && 'searchIsVisible' in Drupal.olivero && Drupal.olivero.searchIsVisible()) {
Drupal.olivero.toggleSearchVisibility(false);
} else {
hideWideNav();
}
}
});
})(Drupal);