{"version":3,"file":"sourcebook.js","names":[],"sources":["../resources/modern-javascript/sourcebook.js"],"sourcesContent":["const getMegaMenuElement = () => {\n    const megaMenu = document.querySelector('.mega-menu');\n\n    if (megaMenu) {\n        return megaMenu;\n    } else {\n        return document.body;\n    }\n}\n\nconst observe = () => {\n    const navigation = document.querySelector('.sourcebook-navigation')\n    const stickyTrigger = document.querySelector('.sourcebook-navigation-sticky-trigger')\n    const navigationItems = navigation.querySelector('.sourcebook-navigation__items')\n\n    const setupScrollObserver = () => {\n        const root = document.querySelector(':root');\n        const megaMenu = getMegaMenuElement();\n        const noticeHeight = parseInt(root.style.getPropertyValue('--notice-height'));\n        const noticeLocaleHeight = parseInt(root.style.getPropertyValue('--notice-locale-height'));\n        const megaMenuHeight = parseInt(getComputedStyle(getMegaMenuElement()).getPropertyValue('--mega-menu-height'));\n        const adminbarHeight = parseInt(getComputedStyle(document.body).getPropertyValue('--admin-bar-height'));\n        const debugbarHeight = parseInt(getComputedStyle(document.body).getPropertyValue('--debug-bar-height'));\n        const stickyOffset = noticeHeight + noticeLocaleHeight + megaMenuHeight + adminbarHeight + debugbarHeight;\n\n        const observer = new IntersectionObserver(entries => {\n            const entry = entries[0] // we only have one entry so no point in looping\n\n            navigation.toggleAttribute('sticky', !entry.isIntersecting)\n        }, {\n            rootMargin: `-${stickyOffset}px 0px 100% 0px`\n        })\n\n        observer.observe(stickyTrigger)\n    }\n\n    const scrollToActiveElement = () => {\n        const active = navigationItems.querySelector('.sourcebook-navigation__item--active')\n\n        if (!active) {\n            return\n        }\n\n        const left = active.offsetLeft - 16 // 16 is a bit handwavey magic number\n\n        navigationItems.scrollTo({ left })\n    }\n\n    setupScrollObserver()\n    scrollToActiveElement()\n}\n\nif (document.readyState === 'loading') {\n    document.addEventListener('DOMContentLoaded', () => {\n        observe();\n    });\n} else {\n    observe();\n}\n"],"mappings":"AAAA,IAAM,EAAA,UAA2B,CAMzB,OALa,SAAS,cAAc,YAEpC,GAGO,SAAS,IAExB,EAEM,EAAA,UAAgB,CAClB,IAAM,EAAa,SAAS,cAAc,wBAAwB,EAC5D,EAAgB,SAAS,cAAc,uCAAuC,EAC9E,EAAkB,EAAW,cAAc,+BAA+B,GAmChF,UAjCkC,CAC9B,IAAM,EAAO,SAAS,cAAc,OAAO,EAC1B,EAAmB,EACpC,IAAM,EAAe,SAAS,EAAK,MAAM,iBAAiB,iBAAiB,CAAC,EACtE,EAAqB,SAAS,EAAK,MAAM,iBAAiB,wBAAwB,CAAC,EACnF,EAAiB,SAAS,iBAAiB,EAAmB,CAAC,CAAC,CAAC,iBAAiB,oBAAoB,CAAC,EACvG,EAAiB,SAAS,iBAAiB,SAAS,IAAI,CAAC,CAAC,iBAAiB,oBAAoB,CAAC,EAChG,EAAiB,SAAS,iBAAiB,SAAS,IAAI,CAAC,CAAC,iBAAiB,oBAAoB,CAAC,EAChG,EAAe,EAAe,EAAqB,EAAiB,EAAiB,EAU3F,IARqB,qBAAA,SAAqB,EAAW,CACjD,IAAM,EAAQ,EAAQ,GAEtB,EAAW,gBAAgB,SAAU,CAAC,EAAM,cAAc,CAC9D,EAAG,CACC,WAAA,IAAgB,EAAA,iBACpB,CAEO,CAAC,CAAC,QAAQ,CAAa,CAClC,EAcA,CAAoB,EACpB,UAboC,CAChC,IAAM,EAAS,EAAgB,cAAc,sCAAsC,EAE9E,KAIL,KAAM,EAAO,EAAO,WAAa,GAEjC,EAAgB,SAAS,CAAE,KAAA,CAAK,CAAC,CAFA,CAGrC,EAGsB,CAC1B,EAEI,SAAS,aAAe,UACxB,SAAS,iBAAiB,mBAAA,UAA0B,CAChD,EAAQ,CACZ,CAAC,EAED,EAAQ"}