{"version":3,"sources":["webpack:///webpack/bootstrap","webpack:///./assets/src/js/utils/cart-utils.js","webpack:///./assets/src/js/product-add-to-cart.js","webpack:///./assets/src/js/utils/sst-utils.js","webpack:///./assets/src/js/utils/ga-ecommerce-utils.js","webpack:///./assets/src/js/utils/cookie-utils.js","webpack:///./assets/src/js/modules/mini-cart.js","webpack:///./assets/src/js/utils/form-validation-utils.js","webpack:///./assets/src/js/utils/scrolling-utils.js","webpack:///./assets/src/js/modules/site-toaster.js"],"names":["installedModules","__webpack_require__","moduleId","exports","module","i","l","modules","call","m","c","d","name","getter","o","Object","defineProperty","enumerable","get","r","Symbol","toStringTag","value","t","mode","__esModule","ns","create","key","bind","n","object","property","prototype","hasOwnProperty","p","s","getEpiCartItems","url","window","location","protocol","hostname","Promise","resolve","reject","fetch","then","json","catch","addToEpiCart","code","method","headers","accept","ok","removeFromEpiCart","ProductAddToCart","this","addToCarBtn","document","querySelector","styleSelector","getElementById","selectedOptionPrice","toaster","init","selector","optionList","querySelectorAll","length","variantCode","btn","price","getPrice","str","matches","match","option","getFirstOptionWithValue","textContent","addEventListener","selected","groupId","form","validate","getAttribute","classList","add","setAttribute","addOutdoorProductToOrderLine","getMiniCartHtml","remove","removeAttribute","SiteToaster","id","message","open","setTimeout","close","itemNo","group","gaAddToCart","console","error","addToOrderLine","captureScreenDimensions","navigator","screen","height","width","userAgent","getCookie","screenDims","replace","response","setCookie","removeOrderLine","pushToDataLayer","data","log","dataLayer","push","ecommerce","getEventData","checkout","event","addPaymentInfo","addShippingInfo","type","href","target","indexOf","purchase","viewCart","viewItem","viewItemList","category","cookies","cookie","split","forEach","trim","substring","days","date","Date","setTime","getTime","toGMTString","setCookieToExpireOnDate","initMiniCart","cart","icon","items","updateMiniCartHtml","html","miniCartDiv","innerHTML","text","formSelectors","validateByType","val","status","RegExp","test","addRequiredAttrs","inputList","clearInputValues","fieldList","fieldErrorList","field","isValid","required","isFormValid","fieldError","parentNode","errorMsg","element","scrollToElement","focus","addFocusToErrorMessage","formatPhone","arr","join","removeAllErrors","removeRequiredAttrs","resetSelectValues","selectList","firstOption","options","offset","position","y","offsetTop","scrollTo","top","behavior","openToasters","callbacks","onOpen","onClose","render","update","map","style","body","div","createElement","appendChild"],"mappings":"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","file":"product-add-to-cart.min.js","sourcesContent":[" \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = 1);\n","const getEpiCartItems = () => { // getCartItems()\n const url = `${window.location.protocol}//${window.location.hostname}/api/v1/cart`;\n return new Promise((resolve, reject) => {\n fetch(url)\n .then(r => r.json())\n .then(resolve)\n .catch(reject);\n });\n};\n\nconst addToEpiCart = code => ( // addToCart()\n new Promise((resolve, reject) => {\n fetch(`${window.location.protocol}//${window.location.hostname}/api/v1/cart/items/${code}`, {\n method: 'POST',\n headers: {\n accept: 'application/json',\n 'content-type': 'application/json',\n },\n })\n .then((r) => {\n if (r.ok) {\n r.json().then(resolve);\n } else {\n r.json().then(reject);\n }\n })\n .catch(reject);\n })\n);\n\n\nconst removeFromEpiCart = (code) => { // removeFromCart()\n const url = `${window.location.protocol}//${window.location.hostname}/api/v1/cart/items/${code}`;\n return new Promise((resolve, reject) => {\n fetch(url, { method: 'DELETE' })\n .then((r) => {\n if (r.ok) {\n resolve();\n } else {\n r.json().then(reject);\n }\n })\n .catch(reject);\n });\n};\n\nexport {\n getEpiCartItems,\n addToEpiCart,\n removeFromEpiCart,\n};\n","/* eslint-disable no-console */\nimport { addToEpiCart } from './utils/cart-utils';\nimport { addOutdoorProductToOrderLine } from './utils/sst-utils';\nimport { getMiniCartHtml } from './modules/mini-cart';\nimport { validate } from './utils/form-validation-utils';\nimport SiteToaster from './modules/site-toaster';\n\nexport default class ProductAddToCart {\n constructor() {\n this.addToCarBtn = document.querySelector('.add-to-cart-btn');\n this.styleSelector = document.getElementById('Style');\n this.selectedOptionPrice = document.getElementById('selectedOptionPrice');\n this.toaster = null;\n this.init();\n }\n\n getFirstOptionWithValue() {\n const selector = this.styleSelector;\n if (selector) {\n const optionList = selector.querySelectorAll('option');\n if (optionList.length > 2) {\n return optionList[1];\n }\n }\n return '';\n }\n\n init() {\n let variantCode = '';\n const btn = this.addToCarBtn;\n const selector = this.styleSelector;\n const price = this.selectedOptionPrice;\n const getPrice = (str) => {\n const matches = str.match(/\\(([^\\)]+)\\)/); /* eslint-disable-line no-useless-escape */\n if (matches === null) {\n return '';\n }\n if (matches.length > 1) {\n return matches[1];\n }\n return '';\n };\n\n if (selector && price) {\n // Set default price that's displayed\n const option = this.getFirstOptionWithValue();\n if (option !== '') {\n price.textContent = getPrice(option.textContent);\n }\n // Update on-page price\n selector.addEventListener('change', () => {\n if (selector.value === '') {\n const optionList = selector.querySelectorAll('option');\n price.textContent = getPrice(optionList[1].textContent);\n } else {\n const selected = selector.querySelector(`option[value=\"${selector.value}\"]`);\n if (selected) {\n price.textContent = getPrice(selected.textContent);\n }\n }\n });\n }\n\n if (btn) {\n btn.addEventListener('click', () => {\n // Code selection and validation\n let groupId = '';\n if (btn && selector) {\n // Make sure item is selected\n const form = document.querySelector('.add-to-cart-form');\n if (!validate(form)) {\n return;\n }\n variantCode = selector.value;\n const option = this.getFirstOptionWithValue();\n if (option !== '') {\n groupId = option.value;\n }\n } else if (btn && selector === null) {\n variantCode = btn.getAttribute('data-variant-id');\n }\n // Update button status and add to cart\n btn.classList.add('updating');\n btn.setAttribute('disabled', 'disabled');\n addOutdoorProductToOrderLine(variantCode, groupId)\n .then(addToEpiCart(variantCode))\n .then(() => {\n getMiniCartHtml();\n btn.classList.remove('updating');\n btn.removeAttribute('disabled');\n if (this.toaster) {\n this.toaster.remove();\n }\n this.toaster = new SiteToaster({\n id: 'status-toaster',\n message: 'Item has been added to your cart.',\n });\n this.toaster.open();\n setTimeout(() => {\n this.toaster.close();\n }, 3000);\n setTimeout(() => {\n this.toaster.remove();\n }, 3300);\n });\n });\n }\n }\n}\nwindow.ProductAddToCart = ProductAddToCart;\n/* eslint-enable no-console */\n","/* eslint-disable no-console */\nimport { gaAddToCart } from './ga-ecommerce-utils';\nimport { getCookie, setCookie } from './cookie-utils';\n\nconst addToOrderLine = itemNo => (\n new Promise((resolve, reject) => {\n fetch(`${window.location.protocol}//${window.location.hostname}/RouteOrderLine?itemNo=${itemNo}`, {\n method: 'POST',\n headers: {\n accept: 'application/json',\n 'content-type': 'application/json',\n },\n })\n .then((r) => {\n gaAddToCart(itemNo)\n .then(() => {\n if (r.ok) {\n r.json().then(resolve);\n } else {\n r.json().then(reject);\n }\n });\n })\n .catch(console.error);\n })\n);\n\nconst removeOrderLine = itemNo => (\n new Promise((resolve, reject) => {\n fetch(`${window.location.protocol}//${window.location.hostname}/RemoveOrderLine?itemNo=${itemNo}`, {\n method: 'POST',\n headers: {\n accept: 'application/json',\n 'content-type': 'application/json',\n },\n })\n .then((r) => {\n if (r.ok) {\n r.json().then(resolve);\n } else {\n r.json().then(reject);\n }\n })\n .catch(console.error);\n })\n);\n\nconst addOutdoorProductToOrderLine = (itemNo, group) => (\n new Promise((resolve, reject) => {\n fetch(`${window.location.protocol}//${window.location.hostname}/RouteOrderLine?itemNo=${itemNo}&group=${group}`, {\n method: 'POST',\n headers: {\n accept: 'application/json',\n 'content-type': 'application/json',\n },\n })\n .then((r) => {\n gaAddToCart(itemNo, group)\n .then(() => {\n if (r.ok) {\n r.json().then(resolve);\n } else {\n r.json().then(reject);\n }\n });\n })\n .catch(console.error);\n })\n);\n\nconst captureScreenDimensions = () => {\n const { navigator, screen } = window;\n const { height, width } = screen;\n const { userAgent } = navigator;\n const COOKIE_NAME = 'sst-ss';\n // Only run if cookie has w/ dimensions has not been set\n if (getCookie(COOKIE_NAME) === '') {\n const screenDims = `${height}x${width}`;\n const url = `${window.location.protocol}//${window.location.hostname}/api/SaveScreenSize/?ss=${screenDims}&ua=${userAgent.replace(/\\s/g, '')}`;\n fetch(url, {\n method: 'POST',\n headers: {\n accept: 'application/json',\n 'content-type': 'application/json',\n },\n })\n .then((response) => {\n if (response.ok) {\n // Only storing the screen dimensions in the cookie\n setCookie(COOKIE_NAME, screenDims, 200);\n }\n })\n .catch(console.error);\n }\n};\n\nexport {\n addOutdoorProductToOrderLine,\n addToOrderLine,\n captureScreenDimensions,\n removeOrderLine,\n};\n/* eslint-enable no-console */\n","/* eslint-disable no-console */\nconst pushToDataLayer = (data) => {\n console.log(data);\n const { dataLayer } = window;\n if (dataLayer === null || data === null) return;\n dataLayer.push({ ecommerce: null });\n dataLayer.push(data);\n};\n\nconst getEventData = url => (\n new Promise((resolve, reject) => {\n fetch(url, {\n method: 'POST',\n headers: {\n accept: 'application/json',\n 'content-type': 'application/json',\n },\n })\n .then((response) => {\n if (response.ok) {\n response.json().then(resolve);\n } else {\n response.json().then(reject);\n }\n })\n .catch(console.error);\n })\n);\n\nconst addPaymentInfo = () => {\n const url = '/ga/AddPaymentInfoFormatter';\n getEventData(url)\n .then(ecommerce => (\n pushToDataLayer({\n event: 'add_payment_info',\n ecommerce,\n })\n ));\n};\n\nconst addShippingInfo = () => {\n const url = '/ga/AddShippingInfoFormatter';\n getEventData(url)\n .then(ecommerce => (\n pushToDataLayer({\n event: 'add_shipping_info',\n ecommerce,\n })\n ));\n};\n\nconst checkout = () => {\n const url = '/ga/CheckoutFormatter';\n getEventData(url)\n .then(ecommerce => (\n pushToDataLayer({\n event: 'begin_checkout',\n ecommerce,\n })\n ));\n};\n\nconst gaAddToCart = (code, type) => {\n const url = `/ga/AddToCartFormatter?code=${code}&type=${type}`;\n return new Promise((resolve, reject) => {\n fetch(url, {\n method: 'POST',\n headers: {\n accept: 'application/json',\n 'content-type': 'application/json',\n },\n })\n .then((response) => {\n if (response.ok) {\n // Add to datalayer\n console.log(response);\n pushToDataLayer({\n event: 'add_to_cart',\n ecommerce: {},\n });\n response.json().then(resolve);\n } else {\n response.json().then(reject);\n }\n })\n .catch(console.error);\n });\n};\n\nconst init = () => {\n // Add in catch for all checkout buttons\n document.addEventListener('click', (event) => {\n const { target } = event;\n const { href } = target;\n if (href) {\n if (href.indexOf('checkout') !== -1) {\n checkout();\n }\n }\n });\n};\n\nconst purchase = () => {\n const url = '/ga/PurchaseFormatter';\n getEventData(url)\n .then(ecommerce => (\n pushToDataLayer({\n event: 'purchase',\n ecommerce,\n })\n ));\n};\n\nconst viewCart = () => {\n const url = '/ga/ViewCartFormatter';\n getEventData(url)\n .then(ecommerce => (\n pushToDataLayer({\n event: 'view_cart',\n ecommerce,\n })\n ));\n};\n\nconst viewItem = (code, type) => {\n const url = `/ga/ViewItemFormatter?code=${code}&type=${type}`;\n getEventData(url)\n .then(ecommerce => (\n pushToDataLayer({\n event: 'view_item',\n ecommerce,\n })\n ));\n};\n\nconst viewItemList = (category) => {\n const url = `/ga/ViewItemListFormatter?name=${category}`;\n getEventData(url)\n .then((ecommerce) => {\n if (ecommerce === null) return;\n pushToDataLayer({\n event: 'view_item_list',\n ecommerce,\n });\n });\n};\n\nexport {\n addPaymentInfo,\n addShippingInfo,\n checkout,\n gaAddToCart,\n init,\n purchase,\n pushToDataLayer,\n viewCart,\n viewItem,\n viewItemList,\n};\n/* eslint-enable no-console */\n","const getCookie = (name) => {\n const cookies = document.cookie.split(';');\n let value = '';\n cookies.forEach((str) => {\n const cookie = str.trim();\n if (cookie.indexOf(name) !== -1) {\n value = cookie.substring(name.length + 1, cookie.length);\n }\n });\n return value;\n};\n\nconst setCookie = (name, value, days) => {\n const date = new Date();\n date.setTime(date.getTime() + (days * 24 * 60 * 60 * 1000));\n document.cookie = `${name}=${value}; expires=${date.toGMTString()}`;\n};\n\nconst setCookieToExpireOnDate = (name, value, date) => {\n document.cookie = `${name}=${value}; expires=${date.toGMTString()}`;\n};\n\nexport {\n getCookie,\n setCookie,\n setCookieToExpireOnDate,\n};\n","/* eslint-disable no-use-before-define */\nimport { getEpiCartItems } from '../utils/cart-utils';\n\nconst getMiniCartHtml = () => {\n const url = `${window.location.protocol}//${window.location.hostname}/cart/MiniCartDetails`;\n fetch(url)\n .then(r => r.text())\n .then(updateMiniCartHtml)\n .catch(console.error);\n};\n\n/* const onRemoveItemClick = (e) => {\n const code = e.target.getAttribute('data-code');\n removeFromEpiCart(code)\n .then(getMiniCartHtml)\n .catch(console.error);\n}; */\n\nconst initMiniCart = () => {\n getEpiCartItems()\n .then((cart) => {\n const icon = document.querySelector('.icon-item-cart');\n if (!icon) {\n return;\n }\n if (cart.items.length) {\n icon.classList.add('items-added-to-cart');\n } else {\n icon.classList.remove('items-added-to-cart');\n }\n })\n .catch(console.error);\n // const itemList = document.getElementById('mini-cart-items-list');\n /* if (!itemList) {\n return;\n } */\n /* Array.from(itemList.children).forEach((li) => {\n const btn = li.querySelector('.mini-cart-rm');\n btn.onclick = onRemoveItemClick;\n }); */\n};\n\nconst updateMiniCartHtml = (html) => {\n const miniCartDiv = document.querySelector('.cart-content-wrap');\n if (!miniCartDiv) {\n return;\n }\n\n miniCartDiv.innerHTML = html;\n initMiniCart();\n};\n\nexport {\n getMiniCartHtml,\n initMiniCart,\n};\n/* eslint-enable no-use-before-define */\n","/* eslint-disable no-console, eslint-disable-line no-plusplus */\nimport { scrollToElement } from './scrolling-utils';\n\nconst formSelectors = 'input[type=\"text\"], input[type=\"password\"], textarea';\n\nconst validateByType = (type, val) => {\n // console.log(`${type}, ${val}`);\n let status;\n switch (type) {\n case 'text':\n status = val !== '';\n break;\n case 'phone':\n status = new RegExp(/^(\\+\\d{1,2}\\s)?\\(?\\d{3}\\)?[\\s.-]?\\d{3}[\\s.-]?\\d{4}$/).test(val);\n break;\n case 'zipcode':\n status = new RegExp(/(^\\d{5}(-\\d{4})?$)|(^[ABCEGHJKLMNPRSTVXY]{1}\\d{1}[A-Z]{1} *\\d{1}[A-Z]{1}\\d{1}$)/).test(val);\n break;\n case 'email':\n /* eslint-disable no-useless-escape */\n status = new RegExp(/^(([^<>()\\[\\]\\\\.,;:\\s@\"]+(\\.[^<>()\\[\\]\\\\.,;:\\s@\"]+)*)|(\".+\"))@((\\[[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}])|(([a-zA-Z\\-0-9]+\\.)+[a-zA-Z]{2,}))$/).test(val);\n /* eslint-enable no-useless-escape */\n break;\n case 'password':\n status = new RegExp(/^(?=.*[a-z])(?=.*[a-zA-Z])(?=.*[0-9])(?=.*[!@#\\$%\\^&\\*])(?=.{8,})/).test(val); /* eslint-disable-line no-useless-escape */\n break;\n case 'productcode':\n // status = new RegExp(/^\\d{7,8}[\\.]\\d{3}$/).test(val); /* eslint-disable-line no-useless-escape */\n // status = new RegExp(/^(\\d{7,8}[\\.]\\d{3}$)|(^\\d{7,8}$)/).test(val); /* eslint-disable-line no-useless-escape */\n status = new RegExp(/^(\\d{1,}$)/).test(val); /* eslint-disable-line no-useless-escape */\n break;\n default:\n break;\n }\n return status;\n};\n\n// Format phone as xxx xxx xxxx\nconst formatPhone = (s) => {\n if (s !== null && s !== undefined && s !== '') {\n if (s.match(new RegExp(/\\d/g) || []) !== null) {\n const arr = s.match(new RegExp(/\\d/g) || []).join('');\n return `${arr.substring(0, 3)}-${arr.substring(3, 6)}-${arr.substring(6)}`;\n }\n return s;\n }\n return s;\n};\n\nconst addFocusToErrorMessage = (element) => {\n // Scroll to message\n scrollToElement({\n element,\n });\n // Add focus\n element.focus();\n};\n\nconst validate = (form) => {\n // Identify all fields with a validate attribute in form (will be on the label for the input/submit)\n const fieldList = form.querySelectorAll('[validate]');\n const fieldErrorList = [];\n let field;\n let isValid;\n let required;\n let isFormValid = true;\n for (let i = 0; i < fieldList.length; i++) { /* eslint-disable-line no-plusplus */\n field = fieldList[i];\n isValid = true;\n required = field.getAttribute('required') !== null;\n // If value is required, run against validation OR\n if (required) {\n isValid = validateByType(field.getAttribute('validate'), field.value);\n }\n // If value isn't required but value has been entered that requires validation, then run\n if (!required && field.value !== '' && field.getAttribute('validate') !== 'text') {\n isValid = validateByType(field.getAttribute('validate'), field.value);\n }\n // Mark field as invalid\n const fieldError = field.parentNode.querySelector('.text-danger');\n if (!isValid) {\n isFormValid = isValid;\n // Toggle error class on element label\n field.classList.add('input-validation-error');\n if (fieldError) {\n fieldError.classList.add('field-validation-error');\n fieldError.classList.remove('field-validation-valid');\n // Get error msg from input data attribute\n const errorMsg = field.getAttribute('data-val-required');\n fieldError.innerHTML = errorMsg;\n }\n fieldErrorList.push(field);\n } else {\n field.classList.remove('input-validation-error');\n if (fieldError) {\n fieldError.classList.remove('field-validation-error');\n fieldError.classList.add('field-validation-valid');\n fieldError.innerHTML = '';\n }\n }\n }\n // Form error message\n const errorMsg = form.querySelector('.form-error-message');\n if (isFormValid && errorMsg !== null) {\n errorMsg.classList.add('hidden');\n } else if (!isFormValid && errorMsg !== null) {\n errorMsg.classList.remove('hidden');\n // Add focus to error message, if form is invalid\n addFocusToErrorMessage(errorMsg);\n }\n return isFormValid;\n};\n\nconst removeAllErrors = (form) => {\n const fieldList = form.querySelectorAll('[validate]');\n for (let i = 0; i < fieldList.length; i++) { /* eslint-disable-line no-plusplus */\n const field = fieldList[i];\n const fieldError = field.parentNode.querySelector('.text-danger');\n field.classList.remove('input-validation-error');\n if (fieldError) {\n fieldError.classList.remove('field-validation-error');\n fieldError.classList.add('field-validation-valid');\n fieldError.innerHTML = '';\n }\n }\n};\n\nconst addRequiredAttrs = (form) => {\n const inputList = form.querySelectorAll(formSelectors);\n for (let i = 0; i < inputList.length; i++) { /* eslint-disable-line no-plusplus */\n inputList[i].setAttribute('required', 'required');\n }\n};\n\nconst removeRequiredAttrs = (form) => {\n const inputList = form.querySelectorAll(formSelectors);\n for (let i = 0; i < inputList.length; i++) { /* eslint-disable-line no-plusplus */\n inputList[i].removeAttribute('required');\n }\n};\n\nconst clearInputValues = (form) => {\n const inputList = form.querySelectorAll(formSelectors);\n for (let i = 0; i < inputList.length; i++) { /* eslint-disable-line no-plusplus */\n inputList[i].value = '';\n }\n};\n\nconst resetSelectValues = (form) => {\n const selectList = form.querySelectorAll('select');\n for (let i = 0; i < selectList.length; i++) { /* eslint-disable-line no-plusplus */\n const select = selectList[i];\n const firstOption = select.querySelector('option:first-child');\n if (firstOption) {\n selectList[i].value = firstOption.value;\n }\n }\n};\n\nexport {\n addRequiredAttrs,\n clearInputValues,\n validate,\n formatPhone,\n removeAllErrors,\n removeRequiredAttrs,\n resetSelectValues,\n validateByType,\n};\n/* eslint-enable no-console, eslint-disable-line no-plusplus */\n","/* eslint-disable import/prefer-default-export */\nconst scrollToElement = (options) => {\n const { element, offset, position } = options;\n let y = 0;\n if (element) {\n // console.log(`scrolling-utils.js, scrollToElement, ${element.offsetTop}`);\n y = element.offsetTop;\n }\n if (position) {\n y = position;\n }\n if (offset) {\n y += offset;\n }\n window.scrollTo({\n top: y,\n behavior: 'smooth',\n });\n};\n\nexport {\n scrollToElement,\n};\n/* eslint-enable import/prefer-default-export */\n","/* eslint-disable no-console */\nexport default class SiteToaster {\n constructor(options) {\n // If there are any other toasters open, remove\n const openToasters = document.querySelectorAll('.site-toaster');\n for (let i = 0; i < openToasters.length; i++) { /* eslint-disable-line no-plusplus */\n openToasters[i].remove();\n }\n if (!options.callbacks) {\n options.callbacks = {};\n }\n this.onOpen = options.callbacks.onOpen;\n this.onClose = options.callbacks.onClose;\n this.message = options.message;\n this.id = options.id;\n // Create toaster html\n this.render();\n // Toaster events\n window.addEventListener('resize', this.update.bind(this));\n window.addEventListener('scroll', this.update.bind(this));\n const toaster = document.getElementById(this.id);\n [].map.call(toaster.querySelectorAll('.close-btn'), btn => btn.addEventListener('click', this.close.bind(this)));\n }\n\n update() {\n const toaster = document.getElementById(this.id);\n if (toaster === null) {\n return;\n }\n toaster.style.top = 0;\n }\n\n render() {\n const body = document.querySelector('body');\n const div = document.createElement('div');\n div.id = this.id;\n div.classList.add('site-toaster');\n div.setAttribute('tabindex', '0');\n div.innerHTML = `
${this.message}
`;\n body.appendChild(div);\n }\n\n close() {\n const toaster = document.getElementById(this.id);\n if (toaster) {\n toaster.classList.remove('toaster-visible');\n if (this.onClose) {\n this.onClose();\n }\n }\n }\n\n open() {\n const toaster = document.getElementById(this.id);\n // toaster.classList.remove('hidden');\n setTimeout(() => {\n toaster.classList.add('toaster-visible');\n toaster.focus();\n }, 500);\n this.update();\n }\n\n remove() {\n const toaster = document.getElementById(this.id);\n if (toaster) {\n toaster.remove();\n }\n }\n}\n/* eslint-enable no-console */\n"],"sourceRoot":""}