{"version":3,"sources":["src/scripts/components/sticky-nav.js"],"names":["$","jQuery","init","BuildNav","$context","self","$stickyNav","find","$leftRef","$chapters","$chapterHeading","$articleBody","$articleNavToggle","$article","$readMore","$chapterCount","chapterVars","chapterInd","left","right","positions","breakpoint","resetTOC","binds","addClass","removeClass","getPositions","stickyNav","setChapter","window","on","toggleHighlight","scrollToChapter","toggleClass","offset","getOffset","i","length","push","top","outerHeight","chapterHeight","getHorizontalPosition","height","vHeight","innerHeight","scrollLeft","currentPosition","scrollTop","hasClass","attr","css","unfixSticky","Number","position","next","undefined","trigger","chapterIndex","html","e","ind","index","target","animate","document","initNav","$this","$articleContext","prev"],"mappings":"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","file":"sticky-nav.js","sourcesContent":["import {debounce, breakpoint} from '../utils/utilities.js';\nvar $ = jQuery;\n\nfunction init() {\n /**\n * Constructor function\n * @param {Object} $context jquery object\n */\n function BuildNav($context) {\n var self = this;\n\n //selectors\n self.$stickyNav = $context.find('.article__sticky-nav');\n self.$leftRef = $context.find('div.article__left-ref');\n self.$chapters = $context.find('.article__sticky-nav-nav-wrapper').find('button');\n self.$chapterHeading = $context.find('.article__chapter-heading');\n self.$articleBody = $context.find('.article__body-copy');\n self.$articleNavToggle = $context.find('.article__sticky-nav-toggle');\n self.$article = $context;\n self.$readMore = $context.find('.article-body__read-more');\n self.$chapterCount = $context.find('.article__sticky-nav-current');\n\n self.chapterVars = {\n chapterInd: 0,\n left: 0,\n right: 0,\n positions: [],\n breakpoint: ''\n };\n\n resetTOC();\n binds();\n // $(this.$article).off('transitionend webkitTransitionEnd oTransitionEnd MSTransitionEnd', initNav);\n this.$stickyNav.addClass('_visible');\n\n function resetTOC() {\n self.$stickyNav.removeClass('_open');\n getPositions();\n stickyNav();\n setChapter();\n }\n\n function binds() {\n\n $(window).on('chapterChange', toggleHighlight);\n\n $(window).on('scroll', stickyNav);\n $(window).on('scroll', debounce(function() {\n setChapter();\n }, 250));\n\n $(window).on('resize', debounce(function() {\n resetTOC();\n }, 250));\n\n $(window).on('recalculateChapeters', resetTOC);\n\n self.$chapters.on('click', scrollToChapter);\n\n self.$articleNavToggle.on('click', function() {\n self.$stickyNav.toggleClass('_open');\n });\n }\n\n /**\n * Get Positions for sticky Nav\n */\n function getPositions() {\n self.chapterVars.positions = [];\n self.chapterVars.breakpoint = breakpoint();\n self.chapterVars.offset = getOffset();\n\n for(let i = 0; i < self.$chapterHeading.length; i ++) {\n if(i === 0) {\n self.chapterVars.positions.push($(self.$chapterHeading[i]).offset().top - $(self.$chapterHeading[i]).outerHeight());\n }\n else {\n self.chapterVars.positions.push($(self.$chapterHeading[i]).offset().top - $(self.$chapterHeading[i]).outerHeight() - self.chapterVars.offset);\n }\n }\n\n self.chapterVars.chapterHeight = self.$stickyNav.outerHeight(true) + 60;\n\n if(self.chapterVars.breakpoint === 'desktop') {\n self.chapterVars.positions.push(($(self.$articleBody).offset().top + $(self.$articleBody).outerHeight(true)) - self.chapterVars.chapterHeight);\n self.chapterVars.left = getHorizontalPosition();\n }\n else {\n self.chapterVars.positions.push(($(self.$articleBody).offset().top + $(self.$articleBody).outerHeight(true)) - $(window).height() - ($(self.$articleNavToggle).outerHeight(true)*2));\n }\n }\n\n /**\n * Get offset for sticky nav\n * @return {Number} Offset\n */\n function getOffset() {\n let vHeight = window.innerHeight;\n return vHeight/3;\n }\n\n /**\n * Get Horizontal position for nav\n * @return {Number} Horizontal Position\n */\n function getHorizontalPosition() {\n return (self.$leftRef.offset().left - $(window).scrollLeft());\n }\n\n /**\n * Initialize Sticky Nav\n */\n function stickyNav() {\n let currentPosition = $(window).scrollTop();\n let positions = self.chapterVars.positions;\n\n if(currentPosition > positions[0] && currentPosition < positions[positions.length -1]) {\n if(!self.$stickyNav.hasClass('_active')) {\n self.$stickyNav.removeClass('_bottom');\n self.$stickyNav.addClass('_active');\n }\n self.$stickyNav.attr('style', '');\n if(self.chapterVars.breakpoint === 'desktop') {\n $(self.$stickyNav).css({'left' : self.chapterVars.left, 'top' : 0});\n }\n\n }\n else if(currentPosition > positions[positions.length -1]) {\n if(!self.$stickyNav.hasClass('_bottom')) {\n unfixSticky();\n }\n }\n else {\n self.$stickyNav.removeClass('_active');\n if(self.chapterVars.breakpoint === 'desktop') {\n $(self.$stickyNav).css({\n 'left' : '0',\n 'top' : + Number($(self.$chapterHeading[0]).position().top) + 'px'\n });\n }\n }\n }\n\n /**\n * Unfix sticky Nav\n */\n function unfixSticky() {\n if(self.chapterVars.breakpoint === 'desktop') {\n if(!self.$stickyNav.hasClass('_bottom')) {\n $(self.$stickyNav).css({\n 'top': (self.$articleBody.outerHeight(true) - self.chapterVars.chapterHeight) +'px',\n 'left': '0',\n 'right': 'initial'\n }).removeClass('_active').addClass('_bottom');\n }\n }\n else {\n if(!self.$stickyNav.hasClass('_bottom')) {\n $(self.$stickyNav).css({\n 'top': (self.$articleBody.outerHeight(true) - self.chapterVars.chapterHeight) +'px',\n 'right': '0',\n 'left': 'initial'\n }).removeClass('_active').addClass('_bottom');\n }\n }\n }\n\n\n /**\n * Set Chapeter in sticky Nav\n */\n function setChapter() {\n let currentPosition = $(window).scrollTop();\n let positions = self.chapterVars.positions;\n\n for(var i = 0; i < positions.length; i ++) {\n let next = positions[i+1];\n\n if(((currentPosition >= positions[i]) && (currentPosition <= next)) || currentPosition < positions[0]) {\n self.chapterVars.chapterInd = next === undefined ? 0 : i;\n $(window).trigger('chapterChange');\n }\n else if(currentPosition > positions[positions.length -1]) {\n if(self.chapterVars.chapterInd !== positions.length -2) {\n self.chapterVars.chapterInd = (positions.length -2);\n toggleHighlight();\n }\n }\n }\n }\n\n /**\n * Toggles chapter Highlight\n */\n function toggleHighlight() {\n let chapterIndex = self.chapterVars.chapterInd === undefined ? 0 : self.chapterVars.chapterInd;\n self.$chapters.removeClass('_active');\n $(self.$chapters[chapterIndex]).addClass('_active');\n self.$chapterCount.html(chapterIndex + 1);\n }\n\n function scrollToChapter(e) {\n let ind = self.$chapters.index($(e.target));\n if(self.chapterVars.breakpoint !== 'desktop') {\n self.$stickyNav.removeClass('_open');\n }\n\n $('html, body').animate({\n scrollTop: ($(self.$chapterHeading[ind]).offset().top + 5) +'px'\n }, 1000);\n }\n\n }\n\n $(document).on('click', '.article-body__read-more', function(e) {\n //let $this = $(this);\n //let $btns = $('.article-body__read-more');\n //let ind = $btns.index($this);\n //let $body = $('.article__sticky-track')[ind];\n //$($body).on('transitionend webkitTransitionEnd oTransitionEnd MSTransitionEnd', initNav);\n initNav($(this));\n });\n\n\n function initNav($this) {\n let $articleContext = $($this).prev('.article__sticky-track');\n\n if(!$(this).hasClass('_inactive')) {\n if($articleContext.find('.article__chapter-heading').length > 0) {\n new BuildNav($articleContext);\n }\n $(window).trigger('recalculateChapeters');\n }\n }\n}\n\nexport { init as init };\n"]}