{"version":3,"file":"mobileNav.a90fb35edfa23c7c392b.js","mappings":"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","sources":["webpack://jcb.com/./src/js/components/mobileNav.js"],"sourcesContent":["import $ from 'jquery';\r\n\r\nexport default class MobileNav {\r\n constructor(el) {\r\n this.el = el;\r\n this.init();\r\n\r\n if (this.el.getAttribute('data-isfixedonscrollpast')) {\r\n this.bindListeners();\r\n }\r\n }\r\n\r\n init() {\r\n this.attachEvents();\r\n }\r\n\r\n attachEvents() {\r\n const menuButton = this.el.querySelector('.menu');\r\n const searchToggle = this.el.querySelector(\"[data-target='#search-overlay']\");\r\n const marketSelectorButton = this.el.querySelector('.market-selector');\r\n\r\n menuButton.addEventListener('click', (e) => this.toggleMainNav(e));\r\n if (searchToggle != null) {\r\n searchToggle.addEventListener('click', (event) => {\r\n event.preventDefault();\r\n this.openTargetOverlay(event.target);\r\n });\r\n }\r\n marketSelectorButton.addEventListener('click', (event) => {\r\n event.preventDefault();\r\n this.openTargetOverlay(event.target);\r\n });\r\n }\r\n\r\n openTargetOverlay(el) {\r\n const targetId = el.getAttribute('data-target'),\r\n targetEl = document.querySelector(targetId),\r\n targetInput = targetEl.querySelector('input');\r\n\r\n targetEl.classList.add('open');\r\n if (window.dataLayer) {\r\n dataLayer.push({\r\n event: 'open-' + targetId.replace('#', ''),\r\n });\r\n }\r\n if (targetInput !== null) {\r\n targetInput.focus();\r\n } else {\r\n document.documentElement.classList.add('overlay-hidden-html');\r\n }\r\n }\r\n\r\n closeTargetOverlay(el) {\r\n const targetId = el.getAttribute('data-target'),\r\n targetEl = document.querySelector(targetId),\r\n targetInput = targetEl.querySelector('input');\r\n\r\n targetEl.classList.remove('open');\r\n if (targetInput !== null) {\r\n targetInput.blur();\r\n } else {\r\n document.documentElement.classList.remove('overlay-hidden-html');\r\n }\r\n }\r\n\r\n toggleMainNav(e) {\r\n const mainNav = document.querySelector('.masthead-nav:not(.mobile)');\r\n const productsLi = mainNav.querySelector('li.products');\r\n const backButton = mainNav.querySelector('.back[data-nav-state]');\r\n const navState = backButton.getAttribute('data-nav-state');\r\n\r\n document.activeElement.blur();\r\n mainNav.classList.toggle('active');\r\n\r\n productsLi.click();\r\n productsLi.focus();\r\n productsLi.blur();\r\n\r\n document.body.classList.toggle('nav-open');\r\n\r\n if (mainNav.classList.contains('active')) {\r\n e.target.classList.add('active');\r\n backButton.setAttribute('data-nav-state', 'top');\r\n } else {\r\n e.target.classList.remove('active');\r\n backButton.setAttribute('data-nav-state', 'idle');\r\n\r\n let event = new MouseEvent('menuclosed', {\r\n bubbles: true,\r\n cancelable: true,\r\n });\r\n document.dispatchEvent(event);\r\n }\r\n }\r\n\r\n // ! this is a quick-n-dirty copy of fixedOnScrollPast, needs to be cleaned to import() that dynamically instead.\r\n bindListeners() {\r\n window.addEventListener(\r\n 'scroll',\r\n () => {\r\n this.handleScroll();\r\n },\r\n true,\r\n );\r\n\r\n window.addEventListener(\r\n 'touchmove',\r\n () => {\r\n this.handleScroll();\r\n },\r\n true,\r\n );\r\n\r\n [...this.el.querySelectorAll('.product-sub-nav-link')].forEach((anchor) => {\r\n anchor.addEventListener('click', (e) => {\r\n if (!navigator.userAgent.match(/(iPod|iPhone|iPad|Android)/)) {\r\n e.preventDefault();\r\n\r\n const targetAnchor = anchor.getAttribute('href').replace('#', '');\r\n const targetEle = document.getElementById(targetAnchor);\r\n\r\n this.scrollTo(targetEle);\r\n }\r\n });\r\n });\r\n }\r\n\r\n scrollTo(target) {\r\n const scrollToOffset = $(target).offset().top - this.el.clientHeight;\r\n $('html, body').animate(\r\n {\r\n scrollTop: scrollToOffset,\r\n },\r\n 500,\r\n );\r\n }\r\n\r\n handleScroll() {\r\n if (\r\n this.el.classList.contains('is-fixed') &&\r\n document.querySelector('.js--cta-bar-palceholder').getBoundingClientRect().top >= 1\r\n ) {\r\n this.unfixHeader();\r\n return;\r\n }\r\n if (this.el.getBoundingClientRect().top <= 0) {\r\n this.fixHeader();\r\n }\r\n }\r\n\r\n fixHeader() {\r\n if (!this.el.classList.contains('is-fixed')) {\r\n this.cloneHeader();\r\n this.el.classList.add('is-fixed');\r\n }\r\n }\r\n\r\n unfixHeader() {\r\n if (this.el.classList.contains('is-fixed')) {\r\n document.querySelector('.js--cta-bar-palceholder').remove();\r\n this.el.classList.remove('is-fixed');\r\n }\r\n }\r\n\r\n cloneHeader() {\r\n const placeholder = this.el.cloneNode(true);\r\n placeholder.classList.add('js--cta-bar-palceholder');\r\n this.el.parentNode.insertBefore(placeholder, this.el);\r\n }\r\n}\r\n"],"names":["MobileNav","el","this","init","getAttribute","bindListeners","attachEvents","menuButton","querySelector","searchToggle","marketSelectorButton","addEventListener","e","toggleMainNav","event","preventDefault","openTargetOverlay","target","targetId","targetEl","document","targetInput","classList","add","window","dataLayer","push","replace","focus","documentElement","remove","blur","mainNav","productsLi","backButton","activeElement","toggle","click","body","contains","setAttribute","MouseEvent","bubbles","cancelable","dispatchEvent","handleScroll","querySelectorAll","forEach","anchor","navigator","userAgent","match","targetAnchor","targetEle","getElementById","scrollTo","scrollToOffset","$","offset","top","clientHeight","animate","scrollTop","getBoundingClientRect","unfixHeader","fixHeader","cloneHeader","placeholder","cloneNode","parentNode","insertBefore"],"sourceRoot":""}