{"version":3,"file":"js/main.4fc39f56c09b26a1ee86.js","mappings":"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","sources":["webpack:///./Features/Shared/Forms/_js/form-elements-main.ts","webpack:///webpack/bootstrap","webpack:///./Frontend/js/util/general.ts"],"sourcesContent":["interface Validator {\r\n regex: string;\r\n errorMessage: string\r\n}\r\n\r\nwindow.addEventListener(\"DOMContentLoaded\", () => {\r\n let submitButtons: NodeListOf = document.querySelectorAll(\".FormSubmitButton.button\") as NodeListOf;\r\n\r\n // Scroll to the top of the form when the submit button is clicked\r\n submitButtons.forEach((submitButton: HTMLButtonElement) => {\r\n if (!!submitButton) {\r\n submitButton.addEventListener(\"click\", () => {\r\n let form: HTMLFormElement = submitButton.closest(\".EPiServerForms\") as HTMLFormElement;\r\n form.scrollIntoView({behavior: \"smooth\"});\r\n });\r\n }\r\n });\r\n\r\n updateValidationErrorSpanElements();\r\n checkRequiredFieldsHasContent();\r\n\r\n let textBoxes: NodeListOf = document.querySelectorAll(\".FormTextBox\");\r\n validateTextElements(textBoxes);\r\n\r\n let textAreas: NodeListOf = document.querySelectorAll(\".FormTextbox--Textarea\");\r\n validateTextElements(textAreas);\r\n\r\n let urlFields: NodeListOf = document.querySelectorAll(\".FormTextbox--Url\");\r\n validateTextElements(urlFields);\r\n\r\n let numberFields: NodeListOf = document.querySelectorAll(\".FormTextbox--Number\");\r\n validateTextElements(numberFields);\r\n\r\n let selectionFields: NodeListOf = document.querySelectorAll(\".FormSelection\");\r\n validateSelectionElements(selectionFields);\r\n\r\n let choiceFields: NodeListOf = document.querySelectorAll(\".FormChoice\")\r\n validateChoiceElements(choiceFields);\r\n});\r\n\r\nfunction validateChoiceElements(nodeList: NodeListOf) {\r\n nodeList.forEach((element: HTMLElement | any) => {\r\n if (element.classList.contains(\"form-validation--required\")) {\r\n const validators = JSON.parse(element.dataset.validators);\r\n let inputFields = element.querySelectorAll(\".checkbox__input, .radio-button__input\")\r\n let spanElement = element.querySelector(\".Form__Element__ValidationError\");\r\n\r\n validators.forEach((validator: Validator) => {\r\n inputFields.forEach((field: HTMLElement | any, index: number) => {\r\n field.addEventListener(\"change\", () => {\r\n let inputFields = element.querySelectorAll(\".checkbox__input:checked, .radio-button__input:checked\");\r\n \r\n if (inputFields.length == 0) {\r\n element.classList.add(\"form-validation--required\")\r\n addErrorValidationClassesToSpanElements(spanElement, validator.errorMessage);\r\n }\r\n else {\r\n spanElement?.classList.remove(\"validation-message--error\");\r\n element.classList.remove(\"form-validation--required\")\r\n\r\n spanElement.style.display = \"none\";\r\n }\r\n \r\n checkRequiredFieldsHasContent();\r\n });\r\n \r\n if (index == inputFields.length - 1) {\r\n field.addEventListener(\"blur\", () => {\r\n let inputFields = element.querySelectorAll(\".checkbox__input:checked, .radio-button__input:checked\");\r\n if (inputFields.length == 0) {\r\n element.classList.add(\"form-validation--required\")\r\n addErrorValidationClassesToSpanElements(spanElement, validator.errorMessage);\r\n }\r\n });\r\n }\r\n });\r\n });\r\n }\r\n });\r\n}\r\n\r\n\r\nfunction validateSelectionElements(nodeList: NodeListOf) {\r\n nodeList.forEach((element: HTMLElement | any) => {\r\n const validators = JSON.parse(element.dataset.validators);\r\n let dropdownSelect = element.querySelector(\".dropdown__select\");\r\n let spanElement = element.querySelector(\".Form__Element__ValidationError\");\r\n\r\n validators.forEach((item: Validator) => {\r\n const regex = new RegExp(item.regex);\r\n\r\n dropdownSelect.addEventListener(\"blur\", () => {\r\n const value = dropdownSelect.value;\r\n \r\n if (regex.test(value)) {\r\n // Remove \"invalid\" classes\r\n element.classList.remove(\"input-text--invalid\");\r\n spanElement?.classList.remove(\"validation-message--error\");\r\n dropdownSelect.classList.remove(\"form-validation--required\")\r\n\r\n // Add \"valid\" classes\r\n element.classList.add(\"input-text--valid\")\r\n spanElement.style.display = \"none\";\r\n }\r\n else {\r\n // Remove \"valid\" classes\r\n element.classList.remove(\"input-text--valid\");\r\n\r\n // Add \"invalid\" classes\r\n element.classList.add(\"input-text--invalid\");\r\n dropdownSelect.classList.add(\"form-validation--required\")\r\n addErrorValidationClassesToSpanElements(spanElement, item.errorMessage);\r\n }\r\n\r\n checkRequiredFieldsHasContent();\r\n });\r\n });\r\n });\r\n}\r\n\r\nfunction validateTextElements(nodeList: NodeListOf) {\r\n nodeList.forEach((element: HTMLElement | any) => {\r\n const validators = JSON.parse(element.dataset.validators);\r\n let inputField: HTMLInputElement | any = element.querySelector(\".FormTextbox__Input\");\r\n let spanElement = element.querySelector(\".Form__Element__ValidationError\");\r\n\r\n validators.forEach((item: Validator) => {\r\n const regex = new RegExp(item.regex);\r\n\r\n inputField.addEventListener(\"blur\", () => {\r\n const value = inputField.value;\r\n\r\n if (regex.test(value)) {\r\n // Remove \"invalid\" classes\r\n element.classList.remove(\"input-text--invalid\");\r\n spanElement?.classList.remove(\"validation-message--error\");\r\n inputField.classList.remove(\"form-validation--required\")\r\n\r\n // Add \"valid\" classes\r\n element.classList.add(\"input-text--valid\")\r\n inputField?.classList.add(\"input-text__input--with-icon\");\r\n spanElement.style.display = \"none\";\r\n }\r\n else {\r\n // Remove \"valid\" classes\r\n element.classList.remove(\"input-text--valid\");\r\n\r\n // Add \"invalid\" classes\r\n element.classList.add(\"input-text--invalid\");\r\n inputField?.classList.add(\"input-text__input--with-icon\");\r\n inputField.classList.add(\"form-validation--required\")\r\n addErrorValidationClassesToSpanElements(spanElement, item.errorMessage);\r\n }\r\n\r\n checkRequiredFieldsHasContent();\r\n });\r\n });\r\n });\r\n}\r\n\r\nfunction addErrorValidationClassesToSpanElements(spanElement: HTMLSpanElement, errorMessage: string) {\r\n if (errorMessage != \"\") {\r\n spanElement.style.display = \"block\";\r\n spanElement.textContent = errorMessage;\r\n spanElement?.classList.add(\"validation-message\");\r\n spanElement?.classList.add(\"validation-message--error\");\r\n spanElement?.setAttribute('aria-live', 'polite');\r\n }\r\n}\r\n\r\nfunction checkRequiredFieldsHasContent() {\r\n const formContainers = document.querySelectorAll(\".EPiServerForms\");\r\n formContainers.forEach((form: HTMLElement | any) => {\r\n const requiredFields = form.querySelectorAll(\".form-validation--required\");\r\n let submitButton: HTMLButtonElement | any = form.querySelector(\".FormSubmitButton\");\r\n\r\n // Only do this check if a form exists\r\n if (requiredFields.length < 1 && !!submitButton) {\r\n submitButton.disabled = false;\r\n }\r\n\r\n requiredFields.forEach((field: HTMLElement | any) => {\r\n if (field instanceof HTMLInputElement && !field.textContent) {\r\n submitButton.disabled = true;\r\n }\r\n else if (field instanceof HTMLSelectElement && field.selectedIndex < 1) {\r\n submitButton.disabled = true;\r\n }\r\n else if (field.classList.contains(\"FormChoice\")) {\r\n let inputFields = field.querySelectorAll(\".checkbox__input:checked, .radio-button__input:checked\");\r\n \r\n if (!!inputFields) {\r\n submitButton.disabled = true;\r\n }\r\n }\r\n });\r\n });\r\n}\r\n\r\nfunction updateValidationErrorSpanElements() {\r\n document.querySelectorAll(\".Form__Element__ValidationError\").forEach((span: HTMLSpanElement | any) => {\r\n // Check if the span is visible, that means that the form was submitted but an error occurred\r\n if (span.style.display != \"none\") {\r\n let parent = span.parentElement;\r\n let sibling = span.nextElementSibling;\r\n \r\n if (sibling instanceof HTMLInputElement) {\r\n sibling.classList.add(\"input-text__input--with-icon\");\r\n }\r\n \r\n parent?.classList.add(\"input-text--invalid\")\r\n span.classList.add(\"validation-message\");\r\n span.classList.add(\"validation-message--error\");\r\n span.setAttribute('aria-live', 'polite');\r\n }\r\n })\r\n}","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\t// no module.id needed\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId](module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n","import { YouTube } from '../_vendor/youtube/models/youtube';\r\n\r\ndeclare global {\r\n interface Window {\r\n Cookiebot: any;\r\n JVM: {\r\n YouTube: YouTube | null;\r\n BlockMediaScriptIsInitialized: boolean;\r\n };\r\n YT: any;\r\n onYouTubeIframeAPIReady: Function;\r\n iframeLoadedHandler: Function;\r\n CookiebotCallback_OnLoad: Function;\r\n }\r\n}\r\n\r\n\r\n// Set global variables\r\nif (!window.JVM) {\r\n window.JVM = {\r\n YouTube: null,\r\n BlockMediaScriptIsInitialized: false\r\n }\r\n}\r\n\r\nexport class General {\r\n constructor() {}\r\n \r\n static loadImage(imageElement: HTMLImageElement): Promise {\r\n return new Promise((resolve, reject) => {\r\n imageElement.onload = () => {\r\n resolve(imageElement);\r\n };\r\n\r\n if (imageElement.complete) {\r\n resolve(imageElement);\r\n }\r\n\r\n imageElement.onerror = reject\r\n });\r\n }\r\n}\r\n\r\nwindow.addEventListener('CookiebotOnLoad', () => {\r\n if (!document.body.classList.contains(\"cookiebot-loaded\")) {\r\n document.body.classList.add(\"cookiebot-loaded\");\r\n }\r\n});"],"names":["validateTextElements","nodeList","forEach","element","validators","JSON","parse","dataset","inputField","querySelector","spanElement","item","regex","RegExp","addEventListener","value","test","classList","remove","add","style","display","addErrorValidationClassesToSpanElements","errorMessage","checkRequiredFieldsHasContent","textContent","setAttribute","document","querySelectorAll","form","requiredFields","submitButton","length","disabled","field","HTMLInputElement","HTMLSelectElement","selectedIndex","contains","window","closest","scrollIntoView","behavior","span","parent","parentElement","sibling","nextElementSibling","selectionFields","dropdownSelect","inputFields","validator","index","validateChoiceElements","__webpack_module_cache__","__webpack_require__","moduleId","cachedModule","undefined","exports","module","__webpack_modules__","JVM","YouTube","BlockMediaScriptIsInitialized","body"],"sourceRoot":""}