/* Original Author: Bramus Van Damme Link to original: https://www.bram.us/2020/01/10/smooth-scrolling-sticky-scrollspy-navigation/ Most of this code comes courtesy of Bramus Van Damme, with some minor tweaks to get it working for my use case. Thanks, Bramus! */ let activeElement = null; window.addEventListener('DOMContentLoaded', () => { const observer = new IntersectionObserver(entries => { if (entries) { const contents = document.getElementById("contents"); if (contents) { contents.innerHTML = "Contents"; } } entries.forEach(entry => { if (activeElement) { document.querySelectorAll("nav[id='TableOfContents'] li").forEach((node) => { node.classList.add('inactive'); node.classList.replace('active', 'inactive'); }); } if (entry.intersectionRatio > 0) { activeElement = entry.target.getAttribute('id'); } if (activeElement) { document.querySelector(`nav[id='TableOfContents'] li a[href="#${activeElement}"]`).parentElement.classList.replace('inactive', 'active'); } }); }); const post = document.querySelector(".post"); post.querySelectorAll("h1[id], h2[id], h3[id], h4[id], h5[id], h6[id]").forEach((section) => { observer.observe(section); }); });