{"version":3,"file":"scripts.min.js","mappings":"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","sources":["webpack://app-events-and-courses/./node_modules/pristinejs/dist/pristine.js","webpack://app-events-and-courses/./src/ts/index.ts","webpack://app-events-and-courses/./src/ts/lib-2sxc-alerts.ts","webpack://app-events-and-courses/./src/ts/lib-2sxc-forms.ts","webpack://app-events-and-courses/./src/ts/lib-2sxc-recaptcha.ts","webpack://app-events-and-courses/./src/ts/lib-2sxc-tracking.ts","webpack://app-events-and-courses/webpack/bootstrap","webpack://app-events-and-courses/webpack/startup"],"sourcesContent":["(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :\n typeof define === 'function' && define.amd ? define(factory) :\n (global = typeof globalThis !== 'undefined' ? globalThis : global || self, global.Pristine = factory());\n}(this, (function () { 'use strict';\n\n var lang = {\n required: \"This field is required\",\n email: \"This field requires a valid e-mail address\",\n number: \"This field requires a number\",\n integer: \"This field requires an integer value\",\n url: \"This field requires a valid website URL\",\n tel: \"This field requires a valid telephone number\",\n maxlength: \"This fields length must be < ${1}\",\n minlength: \"This fields length must be > ${1}\",\n min: \"Minimum value for this field is ${1}\",\n max: \"Maximum value for this field is ${1}\",\n pattern: \"Please match the requested format\"\n };\n\n function findAncestor(el, cls) {\n while ((el = el.parentElement) && !el.classList.contains(cls)) {}\n return el;\n }\n\n function tmpl(o) {\n var _arguments = arguments;\n\n return this.replace(/\\${([^{}]*)}/g, function (a, b) {\n return _arguments[b];\n });\n }\n\n function groupedElemCount(input) {\n return input.pristine.self.form.querySelectorAll('input[name=\"' + input.getAttribute('name') + '\"]:checked').length;\n }\n\n function mergeConfig(obj1, obj2) {\n for (var attr in obj2) {\n if (!(attr in obj1)) {\n obj1[attr] = obj2[attr];\n }\n }\n return obj1;\n }\n\n function isFunction(obj) {\n return !!(obj && obj.constructor && obj.call && obj.apply);\n }\n\n var defaultConfig = {\n classTo: 'form-group',\n errorClass: 'has-danger',\n successClass: 'has-success',\n errorTextParent: 'form-group',\n errorTextTag: 'div',\n errorTextClass: 'text-help'\n };\n\n var PRISTINE_ERROR = 'pristine-error';\n var SELECTOR = \"input:not([type^=hidden]):not([type^=submit]), select, textarea\";\n var ALLOWED_ATTRIBUTES = [\"required\", \"min\", \"max\", 'minlength', 'maxlength', 'pattern'];\n var EMAIL_REGEX = /^(([^<>()\\[\\]\\\\.,;:\\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,}))$/;\n\n var validators = {};\n\n var _ = function _(name, validator) {\n validator.name = name;\n if (!validator.msg) validator.msg = lang[name];\n if (validator.priority === undefined) validator.priority = 1;\n validators[name] = validator;\n };\n\n _('text', { fn: function fn(val) {\n return true;\n }, priority: 0 });\n _('required', { fn: function fn(val) {\n return this.type === 'radio' || this.type === 'checkbox' ? groupedElemCount(this) : val !== undefined && val !== '';\n }, priority: 99, halt: true });\n _('email', { fn: function fn(val) {\n return !val || EMAIL_REGEX.test(val);\n } });\n _('number', { fn: function fn(val) {\n return !val || !isNaN(parseFloat(val));\n }, priority: 2 });\n _('integer', { fn: function fn(val) {\n return !val || /^\\d+$/.test(val);\n } });\n _('minlength', { fn: function fn(val, length) {\n return !val || val.length >= parseInt(length);\n } });\n _('maxlength', { fn: function fn(val, length) {\n return !val || val.length <= parseInt(length);\n } });\n _('min', { fn: function fn(val, limit) {\n return !val || (this.type === 'checkbox' ? groupedElemCount(this) >= parseInt(limit) : parseFloat(val) >= parseFloat(limit));\n } });\n _('max', { fn: function fn(val, limit) {\n return !val || (this.type === 'checkbox' ? groupedElemCount(this) <= parseInt(limit) : parseFloat(val) <= parseFloat(limit));\n } });\n _('pattern', { fn: function fn(val, pattern) {\n var m = pattern.match(new RegExp('^/(.*?)/([gimy]*)$'));return !val || new RegExp(m[1], m[2]).test(val);\n } });\n\n function Pristine(form, config, live) {\n\n var self = this;\n\n init(form, config, live);\n\n function init(form, config, live) {\n\n form.setAttribute(\"novalidate\", \"true\");\n\n self.form = form;\n self.config = mergeConfig(config || {}, defaultConfig);\n self.live = !(live === false);\n self.fields = Array.from(form.querySelectorAll(SELECTOR)).map(function (input) {\n\n var fns = [];\n var params = {};\n var messages = {};\n\n [].forEach.call(input.attributes, function (attr) {\n if (/^data-pristine-/.test(attr.name)) {\n var name = attr.name.substr(14);\n if (name.endsWith('-message')) {\n messages[name.slice(0, name.length - 8)] = attr.value;\n return;\n }\n if (name === 'type') name = attr.value;\n _addValidatorToField(fns, params, name, attr.value);\n } else if (~ALLOWED_ATTRIBUTES.indexOf(attr.name)) {\n _addValidatorToField(fns, params, attr.name, attr.value);\n } else if (attr.name === 'type') {\n _addValidatorToField(fns, params, attr.value);\n }\n });\n\n fns.sort(function (a, b) {\n return b.priority - a.priority;\n });\n\n self.live && input.addEventListener(!~['radio', 'checkbox'].indexOf(input.getAttribute('type')) ? 'input' : 'change', function (e) {\n self.validate(e.target);\n }.bind(self));\n\n return input.pristine = { input: input, validators: fns, params: params, messages: messages, self: self };\n }.bind(self));\n }\n\n function _addValidatorToField(fns, params, name, value) {\n var validator = validators[name];\n if (validator) {\n fns.push(validator);\n if (value) {\n var valueParams = value.split(',');\n valueParams.unshift(null); // placeholder for input's value\n params[name] = valueParams;\n }\n }\n }\n\n /***\n * Checks whether the form/input elements are valid\n * @param input => input element(s) or a jquery selector, null for full form validation\n * @param silent => do not show error messages, just return true/false\n * @returns {boolean} return true when valid false otherwise\n */\n self.validate = function (input, silent) {\n silent = input && silent === true || input === true;\n var fields = self.fields;\n if (input !== true && input !== false) {\n if (input instanceof HTMLElement) {\n fields = [input.pristine];\n } else if (input instanceof NodeList || input instanceof (window.$ || Array) || input instanceof Array) {\n fields = Array.from(input).map(function (el) {\n return el.pristine;\n });\n }\n }\n\n var valid = true;\n\n for (var i = 0; fields[i]; i++) {\n var field = fields[i];\n if (_validateField(field)) {\n !silent && _showSuccess(field);\n } else {\n valid = false;\n !silent && _showError(field);\n }\n }\n return valid;\n };\n\n /***\n * Get errors of a specific field or the whole form\n * @param input\n * @returns {Array|*}\n */\n self.getErrors = function (input) {\n if (!input) {\n var erroneousFields = [];\n for (var i = 0; i < self.fields.length; i++) {\n var field = self.fields[i];\n if (field.errors.length) {\n erroneousFields.push({ input: field.input, errors: field.errors });\n }\n }\n return erroneousFields;\n }\n if (input.tagName && input.tagName.toLowerCase() === \"select\") {\n return input.pristine.errors;\n }\n return input.length ? input[0].pristine.errors : input.pristine.errors;\n };\n\n /***\n * Validates a single field, all validator functions are called and error messages are generated\n * when a validator fails\n * @param field\n * @returns {boolean}\n * @private\n */\n function _validateField(field) {\n var errors = [];\n var valid = true;\n for (var i = 0; field.validators[i]; i++) {\n var validator = field.validators[i];\n var params = field.params[validator.name] ? field.params[validator.name] : [];\n params[0] = field.input.value;\n if (!validator.fn.apply(field.input, params)) {\n valid = false;\n\n if (isFunction(validator.msg)) {\n errors.push(validator.msg(field.input.value, params));\n } else {\n var error = field.messages[validator.name] || validator.msg;\n errors.push(tmpl.apply(error, params));\n }\n\n if (validator.halt === true) {\n break;\n }\n }\n }\n field.errors = errors;\n return valid;\n }\n\n /***\n *\n * @param elem => The dom element where the validator is applied to\n * @param fn => validator function\n * @param msg => message to show when validation fails. Supports templating. ${0} for the input's value, ${1} and\n * so on are for the attribute values\n * @param priority => priority of the validator function, higher valued function gets called first.\n * @param halt => whether validation should stop for this field after current validation function\n */\n self.addValidator = function (elem, fn, msg, priority, halt) {\n if (elem instanceof HTMLElement) {\n elem.pristine.validators.push({ fn: fn, msg: msg, priority: priority, halt: halt });\n elem.pristine.validators.sort(function (a, b) {\n return b.priority - a.priority;\n });\n } else {\n console.warn(\"The parameter elem must be a dom element\");\n }\n };\n\n /***\n * An utility function that returns a 2-element array, first one is the element where error/success class is\n * applied. 2nd one is the element where error message is displayed. 2nd element is created if doesn't exist and cached.\n * @param field\n * @returns {*}\n * @private\n */\n function _getErrorElements(field) {\n if (field.errorElements) {\n return field.errorElements;\n }\n var errorClassElement = findAncestor(field.input, self.config.classTo);\n var errorTextParent = null,\n errorTextElement = null;\n if (self.config.classTo === self.config.errorTextParent) {\n errorTextParent = errorClassElement;\n } else {\n errorTextParent = errorClassElement.querySelector('.' + self.config.errorTextParent);\n }\n if (errorTextParent) {\n errorTextElement = errorTextParent.querySelector('.' + PRISTINE_ERROR);\n if (!errorTextElement) {\n errorTextElement = document.createElement(self.config.errorTextTag);\n errorTextElement.className = PRISTINE_ERROR + ' ' + self.config.errorTextClass;\n errorTextParent.appendChild(errorTextElement);\n errorTextElement.pristineDisplay = errorTextElement.style.display;\n }\n }\n return field.errorElements = [errorClassElement, errorTextElement];\n }\n\n function _showError(field) {\n var errorElements = _getErrorElements(field);\n var errorClassElement = errorElements[0],\n errorTextElement = errorElements[1];\n\n if (errorClassElement) {\n errorClassElement.classList.remove(self.config.successClass);\n errorClassElement.classList.add(self.config.errorClass);\n }\n if (errorTextElement) {\n errorTextElement.innerHTML = field.errors.join('
');\n errorTextElement.style.display = errorTextElement.pristineDisplay || '';\n }\n }\n\n /***\n * Adds error to a specific field\n * @param input\n * @param error\n */\n self.addError = function (input, error) {\n input = input.length ? input[0] : input;\n input.pristine.errors.push(error);\n _showError(input.pristine);\n };\n\n function _removeError(field) {\n var errorElements = _getErrorElements(field);\n var errorClassElement = errorElements[0],\n errorTextElement = errorElements[1];\n if (errorClassElement) {\n // IE > 9 doesn't support multiple class removal\n errorClassElement.classList.remove(self.config.errorClass);\n errorClassElement.classList.remove(self.config.successClass);\n }\n if (errorTextElement) {\n errorTextElement.innerHTML = '';\n errorTextElement.style.display = 'none';\n }\n return errorElements;\n }\n\n function _showSuccess(field) {\n var errorClassElement = _removeError(field)[0];\n errorClassElement && errorClassElement.classList.add(self.config.successClass);\n }\n\n /***\n * Resets the errors\n */\n self.reset = function () {\n for (var i = 0; self.fields[i]; i++) {\n self.fields[i].errorElements = null;\n }\n Array.from(self.form.querySelectorAll('.' + PRISTINE_ERROR)).map(function (elem) {\n elem.parentNode.removeChild(elem);\n });\n Array.from(self.form.querySelectorAll('.' + self.config.classTo)).map(function (elem) {\n elem.classList.remove(self.config.successClass);\n elem.classList.remove(self.config.errorClass);\n });\n };\n\n /***\n * Resets the errors and deletes all pristine fields\n */\n self.destroy = function () {\n self.reset();\n self.fields.forEach(function (field) {\n delete field.input.pristine;\n });\n self.fields = [];\n };\n\n self.setGlobalConfig = function (config) {\n defaultConfig = config;\n };\n\n return self;\n }\n\n /***\n *\n * @param name => Name of the global validator\n * @param fn => validator function\n * @param msg => message to show when validation fails. Supports templating. ${0} for the input's value, ${1} and\n * so on are for the attribute values\n * @param priority => priority of the validator function, higher valued function gets called first.\n * @param halt => whether validation should stop for this field after current validation function\n */\n Pristine.addValidator = function (name, fn, msg, priority, halt) {\n _(name, { fn: fn, msg: msg, priority: priority, halt: halt });\n };\n\n return Pristine;\n\n})));\n","import { showAlert, showConfigWarnings } from './lib-2sxc-alerts';\r\nimport { disableInputs, enableInputs, getFormValues, sendForm, validateForm } from './lib-2sxc-forms';\r\nimport { PristineOptions } from './lib-2sxc-pristine-options';\r\nimport { getRecaptchaToken, requiresRecaptcha } from './lib-2sxc-recaptcha';\r\nimport { addTrackingEvent } from './lib-2sxc-tracking';\r\n\r\n// so it can be called from the HTML when content re-initializes dynamically\r\nconst winAny = (window as any)\r\nwinAny.appEvents6 ??= {}\r\nwinAny.appEvents6.init ??= initAppEvents6\r\n\r\nconst debug = false\r\n\r\nfunction initAppEvents6({ domAttribute, options } : { domAttribute: string, options: PristineOptions }) {\r\n if (document.getElementsByTagName('form').length) document.getElementsByTagName('form')[0]?.setAttribute('novalidate', '')\r\n if (debug) console.log(\"Events6 loading, debug is enabled\");\r\n\r\n var btnToggleExpired = document.querySelector('.js-app-events6-toggle-expired-dates');\r\n if(btnToggleExpired != null) {\r\n btnToggleExpired.addEventListener('click', () => {\r\n document.querySelectorAll('.event-hidden').forEach((elem: HTMLElement, index) => {\r\n if (elem.style.display == '' || elem.style.display == \"none\") {\r\n elem.style.display = \"block\";\r\n } else {\r\n elem.style.display = \"none\";\r\n }\r\n })\r\n })\r\n }\r\n\r\n const phoneInput = document.querySelector(\"#Phone\") as HTMLInputElement;\r\n \r\n if(phoneInput != null) {\r\n const phonePattern: RegExp = /^\\+[0-9]{0,14}$/; // Muss mit + anfangen, max. 15 Zeichen und nur Zahlen erlaubt\r\n phoneInput.addEventListener(\"input\", function (): void {\r\n let value: string = phoneInput.value.replace(/[^\\d+]/g, \"\"); // Entfernt nicht erlaubte Zeichen außer +\r\n if (!phonePattern.test(value)) {\r\n phoneInput.value = value.match(phonePattern)?.[0] || \"+\";\r\n } else {\r\n phoneInput.value = value;\r\n }\r\n });\r\n \r\n phoneInput.addEventListener(\"keydown\", function (event: KeyboardEvent): void {\r\n if (phoneInput.value.length >= 15 && event.key.length === 1 && ![\"Backspace\", \"ArrowLeft\", \"ArrowRight\"].includes(event.key)) {\r\n event.preventDefault();\r\n }\r\n if (!/[0-9]/.test(event.key) && ![\"Backspace\", \"ArrowLeft\", \"ArrowRight\"].includes(event.key) && event.key !== \"+\") {\r\n event.preventDefault();\r\n }\r\n });\r\n }\r\n \r\n const eventsWrapper = document.querySelectorAll(`[${domAttribute}]`)[0];\r\n if(!eventsWrapper) return\r\n\r\n const stepBtn = eventsWrapper.querySelectorAll('.js-next-step').forEach((btn) => {\r\n btn.addEventListener('click', (e) => {\r\n e.preventDefault()\r\n const parent = (e.currentTarget as HTMLElement).parentElement;\r\n var stepValid = validateForm(parent, options);\r\n if(stepValid) {\r\n parent.style.display = 'none';\r\n (parent.nextElementSibling as HTMLElement).style.display = 'block';\r\n return\r\n }\r\n })\r\n })\r\n\r\n const submitButton = (eventsWrapper.querySelectorAll('[app-events6-send]')[0] as HTMLButtonElement)\r\n submitButton.addEventListener('click', async (event: Event) => {\r\n event.preventDefault();\r\n\r\n const eventBtn = event.currentTarget as HTMLElement;\r\n addTrackingEvent('trackEventsForm', 'events-form', eventBtn.innerText)\r\n submitButton.setAttribute(\"disabled\", \"\")\r\n \r\n var valid = validateForm(eventsWrapper, options)\r\n if (!valid) {\r\n showAlert(eventsWrapper, 'msgIncomplete')\r\n submitButton.removeAttribute(\"disabled\")\r\n\r\n return\r\n }\r\n \r\n const formValues = await getFormValues(eventsWrapper)\r\n\r\n if (requiresRecaptcha(eventsWrapper)) {\r\n let token = await getRecaptchaToken(eventsWrapper)\r\n if (!token) return showAlert(eventsWrapper, 'msgRecap')\r\n \r\n // set token for backend\r\n formValues.Recaptcha = token\r\n }\r\n\r\n\r\n // imply that message is sending by ui modifications \r\n\r\n disableInputs(eventsWrapper, true)\r\n showAlert(eventsWrapper, 'msgSending')\r\n \r\n //#region request handling\r\n\r\n let endpoint = (eventsWrapper as HTMLElement).dataset.webservice // (should be \"Form/ProcessForm\" or a custom override)\r\n\r\n\r\n sendForm(formValues, submitButton, endpoint)\r\n .then((result: any) => {\r\n // error\r\n if(!result.ok) {\r\n if(debug) console.log('error', result.status);\r\n\r\n submitButton.removeAttribute(\"disabled\")\r\n\r\n \r\n showAlert(eventsWrapper, 'msgError')\r\n showConfigWarnings(eventsWrapper, 'app-events6-config-warning')\r\n enableInputs(eventsWrapper)\r\n \r\n addTrackingEvent('trackEventsForm', 'events-form', submitButton.innerText)\r\n return\r\n }\r\n \r\n // success\r\n if(debug) console.log('success', result.json())\r\n submitButton.setAttribute(\"disabled\", \"\")\r\n \r\n showAlert(eventsWrapper, 'msgOk')\r\n showConfigWarnings(eventsWrapper, 'app-events6-config-warning')\r\n disableInputs(eventsWrapper, false)\r\n \r\n addTrackingEvent('trackEventsForm', 'events-form', submitButton.innerText)\r\n })\r\n\r\n //#endregion\r\n }) \r\n}\r\n","/*\r\n This is a shared code used in various 2sxc apps. Make sure that they are in sync, so if you improve it, improve all 2sxc apps which use this. \r\n ATM they are:\r\n - EventsAndCourses6\r\n - MobiusForms5\r\n The master with the newest / best version must always be the Gallery7, the others should then get a fresh copy.\r\n Because this is shared, all parameters like DOM-IDs etc. must be provided in the Init-call that it can work across apps\r\n*/ \r\n\r\n// .alert class needs to be included in alert message\r\nexport function showAlert(wrapper: Element, responseMessageElement: string) {\r\n wrapper.querySelectorAll('.alert').forEach((elem: HTMLElement) => elem.style.display = 'none');\r\n if (responseMessageElement !== '') (wrapper.querySelector(`#${responseMessageElement}`) as HTMLElement).style.display = 'block';\r\n}\r\n\r\nexport function showConfigWarnings(wrapper: Element, attribute: string) {\r\n wrapper.querySelectorAll(`[${attribute}]`)\r\n .forEach((elem: HTMLElement) => elem.style.display = 'block');\r\n}\r\n","import { PristineOptions } from \"./lib-2sxc-pristine-options\";\r\n\r\nlet Pristine = require('../../node_modules/pristinejs')\r\ndeclare let $2sxc: any\r\n\r\n/*\r\n This is a shared code used in various 2sxc apps. Make sure that they are in sync, so if you improve it, improve all 2sxc apps which use this. \r\n ATM they are:\r\n - EventsAndCourses6\r\n - MobiusForms5\r\n The master with the newest / best version must always be the Gallery7, the others should then get a fresh copy.\r\n Because this is shared, all parameters like DOM-IDs etc. must be provided in the Init-call that it can work across apps\r\n*/\r\n\r\nconst promiseFileMap = (promise: Promise) => {\r\n if (!promise) return promise\r\n return promise.then((result) => result)\r\n};\r\n\r\n// automatically build the send-object with all properties, \r\n// based on all form-fields which have a item-property=\"\"\r\nexport async function getFormValues(formWrapper: Element): Promise {\r\n let data: any = {\r\n Files: []\r\n };\r\n\r\n const fields = formWrapper.querySelectorAll('input,textarea,select');\r\n fields.forEach((formField: HTMLInputElement) => {\r\n const fieldKey = getFieldKey(formField)\r\n if (!fieldKey) return\r\n if (formField.getAttribute('type') && formField.getAttribute('type').toLowerCase() == 'file') {\r\n data['Files'].push(getFieldValue(formField))\r\n return\r\n }\r\n\r\n if (formField.getAttribute('type') && (formField.getAttribute('type').toLowerCase() == 'checkbox' || formField.getAttribute('type').toLowerCase() == 'radio') && !formField.checked) {\r\n return;\r\n }\r\n data[fieldKey] = getFieldValue(formField)\r\n })\r\n\r\n return Promise.all(data.Files.map(promiseFileMap)).then(loadedFiles => {\r\n return { ...data, Files: loadedFiles }\r\n })\r\n}\r\n\r\nfunction getFieldKey(formField: HTMLInputElement): string {\r\n // get the property name from special-attribut, name OR id\r\n return formField.getAttribute('name') || formField.getAttribute('id');\r\n}\r\n\r\nfunction getFieldValue(formField: HTMLInputElement): Promise | unknown {\r\n // extract data from file fields\r\n if (!formField.getAttribute('type')) return formField.value\r\n switch (formField.getAttribute('type').toLowerCase()) {\r\n case 'file':\r\n const file = formField.files[0];\r\n if (!file) return;\r\n return Promise.resolve(() => {\r\n const reader = new FileReader()\r\n reader.readAsDataURL(file);\r\n })\r\n case 'radio': return formField.value\r\n case 'checkbox': return formField.checked ? \"True\" : \"False\"\r\n default: return formField.value\r\n }\r\n}\r\n\r\nexport function validateForm(formWrapper: Element, options: PristineOptions): boolean {\r\n const pristine = new Pristine(formWrapper, options);\r\n return pristine.validate();\r\n}\r\n\r\nexport function sendForm(formData: any, submitButtom: HTMLButtonElement, endpoint: string = \"Form/ProcessForm\"): Promise {\r\n const sxc = $2sxc(submitButtom);\r\n return sxc.webApi.fetchRaw(endpoint, formData)\r\n}\r\n\r\nexport function disableInputs(wrapper: Element, state: boolean) {\r\n wrapper.classList.toggle('disable', state)\r\n wrapper.querySelectorAll('input,textarea,select').forEach((elem: HTMLElement) => elem.setAttribute('disabled', 'true'));\r\n}\r\n\r\nexport function enableInputs(wrapper: Element) {\r\n wrapper.classList.remove('disable')\r\n wrapper.querySelectorAll('input,textarea,select').forEach((elem: HTMLElement) => elem.setAttribute('disabled', 'false'));\r\n}","declare let grecaptcha: any;\r\n\r\n/*\r\n This is a shared code used in various 2sxc apps. Make sure that they are in sync, so if you improve it, improve all 2sxc apps which use this. \r\n ATM they are:\r\n - EventsAndCourses6\r\n - MobiusForms5\r\n The master with the newest / best version must always be the Gallery7, the others should then get a fresh copy.\r\n Because this is shared, all parameters like DOM-IDs etc. must be provided in the Init-call that it can work across apps\r\n*/ \r\n\r\n// Checks if a recaptcha is implemented in the current Form and returns promise with token if existing\r\n\r\nexport function getRecaptchaToken(wrapper: Element) {\r\n const recap = wrapper.getElementsByClassName('recaptcha')[0] as HTMLElement;\r\n\r\n if(!recap) return Promise.resolve(null);\r\n \r\n // if many found, probably not ok\r\n if(wrapper.getElementsByClassName('recaptcha').length !== 1) throw \"recaptcha not found\";\r\n\r\n // return promise of google response for the recap\r\n // null if failed, something cryptic if ok\r\n return grecaptcha.execute(recap.dataset.sitekey, {action: 'submit'})\r\n}\r\n\r\nexport function requiresRecaptcha(wrapper: Element): boolean {\r\n if (wrapper.getElementsByClassName('recaptcha')[0]) return true;\r\n return false;\r\n}","/*\r\n This is a shared code used in various 2sxc apps. Make sure that they are in sync, so if you improve it, improve all 2sxc apps which use this. \r\n ATM they are:\r\n - EventsAndCourses6\r\n - MobiusForms5\r\n The master with the newest / best version must always be the Gallery7, the others should then get a fresh copy.\r\n Because this is shared, all parameters like DOM-IDs etc. must be provided in the Init-call that it can work across apps\r\n*/ \r\n\r\nexport function addTrackingEvent(trackingEventName: string, trackingCategory: string, trackingLabel: string) {\r\n const trackingEvent = new CustomEvent(trackingEventName, { detail: { category: trackingCategory, action: 'submit', label: trackingLabel } });\r\n document.dispatchEvent(trackingEvent);\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].call(module.exports, module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n","// startup\n// Load entry module and return exports\n// This entry module is referenced by other modules so it can't be inlined\nvar __webpack_exports__ = __webpack_require__(80);\n"],"names":["module","exports","lang","required","email","number","integer","url","tel","maxlength","minlength","min","max","pattern","tmpl","o","_arguments","arguments","this","replace","a","b","groupedElemCount","input","pristine","self","form","querySelectorAll","getAttribute","length","defaultConfig","classTo","errorClass","successClass","errorTextParent","errorTextTag","errorTextClass","PRISTINE_ERROR","ALLOWED_ATTRIBUTES","EMAIL_REGEX","validators","_","name","validator","msg","undefined","priority","Pristine","config","live","_addValidatorToField","fns","params","value","push","valueParams","split","unshift","_validateField","field","errors","valid","i","fn","apply","obj","constructor","call","error","messages","halt","_getErrorElements","errorElements","errorClassElement","el","cls","parentElement","classList","contains","findAncestor","errorTextElement","querySelector","document","createElement","className","appendChild","pristineDisplay","style","display","_showError","remove","add","innerHTML","join","_showSuccess","_removeError","setAttribute","obj1","obj2","attr","mergeConfig","fields","Array","from","map","forEach","attributes","test","substr","endsWith","slice","indexOf","sort","addEventListener","e","validate","target","bind","init","silent","HTMLElement","NodeList","window","$","getErrors","erroneousFields","tagName","toLowerCase","addValidator","elem","console","warn","addError","reset","parentNode","removeChild","destroy","setGlobalConfig","val","type","isNaN","parseFloat","parseInt","limit","m","match","RegExp","factory","winAny","appEvents6","domAttribute","options","getElementsByTagName","debug","log","btnToggleExpired","index","phoneInput","event","key","includes","preventDefault","eventsWrapper","btn","parent","currentTarget","validateForm","nextElementSibling","submitButton","eventBtn","addTrackingEvent","innerText","getFormValues","showAlert","removeAttribute","formValues","requiresRecaptcha","getRecaptchaToken","token","Recaptcha","disableInputs","endpoint","dataset","webservice","sendForm","then","result","ok","status","showConfigWarnings","enableInputs","json","wrapper","responseMessageElement","attribute","promiseFileMap","promise","getFieldValue","formField","files","Promise","resolve","FileReader","readAsDataURL","checked","formWrapper","data","Files","fieldKey","getFieldKey","all","loadedFiles","formData","submitButtom","$2sxc","webApi","fetchRaw","state","toggle","recap","getElementsByClassName","grecaptcha","execute","sitekey","action","trackingEventName","trackingCategory","trackingLabel","trackingEvent","CustomEvent","detail","category","label","dispatchEvent","__webpack_module_cache__","__webpack_require__","moduleId","cachedModule","__webpack_modules__"],"sourceRoot":""}