{"version":3,"file":"view-script.min.js","sources":["../../../../block-editor/blocks/immersive-scroller/view-script.js"],"sourcesContent":["\n\nclass ImmersiveScroller {\n\tconstructor( node ) {\n\n\t\tthis.node = node;\n\t\tconst items = this.node.querySelectorAll('.immersive-scroller-item');\n\t\tthis.items = [...items];\n\n\t\tif (!this.items.length) {\n\t\t\treturn;\n\t\t}\n\t\tthis.opts = {\n\t\t\tclasses: {\n\t\t\t\tnodeActive: 'immersive-scroller--active',\n\t\t\t\titemActive: 'immersive-scroller-item--active',\n\t\t\t\tfixMedia: 'immersive-scroller--fix-media',\n\t\t\t\tnavigation: '.immersive-scroller__navigation-dots',\n\t\t\t\tnavigationItem: '.immersive-scroller__navigation-dots',\n\t\t\t\tcontainer: '.immersive-scroller-items__inner',\n\t\t\t\tdotActive: 'immersive-scroller__navigation-dot--active',\n\t\t\t\tpreviousElement: '.immersive-scroller__before',\n\t\t\t\tnextElement: '.immersive-scroller__after',\n\t\t\t},\n\t\t};\n\n\n\t\tthis.opened = false;\n\t\tthis.buffer = 1;\n\t\tthis.previousY = 0;\n\t\tthis.nextElement = this.node.querySelector(this.opts.classes.nextElement);\n\t\tthis.previousElement = this.node.querySelector(this.opts.classes.previousElement);\n\t\tthis.container = this.node.querySelector(this.opts.classes.container);\n\t\tthis.navigation = {\n\t\t\tcontainer: this.node.querySelector(this.opts.classes.navigation),\n\t\t\titem: this.node.querySelector(this.opts.classes.navigationItem)\n\t\t};\n\n\t\tthis.observers = {\n\t\t\titem: new IntersectionObserver(\n\t\t\t\t(entries) => this.itemInView(entries),\n\t\t\t\t{\n\t\t\t\t\tthreshold: [0.81, 0.85, 0.9, 0.95, 0.96, 0.97, 0.98, 0.99, 1]\n\t\t\t\t}\n\t\t\t),\n\t\t\tneighbor: new IntersectionObserver(\n\t\t\t\t(entries) => this.deactivate(entries),\n\t\t\t\t{\n\t\t\t\t\tthreshold: 1,\n\t\t\t\t}\n\t\t\t),\n\t\t\tnode: new IntersectionObserver(\n\t\t\t\t(entries) => this.nodeInView(entries),\n\t\t\t\t{\n\t\t\t\t\tthreshold: 0.05,\n\t\t\t\t}\n\t\t\t),\n\t\t}\n\n\t\t// one navigation circle per item\n\t\tthis.navigation.container.innerHTML = this.items.map((item) => this.navigation.item.innerHTML).join('');\n\n\t\t// all other items use the itemInView observer\n\t\tthis.items.forEach((item) => {\n\t\t\tthis.observers.item.observe(item);\n\t\t});\n\n\t\t// to maybe capture rapid scrolling, target the next and previous siblings\n\t\tthis.observers.neighbor.observe(this.nextElement);\n\t\tthis.observers.neighbor.observe(this.previousElement);\n\t\tthis.observers.node.observe(this.node);\n\n\t\t// and a final hail mary using the footer and header, useful for those that use hotkeys to jump through the page.\n\t\t// this.observers.neighbor.observe(document.getElementById('footer'));\n\t\t// this.observers.neighbor.observe(document.getElementById('masthead'));\n\n\t}\n\n\tinit() {\n\t\tthis.opened = true;\n\t\tthis.node.classList.add(this.opts.classes.nodeActive);\n\t\tthis.node.classList.add(this.opts.classes.fixMedia);\n\t}\n\n\tnodeInView(entries) {\n\t\tentries.forEach((entry) => {\n\t\t\tif ( entry.isIntersecting ) {\n\n\t\t\t\tthis.interval = setInterval(() => {\n\t\t\t\t\tconst distanceFromTopOfViewport = this.node.getBoundingClientRect().y;\n\t\t\t\t\tif (distanceFromTopOfViewport === 0) {\n\t\t\t\t\t\tif (!this.opened) {\n\t\t\t\t\t\t\tthis.init();\n\t\t\t\t\t\t}\n\t\t\t\t\t\tclearInterval(this.interval);\n\t\t\t\t\t}\n\t\t\t\t}, 33);\n\n\t\t\t} else {\n\t\t\t\tthis.node.classList.remove(this.opts.classes.nodeActive);\n\t\t\t\tthis.deactivate();\n\t\t\t}\n\t\t});\n\t}\n\n\n\titemInView(entries) {\n\n\t\tentries.forEach((entry) => {\n\t\t\tif (entry.isIntersecting) {\n\t\t\t\tconst activated = entry.target.classList.contains(this.opts.classes.itemActive);\n\n\t\t\t\tif ( entry.intersectionRatio > 0.7) {\n\n\t\t\t\t\tif(! this.opened) {\n\t\t\t\t\t\tthis.init();\n\t\t\t\t\t}\n\t\t\t\t\tthis.deactivateItems();\n\t\t\t\t\tthis.activateItem(entry.target);\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t}\n\n\tdeactivate(entries = false) {\n\t\tif (!this.opened) {\n\t\t\treturn;\n\t\t}\n\n\t\tif (!entries) {\n\t\t\tthis.deactivateItems();\n\t\t\tthis.node.classList.remove(this.opts.classes.fixMedia);\n\t\t\tthis.opened = false;\n\t\t\treturn;\n\t\t}\n\n\t\tentries.forEach((entry) => {\n\t\t\tif (entry.isIntersecting) {\n\t\t\t\tthis.deactivateItems();\n\t\t\t\tthis.node.classList.remove(this.opts.classes.fixMedia);\n\t\t\t\tthis.opened = false;\n\t\t\t}\n\t\t});\n\t}\n\n\tactivateItem(target) {\n\t\ttarget.classList.add(this.opts.classes.itemActive);\n\t\tthis.adjustDots(target);\n\t}\n\n\tdeactivateItems() {\n\t\tthis.items.forEach((item) => {\n\t\t\tthis.deactivateItem(item);\n\t\t});\n\t}\n\n\tdeactivateItem(target) {\n\t\ttarget.classList.remove(this.opts.classes.itemActive);\n\t}\n\n\tgetIndexOfTarget(target) {\n\t\treturn [...this.container.children].indexOf(target) ?? 0;\n\t}\n\n\tadjustDots( target ) {\n\t\tconst index = this.getIndexOfTarget(target);\n\t\tconst dots = [...this.navigation.container.children];\n\n\t\tdots.forEach((dot) => {\n\t\t\tdot.classList.remove(this.opts.classes.dotActive);\n\t\t});\n\n\t\t// highlight index + 1 dots\n\t\tdots.slice(0, index + 1).map((dot) => {\n\t\t\tdot.classList.add(this.opts.classes.dotActive);\n\t\t});\n\t}\n\n}\n\nconst instances = document.querySelectorAll('.immersive-scroller');\nImmersiveScroller.instances = [ ...instances].map((instance) => new ImmersiveScroller(instance));\n\nexport default ImmersiveScroller;\n"],"names":["ImmersiveScroller","constructor","node","this","items","querySelectorAll","length","opts","classes","nodeActive","itemActive","fixMedia","navigation","navigationItem","container","dotActive","previousElement","nextElement","opened","buffer","previousY","querySelector","item","observers","IntersectionObserver","entries","itemInView","threshold","neighbor","deactivate","nodeInView","innerHTML","map","join","forEach","observe","init","classList","add","entry","isIntersecting","interval","setInterval","getBoundingClientRect","y","clearInterval","remove","target","contains","intersectionRatio","deactivateItems","activateItem","adjustDots","deactivateItem","getIndexOfTarget","children","indexOf","index","dots","dot","slice","instances","document","instance"],"mappings":"kEAEA,MAAMA,EACLC,WAAAA,CAAaC,GAEZC,KAAKD,KAAOA,EACZ,MAAME,EAAQD,KAAKD,KAAKG,iBAAiB,4BACzCF,KAAKC,MAAQ,IAAIA,GAEZD,KAAKC,MAAME,SAGhBH,KAAKI,KAAO,CACXC,QAAS,CACRC,WAAY,6BACZC,WAAY,kCACZC,SAAU,gCACVC,WAAY,uCACZC,eAAgB,uCAChBC,UAAW,mCACXC,UAAW,6CACXC,gBAAiB,8BACjBC,YAAa,+BAKfd,KAAKe,QAAS,EACdf,KAAKgB,OAAS,EACdhB,KAAKiB,UAAY,EACjBjB,KAAKc,YAAcd,KAAKD,KAAKmB,cAAclB,KAAKI,KAAKC,QAAQS,aAC7Dd,KAAKa,gBAAkBb,KAAKD,KAAKmB,cAAclB,KAAKI,KAAKC,QAAQQ,iBACjEb,KAAKW,UAAYX,KAAKD,KAAKmB,cAAclB,KAAKI,KAAKC,QAAQM,WAC3DX,KAAKS,WAAa,CACjBE,UAAWX,KAAKD,KAAKmB,cAAclB,KAAKI,KAAKC,QAAQI,YACrDU,KAAMnB,KAAKD,KAAKmB,cAAclB,KAAKI,KAAKC,QAAQK,iBAGjDV,KAAKoB,UAAY,CAChBD,KAAM,IAAIE,sBACRC,GAAYtB,KAAKuB,WAAWD,IAC7B,CACCE,UAAW,CAAC,IAAM,IAAM,GAAK,IAAM,IAAM,IAAM,IAAM,IAAM,KAG7DC,SAAU,IAAIJ,sBACZC,GAAYtB,KAAK0B,WAAWJ,IAC7B,CACCE,UAAW,IAGbzB,KAAM,IAAIsB,sBACRC,GAAYtB,KAAK2B,WAAWL,IAC7B,CACCE,UAAW,OAMdxB,KAAKS,WAAWE,UAAUiB,UAAY5B,KAAKC,MAAM4B,KAAKV,GAASnB,KAAKS,WAAWU,KAAKS,YAAWE,KAAK,IAGpG9B,KAAKC,MAAM8B,SAASZ,IACnBnB,KAAKoB,UAAUD,KAAKa,QAAQb,EAAK,IAIlCnB,KAAKoB,UAAUK,SAASO,QAAQhC,KAAKc,aACrCd,KAAKoB,UAAUK,SAASO,QAAQhC,KAAKa,iBACrCb,KAAKoB,UAAUrB,KAAKiC,QAAQhC,KAAKD,MAMlC,CAEAkC,IAAAA,GACCjC,KAAKe,QAAS,EACdf,KAAKD,KAAKmC,UAAUC,IAAInC,KAAKI,KAAKC,QAAQC,YAC1CN,KAAKD,KAAKmC,UAAUC,IAAInC,KAAKI,KAAKC,QAAQG,SAC3C,CAEAmB,UAAAA,CAAWL,GACVA,EAAQS,SAASK,IACXA,EAAMC,eAEVrC,KAAKsC,SAAWC,aAAY,KAEO,IADAvC,KAAKD,KAAKyC,wBAAwBC,IAE9DzC,KAAKe,QACTf,KAAKiC,OAENS,cAAc1C,KAAKsC,UACpB,GACE,KAGHtC,KAAKD,KAAKmC,UAAUS,OAAO3C,KAAKI,KAAKC,QAAQC,YAC7CN,KAAK0B,aACN,GAEF,CAGAH,UAAAA,CAAWD,GAEVA,EAAQS,SAASK,IACZA,EAAMC,iBACSD,EAAMQ,OAAOV,UAAUW,SAAS7C,KAAKI,KAAKC,QAAQE,YAE/D6B,EAAMU,kBAAoB,KAEzB9C,KAAKe,QACTf,KAAKiC,OAENjC,KAAK+C,kBACL/C,KAAKgD,aAAaZ,EAAMQ,SAE1B,GAEF,CAEAlB,UAAAA,CAAWJ,GAAU,GACpB,GAAKtB,KAAKe,OAIV,OAAKO,OAOLA,EAAQS,SAASK,IACZA,EAAMC,iBACTrC,KAAK+C,kBACL/C,KAAKD,KAAKmC,UAAUS,OAAO3C,KAAKI,KAAKC,QAAQG,UAC7CR,KAAKe,QAAS,EACf,KAXAf,KAAK+C,kBACL/C,KAAKD,KAAKmC,UAAUS,OAAO3C,KAAKI,KAAKC,QAAQG,eAC7CR,KAAKe,QAAS,GAWhB,CAEAiC,YAAAA,CAAaJ,GACZA,EAAOV,UAAUC,IAAInC,KAAKI,KAAKC,QAAQE,YACvCP,KAAKiD,WAAWL,EACjB,CAEAG,eAAAA,GACC/C,KAAKC,MAAM8B,SAASZ,IACnBnB,KAAKkD,eAAe/B,EAAK,GAE3B,CAEA+B,cAAAA,CAAeN,GACdA,EAAOV,UAAUS,OAAO3C,KAAKI,KAAKC,QAAQE,WAC3C,CAEA4C,gBAAAA,CAAiBP,GAChB,MAAO,IAAI5C,KAAKW,UAAUyC,UAAUC,QAAQT,IAAW,CACxD,CAEAK,UAAAA,CAAYL,GACX,MAAMU,EAAQtD,KAAKmD,iBAAiBP,GAC9BW,EAAO,IAAIvD,KAAKS,WAAWE,UAAUyC,UAE3CG,EAAKxB,SAASyB,IACbA,EAAItB,UAAUS,OAAO3C,KAAKI,KAAKC,QAAQO,UAAU,IAIlD2C,EAAKE,MAAM,EAAGH,EAAQ,GAAGzB,KAAK2B,IAC7BA,EAAItB,UAAUC,IAAInC,KAAKI,KAAKC,QAAQO,UAAU,GAEhD,EAID,MAAM8C,EAAYC,SAASzD,iBAAiB,8BAC5CL,EAAkB6D,UAAY,IAAKA,GAAW7B,KAAK+B,GAAa,IAAI/D,EAAkB+D"}