{"version":3,"file":"./modules/UvCalculator.xxxxxxxx.js","mappings":"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","sources":["webpack:///./modules/FormElement.ts","webpack:///./modules/UvCalculator/AutoComplete.ts","webpack:///./modules/UvCalculator/UvCalculator.ts","webpack:///./modules/UvCalculator/index.ts"],"sourcesContent":["import { toggleClass } from \"../helpers/DOMHelpers\";\r\nconst moduleSelector = '[data-module=\"FormElement\"]';\r\n\r\nexport default class FormElement {\r\n static setup(selector: string = moduleSelector): void {\r\n Array.from(document.querySelectorAll(selector)).filter((node: HTMLElement) => !node.dataset.moduleInitialized).forEach((element: HTMLElement) => {\r\n new FormElement(element);\r\n element.dataset.moduleInitialized = 'true';\r\n });\r\n }\r\n\r\n constructor(public element: HTMLElement) {\r\n const ajaxURL = this.element.dataset.ajaxUrl;\r\n\r\n ajaxURL\r\n\r\n ? new FormElementNewsletter(this.element, ajaxURL)\r\n : new DefaultFormElement(this.element);\r\n }\r\n}\r\n\r\nexport class DefaultFormElement {\r\n protected formFieldContainer: HTMLElement;\r\n protected clearIcon: HTMLElement;\r\n protected inputText: HTMLInputElement;\r\n\r\n constructor(public element: HTMLElement) {\r\n this.formFieldContainer = this.element.querySelector('.nx-input-text');\r\n this.clearIcon = this.element.querySelector('.nx-input-text__clear-btn');\r\n this.inputText = this.element.querySelector('.nx-input-text__field');\r\n if (this.formFieldContainer && this.clearIcon && this.inputText) this.init();\r\n }\r\n\r\n protected init(): DefaultFormElement {\r\n this.checkFocus();\r\n this.inputText.addEventListener('input', () => this.checkEmpty());\r\n this.clearIcon.addEventListener('click', () => this.clearInput());\r\n return this;\r\n }\r\n\r\n protected checkFocus(): DefaultFormElement {\r\n this.inputText.addEventListener('focus', () => {\r\n this.formFieldContainer.classList.add('nx-input-text--focused');\r\n });\r\n\r\n this.inputText.addEventListener('blur', () => {\r\n this.formFieldContainer.classList.remove('nx-input-text--focused');\r\n });\r\n return this;\r\n }\r\n\r\n protected checkEmpty(): DefaultFormElement {\r\n toggleClass(this.formFieldContainer, 'nx-input-text__clear-btn--show', this.inputText.value.length > 0);\r\n return this;\r\n }\r\n\r\n protected clearInput(): DefaultFormElement {\r\n this.inputText.value = '';\r\n this.checkEmpty();\r\n this.inputText.blur();\r\n return this;\r\n }\r\n\r\n}\r\n\r\nexport class FormElementNewsletter extends DefaultFormElement {\r\n private formBtn: HTMLInputElement;\r\n\r\n constructor(public element: HTMLElement, private ajaxUrl: string) {\r\n super(element);\r\n this.formBtn = this.element.querySelector('.nx-btn');\r\n this.initFormWithParam();\r\n }\r\n\r\n private initFormWithParam() {\r\n this.formBtn.addEventListener('click', () => {\r\n let emailValue = this.inputText.value;\r\n let connectToAjaxUrl = ~this.ajaxUrl.indexOf(\"?\") ? '&' : '?';\r\n window.NiveaX.layer.openAsync(`${this.ajaxUrl}${connectToAjaxUrl}email=${emailValue}`);\r\n });\r\n }\r\n}\r\n\r\n// Hot Module Replacement\r\nif (module.hot) {\r\n let nodesCache: HMRNodes[] = Array.from(document.querySelectorAll(moduleSelector)).map((element: Node) => ({ nodeToReplace: element, nodeOrigin: element.cloneNode(true) }));\r\n\r\n FormElement.setup(moduleSelector);\r\n\r\n module.hot.accept(() => {\r\n FormElement.setup(moduleSelector);\r\n });\r\n module.hot.dispose(() => {\r\n nodesCache.forEach(({ nodeToReplace, nodeOrigin }) => { nodeToReplace = nodeToReplace.parentElement.replaceChild(nodeOrigin.cloneNode(true), nodeToReplace) });\r\n });\r\n} else {\r\n FormElement.setup(moduleSelector);\r\n}","import { getOptions } from '../../helpers/helperFunctions';\r\n\r\nexport default class AutoComplete {\r\n private autocompleteWrapper: HTMLElement;\r\n element: HTMLElement;\r\n private inputField: HTMLInputElement;\r\n protected options: AutoCompleteOptions;\r\n private charLength: number = 3\r\n private callBackFn;\r\n\r\n constructor(element, fn, options?: AutoCompleteOptions) {\r\n this.element = element as HTMLElement\r\n this.options = getOptions(this.element, Object.assign(this.getDefaultOptions(), options));\r\n this.autocompleteWrapper = element.querySelector(`.${this.options.ContentSelector}`);\r\n this.inputField = this.element.querySelector(`.${this.options.InputField}`);\r\n this.charLength = this.options.CharLength;\r\n this.callBackFn = fn;\r\n this.initEventHandlers();\r\n }\r\n\r\n private initEventHandlers() {\r\n document.addEventListener('click', (e) => this.documentOnClickHandler(e));\r\n this.inputField.addEventListener('keyup', (e) => this.shouldAutoCompleteAppear());\r\n this.autocompleteWrapper.addEventListener('click', (e) => this.callBackFn(e));\r\n }\r\n\r\n public showAutoComplete(val, list) {\r\n if (list.length > 0) {\r\n this.autocompleteWrapper.classList.add(`${this.options.ContentSelector}--active`);\r\n } else {\r\n this.autocompleteWrapper.innerHTML = '';\r\n this.autocompleteWrapper.classList.remove(`${this.options.ContentSelector}--active`);\r\n\r\n return\r\n }\r\n\r\n let data = list;\r\n\r\n let res = '
    ';\r\n data.forEach((e, index) => {\r\n res += `
  • \r\n ${e.replace(new RegExp(val, \"i\"), \"$&\")}\r\n
  • `;\r\n })\r\n res += '
';\r\n\r\n this.autocompleteWrapper.innerHTML = res;\r\n }\r\n\r\n private shouldAutoCompleteAppear() {\r\n const inputLenght = this.inputField.value.length\r\n if (inputLenght < this.charLength && this.autocompleteWrapper.classList.contains(`${this.options.ContentSelector}--active`)) {\r\n this.autocompleteWrapper.classList.remove(`${this.options.ContentSelector}--active`);\r\n }\r\n }\r\n\r\n private documentOnClickHandler(e) {\r\n const currentTarget: HTMLElement = e.target as HTMLElement;\r\n if (!currentTarget.closest(`.${this.options.ContentSelector}`)) {\r\n this.autocompleteWrapper.classList.remove(`${this.options.ContentSelector}--active`);\r\n }\r\n }\r\n\r\n protected getDefaultOptions(): AutoCompleteOptions {\r\n return {\r\n ContentSelector: 'nx-autocomplete-result',\r\n InputField: 'nx-input-text__field',\r\n CharLength: 3\r\n };\r\n }\r\n}","const moduleSelector = '[data-module=\"UvCalculator\"]';\r\n\r\nimport DefaultFormElement from '../FormElement';\r\nimport AutoComplete from './AutoComplete';\r\nimport { createElementFromString } from '../../helpers/DOMHelpers';\r\nimport { getOptions, debounce } from '../../helpers/helperFunctions';\r\n\r\nexport default class UvCalculator extends DefaultFormElement {\r\n private uvBtn: HTMLElement;\r\n private goBackBtn: HTMLElement;\r\n private uvHeader: HTMLElement;\r\n protected options: UvCalculatorOptions;\r\n private ajaxAddressUrl: string;\r\n private ajaxUvIndexUrl: string;\r\n private inputField: HTMLInputElement;\r\n private indexArray = [];\r\n private currentAddress: string;\r\n private addressList;\r\n private autoComplete: AutoComplete;\r\n private resultContainer: HTMLElement;\r\n private ucContentWrapper: HTMLElement;\r\n\r\n static setup(selector: string = moduleSelector): void {\r\n Array.from(document.querySelectorAll(selector)).filter((node: HTMLElement) => !node.dataset.moduleInitialized).forEach((element: HTMLElement) => {\r\n new UvCalculator(element);\r\n element.dataset.moduleInitialized = 'true';\r\n });\r\n }\r\n\r\n constructor(public element: HTMLElement, options: UvCalculatorOptions = {}) {\r\n super(element);\r\n this.options = getOptions(this.element, Object.assign(this.getDefaultOptions(), options));\r\n this.uvBtn = this.element.querySelector(`.${this.options.ActionButton}`);\r\n this.goBackBtn = this.element.querySelector(`.${this.options.ActionLink}`);\r\n this.ajaxAddressUrl = this.element.getAttribute(`${this.options.DataAjaxAddressUrl}`);\r\n this.ajaxUvIndexUrl = this.element.getAttribute(`${this.options.DataAjaxUvIndexUrl}`);\r\n this.inputField = this.element.querySelector(`.${this.options.InputField}`);\r\n this.uvHeader = this.element.querySelector(`.${this.options.UvHeader}`);\r\n this.resultContainer = this.element.querySelector(`.${this.options.AutoCompleteWrapper}`);\r\n this.ucContentWrapper = this.element.querySelector(`.${this.options.UvContentWrapper} > div`)\r\n\r\n this.addGoBackBtn()\r\n .creatIndexArray()\r\n .initEventHandlers();\r\n\r\n this.autoComplete = new AutoComplete(element, this.onAutoCompleteItemClicked.bind(this));\r\n }\r\n\r\n private initEventHandlers() {\r\n const debouncedOnTyping = debounce((value) => this.onTyping(value), 300);\r\n this.uvBtn.addEventListener('click', () => this.getLatLon());\r\n this.inputField.addEventListener('keyup', (e) => {\r\n const targetInput: HTMLInputElement = e.currentTarget as HTMLInputElement;\r\n debouncedOnTyping(targetInput.value);\r\n this.onPressEnter(e)\r\n })\r\n\r\n this.ucContentWrapper.addEventListener('click', (e) => this.goBackUvHeader(e))\r\n }\r\n\r\n private onAutoCompleteItemClicked(e) {\r\n const currentTarget: HTMLElement = e.target as HTMLElement;\r\n\r\n if (currentTarget.classList.contains('nx-autocomplete--list-item')) {\r\n const dataIndex: string = currentTarget.getAttribute('data-index');\r\n const addressSelected = this.addressList[dataIndex];\r\n this.getUvIndex(addressSelected);\r\n }\r\n }\r\n\r\n private onTyping(value) {\r\n if (value.length >= 3) {\r\n this.getListOfAddress(value);\r\n }\r\n }\r\n\r\n private getListOfAddress(value) {\r\n const url: string = `${this.ajaxAddressUrl}?query=${value}`;\r\n this.requestUrl(url, this.autoSuggest.bind(this));\r\n }\r\n\r\n private autoSuggest(xhttp) {\r\n this.addressList = JSON.parse(xhttp.responseText);\r\n const list = [];\r\n\r\n this.addressList.forEach(e => {\r\n list.push(`${e.Address.FreeformAddress || e.Address.CountrySubdivision} (${e.Address.Country})`)\r\n })\r\n\r\n this.autoComplete.showAutoComplete(this.inputField.value, list)\r\n }\r\n\r\n private onPressEnter(e) {\r\n if (e.which == 13 || e.keyCode == 13) {\r\n this.getLatLon();\r\n }\r\n }\r\n\r\n private goBackUvHeader(e) {\r\n const target: HTMLElement = e.target as HTMLElement\r\n if (target.classList.contains('nx-uv-calculator__action-link')) {\r\n this.uvHeader.classList.remove(`${this.options.UvHeader}--hidden`);\r\n this.ucContentWrapper.innerHTML = \"\";\r\n\r\n this.scrollToSection(this.uvHeader);\r\n }\r\n }\r\n\r\n private getLatLon() {\r\n const adddress: string = this.inputField.value;\r\n const url: string = `${this.ajaxAddressUrl}?query=${adddress}`;\r\n this.requestUrl(url, this.onAddressSuccess.bind(this));\r\n }\r\n\r\n private onAddressSuccess(xhttp) {\r\n const data = JSON.parse(xhttp.responseText);\r\n const firstItem = data[0];\r\n\r\n if (!firstItem) {\r\n return this;\r\n }\r\n\r\n this.getUvIndex(firstItem);\r\n }\r\n\r\n private getUvIndex(addressSelected) {\r\n const lat: string = addressSelected.Position.Lat;\r\n const lon: string = addressSelected.Position.Lon;\r\n this.currentAddress = addressSelected.Address.FreeformAddress || addressSelected.Address.CountrySubdivision;\r\n\r\n const url: string = `${this.ajaxUvIndexUrl}?query=${lat},${lon}`;\r\n this.requestUrl(url, this.onUVIndexSuccess.bind(this));\r\n }\r\n\r\n private onUVIndexSuccess(xhttp) {\r\n const index = xhttp.responseText;\r\n const targetItem: HTMLElement = this.element.querySelector(`[data-uv-range-upper-limit=\"${this.getCurrentUvIndex(index)}\"]`) as HTMLElement;\r\n this.ucContentWrapper.innerHTML = this.repleceData(targetItem, index);\r\n this.cleanUvHeader();\r\n this.uvHeader.classList.add(`${this.options.UvHeader}--hidden`);\r\n }\r\n\r\n private repleceData(targetItem: HTMLElement, index) {\r\n let node = targetItem.innerHTML\r\n node = node.replace(/\\[uvIndex\\]/g, index);\r\n node = node.replace(/\\[city\\]/g, `${this.currentAddress}`);\r\n\r\n return node;\r\n }\r\n\r\n private cleanUvHeader() {\r\n this.inputField.value = \"\";\r\n this.inputField.classList.remove('nx-input-text--focused');\r\n this.inputField.parentElement.classList.remove('nx-input-text__clear-btn--show');\r\n this.resultContainer.classList.remove(`${this.options.AutoCompleteWrapper}--active`);\r\n }\r\n\r\n private requestUrl(url, onSuccess, onFailed?) {\r\n const xhttp = new XMLHttpRequest();\r\n\r\n xhttp.onreadystatechange = () => {\r\n if (xhttp.readyState === 4) {\r\n if (xhttp.status === 200) {\r\n onSuccess(xhttp);\r\n }\r\n else if (xhttp.status === 404 || xhttp.status === 500) {\r\n if (typeof (onFailed) === 'function') {\r\n onFailed(xhttp);\r\n } else {\r\n console.warn(`Request failed:/\\n${xhttp.status}`);\r\n }\r\n }\r\n }\r\n };\r\n\r\n xhttp.open('Get', url);\r\n xhttp.send();\r\n }\r\n\r\n private creatIndexArray() {\r\n Array.from(this.element.querySelectorAll('[data-uv-range-upper-limit]')).forEach((element: HTMLElement) => {\r\n this.indexArray.push(element.getAttribute('data-uv-range-upper-limit'));\r\n });\r\n\r\n return this\r\n }\r\n\r\n private addGoBackBtn() {\r\n Array.from(this.element.querySelectorAll('[data-uv-range-upper-limit]')).forEach((element: HTMLElement) => {\r\n const goBackNodeButton = createElementFromString(`${this.goBackBtn.innerText}`);\r\n element.querySelector('.nx-content-zone__placeholder ').append(goBackNodeButton);\r\n });\r\n\r\n return this\r\n }\r\n\r\n private getCurrentUvIndex(indexValue) {\r\n let index;\r\n\r\n for (let i = 0; i <= this.indexArray.length - 1; i++) {\r\n index = this.indexArray[i];\r\n if (parseInt(this.indexArray[i]) >= parseInt(indexValue)) {\r\n break;\r\n }\r\n }\r\n\r\n return index\r\n }\r\n\r\n private scrollToSection(section) {\r\n section.scrollIntoView();\r\n let anchorNav: HTMLElement = document.body.querySelector('.nx-anchor-navigation') as HTMLElement\r\n let anchorNavHeight = 20;\r\n if (anchorNav) {\r\n anchorNavHeight = anchorNav.clientHeight;\r\n }\r\n\r\n window.scrollBy({\r\n top: -anchorNavHeight,\r\n left: 0,\r\n behavior: 'auto'\r\n });\r\n }\r\n\r\n protected getDefaultOptions(): UvCalculatorOptions {\r\n return {\r\n UvContentWrapper: 'nx-uv-calculator--content-wrapper',\r\n AutoCompleteWrapper: 'nx-autocomplete-result',\r\n UvHeader: 'nx-uv-calculator__header',\r\n InputField: 'nx-input-text__field',\r\n ActionLink: 'nx-action-link',\r\n ActionButton: 'nx-btn',\r\n DataAjaxAddressUrl: 'data-ajax-address-url',\r\n DataAjaxUvIndexUrl: 'data-ajax-uv-index-url',\r\n };\r\n }\r\n}\r\n\r\n// Hot Module Replacement\r\nif (module.hot) {\r\n let nodesCache: HMRNodes[] = Array.from(document.querySelectorAll(moduleSelector)).map((element: Node) => ({ nodeToReplace: element, nodeOrigin: element.cloneNode(true) }));\r\n\r\n UvCalculator.setup(moduleSelector);\r\n\r\n module.hot.accept(() => {\r\n UvCalculator.setup(moduleSelector);\r\n });\r\n module.hot.dispose(() => {\r\n nodesCache.forEach(({ nodeToReplace, nodeOrigin }) => { nodeToReplace = nodeToReplace.parentElement.replaceChild(nodeOrigin.cloneNode(true), nodeToReplace) });\r\n });\r\n} else {\r\n UvCalculator.setup(moduleSelector)\r\n};","import UvCalculator from './UvCalculator';\r\nexport default UvCalculator;"],"names":["moduleSelector","FormElement","setup","selector","Array","from","document","querySelectorAll","filter","node","dataset","moduleInitialized","forEach","element","constructor","ajaxURL","this","ajaxUrl","FormElementNewsletter","DefaultFormElement","formFieldContainer","querySelector","clearIcon","inputText","init","checkFocus","addEventListener","checkEmpty","clearInput","classList","add","remove","value","length","blur","super","formBtn","initFormWithParam","emailValue","connectToAjaxUrl","indexOf","window","NiveaX","layer","openAsync","AutoComplete","fn","options","charLength","Object","assign","getDefaultOptions","autocompleteWrapper","ContentSelector","inputField","InputField","CharLength","callBackFn","initEventHandlers","e","documentOnClickHandler","shouldAutoCompleteAppear","showAutoComplete","val","list","innerHTML","res","index","replace","RegExp","contains","target","closest","UvCalculator","indexArray","uvBtn","ActionButton","goBackBtn","ActionLink","ajaxAddressUrl","getAttribute","DataAjaxAddressUrl","ajaxUvIndexUrl","DataAjaxUvIndexUrl","uvHeader","UvHeader","resultContainer","AutoCompleteWrapper","ucContentWrapper","UvContentWrapper","addGoBackBtn","creatIndexArray","autoComplete","onAutoCompleteItemClicked","bind","debouncedOnTyping","onTyping","getLatLon","targetInput","currentTarget","onPressEnter","goBackUvHeader","dataIndex","addressSelected","addressList","getUvIndex","getListOfAddress","url","requestUrl","autoSuggest","xhttp","JSON","parse","responseText","push","Address","FreeformAddress","CountrySubdivision","Country","which","keyCode","scrollToSection","adddress","onAddressSuccess","firstItem","lat","Position","Lat","lon","Lon","currentAddress","onUVIndexSuccess","targetItem","getCurrentUvIndex","repleceData","cleanUvHeader","parentElement","onSuccess","onFailed","XMLHttpRequest","onreadystatechange","readyState","status","console","warn","open","send","goBackNodeButton","innerText","append","indexValue","i","parseInt","section","scrollIntoView","anchorNav","body","anchorNavHeight","clientHeight","scrollBy","top","left","behavior"],"sourceRoot":""}