{"version":3,"file":"js/7758.chunk.js?v=1742528680091","mappings":"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","sources":["webpack://fed-boilerplate/./src/4-sections/sticky-nav/s-sticky-nav.js","webpack://fed-boilerplate/./src/4-sections/sticky-nav/simple-scrollspy/index.js","webpack://fed-boilerplate/./src/4-sections/sticky-nav/simple-scrollspy/scrollspy.js"],"sourcesContent":["import $ from 'jquery';\nimport scrollSpy from './simple-scrollspy';\n\n// need to re init on each header height change\nconst scrollSpyInit = offset => {\n const options = {\n sectionClass: '.js-scrollspy',\n menuActiveTarget: '.js-item-anchor',\n offset: (offset || $('.s-header').outerHeight()) + 20,\n };\n\n // init:\n if ($('#js-spy-on').length > 0) {\n scrollSpy('#js-spy-on', options);\n }\n};\n\nconst scrollTo = ($el, parentClass, url, redo) => {\n if ($(url).length <= 0) {\n return;\n }\n\n const headerH = $el.closest(parentClass).outerHeight();\n\n if (redo) {\n // reinit scroll spy with new height\n scrollSpyInit(headerH);\n }\n\n $('html, body').animate(\n { scrollTop: $(url).offset().top - headerH },\n 400,\n () => {\n // the header height is change on first time it scroll\n // use the sorter header to make sure the target is visible\n if (headerH > $el.closest(parentClass).outerHeight()) {\n if (!redo) {\n // redo only once\n scrollTo($el, parentClass, url, true);\n }\n }\n }\n );\n};\n\nconst stickyNavInit = () => {\n const $stickyHeader = $('.js-sticky-nav');\n const $item = $('.js-item-anchor');\n\n if ($stickyHeader.length <= 0) {\n return;\n }\n\n $item.click(function(e) {\n const $el = $(this);\n const url = $el.attr('href');\n\n if (url.substr(0, 1) === '#') {\n e.preventDefault();\n window.history.replaceState({ path: url }, '', url);\n\n if ($el.closest('.js-product-sticky-nav').length > 0) {\n // product-sticky-nav\n scrollTo($el, '.s-header', url);\n $item.removeClass('active');\n $el.addClass('active');\n } else {\n // default sticky-nav\n scrollTo($el, '.js-sticky-nav', url);\n }\n }\n });\n\n // respon for mobile select\n $('.js-mobile-show').change(function() {\n const $sel = $(this);\n $sel.closest('.js-sticky-nav')\n .find(`.js-item-anchor[href=\"${$sel.val()}\"]`)\n .click();\n });\n\n // on scroll\n window.onscroll = () => {\n // is not posible to have .s-sticky-nav and .s-sticky-nav.product-sticky-nav at the same time\n // so set this for .js-sticky-nav only\n // .s-sticky-nav.product-sticky-nav sit inside header, no need to set sticky on it\n $('.js-sticky-nav:not(.product-sticky-nav)').each(function() {\n const $nav = $(this);\n const offsetTop = $nav.offset().top;\n if ($(window).scrollTop() > offsetTop) {\n $nav.addClass('sticky');\n // hide the header when the nav is sticky\n $('.s-header').fadeOut();\n } else {\n $nav.removeClass('sticky');\n // show the header when the nav is no longer sticky\n $('.s-header').fadeIn();\n }\n });\n };\n\n window.onresize = () => {\n if ($(window).width() < 1024) {\n return;\n }\n\n scrollSpyInit();\n\n $stickyHeader.each(function() {\n const $nav = $(this);\n const $menu = $nav.find('.menu');\n const $items = $menu.find('.desktop-item');\n let totalWidth = -1;\n\n $nav.removeClass('packed');\n $items.each(function() {\n totalWidth += $(this).outerWidth(true);\n });\n\n // Check if the last element is outside the width of the menu\n if ($menu.outerWidth() < totalWidth) {\n $nav.addClass('packed');\n }\n });\n };\n $(window).resize();\n};\n\n// click anchor onload\nconst clickAnchor = () => {\n const { hash } = window.location;\n\n // Guard from picking up React hash router. Its routes look like `#/route name`.\n // The `#/` part isn't a valid DOM selector and the script below would throw\n // an error without this guard.\n if ((/^#\\//).test(hash)) {\n return;\n }\n\n const $target = $(hash);\n\n if (hash && $target.length > 0) {\n $(`.js-product-sticky-nav .js-item-anchor[href=\"${hash}\"]`).click();\n }\n};\n\n// doc ready\n$(() => {\n stickyNavInit();\n clickAnchor();\n scrollSpyInit();\n});\n","// @NOTE - code taken from https://github.com/kimyvgy/simple-scrollspy/blob/master/src/index.js\n// - Need to host it locally to allow babel to build it so IE11 works\nmodule.exports = (el, options = {}) => {\n // eslint-disable-next-line global-require\n const { ScrollSpy } = require('./scrollspy');\n const instance = new ScrollSpy(el, options);\n\n window.onload = instance.onScroll();\n window.addEventListener('scroll', () => {\n return instance.onScroll();\n });\n\n return instance;\n};\n","// @NOTE - code taken from https://github.com/kimyvgy/simple-scrollspy/blob/master/src/scrollspy.js\n// - Need to host it locally to allow babel to build it so IE11 works\nexport class ScrollSpy {\n constructor(menu, options = {}) {\n if (!menu) {\n throw new Error(\n 'First argument is query selector to your navigation.'\n );\n }\n\n if (typeof options !== 'object') {\n throw new Error('Second argument must be instance of Object.');\n }\n\n const defaultOptions = {\n sectionClass: '.scrollspy',\n menuActiveTarget: 'li > a',\n offset: 0,\n hrefAttribute: 'href',\n activeClass: 'active',\n };\n\n this.menuList =\n menu instanceof HTMLElement ? menu : document.querySelector(menu);\n this.options = { ...defaultOptions, ...options };\n this.sections = document.querySelectorAll(this.options.sectionClass);\n }\n\n onScroll() {\n const section = this.getSectionInView();\n const menuItem = this.getMenuItemBySection(section);\n\n if (menuItem) {\n this.removeCurrentActive({ ignore: menuItem });\n this.setActive(menuItem);\n }\n }\n\n getMenuItemBySection(section) {\n if (!section) {\n return;\n }\n const sectionId = section.getAttribute('id');\n // eslint-disable-next-line consistent-return\n return this.menuList.querySelector(\n `[${this.options.hrefAttribute}=\"#${sectionId}\"]`\n );\n }\n\n // eslint-disable-next-line consistent-return\n getSectionInView() {\n for (let i = 0; i < this.sections.length; i += 1) {\n const startAt = this.sections[i].offsetTop;\n const endAt = startAt + this.sections[i].offsetHeight;\n const currentPosition =\n (document.documentElement.scrollTop ||\n document.body.scrollTop) + this.options.offset;\n const isInView =\n currentPosition > startAt && currentPosition <= endAt;\n if (isInView) {\n return this.sections[i];\n }\n }\n }\n\n setActive(activeItem) {\n const isActive = activeItem.classList.contains(\n this.options.activeClass\n );\n if (!isActive) {\n activeItem.classList.add(this.options.activeClass);\n }\n }\n\n removeCurrentActive({ ignore }) {\n const { hrefAttribute, menuActiveTarget } = this.options;\n const items = `${menuActiveTarget}.active:not([${hrefAttribute}=\"${ignore.getAttribute(\n hrefAttribute\n )}\"])`;\n const menuItems = this.menuList.querySelectorAll(items);\n\n menuItems.forEach(item => {\n return item.classList.remove(this.options.activeClass);\n }\n );\n }\n}\n"],"names":["scrollSpyInit","offset","options","sectionClass","menuActiveTarget","$","outerHeight","length","scrollSpy","scrollTo","$el","parentClass","url","redo","headerH","closest","animate","scrollTop","top","$stickyHeader","$item","click","e","this","attr","substr","preventDefault","window","history","replaceState","path","removeClass","addClass","change","$sel","find","concat","val","onscroll","each","$nav","offsetTop","fadeOut","fadeIn","onresize","width","$menu","$items","totalWidth","outerWidth","resize","hash","location","test","$target","clickAnchor","module","exports","el","arguments","undefined","instance","ScrollSpy","require","onload","onScroll","addEventListener","menu","_classCallCheck","Error","_typeof","menuList","HTMLElement","document","querySelector","_objectSpread","hrefAttribute","activeClass","sections","querySelectorAll","key","value","section","getSectionInView","menuItem","getMenuItemBySection","removeCurrentActive","ignore","setActive","sectionId","getAttribute","i","startAt","endAt","offsetHeight","currentPosition","documentElement","body","activeItem","classList","contains","add","_ref","_this","_this$options","items","forEach","item","remove"],"sourceRoot":""}