{"version":3,"sources":["webpack:///./js/components/init-animation.js","webpack:///./js/utils/smooth-scroll.js","webpack:///./js/components/init-filters.js","webpack:///./js/components/init-carousels.js","webpack:///./js/components/init-faqs.js","webpack:///./js/utils/culture-helper.js","webpack:///./js/components/init-fault-site-selection.js","webpack:///./js/components/init-topup-step1.js","webpack:///./js/utils/device-helper.js","webpack:///./js/components/init-forms.js","webpack:///./js/components/init-header.js","webpack:///./js/components/init-nav.js","webpack:///./js/components/init-recaptcha.js","webpack:///./js/components/init-resend-confirmation.js","webpack:///./js/components/init-tabbed-nav.js","webpack:///./js/components/init-timeline.js","webpack:///./js/components/init-tooltips.js","webpack:///./js/components/init-video.js","webpack:///./js/components/init-webfonts.js","webpack:///./js/components/init-marquee.js","webpack:///./js/components/circuit-view/init-graphs.js","webpack:///./js/components/circuit-view/init-accordion.js","webpack:///./js/components/circuit-view/init-views.js","webpack:///./js/components/circuit-view/init-window-events.js","webpack:///./js/components/init-paypal.js","webpack:///./js/components/init-freedompay.js","webpack:///./js/components/init-scroll-to-top.js","webpack:///./js/components/init-filter-checkbox.js","webpack:///./js/components/init-bubbles.js","webpack:///./fonts/rubik/rubik.css","webpack:///./fonts/rubik-mono-one/rubik-mono-one.css","webpack:///./fonts/creepster/creepster.css","webpack:///./fonts/lobster-two/lobster-two.css"],"names":["whenDomReady","then","centerItem","document","querySelectorAll","i","window","addEventListener","getBoundingClientRect","top","innerHeight","offsetHeight","classList","add","length","delay","y","setTimeout","scrollToItem","querySelector","scrollTo","smoothScroll","onClick","e","target","currentTarget","active","contains","wrapper","closest","items","Array","from","remove","j","item","parentNode","matches","children","style","display","itemFilter","dataset","filter","element","selector","carousel","carouselNav","carouselNavItems","carouselItems","carouselItemsAnswerContainer","carouselItemsAnswer","carouselFilters","filterCarousel","controlStop","controlStart","SELECTED","slider","tns","container","fixedWidth","gutter","autoplay","autoplayButtonOutput","mouseDrag","center","nav","controls","swipeAngle","loop","rewind","speed","navContainer","navAsThumbnails","responsive","450","slider2","550","autoWidth","pause","play","setAttribute","itemIndex","getAttribute","maxHeight","Number","click","n","itemContent","p","f","filterItem","filterItemIndex","goTo","events","on","z","carouselNavItemsFilter","t","pageNav","buttonFilters","768","disable","logos","edgePadding","faqSections","faqNavLink","observer","IntersectionObserver","entries","forEach","entry","isIntersecting","boundingClientRect","faq","content","threshold","faqS","observe","buttons","getCultureCode","cultureElement","value","bindEvents","postDataElement","performDataSubmission","selectElements","Choices","itemSelectText","cityId","organisationId","topupPointID","formData","fetch","method","headers","body","JSON","stringify","response","text","html","outerHTML","initialiseTopupStep1","updateCardButtons","renderTopupStep1","progressBar","formElement","innerHTML","initialiseSelectbox","textInputCompleted","isMobileDevice","matchMedia","test","navigator","userAgent","substr","scrollbar","selectbox","initialiseNextButton","nextStepBtn","removeEventListener","goToNextStep","postFormElements","updateLaundrySiteDropdowns","registerRedirectElements","redirectToRegister","ajaxSubmit","event","preventDefault","location","pathname","FormData","bindFormPostEvents","OverlayScrollbars","className","resize","initialiseTextbox","textbox","step","removeAttribute","initialiseBackButton","backStepBtn","goToPrevStep","parseInt","stepNum","initialiseStepButtons","stepBtns","href","form","append","stepField","set","parentElement","textInputSelector","textInputs","checkInput","input","selectbox2","shouldSort","searchEnabled","table","accordionScroll","orderAmount","key","passwordRevealBtn","toggle","Password","type","header","screen","documentElement","scrollTop","onscroll","clientHeight","burger","navToggle","ACTIVE","navT","initialiseForm","actionElement","tokenElement","action","recaptchaAction","recaptchaKey","grecaptcha","ready","execute","token","createElement","name","prepend","initialiseFields","triggerElement","varName","contextVar","data","cultureCode","culture","docid","utmsource","getCookieValue","utmcampaign","utmterm","utmcontent","refererurl","cpckeyword","trafficsource","adgroup","url","cookie","match","pop","postFormData","submitButton","contextFields","recaptchaForms","resendForm","tabbedNav","timeline","timelineSection","displayHeight","percent","scrollHeight","height","tooltip","tippy","arrow","distance","interactive","id","linkedTemplate","getElementById","node","importNode","appendChild","videos","videoURLPath","video","instance","basicLightbox","afterShow","show","close","WebFont","load","custom","families","urls","require","fontactive","fontFamily","fitty","multiLine","maxSize","daySelect","day","graphSwitch","firstLoad","dayData","currentDataSet","addData","width","siteId","siteIdElement","urlQueryParams","queryString","parse","search","site","fromDate","Date","setDate","getDate","toDate","fetchQueryParams","dateFrom","toISOString","slice","replace","dateTo","fetchQueryString","json","fetchData","jsonData","Object","keys","UsageByDay","push","WeeklyAverage","newDay","OPEN","accordions","applianceId","appliance","currentQuery","undefined","d","newQuery","newUrl","protocol","host","history","replaceState","accordionsSingle","CVContainer","s","machineContent","machineBtns","btn","btns","origin","reportAFaultUrlElement","reportAFaultBaseUrl","machineInfo","targetMachine","currentQueryParams","queryParams","machineId","lbl","machineType","redirectQueryString","open","transactionID","onClickHandler","actions","formFields","formFieldMessages","textContent","credentials","res","responseData","IsValid","resolve","errorKeys","FieldErrors","fieldKey","fieldError","reject","createOrderHandler","Success","RedirectUrl","TransactionId","onErrorHandler","err","message","startsWith","exception","code","callStack","stack","pageUrl","payPalSettingsElement","payPalSettings","script","src","clientScript","onload","paypal","Buttons","env","environment","size","color","shape","label","createOrder","onApprove","currencyId","orderID","overlayElement","onApproveHandler","currency","onError","render","initalisePayPalSmartButtons","freedomPaySettings","handleMessage","domain","handleErrors","freedomIframe","setProperty","setFrameHeight","freedomPleaseWait","catch","submitPayment","validationMessage","htmlMessage","createTextNode","payFreedomPaySettingsElement","scrollToBtn","pageBottom","rootElement","behavior","filterBtns","button","bubbleContainer","bubble","left","Math","random","module","exports"],"mappings":"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","file":"components-89468e086fc675ebc03a.js","sourcesContent":["/* eslint-disable operator-linebreak */\r\n/* eslint-disable no-loop-func */\r\nimport whenDomReady from 'when-dom-ready';\r\n\r\nfunction initialise() {\r\n const centerItem = document.querySelectorAll('.js-screen-centered');\r\n\r\n if (!centerItem) {\r\n return;\r\n }\r\n\r\n // eslint-disable-next-line no-plusplus\r\n for (let i = 0; i < centerItem.length; i++) {\r\n window.addEventListener('scroll', () => {\r\n if (\r\n centerItem[i].getBoundingClientRect().top <\r\n window.innerHeight / 2 - centerItem[i].offsetHeight / 3\r\n ) {\r\n centerItem[i].classList.add('is-showing');\r\n }\r\n });\r\n }\r\n}\r\n\r\nwhenDomReady().then(initialise);\r\n\r\nfunction initialise2() {\r\n const centerItem = document.querySelectorAll('.js-screen-two-thirds-stagger');\r\n\r\n if (!centerItem) {\r\n return;\r\n }\r\n\r\n // eslint-disable-next-line no-plusplus\r\n for (let i = 0; i < centerItem.length; i++) {\r\n let delay = 100;\r\n\r\n if (centerItem[i].getBoundingClientRect().y < window.innerHeight * 1.5) {\r\n setTimeout(() => {\r\n centerItem[i].classList.add('is-showing');\r\n }, delay);\r\n }\r\n\r\n window.addEventListener('scroll', () => {\r\n if (\r\n centerItem[i].getBoundingClientRect().top <\r\n window.innerHeight / 1.25\r\n ) {\r\n setTimeout(() => {\r\n centerItem[i].classList.add('is-showing');\r\n }, delay);\r\n }\r\n });\r\n\r\n delay *= i;\r\n }\r\n}\r\n\r\nwhenDomReady().then(initialise2);\r\n\r\nfunction initialise3() {\r\n const centerItem = document.querySelectorAll('.js-screen-two-thirds');\r\n\r\n if (!centerItem) {\r\n return;\r\n }\r\n\r\n // eslint-disable-next-line no-plusplus\r\n for (let i = 0; i < centerItem.length; i++) {\r\n window.addEventListener('scroll', () => {\r\n if (\r\n centerItem[i].getBoundingClientRect().top <\r\n window.innerHeight / 1.25\r\n ) {\r\n centerItem[i].classList.add('is-showing');\r\n }\r\n });\r\n }\r\n}\r\n\r\nwhenDomReady().then(initialise3);\r\n","import smoothScroll from 'smoothscroll';\r\n\r\nconst scrollToItem = document.querySelector('.js-scroll-to');\r\n\r\nconst scrollTo = function scrollToFn() {\r\n const initScroll = smoothScroll(scrollToItem, 1000);\r\n\r\n return initScroll;\r\n};\r\n\r\nexport default scrollTo;\r\n","/* eslint-disable no-plusplus, no-cond-assign, no-param-reassign */\r\nimport whenDomReady from 'when-dom-ready';\r\n\r\nfunction initialise() {\r\n // Iterate over the filter buttons.\r\n // eslint-disable-next-line max-len\r\n const buttons = Array.from(\r\n document.querySelectorAll(\r\n '.js-filter-wrapper .js-filter-buttons [data-filter]',\r\n ),\r\n );\r\n for (let i = 0; i < buttons.length; i++) {\r\n // Bind a click event handler.\r\n buttons[i].addEventListener('click', onClick);\r\n }\r\n}\r\n\r\n// The filter button click event handler.\r\nfunction onClick(e) {\r\n // Get the target.\r\n const target = e.currentTarget;\r\n const active = target.classList.contains('is-active');\r\n\r\n // Get the wrapper.\r\n const wrapper = closest(target, '.js-filter-wrapper');\r\n if (!wrapper) {\r\n return;\r\n }\r\n\r\n // Get the items from the wrapper.\r\n const items = Array.from(wrapper.querySelectorAll('[data-filter]'));\r\n\r\n // If the filter is already active, deactivate it.\r\n if (active) {\r\n // Remove the active class.\r\n target.classList.remove('is-active');\r\n\r\n // Iterate over the items and show them all.\r\n for (let j = 0; j < items.length; j++) {\r\n let item = items[j];\r\n if (!closest(item, '.js-filter-buttons')) {\r\n // If the item is the only child of a grid column, show the column instead of the item.\r\n if (\r\n item.parentNode.matches('.grid-column')\r\n && item.parentNode.children.length === 1\r\n ) {\r\n item = item.parentNode;\r\n }\r\n\r\n // Set the visibility of the item.\r\n item.style.display = 'block';\r\n }\r\n }\r\n } else {\r\n // Iterate over the items and set their visibility appropriately.\r\n for (let j = 0; j < items.length; j++) {\r\n let item = items[j];\r\n if (closest(item, '.js-filter-buttons')) {\r\n // Deactivate the item.\r\n item.classList.remove('is-active');\r\n } else {\r\n // Get the filter from the data attribute on the item element before reassigning it.\r\n const itemFilter = item.dataset.filter;\r\n\r\n // If the item is the only child of a grid column, hide the column instead of the item.\r\n if (\r\n item.parentNode.matches('.grid-column')\r\n && item.parentNode.children.length === 1\r\n ) {\r\n item = item.parentNode;\r\n }\r\n\r\n // Set the display mode of the card item to either block or none based on the filter.\r\n item.style.display = itemFilter === target.dataset.filter ? 'block' : 'none';\r\n }\r\n }\r\n\r\n // Add the active class.\r\n target.classList.add('is-active');\r\n }\r\n}\r\n\r\n// Small replacement for jQuery's 'closest' method to find\r\n// closest ancestor of element that matches a given selector.\r\nfunction closest(element, selector) {\r\n while (!element.matches(selector)) {\r\n element = element.parentNode;\r\n if (!element || !element.matches) {\r\n return null;\r\n }\r\n }\r\n return element;\r\n}\r\n\r\nwhenDomReady().then(initialise);\r\n","/* eslint-disable no-loop-func, no-plusplus */\r\nimport { tns } from 'tiny-slider/src/tiny-slider';\r\nimport whenDomReady from 'when-dom-ready';\r\nimport scrollTo from '../utils/smooth-scroll';\r\n\r\nfunction initialise() {\r\n const carousel = document.querySelector('.js-carousel');\r\n const carouselNav = document.querySelector('.js-carousel-nav');\r\n const carouselNavItems = document.querySelectorAll('.js-carousel-nav-items');\r\n const carouselItems = document.querySelectorAll(\r\n '.js-quick-solution-question',\r\n );\r\n const carouselItemsAnswerContainer = document.querySelector(\r\n '.js-quick-solution-answers',\r\n );\r\n const carouselItemsAnswer = document.querySelectorAll(\r\n '.js-quick-solution-answer',\r\n );\r\n const carouselFilters = document.querySelectorAll(\r\n '.js-quick-solution-filters',\r\n );\r\n const filterCarousel = document.querySelector('.js-carousel-filters');\r\n const controlStop = document.querySelector('.js-controls-stop');\r\n const controlStart = document.querySelector('.js-controls-start');\r\n const SELECTED = 'is-selected';\r\n const UNSELECTED = 'is-unselected';\r\n\r\n if (!carousel) {\r\n return;\r\n }\r\n\r\n const slider = tns({\r\n container: carousel,\r\n fixedWidth: 250,\r\n gutter: 15,\r\n autoplay: true,\r\n autoplayButtonOutput: false,\r\n mouseDrag: true,\r\n center: true,\r\n nav: true,\r\n controls: false,\r\n swipeAngle: false,\r\n loop: false,\r\n rewind: false,\r\n speed: 1500,\r\n navContainer: carouselNav,\r\n navAsThumbnails: true,\r\n responsive: {\r\n 450: {\r\n fixedWidth: 320,\r\n },\r\n },\r\n });\r\n\r\n const slider2 = tns({\r\n container: filterCarousel,\r\n fixedWidth: 180,\r\n mouseDrag: true,\r\n gutter: 15,\r\n center: true,\r\n nav: false,\r\n controls: false,\r\n swipeAngle: false,\r\n loop: false,\r\n rewind: false,\r\n responsive: {\r\n 550: {\r\n fixedWidth: 180,\r\n autoWidth: true,\r\n center: false,\r\n },\r\n },\r\n });\r\n\r\n controlStop.addEventListener('click', () => {\r\n setTimeout(() => {\r\n slider.pause();\r\n }, 1000);\r\n });\r\n\r\n controlStart.addEventListener('click', () => {\r\n slider.play();\r\n });\r\n\r\n for (let i = 0; i < carouselItems.length; i++) {\r\n carouselItems[i].setAttribute('data-index', i);\r\n\r\n carouselItems[i].addEventListener('click', (e) => {\r\n scrollTo();\r\n const itemIndex = e.currentTarget.getAttribute('data-index');\r\n if (e.currentTarget.classList.contains(SELECTED)) {\r\n e.currentTarget.classList.remove(SELECTED);\r\n carouselItemsAnswerContainer.style.maxHeight = '0';\r\n document\r\n .querySelector(`.answer-${Number(itemIndex) + 1}`)\r\n .classList.remove(SELECTED);\r\n document\r\n .querySelector(`.answer-${Number(itemIndex) + 1}`)\r\n .classList.add(UNSELECTED);\r\n controlStart.click();\r\n } else {\r\n for (let n = 0; n < carouselItems.length; n++) {\r\n carouselItems[n].classList.remove(SELECTED);\r\n carouselItemsAnswer[n].classList.remove(SELECTED);\r\n carouselItemsAnswer[n].classList.add(UNSELECTED);\r\n carouselItemsAnswerContainer.style.maxHeight = '0';\r\n }\r\n\r\n const itemContent = document.querySelector(\r\n `.answer-${Number(itemIndex) + 1}`,\r\n );\r\n e.currentTarget.classList.add(SELECTED);\r\n itemContent.classList.add(SELECTED);\r\n itemContent.classList.remove(UNSELECTED);\r\n carouselItemsAnswerContainer.style.maxHeight = `${itemContent.offsetHeight\r\n + 60}px`;\r\n controlStop.click();\r\n\r\n for (let p = 0; p < carouselNavItems.length; p++) {\r\n if (carouselNavItems[p].getAttribute('data-nav') === itemIndex) {\r\n carouselNavItems[p].click();\r\n }\r\n }\r\n }\r\n });\r\n }\r\n\r\n for (let f = 0; f < carouselFilters.length; f++) {\r\n carouselFilters[f].addEventListener('click', (e) => {\r\n const filter = e.currentTarget.getAttribute('data-filter-type');\r\n const filterItem = document.querySelector(`[data-filter=${filter}]`);\r\n const filterItemIndex = filterItem.getAttribute('data-index');\r\n slider.goTo(filterItemIndex);\r\n slider2.goTo(filterItemIndex);\r\n filterItem.click();\r\n });\r\n }\r\n\r\n slider.events.on('transitionStart', () => {\r\n for (let z = 0; z < carouselNavItems.length; z++) {\r\n if (carouselNavItems[z].classList.contains('tns-nav-active')) {\r\n const carouselNavItemsFilter = carouselNavItems[z].getAttribute(\r\n 'data-filter-nav',\r\n );\r\n\r\n for (let t = 0; t < carouselFilters.length; t++) {\r\n if (\r\n carouselFilters[t].getAttribute('data-filter-type')\r\n === carouselNavItemsFilter\r\n ) {\r\n carouselFilters[t].classList.add('is-active');\r\n slider2.goTo(t);\r\n controlStop.click();\r\n } else {\r\n carouselFilters[t].classList.remove('is-active');\r\n }\r\n }\r\n }\r\n }\r\n });\r\n}\r\nwhenDomReady().then(initialise);\r\n\r\nfunction initialise2() {\r\n const pageNav = document.querySelector('.js-page-nav');\r\n\r\n if (!pageNav) {\r\n return;\r\n }\r\n\r\n tns({\r\n container: pageNav,\r\n mouseDrag: true,\r\n center: true,\r\n nav: false,\r\n controls: false,\r\n swipeAngle: false,\r\n loop: false,\r\n rewind: false,\r\n autoWidth: true,\r\n responsive: {\r\n 550: {\r\n center: false,\r\n },\r\n },\r\n });\r\n}\r\nwhenDomReady().then(initialise2);\r\n\r\nfunction initialise3() {\r\n const buttonFilters = document.querySelector('.js-filter-buttons-carousel');\r\n\r\n if (!buttonFilters) {\r\n return;\r\n }\r\n\r\n tns({\r\n container: buttonFilters,\r\n mouseDrag: true,\r\n nav: false,\r\n controls: false,\r\n swipeAngle: false,\r\n loop: false,\r\n rewind: false,\r\n autoWidth: true,\r\n });\r\n}\r\nwhenDomReady().then(initialise3);\r\n\r\nexport function initialiseButtonCarousel() {\r\n const buttonFilters = document.querySelector('.js-cv-filter-buttons');\r\n\r\n if (!buttonFilters) {\r\n return;\r\n }\r\n\r\n tns({\r\n container: buttonFilters,\r\n mouseDrag: true,\r\n nav: false,\r\n controls: false,\r\n swipeAngle: false,\r\n loop: false,\r\n rewind: false,\r\n center: true,\r\n gutter: 1,\r\n responsive: {\r\n 768: {\r\n gutter: 0,\r\n disable: true,\r\n },\r\n },\r\n });\r\n}\r\nwhenDomReady().then(initialiseButtonCarousel);\r\n\r\nfunction initialise5() {\r\n const logos = document.querySelector('.js-logos');\r\n\r\n if (!logos) {\r\n return;\r\n }\r\n\r\n tns({\r\n container: logos,\r\n mouseDrag: true,\r\n autoplay: true,\r\n autoplayButtonOutput: false,\r\n nav: false,\r\n controls: false,\r\n swipeAngle: false,\r\n loop: true,\r\n center: true,\r\n rewind: false,\r\n fixedWidth: 174,\r\n edgePadding: 0,\r\n gutter: 30,\r\n });\r\n}\r\nwhenDomReady().then(initialise5);\r\n","/* eslint-disable arrow-parens */\r\nimport whenDomReady from 'when-dom-ready';\r\n\r\nfunction initialise() {\r\n const faqSections = document.querySelectorAll('.js-scroll-target');\r\n\r\n if (!faqSections) {\r\n return;\r\n }\r\n\r\n const faqNavLink = document.querySelectorAll('.js-faq-nav');\r\n const ACTIVE = 'is-active';\r\n\r\n const config = {\r\n threshold: [0.01, 0.25, 0.5, 0.75, 1],\r\n };\r\n\r\n const observer = new IntersectionObserver(entries => {\r\n entries.forEach(entry => {\r\n const { isIntersecting, boundingClientRect, target } = entry;\r\n\r\n if (isIntersecting && boundingClientRect.top <= 45) {\r\n faqNavLink.forEach(faq => {\r\n if (faq.dataset.nav === target.dataset.content) {\r\n faq.classList.add(ACTIVE);\r\n } else {\r\n faq.classList.remove(ACTIVE);\r\n }\r\n });\r\n }\r\n });\r\n }, config);\r\n\r\n faqSections.forEach(faqS => {\r\n observer.observe(faqS);\r\n });\r\n}\r\n\r\nwhenDomReady().then(initialise);\r\n","export function getCultureCode() {\r\n const cultureElement = document.querySelector('#umb-culture');\r\n if (cultureElement) {\r\n return cultureElement.value;\r\n }\r\n\r\n return '';\r\n}\r\n","import Choices from 'choices.js';\r\nimport whenDomReady from 'when-dom-ready';\r\n\r\nimport { getCultureCode } from '../utils/culture-helper';\r\n\r\nfunction bindEvents() {\r\n if (!document.querySelector('.js-fault-site-selection')) {\r\n return;\r\n }\r\n\r\n // Bind dropdown change events.\r\n const postDataElement = document.querySelectorAll(\r\n '.js-fault-site-selection .js-post-data',\r\n );\r\n for (let i = 0; i < postDataElement.length; i += 1) {\r\n postDataElement[i].addEventListener('change', performDataSubmission);\r\n }\r\n\r\n const selectElements = document.querySelectorAll(\r\n '.js-fault-site-selection .js-fault-selectbox',\r\n );\r\n for (let i = 0; i < selectElements.length; i += 1) {\r\n // eslint-disable-next-line no-unused-vars\r\n const choicesInit = new Choices(selectElements[i], {\r\n itemSelectText: 'Select',\r\n });\r\n }\r\n}\r\n\r\nfunction performDataSubmission() {\r\n const cityId = document.querySelector('#CityID').value;\r\n let organisationId = document.querySelector('#OrganisationID').value;\r\n let topupPointID = document.querySelector('#TopupPointID').value;\r\n\r\n if (cityId === 0) {\r\n organisationId = 0;\r\n topupPointID = 0;\r\n } else if (organisationId === 0) {\r\n topupPointID = 0;\r\n }\r\n\r\n const formData = {\r\n cityId,\r\n organisationId,\r\n topupPointID,\r\n };\r\n\r\n fetch('/umbraco/surface/form/RenderReportAFaultSiteSelection', {\r\n method: 'POST',\r\n headers: {\r\n 'umb-culture': getCultureCode(),\r\n 'Content-Type': 'application/json',\r\n },\r\n body: JSON.stringify(formData),\r\n })\r\n .then(response => response.text())\r\n .then((html) => {\r\n const containerElement = document.querySelector(\r\n '.js-fault-site-selection',\r\n );\r\n containerElement.outerHTML = html;\r\n\r\n bindEvents();\r\n });\r\n}\r\n\r\nwhenDomReady(bindEvents);\r\n","/* eslint-disable no-useless-escape, no-loop-func, max-len, no-unused-vars, import/no-cycle */\r\nimport whenDomReady from 'when-dom-ready';\r\n\r\nimport { initialiseSelectbox, textInputCompleted } from './init-forms';\r\nimport { getCultureCode } from '../utils/culture-helper';\r\n\r\nexport function initialiseTopupStep1() {\r\n const updateCardButtons = document.querySelectorAll('.js-update-card');\r\n if (!updateCardButtons) {\r\n return;\r\n }\r\n\r\n for (let i = 0; i < updateCardButtons.length; i += 1) {\r\n updateCardButtons[i].addEventListener('click', renderTopupStep1);\r\n }\r\n\r\n const progressBar = document.querySelector('.progress-bar__progress');\r\n if (progressBar) {\r\n if (updateCardButtons.length > 0) {\r\n progressBar.classList.remove('progress-bar__progress--50');\r\n progressBar.classList.add('progress-bar__progress--25');\r\n }\r\n }\r\n}\r\n\r\nfunction renderTopupStep1() {\r\n fetch('/umbraco/surface/accountsurface/RenderRegistrationStep1Form', {\r\n method: 'GET',\r\n headers: {\r\n 'umb-culture': getCultureCode(),\r\n },\r\n })\r\n .then(response => response.text())\r\n .then((html) => {\r\n let formElement = document.querySelector('.js-step1-container');\r\n formElement.innerHTML = html;\r\n initialiseTopupStep1();\r\n initialiseSelectbox();\r\n\r\n formElement = document.querySelector('.js-step1-container');\r\n textInputCompleted(formElement);\r\n\r\n const progressBar = document.querySelector('.progress-bar__progress');\r\n if (progressBar) {\r\n progressBar.classList.remove('progress-bar__progress--25');\r\n progressBar.classList.add('progress-bar__progress--50');\r\n }\r\n });\r\n}\r\n\r\nwhenDomReady().then(initialiseTopupStep1);\r\n","/* eslint-disable no-useless-escape, max-len */\r\nexport function isMobileDevice() {\r\n return (\r\n window.matchMedia('(max-width: 768px)').matches\r\n // eslint-disable-next-line max-len\r\n && (/(android|bb\\d+|meego).+mobile|avantgo|bada\\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|ipad|iris|kindle|Android|Silk|lge |maemo|midp|mmp|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\\/|plucker|pocket|psp|series(4|6)0|symbian|treo|up\\.(browser|link)|vodafone|wap|windows (ce|phone)|xda|xiino/i.test(\r\n navigator.userAgent,\r\n )\r\n // eslint-disable-next-line max-len\r\n || /1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|a wa|abac|ac(er|oo|s\\-)|ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|ar(ch|go)|as(te|us)|attw|au(di|\\-m|r |s )|avan|be(ck|ll|nq)|bi(lb|rd)|bl(ac|az)|br(e|v)w|bumb|bw\\-(n|u)|c55\\/|capi|ccwa|cdm\\-|cell|chtm|cldc|cmd\\-|co(mp|nd)|craw|da(it|ll|ng)|dbte|dc\\-s|devi|dica|dmob|do(c|p)o|ds(12|\\-d)|el(49|ai)|em(l2|ul)|er(ic|k0)|esl8|ez([4-7]0|os|wa|ze)|fetc|fly(\\-|_)|g1 u|g560|gene|gf\\-5|g\\-mo|go(\\.w|od)|gr(ad|un)|haie|hcit|hd\\-(m|p|t)|hei\\-|hi(pt|ta)|hp( i|ip)|hs\\-c|ht(c(\\-| |_|a|g|p|s|t)|tp)|hu(aw|tc)|i\\-(20|go|ma)|i230|iac( |\\-|\\/)|ibro|idea|ig01|ikom|im1k|inno|ipaq|iris|ja(t|v)a|jbro|jemu|jigs|kddi|keji|kgt( |\\/)|klon|kpt |kwc\\-|kyo(c|k)|le(no|xi)|lg( g|\\/(k|l|u)|50|54|\\-[a-w])|libw|lynx|m1\\-w|m3ga|m50\\/|ma(te|ui|xo)|mc(01|21|ca)|m\\-cr|me(rc|ri)|mi(o8|oa|ts)|mmef|mo(01|02|bi|de|do|t(\\-| |o|v)|zz)|mt(50|p1|v )|mwbp|mywa|n10[0-2]|n20[2-3]|n30(0|2)|n50(0|2|5)|n7(0(0|1)|10)|ne((c|m)\\-|on|tf|wf|wg|wt)|nok(6|i)|nzph|o2im|op(ti|wv)|oran|owg1|p800|pan(a|d|t)|pdxg|pg(13|\\-([1-8]|c))|phil|pire|pl(ay|uc)|pn\\-2|po(ck|rt|se)|prox|psio|pt\\-g|qa\\-a|qc(07|12|21|32|60|\\-[2-7]|i\\-)|qtek|r380|r600|raks|rim9|ro(ve|zo)|s55\\/|sa(ge|ma|mm|ms|ny|va)|sc(01|h\\-|oo|p\\-)|sdk\\/|se(c(\\-|0|1)|47|mc|nd|ri)|sgh\\-|shar|sie(\\-|m)|sk\\-0|sl(45|id)|sm(al|ar|b3|it|t5)|so(ft|ny)|sp(01|h\\-|v\\-|v )|sy(01|mb)|t2(18|50)|t6(00|10|18)|ta(gt|lk)|tcl\\-|tdg\\-|tel(i|m)|tim\\-|t\\-mo|to(pl|sh)|ts(70|m\\-|m3|m5)|tx\\-9|up(\\.b|g1|si)|utst|v400|v750|veri|vi(rg|te)|vk(40|5[0-3]|\\-v)|vm40|voda|vulc|vx(52|53|60|61|70|80|81|83|85|98)|w3c(\\-| )|webc|whit|wi(g |nc|nw)|wmlb|wonu|x700|yas\\-|your|zeto|zte\\-/i.test(\r\n navigator.userAgent.substr(0, 4),\r\n ))\r\n );\r\n}\r\n","/* eslint-disable arrow-parens */\r\n/* eslint-disable no-useless-escape, no-loop-func, max-len, no-unused-vars, import/no-cycle */\r\nimport OverlayScrollbars from 'overlayscrollbars';\r\nimport Choices from 'choices.js';\r\nimport whenDomReady from 'when-dom-ready';\r\n\r\nimport { initialiseTopupStep1 } from './init-topup-step1';\r\nimport { getCultureCode } from '../utils/culture-helper';\r\nimport { isMobileDevice } from '../utils/device-helper';\r\n\r\nconst scrollbar = document.querySelectorAll('.js-scrollbar');\r\nconst siteSelectionSelector = '.js-site-selection';\r\n\r\nexport function initialiseSelectbox() {\r\n const selectbox = document.querySelectorAll('.js-selectbox');\r\n if (!selectbox) {\r\n return;\r\n }\r\n\r\n for (let i = 0; i < selectbox.length; i += 1) {\r\n selectbox[i].addEventListener('change', initialiseNextButton);\r\n }\r\n\r\n bindFormPostEvents();\r\n\r\n for (let i = 0; i < scrollbar.length; i += 1) {\r\n OverlayScrollbars(scrollbar, {\r\n className: 'os-theme-dark',\r\n resize: 'v',\r\n });\r\n }\r\n\r\n if (isMobileDevice()) {\r\n // do not delete\r\n } else {\r\n for (let i = 0; i < selectbox.length; i += 1) {\r\n // eslint-disable-next-line no-unused-vars\r\n const choicesInit = new Choices(selectbox[i], {\r\n itemSelectText: 'Select',\r\n });\r\n }\r\n }\r\n}\r\n\r\nfunction initialiseTextbox() {\r\n const textbox = document.querySelector('.js-textbox');\r\n if (!textbox) {\r\n return;\r\n }\r\n\r\n textbox.addEventListener('keyup', initialiseNextButton);\r\n}\r\n\r\nwhenDomReady().then(initialiseTextbox);\r\n\r\nfunction initialiseNextButton() {\r\n const nextStepBtn = document.querySelector('.js-next-step');\r\n if (!nextStepBtn) {\r\n return;\r\n }\r\n\r\n const step = document.querySelector('#step-number');\r\n if (step && step.value === '4') {\r\n nextStepBtn.style.display = 'none';\r\n } else {\r\n nextStepBtn.style.display = 'block';\r\n }\r\n\r\n const selectbox = document.querySelector('.js-selectbox');\r\n const textbox = document.querySelector('.js-textbox');\r\n\r\n if (!selectbox && !textbox) {\r\n return;\r\n }\r\n\r\n if ((selectbox && selectbox.value !== '0') || (textbox && textbox.value)) {\r\n nextStepBtn.removeAttribute('disabled');\r\n } else {\r\n nextStepBtn.setAttribute('disabled', '');\r\n }\r\n}\r\n\r\nwhenDomReady().then(initialiseNextButton);\r\n\r\nfunction initialiseBackButton() {\r\n const backStepBtn = document.querySelector('.js-back-step');\r\n if (!backStepBtn) {\r\n return;\r\n }\r\n\r\n const step = document.querySelector('#step-number');\r\n\r\n if (!step) {\r\n return;\r\n }\r\n\r\n if (step.value === '4' || step.value === '1') {\r\n backStepBtn.style.display = 'none';\r\n } else {\r\n backStepBtn.style.display = 'block';\r\n backStepBtn.addEventListener('click', goToPrevStep);\r\n }\r\n}\r\n\r\nwhenDomReady().then(initialiseBackButton);\r\n\r\nfunction goToPrevStep() {\r\n const step = document.querySelector('#step-number');\r\n if (step && step.value) {\r\n const currentStep = parseInt(step.value, 10);\r\n updateLaundrySiteDropdowns(currentStep - 1);\r\n }\r\n}\r\n\r\nfunction goToFirstStep() {\r\n window.location.href = '/account/register';\r\n}\r\n\r\nfunction goToNextStep() {\r\n const step = document.querySelector('#step-number');\r\n let stepNum = 2;\r\n if (step && step.value) {\r\n const currentStep = parseInt(step.value, 10);\r\n stepNum = currentStep + 1;\r\n }\r\n\r\n updateLaundrySiteDropdowns(stepNum);\r\n}\r\n\r\nfunction initialiseStepButtons() {\r\n const stepBtns = document.querySelectorAll('.js-step-btn');\r\n if (!stepBtns) {\r\n return;\r\n }\r\n\r\n for (let i = 0; i < stepBtns.length; i += 1) {\r\n const step = parseInt(stepBtns[i].getAttribute('data-step'), 10);\r\n stepBtns[i].addEventListener('click', () => updateLaundrySiteDropdowns(step),\r\n );\r\n }\r\n}\r\n\r\nwhenDomReady().then(initialiseStepButtons);\r\n\r\nfunction bindFormPostEvents() {\r\n const nextStepBtn = document.querySelector('.js-next-step');\r\n if (nextStepBtn) {\r\n nextStepBtn.removeEventListener('click', goToNextStep);\r\n nextStepBtn.addEventListener('click', goToNextStep);\r\n }\r\n\r\n const postFormElements = document.querySelectorAll('.js-post-form');\r\n for (let i = 0; i < postFormElements.length; i += 1) {\r\n postFormElements[i].addEventListener('change', updateLaundrySiteDropdowns);\r\n }\r\n\r\n const registerRedirectElements = document.querySelectorAll(\r\n '.js-register-redirect',\r\n );\r\n for (let i = 0; i < registerRedirectElements.length; i += 1) {\r\n registerRedirectElements[i].addEventListener('change', redirectToRegister);\r\n }\r\n\r\n let formElement = document.querySelector(siteSelectionSelector);\r\n if (formElement === null) {\r\n return;\r\n }\r\n\r\n const ajaxSubmit = document.querySelector('.js-ajax-post');\r\n if (ajaxSubmit) {\r\n ajaxSubmit.addEventListener('click', event => {\r\n event.preventDefault();\r\n\r\n fetch(window.location.pathname, {\r\n method: 'POST',\r\n headers: {\r\n 'umb-culture': getCultureCode(),\r\n },\r\n body: new FormData(formElement),\r\n })\r\n .then(response => response.text())\r\n .then(html => {\r\n formElement.outerHTML = html;\r\n initialiseTopupStep1();\r\n initialiseSelectbox();\r\n\r\n formElement = document.querySelector(siteSelectionSelector);\r\n textInputCompleted(formElement);\r\n });\r\n });\r\n }\r\n}\r\n\r\nfunction redirectToRegister() {\r\n window.location.href = '/account/register/';\r\n}\r\n\r\nfunction updateLaundrySiteDropdowns(step) {\r\n let formElement = document.querySelector(siteSelectionSelector);\r\n if (formElement === null) {\r\n return;\r\n }\r\n\r\n const form = new FormData(formElement);\r\n\r\n form.append('Ajax', 'true');\r\n\r\n let stepNum = 1;\r\n\r\n if (typeof step === 'number') {\r\n stepNum = step;\r\n } else {\r\n const stepField = document.querySelector('#step-number');\r\n if (stepField && stepField.value) {\r\n stepNum = parseInt(stepField.value, 10);\r\n }\r\n }\r\n\r\n form.set('Step', stepNum);\r\n\r\n fetch(window.location.pathname, {\r\n method: 'POST',\r\n headers: {\r\n 'umb-culture': getCultureCode(),\r\n },\r\n body: form,\r\n })\r\n .then(response => response.text())\r\n .then(html => {\r\n formElement.outerHTML = html;\r\n initialiseSelectbox();\r\n initialiseNextButton();\r\n initialiseBackButton();\r\n initialiseStepButtons();\r\n initialiseTextbox();\r\n\r\n formElement = document.querySelector(siteSelectionSelector);\r\n textInputCompleted(formElement);\r\n });\r\n}\r\n\r\nwhenDomReady().then(initialiseSelectbox);\r\n\r\nfunction initialise2() {\r\n const selectbox = document.querySelectorAll('.js-selectbox');\r\n if (!selectbox) {\r\n return;\r\n }\r\n\r\n const selectbox2 = document.querySelectorAll('.js-selectbox-2');\r\n\r\n if (isMobileDevice()) {\r\n // do not delete\r\n } else {\r\n for (let i = 0; i < selectbox2.length; i += 1) {\r\n // eslint-disable-next-line no-unused-vars\r\n const choices2Init = new Choices(selectbox2[i], {\r\n shouldSort: false,\r\n searchEnabled: false,\r\n itemSelectText: 'Select',\r\n });\r\n }\r\n }\r\n}\r\n\r\nwhenDomReady().then(initialise2);\r\n\r\nfunction initialise3() {\r\n const table = document.querySelectorAll('table:not(.previous-transactions)');\r\n\r\n if (!table) {\r\n return;\r\n }\r\n\r\n for (let i = 0; i < table.length; i += 1) {\r\n OverlayScrollbars(table, {\r\n className: 'os-theme-dark',\r\n });\r\n }\r\n}\r\n\r\nwhenDomReady().then(initialise3);\r\n\r\nexport function initialiseAccordionScroll() {\r\n const accordionScroll = document.querySelectorAll('.js-accordion-scroll');\r\n\r\n if (!accordionScroll) {\r\n return;\r\n }\r\n\r\n for (let i = 0; i < accordionScroll.length; i += 1) {\r\n OverlayScrollbars(accordionScroll, {\r\n className: 'os-theme-dark',\r\n });\r\n }\r\n}\r\n\r\nwhenDomReady().then(initialiseAccordionScroll);\r\n\r\nfunction initTopupStep2() {\r\n const step2FormElement = document.querySelector('.js-topup-step2-form');\r\n if (!step2FormElement) {\r\n return;\r\n }\r\n\r\n const orderAmount = document.querySelector('#OrderAmount');\r\n if (!orderAmount) {\r\n return;\r\n }\r\n\r\n orderAmount.addEventListener('keypress', e => {\r\n if (e.key === 'Enter') {\r\n e.preventDefault();\r\n }\r\n });\r\n}\r\n\r\nwhenDomReady().then(initTopupStep2);\r\n\r\nfunction passwordReveal() {\r\n const passwordRevealBtn = document.querySelectorAll('.js-password-reveal');\r\n\r\n if (!passwordRevealBtn) {\r\n return;\r\n }\r\n\r\n // eslint-disable-next-line no-plusplus\r\n for (let i = 0; i < passwordRevealBtn.length; i++) {\r\n passwordRevealBtn[i].addEventListener('click', () => {\r\n passwordRevealBtn[i].classList.toggle('is-visible');\r\n\r\n if (passwordRevealBtn[i].classList.contains('is-visible')) {\r\n document.querySelectorAll('.js-password-reveal')[\r\n i\r\n ].parentNode.children.Password.type = 'text';\r\n } else {\r\n document.querySelectorAll('.js-password-reveal')[\r\n i\r\n ].parentNode.children.Password.type = 'password';\r\n }\r\n });\r\n }\r\n}\r\n\r\nwhenDomReady().then(passwordReveal);\r\n\r\nexport function textInputCompleted(parentElement) {\r\n const textInputSelector = 'input[type=text], input[type=email], input[type=password], textarea';\r\n\r\n let textInputs;\r\n\r\n if (parentElement) {\r\n textInputs = parentElement.querySelectorAll(textInputSelector);\r\n } else {\r\n textInputs = document.querySelectorAll(textInputSelector);\r\n }\r\n\r\n if (!textInputs) {\r\n return;\r\n }\r\n\r\n textInputs.forEach(input => {\r\n input.addEventListener('input', () => {\r\n checkInput(input);\r\n });\r\n\r\n input.addEventListener('focusout', () => {\r\n checkInput(input);\r\n });\r\n });\r\n\r\n function checkInput(input) {\r\n // If the element already has a validation state on it leave it alone.\r\n if (\r\n input.classList.contains('form-input--complete')\r\n || input.classList.contains('form-input--error')\r\n ) {\r\n return;\r\n }\r\n\r\n // Otherwise add the --dirty class to prevent the placeholder element moving back into place.\r\n if (input.value !== '') {\r\n input.classList.add('form-input--dirty');\r\n } else {\r\n input.classList.remove('form-input--dirty');\r\n }\r\n }\r\n}\r\n\r\nwhenDomReady().then(textInputCompleted);\r\n","/* eslint-disable no-console, indent, no-tabs, no-plusplus, max-len */\r\nimport whenDomReady from 'when-dom-ready';\r\n\r\nfunction initialise() {\r\n const header = document.querySelector('.js-header');\r\n\r\n if (!header) {\r\n return;\r\n }\r\n\r\n const { body } = document;\r\n let screen = document.documentElement;\r\n const ISSTICKY = 'is-sticky';\r\n\r\n if (header.getBoundingClientRect().top <= 0) {\r\n header.classList.add(ISSTICKY);\r\n }\r\n\r\n if (screen.scrollTop === 0) {\r\n header.classList.remove(ISSTICKY);\r\n }\r\n\r\n window.onscroll = () => {\r\n if (header.getBoundingClientRect().top <= 0) {\r\n header.classList.add(ISSTICKY);\r\n }\r\n\r\n screen = screen.clientHeight ? screen : body;\r\n\r\n if (screen.scrollTop === 0) {\r\n header.classList.remove(ISSTICKY);\r\n }\r\n };\r\n}\r\n\r\nwhenDomReady().then(initialise);\r\n","import whenDomReady from 'when-dom-ready';\r\n\r\nfunction initialise() {\r\n const nav = document.querySelector('.js-nav');\r\n\r\n if (!nav) {\r\n return;\r\n }\r\n\r\n const burger = document.querySelector('.js-burger');\r\n const body = document.querySelector('.js-body');\r\n const navToggle = document.querySelectorAll('.js-nav-toggle');\r\n const ACTIVE = 'is-active';\r\n const ROTATE = 'is-rotate';\r\n\r\n navToggle.forEach((navT) => {\r\n navT.addEventListener('click', (e) => {\r\n e.currentTarget.closest('.nav-level-1').classList.toggle(ACTIVE);\r\n });\r\n });\r\n\r\n burger.addEventListener('click', () => {\r\n nav.classList.toggle(ACTIVE);\r\n body.classList.toggle(ACTIVE);\r\n\r\n if (burger.classList.contains(ACTIVE)) {\r\n setTimeout(() => {\r\n burger.classList.remove(ACTIVE);\r\n }, 250);\r\n } else {\r\n burger.classList.add(ACTIVE);\r\n }\r\n\r\n if (burger.classList.contains(ROTATE)) {\r\n burger.classList.remove(ROTATE);\r\n } else {\r\n setTimeout(() => {\r\n burger.classList.add(ROTATE);\r\n }, 250);\r\n }\r\n });\r\n}\r\n\r\nwhenDomReady().then(initialise);\r\n","/* globals grecaptcha:false */\r\n/* eslint-disable no-param-reassign */\r\nimport whenDomReady from 'when-dom-ready';\r\n\r\nconst ACTION_NAME = 'g-recaptcha-action';\r\nconst TOKEN_NAME = 'g-recaptcha-response';\r\n\r\nexport const CONTEXT_SELECTOR = '.js-context-var';\r\n\r\nfunction initialise() {\r\n const contextFields = Array.from(document.querySelectorAll(CONTEXT_SELECTOR));\r\n const recaptchaForms = Array.from(document.querySelectorAll('.js-recaptcha'));\r\n // eslint-disable-next-line no-plusplus\r\n for (let i = 0; i < contextFields.length; i++) {\r\n closest(contextFields[i], '.field-wrapper').style.display = 'none';\r\n }\r\n // Initialise all context fields with their default values.\r\n contextFields.forEach(initialiseFields);\r\n\r\n recaptchaForms.forEach(initialiseForm);\r\n}\r\n\r\nfunction initialiseForm(formElement) {\r\n // Check for existing fields.\r\n let actionElement = formElement.querySelector(`[name=\"${ACTION_NAME}\"]`);\r\n let tokenElement = formElement.querySelector(`[name=\"${TOKEN_NAME}\"]`);\r\n\r\n if (actionElement || tokenElement) {\r\n return;\r\n }\r\n\r\n // Get data from form element.\r\n const action = formElement.dataset.recaptchaAction;\r\n const key = formElement.dataset.recaptchaKey;\r\n\r\n grecaptcha.ready(async () => {\r\n // Query recaptcha for the token.\r\n const token = await grecaptcha.execute(key, { action });\r\n\r\n // Create new inputs for recaptcha data.\r\n actionElement = document.createElement('input');\r\n actionElement.name = 'g-recaptcha-action';\r\n actionElement.type = 'hidden';\r\n actionElement.value = action;\r\n formElement.prepend(actionElement);\r\n\r\n tokenElement = document.createElement('input');\r\n tokenElement.name = 'g-recaptcha-response';\r\n tokenElement.type = 'hidden';\r\n tokenElement.value = token;\r\n formElement.prepend(tokenElement);\r\n });\r\n}\r\n\r\n// Assign function for MVC AJAX forms. (Not in use right now)\r\n// window.initialiseRecaptcha = initialise;\r\n\r\nwhenDomReady().then(initialise);\r\n\r\n/** Initialise the context fields with the initial values. */\r\nexport function initialiseFields(element) {\r\n // Get the variable name from the element.\r\n const varName = element.dataset.contextVar;\r\n\r\n // Get the context object.\r\n const data = getContextData(element);\r\n\r\n // Set the element value to the associated value from the context object.\r\n element.value = data[varName];\r\n}\r\n/** Get the context data for the modal trigger. */\r\nexport function getContextData(triggerElement) {\r\n return {\r\n cultureCode:\r\n triggerElement.dataset.culture || document.body.dataset.culture,\r\n docid: triggerElement.dataset.docid || document.body.dataset.docid,\r\n utmsource: getCookieValue('jla_utm_source'),\r\n utmcampaign: getCookieValue('jla_utm_campaign'),\r\n utmterm: getCookieValue('jla_utm_term'),\r\n utmcontent: getCookieValue('jla_utm_content'),\r\n refererurl: getCookieValue('jla_referrer_url'),\r\n cpckeyword: getCookieValue('jla_cpc_keyword'),\r\n trafficsource: getCookieValue('jla_traffic_source'),\r\n adgroup: getCookieValue('jla_adgroup'),\r\n url: triggerElement.dataset.url || window.location.href,\r\n };\r\n}\r\nfunction getCookieValue(name) {\r\n const value = document.cookie.match(`(^|[^;]+)\\\\s*${name}\\\\s*=\\\\s*([^;]+)`);\r\n return value ? value.pop() : '';\r\n}\r\n// Small replacement for jQuery's 'closest' method to find\r\n// closest ancestor of element that matches a given selector.\r\nfunction closest(element, selector) {\r\n while (!element.matches(selector)) {\r\n element = element.parentNode;\r\n if (!element || !element.matches) {\r\n return null;\r\n }\r\n }\r\n return element;\r\n}\r\n","import whenDomReady from 'when-dom-ready';\r\n\r\nimport { getCultureCode } from '../utils/culture-helper';\r\n\r\nfunction initialise() {\r\n const resendContainer = document.querySelector(\r\n '.js-confirmation-email-container',\r\n );\r\n if (!resendContainer) {\r\n return;\r\n }\r\n\r\n const resendForm = document.querySelector(\r\n '.js-confirmation-email-container form',\r\n );\r\n if (!resendForm) {\r\n return;\r\n }\r\n\r\n resendForm.addEventListener('submit', postFormData, true);\r\n}\r\n\r\nfunction postFormData(event) {\r\n // Prevent normal submission as we're going to perform an AJAX request instead.\r\n event.preventDefault();\r\n\r\n const submitButton = event.currentTarget.querySelector('input[type=submit]');\r\n if (submitButton) {\r\n submitButton.setAttribute('disabled', '');\r\n }\r\n\r\n fetch(window.location.pathname, {\r\n method: 'POST',\r\n headers: {\r\n 'umb-culture': getCultureCode(),\r\n },\r\n body: new FormData(event.currentTarget),\r\n })\r\n .then(response => response.text())\r\n .then((html) => {\r\n const resendContainer = document.querySelector(\r\n '.js-confirmation-email-container',\r\n );\r\n resendContainer.outerHTML = html;\r\n });\r\n}\r\n\r\nwhenDomReady().then(initialise);\r\n","import whenDomReady from 'when-dom-ready';\r\n\r\nfunction initialise() {\r\n const tabbedNav = document.querySelector('.js-tabbed-nav-dropdown');\r\n\r\n if (!tabbedNav) {\r\n return;\r\n }\r\n\r\n const ACTIVE = 'is-active';\r\n\r\n // eslint-disable-next-line arrow-parens\r\n tabbedNav.addEventListener('click', e => {\r\n e.currentTarget.closest('.tabbed-nav__links').classList.toggle(ACTIVE);\r\n });\r\n}\r\n\r\nwhenDomReady().then(initialise);\r\n","import whenDomReady from 'when-dom-ready';\r\n\r\nfunction initialise() {\r\n const timeline = document.querySelector('.js-timeline');\r\n\r\n if (!timeline) {\r\n return;\r\n }\r\n\r\n const timelineSection = document.querySelectorAll('.js-timeline-section');\r\n\r\n window.addEventListener(\r\n 'scroll',\r\n () => {\r\n const displayHeight = document.documentElement;\r\n const displayHeightScroll = document.body.scrollTop || document.documentElement.scrollTop;\r\n const percent = ((displayHeightScroll * 1.2)\r\n / (displayHeight.scrollHeight - displayHeight.clientHeight))\r\n * 100;\r\n\r\n if (timeline.getBoundingClientRect().top < window.innerHeight) {\r\n timeline.style.height = `${percent}%`;\r\n }\r\n },\r\n false,\r\n );\r\n\r\n // eslint-disable-next-line no-plusplus\r\n for (let i = 0; i < timelineSection.length; i++) {\r\n window.addEventListener('scroll', () => {\r\n if (\r\n timelineSection[i].getBoundingClientRect().top\r\n < window.innerHeight / 1.5 - timelineSection[i].offsetHeight / 2\r\n ) {\r\n timelineSection[i].classList.add('is-showing');\r\n } else {\r\n timelineSection[i].classList.remove('is-showing');\r\n }\r\n });\r\n }\r\n}\r\n\r\nwhenDomReady().then(initialise);\r\n","import tippy from 'tippy.js';\r\nimport whenDomReady from 'when-dom-ready';\r\n\r\nfunction initialise() {\r\n const tooltip = document.querySelectorAll('.js-tooltip');\r\n\r\n if (!tooltip) {\r\n return;\r\n }\r\n\r\n tippy(tooltip, {\r\n arrow: true,\r\n distance: 16,\r\n interactive: true,\r\n content(item) {\r\n const id = item.getAttribute('data-template');\r\n const container = document.createElement('div');\r\n const linkedTemplate = document.getElementById(id);\r\n const node = document.importNode(linkedTemplate.content, true);\r\n container.appendChild(node);\r\n return container;\r\n },\r\n });\r\n}\r\n\r\nwhenDomReady().then(initialise);\r\n","/* eslint-disable max-len */\r\nimport whenDomReady from 'when-dom-ready';\r\nimport * as basicLightbox from 'basiclightbox';\r\n\r\nfunction initialise() {\r\n const videos = document.querySelectorAll('.js-video');\r\n\r\n if (!videos) {\r\n return;\r\n }\r\n\r\n Array.from(videos).forEach((item) => {\r\n item.addEventListener('click', (e) => {\r\n const videoURLPath = item.dataset.video;\r\n const instance = basicLightbox.create(\r\n `\r\n
\r\n \r\n
\r\n `,\r\n {\r\n afterShow: () => {\r\n // initialiseVideo();\r\n },\r\n },\r\n );\r\n\r\n instance.show(() => {\r\n document.querySelector('.basicLightbox').innerHTML += `\r\n
\r\n \r\n
\r\n `;\r\n\r\n document\r\n .querySelector('.js-close-lightbox')\r\n .addEventListener('click', () => {\r\n instance.close();\r\n });\r\n });\r\n\r\n e.preventDefault();\r\n instance.show();\r\n });\r\n });\r\n}\r\n\r\nwhenDomReady().then(initialise);\r\n","/** See more here: https://github.com/typekit/webfontloader */\r\nimport WebFont from 'webfontloader';\r\nimport initMarquees from './init-marquee';\r\n\r\n/**\r\n * Google fonts can be loaded via configuration.\r\n */\r\nWebFont.load({\r\n custom: {\r\n families: [\r\n 'Rubik:n4,n5,n7',\r\n 'Rubik Mono One:n4',\r\n 'Creepster:n4',\r\n 'Lobster Two:n4,n7',\r\n ],\r\n urls: [\r\n require('@fonts/rubik/rubik.css'),\r\n require('@fonts/rubik-mono-one/rubik-mono-one.css'),\r\n require('@fonts/creepster/creepster.css'),\r\n require('@fonts/lobster-two/lobster-two.css'),\r\n ],\r\n },\r\n fontactive: (fontFamily) => {\r\n if (fontFamily === 'Rubik Mono One') {\r\n initMarquees();\r\n }\r\n },\r\n});\r\n","import fitty from 'fitty';\r\n\r\nexport default function initMarquees() {\r\n fitty('.js-marquee-text', {\r\n multiLine: true,\r\n maxSize: 85,\r\n });\r\n}\r\n","/* eslint-disable no-loop-func, prefer-destructuring */\r\nimport queryString from 'query-string';\r\nimport whenDomReady from 'when-dom-ready';\r\n\r\nfunction initialise() {\r\n const graph = document.querySelector('.js-graph');\r\n\r\n if (!graph) {\r\n return;\r\n }\r\n\r\n const daySelect = document.querySelector('.js-days');\r\n const day = document.querySelectorAll('.js-day');\r\n const graphSwitch = document.querySelector('.js-graph-switch');\r\n let firstLoad = true;\r\n\r\n const dayData = [];\r\n let currentDataSet = [];\r\n\r\n const addData = () => {\r\n for (let i = 0; i < currentDataSet.length; i += 1) {\r\n if (currentDataSet[i] < 34) {\r\n day[i].classList.remove(\r\n 'graph__bar--under-67',\r\n 'graph__bar--under-100',\r\n );\r\n day[i].classList.add('graph__bar--under-34');\r\n } else if (currentDataSet[i] < 67) {\r\n day[i].classList.remove(\r\n 'graph__bar--under-34',\r\n 'graph__bar--under-100',\r\n );\r\n day[i].classList.add('graph__bar--under-67');\r\n } else {\r\n day[i].classList.remove('graph__bar--under-34', 'graph__bar--under-67');\r\n day[i].classList.add('graph__bar--under-100');\r\n }\r\n\r\n if (firstLoad === true) {\r\n setTimeout(() => {\r\n day[i].style.width = `${currentDataSet[i]}%`;\r\n }, 100 * i);\r\n } else {\r\n day[i].style.width = `${currentDataSet[i]}%`;\r\n }\r\n }\r\n\r\n firstLoad = false;\r\n };\r\n\r\n fetchData().then((jsonData) => {\r\n // Add daily usage data.\r\n for (let i = 0; i < Object.keys(jsonData.UsageByDay).length; i += 1) {\r\n dayData.push(jsonData.UsageByDay[i]);\r\n }\r\n\r\n // Add weekly average usage data.\r\n dayData.push(jsonData.WeeklyAverage);\r\n\r\n currentDataSet = dayData[dayData.length - 1];\r\n\r\n setTimeout(() => {\r\n addData();\r\n }, 1250);\r\n });\r\n\r\n const ISWEEKVIEW = 'is-week-view';\r\n\r\n daySelect.addEventListener('change', () => {\r\n let newDay = daySelect.value - 1;\r\n\r\n if (newDay === 7) {\r\n graphSwitch.classList.add(ISWEEKVIEW);\r\n } else {\r\n graphSwitch.classList.remove(ISWEEKVIEW);\r\n }\r\n\r\n if (newDay < 0 || newDay >= dayData.length) {\r\n newDay = dayData.length - 1;\r\n graphSwitch.classList.add(ISWEEKVIEW);\r\n }\r\n\r\n currentDataSet = dayData[newDay];\r\n addData();\r\n });\r\n}\r\n\r\nfunction fetchData() {\r\n let siteId = 0;\r\n\r\n const siteIdElement = document.querySelector('.js-graph-site');\r\n if (siteIdElement) {\r\n siteId = siteIdElement.value;\r\n } else {\r\n const urlQueryParams = queryString.parse(window.location.search);\r\n siteId = urlQueryParams.site;\r\n }\r\n\r\n const fromDate = new Date();\r\n fromDate.setDate(fromDate.getDate() - 7);\r\n\r\n const toDate = new Date();\r\n toDate.setDate(toDate.getDate() - 1);\r\n\r\n const fetchQueryParams = {\r\n siteId,\r\n dateFrom: fromDate\r\n .toISOString()\r\n .slice(0, 10)\r\n .replace(/-/g, ''),\r\n dateTo: toDate\r\n .toISOString()\r\n .slice(0, 10)\r\n .replace(/-/g, ''),\r\n };\r\n\r\n const fetchQueryString = queryString.stringify(fetchQueryParams);\r\n\r\n return fetch(\r\n `/umbraco/surface/circuitview/GetSiteUsageData?${fetchQueryString}`,\r\n ).then(response => response.json());\r\n}\r\n\r\nwhenDomReady().then(initialise);\r\n","import queryString from 'query-string';\r\nimport whenDomReady from 'when-dom-ready';\r\n\r\nconst OPEN = 'is-open';\r\n\r\nexport function initialise() {\r\n const accordions = document.querySelectorAll('.js-accordion');\r\n\r\n if (!accordions) {\r\n return;\r\n }\r\n\r\n for (let i = 0; i < accordions.length; i += 1) {\r\n // eslint-disable-next-line arrow-parens\r\n accordions[i].addEventListener('click', e => {\r\n const applianceId = e.currentTarget.dataset.appliance;\r\n const currentQuery = queryString.parse(window.location.search);\r\n currentQuery.appliance = undefined;\r\n\r\n if (!e.currentTarget.closest('.accordion').classList.contains(OPEN)) {\r\n for (let d = 0; d < accordions.length; d += 1) {\r\n accordions[d].closest('.accordion').classList.remove(OPEN);\r\n }\r\n }\r\n\r\n if (!accordions[i].closest('.accordion').classList.contains(OPEN)) {\r\n currentQuery.appliance = applianceId;\r\n }\r\n\r\n accordions[i].closest('.accordion').classList.toggle(OPEN);\r\n\r\n const newQuery = queryString.stringify(currentQuery);\r\n const newUrl = `${window.location.protocol}//${window.location.host}${\r\n window.location.pathname\r\n }?${newQuery}`;\r\n window.history.replaceState(null, null, newUrl);\r\n });\r\n }\r\n\r\n const accordionsSingle = document.querySelectorAll('.js-accordion-single');\r\n\r\n if (!accordionsSingle) {\r\n return;\r\n }\r\n\r\n for (let i = 0; i < accordionsSingle.length; i += 1) {\r\n // eslint-disable-next-line arrow-parens\r\n accordionsSingle[i].addEventListener('click', e => {\r\n if (!e.currentTarget.closest('.accordion').classList.contains(OPEN)) {\r\n for (let d = 0; d < accordionsSingle.length; d += 1) {\r\n accordionsSingle[d].closest('.accordion').classList.remove(OPEN);\r\n }\r\n }\r\n\r\n accordionsSingle[i].closest('.accordion').classList.toggle(OPEN);\r\n });\r\n }\r\n}\r\n\r\nwhenDomReady().then(initialise);\r\n","/* eslint-disable arrow-parens */\r\nimport whenDomReady from 'when-dom-ready';\r\n\r\nfunction initialise() {\r\n const CVContainer = document.querySelectorAll('.js-cv-container');\r\n\r\n if (!CVContainer) {\r\n return;\r\n }\r\n\r\n const swap = document.querySelectorAll('.js-swap');\r\n\r\n swap.forEach(s => {\r\n s.addEventListener('click', e => {\r\n CVContainer.forEach(container => {\r\n container.classList.add('is-active');\r\n e.target\r\n .closest('.circuit-view-container')\r\n .classList.remove('is-active');\r\n });\r\n });\r\n });\r\n\r\n const machineContent = document.querySelectorAll('.js-machine-type');\r\n const machineBtns = document.querySelectorAll('.js-swap-machine');\r\n\r\n machineBtns.forEach(btn => {\r\n btn.addEventListener('click', e => {\r\n if (!e.target.classList.contains('is-active')) {\r\n machineBtns.forEach(btns => {\r\n btns.classList.toggle('is-active');\r\n });\r\n\r\n machineContent.forEach(content => {\r\n if (content.classList.contains('is-active')) {\r\n content.classList.remove('is-active');\r\n } else {\r\n content.classList.add('is-active');\r\n }\r\n });\r\n }\r\n });\r\n });\r\n}\r\n\r\nwhenDomReady().then(initialise);\r\n","import queryString from 'query-string';\r\n\r\nwindow.addEventListener('message', handleReceiveMessage, false);\r\n\r\nfunction handleReceiveMessage(event) {\r\n const originDomain = event.origin;\r\n\r\n // If the message origin isn't a Lutron's domain then ignore it.\r\n if (originDomain.match('.lutrons.com$') === null) {\r\n return;\r\n }\r\n\r\n // Get the form base URL form the hidden field on the page.\r\n const reportAFaultUrlElement = document.querySelector('.js-report-fault-url');\r\n if (!reportAFaultUrlElement) {\r\n return;\r\n }\r\n\r\n const reportAFaultBaseUrl = reportAFaultUrlElement.value;\r\n\r\n const machineInfo = event.data.targetMachine;\r\n\r\n const currentQueryParams = queryString.parse(window.location.search);\r\n\r\n const queryParams = {\r\n machineId: machineInfo.lbl,\r\n machineType: machineInfo.t,\r\n siteId: currentQueryParams.site,\r\n };\r\n\r\n const redirectQueryString = queryString.stringify(queryParams);\r\n\r\n window.open(`${reportAFaultBaseUrl}?${redirectQueryString}`, '_blank');\r\n}\r\n","/* global paypal */\r\n\r\nimport whenDomReady from 'when-dom-ready';\r\n\r\nimport { getCultureCode } from '../utils/culture-helper';\r\n\r\nlet transactionID = '';\r\n\r\nfunction initialise() {\r\n // Check if the hidden field containing the PayPal settings is present on the page.\r\n const payPalSettingsElement = document.querySelector('.js-paypal-settings');\r\n if (!payPalSettingsElement) {\r\n return;\r\n }\r\n\r\n // Deserialise the PayPal settings object.\r\n const payPalSettings = JSON.parse(payPalSettingsElement.value);\r\n\r\n // Dynamically load the PayPal checkout script and wait for it to be fully loaded.\r\n const script = document.createElement('script');\r\n script.src = payPalSettings.clientScript;\r\n script.id = 'PayPalCheckoutScript';\r\n document.body.appendChild(script);\r\n\r\n script.onload = () => {\r\n initalisePayPalSmartButtons(payPalSettings);\r\n };\r\n}\r\n\r\nfunction initalisePayPalSmartButtons(payPalSettings) {\r\n paypal\r\n .Buttons({\r\n env: payPalSettings.environment,\r\n style: {\r\n size: 'small',\r\n color: 'gold',\r\n shape: 'pill',\r\n label: 'checkout',\r\n },\r\n\r\n // Perform order creation validation.\r\n onClick: onClickHandler,\r\n\r\n // Set up the transaction.\r\n createOrder: createOrderHandler,\r\n\r\n // Finalize the transaction.\r\n onApprove: (data) => {\r\n onApproveHandler(data, payPalSettings.currency);\r\n },\r\n\r\n // Log any errors.\r\n onError: onErrorHandler,\r\n })\r\n .render('#paypal-button-container');\r\n}\r\n\r\nfunction onClickHandler(data, actions) {\r\n // Remove any existing field validation errors.\r\n const formFields = document.querySelectorAll('#CardTopupStep2 input');\r\n for (let i = 0; i < formFields.length; i += 1) {\r\n formFields[i].classList.remove('form-input--error');\r\n }\r\n\r\n // Remove any existing field validation messages.\r\n const formFieldMessages = document.querySelectorAll(\r\n '#CardTopupStep2 [data-validation-for]',\r\n );\r\n for (let i = 0; i < formFieldMessages.length; i += 1) {\r\n formFieldMessages[i].textContent = '';\r\n }\r\n\r\n return fetch('/umbraco/surface/topup/validatepaypaltransaction', {\r\n method: 'POST',\r\n headers: {\r\n 'umb-culture': getCultureCode(),\r\n },\r\n credentials: 'include',\r\n body: new FormData(document.querySelector('#CardTopupStep2')),\r\n })\r\n .then(res => res.json())\r\n .then((responseData) => {\r\n if (responseData.IsValid) {\r\n return actions.resolve();\r\n }\r\n\r\n const errorKeys = Object.keys(responseData.FieldErrors);\r\n for (let i = 0; i < errorKeys.length; i += 1) {\r\n const fieldKey = errorKeys[i];\r\n const fieldError = responseData.FieldErrors[fieldKey];\r\n\r\n document\r\n .querySelector(`#${fieldKey}`)\r\n .classList.add('form-input--error');\r\n document.querySelector(\r\n `[data-validation-for=\"${fieldKey}\"]`,\r\n ).textContent = fieldError;\r\n }\r\n\r\n return actions.reject();\r\n });\r\n}\r\n\r\nfunction createOrderHandler() {\r\n return fetch('/umbraco/surface/topup/createpaypaltransaction', {\r\n method: 'POST',\r\n headers: {\r\n 'umb-culture': getCultureCode(),\r\n },\r\n credentials: 'include',\r\n body: new FormData(document.querySelector('#CardTopupStep2')),\r\n })\r\n .then(res => res.json())\r\n .then((responseData) => {\r\n if (!responseData.Success && responseData.RedirectUrl) {\r\n window.location.href = responseData.RedirectUrl;\r\n }\r\n\r\n transactionID = responseData.TransactionId;\r\n return responseData.TransactionId;\r\n });\r\n}\r\n\r\nfunction onApproveHandler(data, currencyId) {\r\n const { orderID } = data;\r\n\r\n fetch('/umbraco/surface/logging/loginformation', {\r\n method: 'POST',\r\n headers: {\r\n 'content-type': 'application/json',\r\n 'umb-culture': getCultureCode(),\r\n },\r\n credentials: 'include',\r\n body: JSON.stringify({\r\n message: `onApprove callback start - ${orderID}`,\r\n pageUrl: window.location.href,\r\n }),\r\n });\r\n\r\n const formElement = document.querySelector('.js-topup-step2-form');\r\n const overlayElement = document.querySelector('.js-payment-overlay');\r\n\r\n if (formElement) {\r\n formElement.classList.add('inactive');\r\n }\r\n\r\n if (overlayElement) {\r\n overlayElement.classList.add('active');\r\n }\r\n\r\n // Process the order server side.\r\n return fetch('/umbraco/surface/topup/processpaypaltransaction', {\r\n method: 'POST',\r\n headers: {\r\n 'content-type': 'application/json',\r\n 'umb-culture': getCultureCode(),\r\n },\r\n credentials: 'include',\r\n body: JSON.stringify({\r\n orderID,\r\n currencyId,\r\n }),\r\n })\r\n .then(res => res.json())\r\n .then((responseData) => {\r\n if (responseData.RedirectUrl) {\r\n window.location = responseData.RedirectUrl;\r\n }\r\n });\r\n}\r\n\r\nfunction onErrorHandler(err) {\r\n // Ignore window unload event errors.\r\n if (err.message.startsWith('Window navigated away')) {\r\n return;\r\n }\r\n\r\n const exception = {\r\n message: `(Transaction ID: ${transactionID}) - ${err.code} ${err.message}`,\r\n callStack: err.stack,\r\n pageUrl: window.location.href,\r\n };\r\n\r\n fetch('/umbraco/surface/logging/logexception', {\r\n method: 'POST',\r\n headers: {\r\n 'content-type': 'application/json',\r\n 'umb-culture': getCultureCode(),\r\n },\r\n credentials: 'include',\r\n body: JSON.stringify(exception),\r\n });\r\n}\r\n\r\nwhenDomReady().then(initialise);\r\n","import whenDomReady from 'when-dom-ready';\r\n\r\nimport { getCultureCode } from '../utils/culture-helper';\r\n\r\nlet freedomPaySettings = null;\r\n\r\nfunction initialise() {\r\n // Check if the hidden field containing the FreedomPay settings is present on the page.\r\n const payFreedomPaySettingsElement = document.querySelector(\r\n '.js-freedompay-settings',\r\n );\r\n if (!payFreedomPaySettingsElement) {\r\n return;\r\n }\r\n\r\n // Deserialise the FreedomPay settings object.\r\n freedomPaySettings = JSON.parse(payFreedomPaySettingsElement.value);\r\n\r\n window.addEventListener('message', handleMessage);\r\n}\r\n\r\nfunction handleMessage(e) {\r\n if (e.origin) {\r\n if (e.origin === freedomPaySettings.domain) {\r\n const message = e.data;\r\n switch (message.type) {\r\n case 1: // Errors\r\n handleErrors(message.data);\r\n break;\r\n case 2:\r\n setFrameHeight(message.data);\r\n break;\r\n case 3:\r\n submitPayment(message.data);\r\n break;\r\n default:\r\n break;\r\n }\r\n }\r\n }\r\n}\r\n\r\nfunction setFrameHeight(data) {\r\n const freedomIframe = document.querySelector('.freedomIframe');\r\n if (!freedomIframe) {\r\n return;\r\n }\r\n freedomIframe.style.setProperty('height', `${data.height}px`);\r\n}\r\n\r\nfunction submitPayment(data) {\r\n const freedomIframe = document.querySelector('.freedomIframe');\r\n if (freedomIframe) {\r\n freedomIframe.style.display = 'none';\r\n }\r\n\r\n const freedomPleaseWait = document.querySelector('.freedom-please-wait');\r\n if (freedomPleaseWait) {\r\n freedomPleaseWait.style.display = 'block';\r\n }\r\n\r\n // Process the order server side.\r\n return fetch(\r\n `/umbraco/surface/topup/ProcessFreedomPayTransaction?currencyId=${\r\n freedomPaySettings.currency\r\n }`,\r\n {\r\n method: 'POST',\r\n headers: {\r\n 'content-type': 'application/json',\r\n 'umb-culture': getCultureCode(),\r\n },\r\n credentials: 'include',\r\n body: JSON.stringify(data),\r\n },\r\n )\r\n .then(res => res.json())\r\n .then((responseData) => {\r\n if (responseData.RedirectUrl) {\r\n window.location = responseData.RedirectUrl;\r\n }\r\n })\r\n .catch(() => {\r\n handleErrors();\r\n });\r\n}\r\n\r\nfunction handleErrors() {\r\n const validationMessage = document.querySelector('.validation-message');\r\n if (!validationMessage) {\r\n return;\r\n }\r\n\r\n const htmlMessage = document.createElement('p');\r\n htmlMessage.appendChild(\r\n document.createTextNode(\r\n 'There has been an error please go back and try again.',\r\n ),\r\n );\r\n validationMessage.appendChild(htmlMessage);\r\n\r\n const freedomIframe = document.querySelector('.freedomIframe');\r\n if (freedomIframe) {\r\n freedomIframe.style.display = 'none';\r\n }\r\n\r\n const freedomPleaseWait = document.querySelector('.freedom-please-wait');\r\n if (freedomPleaseWait) {\r\n freedomPleaseWait.style.display = 'none';\r\n }\r\n}\r\n\r\nwhenDomReady().then(initialise);\r\n","import whenDomReady from 'when-dom-ready';\r\n\r\nfunction initialise() {\r\n const scrollToBtn = document.querySelector('.js-scroll-to-top');\r\n\r\n if (!scrollToBtn) {\r\n return;\r\n }\r\n\r\n const pageBottom = document.querySelector('.footer');\r\n const rootElement = document.documentElement;\r\n\r\n function callback(entries) {\r\n // eslint-disable-next-line arrow-parens\r\n entries.forEach(entry => {\r\n if (entry.isIntersecting) {\r\n scrollToBtn.classList.add('showBtn');\r\n } else {\r\n scrollToBtn.classList.remove('showBtn');\r\n }\r\n });\r\n }\r\n\r\n function scrollToTop() {\r\n rootElement.scrollTo({\r\n top: 0,\r\n behavior: 'smooth',\r\n });\r\n }\r\n\r\n scrollToBtn.addEventListener('click', scrollToTop);\r\n\r\n const observer = new IntersectionObserver(callback);\r\n\r\n observer.observe(pageBottom);\r\n}\r\n\r\nwhenDomReady().then(initialise);\r\n","import whenDomReady from 'when-dom-ready';\r\n\r\nfunction initialise() {\r\n const filterBtns = document.querySelectorAll('.js-filter-checkbox .btn');\r\n\r\n if (!filterBtns) {\r\n return;\r\n }\r\n\r\n // eslint-disable-next-line arrow-parens\r\n filterBtns.forEach(button => {\r\n button.addEventListener('click', ({ target }) => {\r\n const isActive = target.classList.contains('is-active');\r\n\r\n if (isActive) {\r\n target.classList.remove('is-active');\r\n } else {\r\n target.classList.add('is-active');\r\n }\r\n });\r\n });\r\n}\r\n\r\nwhenDomReady().then(initialise);\r\n","/* eslint-disable no-console, indent, no-tabs, no-plusplus, max-len */\r\nimport whenDomReady from 'when-dom-ready';\r\n\r\nfunction initialise() {\r\n const bubbleContainer = document.querySelectorAll('.js-bubble-container');\r\n\r\n if (!bubbleContainer) {\r\n return;\r\n }\r\n\r\n for (let i = 0; i < 6; i++) {\r\n const bubble = document.createElement('div');\r\n bubble.className = 'bubble js-bubble';\r\n bubbleContainer[0].appendChild(bubble);\r\n bubble.style.left = `${Math.random() * 100}%`;\r\n bubble.style.setProperty(\r\n '--animation-duration',\r\n `${Math.random() * 90 + 10}s`,\r\n );\r\n bubble.style.setProperty('--animation-delay', `${Math.random() * 10}s`);\r\n }\r\n}\r\n\r\nwhenDomReady().then(initialise);\r\n","module.exports = __webpack_public_path__ + \"rubik-5e73fdd1bf7293932dafd4cfd6473a84.css\";","module.exports = __webpack_public_path__ + \"rubik-mono-one-c31e28a70ea0c1f911f0df6f34ef87e9.css\";","module.exports = __webpack_public_path__ + \"creepster-53a98e7fbddc6a4df4ed0e62bdcc8951.css\";","module.exports = __webpack_public_path__ + \"lobster-two-98a2d588e7d035af4bdbf19e5e8dd7cc.css\";"],"sourceRoot":""}