{"version":3,"sources":["webpack:///./src/js/modules/jump-links.js"],"names":["jumpLinks","Component","setupDefaults","this","dom","$sectionsData","Array","from","el","parentNode","querySelectorAll","$jumpLinks","querySelector","$images","reduce","array","obj","dataset","section","push","setObserver","scrollTo","insertSections","offsetTopPercentage","offsetHeight","window","innerHeight","options","root","threshold","rootMargin","observer","IntersectionObserver","entries","handleOnIntersect","addListeners","addEventListener","e","handleClick","forEach","image","scrollBy","scrollToSection","innerHTML","cloneJumpLinks","cloneNode","id","split","join","setAttribute","observe","navJumpLink","entry","isIntersecting","entryId","target","closest","item","classList","remove","jumplinkIndex","findIndex","x","getAttribute","add","contains","preventDefault","substring","offset","find","offsetTop","scroll","top","behavior"],"mappings":"2FAAA,kBAEA,MAAMA,UAAkBC,YACtBC,gBACEC,KAAKC,IAAM,CACTC,cAAeC,MAAMC,KAAKJ,KAAKK,GAAGC,WAAWC,iBAAiB,mBAC9DC,WAAYR,KAAKK,GAAGI,cAAc,eAClCC,QAASV,KAAKK,GAAGC,WAAWC,iBAAiB,QAG/CP,KAAKC,IAAIC,cAAgBF,KAAKC,IAAIC,cAAcS,OAAO,CAACC,EAAOC,KACzDA,EAAIC,QAAQC,SAASH,EAAMI,KAAKH,GAC7BD,GACN,IAEHZ,KAAKiB,cACLjB,KAAKkB,SAAW,GAChBlB,KAAKmB,iBAGPF,cACE,MAAMG,EAA8C,IAAvBpB,KAAKK,GAAGgB,aAAsBC,OAAOC,YAAc,EAE1EC,EAAU,CACdC,KAAM,KACNC,UAAW,KACXC,WAAa,IAAGP,UAJa,GAAKA,MAMpCpB,KAAK4B,SAAW,IAAIC,qBAAsBC,GAAY9B,KAAK+B,kBAAkBD,GAAUN,GAGzFQ,eACEhC,KAAKC,IAAIO,WAAWyB,iBAAiB,QAAUC,GAAMlC,KAAKmC,YAAYD,IACtElC,KAAKC,IAAIS,QAAQ0B,QAASC,GAAUA,EAAMJ,iBAAiB,OAASC,GAAMlC,KAAKsC,SAASJ,KAG1FI,SAASJ,GACHlC,KAAKkB,UACPlB,KAAKuC,gBAAgBvC,KAAKkB,UAI9BC,iBACEnB,KAAKC,IAAIO,WAAWgC,UAAY,GAChC,MAAMC,EAAiBzC,KAAKC,IAAIO,WAAWkC,WAAU,GAErD1C,KAAKC,IAAIC,cAAckC,QAASrB,IAC9B,MAAM4B,EAAK5B,EAAQD,QAAQC,QAAQ6B,MAAM,KAAKC,KAAK,IACnD9B,EAAQ+B,aAAa,KAAO,GAAEH,GAC9B3C,KAAK4B,SAASmB,QAAQhC,GACtB0B,EAAeD,WAAc,0CAAyCG,MAAO5B,EAAQD,QAAQC,qBAE/Ff,KAAKC,IAAIO,WAAWgC,UAAYC,EAAeD,UAE/CxC,KAAKgD,YAAchD,KAAKK,GAAGE,iBAAiB,qBAG9CwB,kBAAkBD,GAChBA,EAAQM,QAASa,IACf,GAAIA,EAAMC,eAAgB,CACxB,MAAMC,EAAUF,EAAMG,OAAOC,QAAQ,kBAAkBV,GACvD3C,KAAKgD,YAAYZ,QAASkB,GAASA,EAAKC,UAAUC,OAAO,6BACzD,MAAMC,EAAgBtD,MAAMC,KAAKJ,KAAKgD,aAAaU,UAChDC,GAAMA,EAAEC,aAAa,UAAa,IAAGT,GAExCnD,KAAKgD,YAAYS,GAAeF,UAAUM,IAAI,4BAC1C7D,KAAKkB,WAAaiC,IACpBnD,KAAKkB,SAAW,OAMxBiB,YAAYD,GACV,GAAIA,EAAEkB,OAAOG,UAAUO,SAAS,oBAAqB,CACnD5B,EAAE6B,iBACF,MAAMpB,EAAKT,EAAEkB,OAAOQ,aAAa,QAAQI,UAAU,GACnDhE,KAAKkB,SAAWyB,EAChB3C,KAAKuC,gBAAgBI,IAIzBJ,gBAAgBI,GAAI,MAClB,MAAMsB,EAASjE,KAAKK,GAAGgB,aACjB+B,GAAS,UAAAjD,MAAMC,KAAKJ,KAAKC,IAAIC,eAAegE,KAAMP,GAAMA,EAAEhB,KAAOA,UAAxD,eAA6DwB,WAAYF,EACxF3C,OAAO8C,OAAO,CACZC,IAAKjB,EAAO,GACZkB,SAAU,YAMDzE","file":"95.bundle.js","sourcesContent":["import { Component } from '@verndale/core'\n\nclass jumpLinks extends Component {\n setupDefaults() {\n this.dom = {\n $sectionsData: Array.from(this.el.parentNode.querySelectorAll('[data-section]')),\n $jumpLinks: this.el.querySelector('.jump-links'),\n $images: this.el.parentNode.querySelectorAll('img')\n }\n\n this.dom.$sectionsData = this.dom.$sectionsData.reduce((array, obj) => {\n if (obj.dataset.section) array.push(obj)\n return array\n }, [])\n\n this.setObserver()\n this.scrollTo = ''\n this.insertSections()\n }\n\n setObserver() {\n const offsetTopPercentage = (this.el.offsetHeight * 100) / window.innerHeight + 3\n const offsetBottomPercentage = 94 - offsetTopPercentage\n const options = {\n root: null,\n threshold: 0.001,\n rootMargin: `-${offsetTopPercentage}% 0% -${offsetBottomPercentage}%`\n }\n this.observer = new IntersectionObserver((entries) => this.handleOnIntersect(entries), options)\n }\n\n addListeners() {\n this.dom.$jumpLinks.addEventListener('click', (e) => this.handleClick(e))\n this.dom.$images.forEach((image) => image.addEventListener('load', (e) => this.scrollBy(e)))\n }\n\n scrollBy(e) {\n if (this.scrollTo) {\n this.scrollToSection(this.scrollTo)\n }\n }\n\n insertSections() {\n this.dom.$jumpLinks.innerHTML = ''\n const cloneJumpLinks = this.dom.$jumpLinks.cloneNode(true)\n\n this.dom.$sectionsData.forEach((section) => {\n const id = section.dataset.section.split(' ').join('')\n section.setAttribute('id', `${id}`)\n this.observer.observe(section)\n cloneJumpLinks.innerHTML += `
  • ${section.dataset.section}
  • `\n })\n this.dom.$jumpLinks.innerHTML = cloneJumpLinks.innerHTML\n\n this.navJumpLink = this.el.querySelectorAll('.jump-links__link')\n }\n\n handleOnIntersect(entries) {\n entries.forEach((entry) => {\n if (entry.isIntersecting) {\n const entryId = entry.target.closest('[data-section]').id\n this.navJumpLink.forEach((item) => item.classList.remove('jump-links__link--active'))\n const jumplinkIndex = Array.from(this.navJumpLink).findIndex(\n (x) => x.getAttribute('href') === `#${entryId}`\n )\n this.navJumpLink[jumplinkIndex].classList.add('jump-links__link--active')\n if (this.scrollTo === entryId) {\n this.scrollTo = '';\n }\n }\n })\n }\n\n handleClick(e) {\n if (e.target.classList.contains('jump-links__link')) {\n e.preventDefault()\n const id = e.target.getAttribute('href').substring(1)\n this.scrollTo = id\n this.scrollToSection(id);\n }\n }\n\n scrollToSection(id) {\n const offset = this.el.offsetHeight\n const target = Array.from(this.dom.$sectionsData).find((x) => x.id === id)?.offsetTop - offset\n window.scroll({\n top: target-66,\n behavior: 'smooth'\n })\n\n }\n}\n\nexport default jumpLinks\n"],"sourceRoot":""}