// 'More projects' button on use case pages (() => { const button = document.querySelector('.js-moreProjectsBtn'); if (!button) return; const hiddenProjects = document.querySelectorAll('.js-featuredUsersRow[hidden]'); button.addEventListener('click', () => { button.setAttribute('hidden', true); hiddenProjects.forEach(project => { project.removeAttribute('hidden'); }); }); })(); // Use case pages section navigation (() => { const stickyNav = document.querySelector('.js-useCaseStickyNav'); if (!stickyNav) return; const linkData = { 'overview': 'Overview', 'key-benefits': 'Key Benefits', 'use-case': 'Use Case', 'featured-users': 'Featured Users', 'get-started': 'Get Started', }; const container = document.querySelector('.js-useCaseSubnav'); const subNavAnchorLinks = document.querySelector('.js-useCaseSubnavLinks'); const siteHeader = document.querySelector('.js-siteHeader'); const header = document.querySelector('.js-useCaseSubnavHeader'); const icon = document.querySelector('.js-useCaseSubnavMenuIcon'); const menu = document.querySelector('.js-useCaseSubnavMenu'); const contentBody = document.querySelector('.js-useCaseContentBody'); const headerHeightPx = 56; const sectionHeadings = Array.from( document.querySelectorAll('.sectionHeading') ); let distanceFromTop = window.pageYOffset + contentBody.getBoundingClientRect().top - headerHeightPx; if (!header || !menu) return; container.addEventListener('click', handleClick); container.addEventListener('keydown', handleKeydown); changeScrollPosition(); function handleClick(event) { if (event.target === header) { toggleMenu(); } else { closeMenu(); } } function handleKeydown(event) { if (event.key === 'Enter') { closeMenu(); } else { openMenu(); } } function openMenu() { menu.classList.add('UseCaseSubNav-menu--open'); icon.classList.add('UseCaseSubNav-menuIcon--open'); } function closeMenu() { menu.classList.remove('UseCaseSubNav-menu--open'); icon.classList.remove('UseCaseSubNav-menuIcon--open'); } function toggleMenu() { menu.classList.toggle('UseCaseSubNav-menu--open'); icon.classList.toggle('UseCaseSubNav-menuIcon--open'); } sectionHeadings.forEach(heading => { let a = document.createElement('a'); a.classList.add('UseCase-anchorLink', 'anchor-link'); a.href = `${window.location.pathname}#${heading.id}`; a.textContent = linkData[heading.id]; stickyNav.appendChild(a); a = a.cloneNode(); a.textContent = linkData[heading.id]; subNavAnchorLinks.appendChild(a); }); // Selected section styles const anchorLinks = document.querySelectorAll('.anchor-link'); anchorLinks.forEach(link => { link.addEventListener('click', () => { document .querySelectorAll('.anchor-link') .forEach(el => el.classList.remove('selected')); link.classList.add('selected'); }); }); window.addEventListener('scroll', () => { // delay in case the user clicked the anchor link and we are autoscrolling setTimeout(setSelectedAnchor, 500); }); function setSelectedAnchor() { for (heading of sectionHeadings) { const {offsetTop} = heading; if (offsetTop > window.scrollY) { anchorLinks.forEach(link => { const anchorId = link.href.slice(link.href.indexOf('#') + 1); if (anchorId === heading.id) { link.classList.add('selected'); } else { link.classList.remove('selected'); } }); break; } } } /* sticky nav logic -- uses content for y position because reloading page when not scrolled to the top creates bug if using current y position of sticky nav */ window.addEventListener('scroll', setStickyNav); window.addEventListener('resize', () => { distanceFromTop = window.pageYOffset + contentBody.getBoundingClientRect().top - headerHeightPx; changeScrollPosition() }); /** * Changes scroll position according to the size of the header and menu * Also changes according to the user's browser */ function changeScrollPosition() { const SUPPORTS_SCROLL_BEHAVIOR = document.body.style.scrollBehavior !== undefined; const WINDOW_WIDTH_BREAKPOINT_PX = 923; let scrollPosition = headerHeightPx; if (SUPPORTS_SCROLL_BEHAVIOR) { if (window.innerWidth < WINDOW_WIDTH_BREAKPOINT_PX) { scrollPosition += header.clientHeight; } } else { if (window.innerWidth >= WINDOW_WIDTH_BREAKPOINT_PX) { scrollPosition = siteHeader.clientHeight } else { scrollPosition = siteHeader.clientHeight + header.clientHeight; } } } function setStickyNav() { if (window.scrollY > distanceFromTop) { stickyNav.classList.add('UseCaseSubNav-anchorLinks--sticky'); } else { stickyNav.classList.remove('UseCaseSubNav-anchorLinks--sticky'); } } })();