{"version":3,"file":"site_js.js","mappings":"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","sources":["webpack://BME/webpack/bootstrap","webpack://BME/webpack/runtime/define property getters","webpack://BME/webpack/runtime/hasOwnProperty shorthand","webpack://BME/webpack/runtime/make namespace object","webpack://BME/external var \"jQuery\"","webpack://BME/./src/js/site/register.ts","webpack://BME/./src/js/site/formhelper.ts"],"sourcesContent":["// The require scope\nvar __webpack_require__ = {};\n\n","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","// define __esModule on exports\n__webpack_require__.r = (exports) => {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","const __WEBPACK_NAMESPACE_OBJECT__ = jQuery;","import * as $ from 'jquery';\r\n\r\nexport function setupRegistration() {\r\n $('#referopen').click(function() {\r\n $('#referfields').show('slow');\r\n $('#referopen').hide();\r\n });\r\n}\r\n\r\n\r\n","\r\nexport interface IFormHelper {\r\n // you can pass in a selector or the actual elements\r\n form: string | HTMLFormElement;\r\n submitButton?: string | HTMLInputElement | HTMLButtonElement;\r\n}\r\n\r\n// valid elements\r\ntype FieldElement = HTMLInputElement | HTMLSelectElement | HTMLTextAreaElement;\r\n\r\ninterface IValidationElement {\r\n field: FieldElement;\r\n messageField?: Element;\r\n requiredMessage?: string;\r\n phoneMessage?: string;\r\n emailMessage?: string;\r\n creditcardMessage?: string; // this currently doesn't do anything!\r\n regexMessage?: string;\r\n maxlengthMessage?: string;\r\n minlengthMessage?: string;\r\n}\r\n\r\ntype doFixup = (validElement: IValidationElement, attrval: string) => void;\r\n\r\nconst fixups: { [attrkey: string]: doFixup } = {\r\n \"data-val-required\": (validElement, attrval) => {\r\n validElement.requiredMessage = attrval;\r\n validElement.field.setAttribute('required', '');\r\n },\r\n \"data-val-email\": (validElement, attrval) => {\r\n validElement.emailMessage = attrval;\r\n },\r\n \"data-val-phone\": (validElement, attrval) => {\r\n validElement.phoneMessage = attrval;\r\n },\r\n \"data-val-creditcard\": (validElement, attrval) => {\r\n validElement.creditcardMessage = attrval;\r\n },\r\n \"data-val-maxlength\": (validElement, attrval) => {\r\n validElement.maxlengthMessage = attrval;\r\n },\r\n \"data-val-maxlength-max\": (validElement, attrval) => {\r\n validElement.field.setAttribute('maxlength', attrval);\r\n },\r\n \"data-val-minlength\": (validElement, attrval) => {\r\n validElement.minlengthMessage = attrval;\r\n },\r\n \"data-val-minlength-min\": (validElement, attrval) => {\r\n validElement.field.setAttribute('minlength', attrval);\r\n },\r\n \"data-val-regex\": (validElement, attrval) => {\r\n validElement.regexMessage = attrval;\r\n },\r\n \"data-val-regex-pattern\": (validElement, attrval) => {\r\n validElement.field.setAttribute('pattern', attrval);\r\n }\r\n}\r\n\r\nconst DEFAULTINVALIDMESSAGE = \"Field is not valid\";\r\n\r\n// Includes various functions to make forms more user friendly\r\n// 100% javascript... no jquery\r\n// related topics: \r\n// https://www.falldowngoboone.com/blog/native-form-validation-with-javascript/\r\n// https://developer.mozilla.org/en-US/docs/Web/API/Constraint_validation\r\nexport class FormHelper {\r\n submitMessage: string;\r\n form: HTMLFormElement;\r\n submitButton: HTMLInputElement | HTMLButtonElement;\r\n isSubmitted: boolean;\r\n checkDoubleSubmit: boolean;\r\n checkValid: boolean;\r\n validationElements: Map;\r\n submitConfirmWarning: string;\r\n\r\n constructor(setup: IFormHelper) {\r\n const self = this;\r\n if (typeof setup.form === 'string') {\r\n this.form = document.querySelector(setup.form);\r\n }\r\n else {\r\n this.form = setup.form;\r\n }\r\n if (this.form) {\r\n if (setup.submitButton) {\r\n if (typeof setup.submitButton === 'string') {\r\n this.submitButton = this.form.querySelector(setup.submitButton);\r\n }\r\n else {\r\n this.submitButton = setup.submitButton;\r\n }\r\n }\r\n else {\r\n this.submitButton = this.form.querySelector('input[type=\"submit\"],button')\r\n }\r\n }\r\n else {\r\n if (setup.submitButton) {\r\n if (typeof setup.submitButton === 'string') {\r\n this.submitButton = document.querySelector(setup.submitButton);\r\n }\r\n else {\r\n this.submitButton = setup.submitButton;\r\n }\r\n }\r\n }\r\n\r\n this.submitMessage = \"(processing)\";\r\n this.checkDoubleSubmit = false;\r\n this.isSubmitted = false;\r\n this.checkValid = false;\r\n this.validationElements = new Map;\r\n this.submitConfirmWarning = null;\r\n\r\n if (this.form) {\r\n this.form.addEventListener('submit', (e) => {\r\n self.submit(e);\r\n });\r\n }\r\n else {\r\n console.warn(\"FormHelper: form element not found.\");\r\n }\r\n }\r\n\r\n // Prevent double-submission\r\n public preventDoubleSubmit() {\r\n this.checkDoubleSubmit = true;\r\n }\r\n\r\n // Add a confirmation popup to verify that you want to submit\r\n // the form?\r\n public addSubmitConfirmWarning(warning: string) {\r\n this.submitConfirmWarning = warning;\r\n }\r\n\r\n // Add the HTML required attribute to fields which have unobtrusive required validation\r\n // setup\r\n public addRequiredAttributes() {\r\n const allfields = this.form.elements;\r\n for (var idxEl = 0; idxEl < allfields.length; ++idxEl) {\r\n const field = allfields[idxEl];\r\n const valrequired = field.getAttribute(\"data-val-required\");\r\n if (valrequired) {\r\n field.setAttribute('required', '');\r\n }\r\n }\r\n }\r\n\r\n // Check all elements for unobtrusive elements\r\n // and try to add our equivalents\r\n public addUnobtrusiveAttributes() {\r\n this.form.noValidate = true;\r\n this.checkValid = true;\r\n const allfields = this.form.elements;\r\n\r\n for (var idxEl = 0; idxEl < allfields.length; ++idxEl) {\r\n const field = allfields[idxEl];\r\n this.addUnobtrusiveField(field);\r\n }\r\n }\r\n\r\n // Called when the form is submitted. \r\n private submit(e: SubmitEvent) {\r\n // we're handling validity checks\r\n if (this.checkValid) {\r\n const isValid = this.form.reportValidity();\r\n if (!isValid) {\r\n e.preventDefault();\r\n return;\r\n }\r\n }\r\n\r\n if (this.submitConfirmWarning) {\r\n if (!window.confirm(this.submitConfirmWarning)) {\r\n e.preventDefault();\r\n return;\r\n }\r\n }\r\n\r\n if (this.checkDoubleSubmit) {\r\n if (this.isSubmitted) {\r\n // Previously submitted - don't submit again\r\n e.preventDefault();\r\n } else {\r\n // Mark it so that the next submit can be ignored\r\n this.isSubmitted = true;\r\n this.showSubmitted();\r\n }\r\n }\r\n }\r\n\r\n private showSubmitted() {\r\n this.submitButton.setAttribute('disabled', '');\r\n if (this.submitMessage) {\r\n if (this.submitButton.nodeName.toLowerCase() === 'button') {\r\n this.submitButton.innerHTML = this.submitMessage;\r\n }\r\n else {\r\n this.submitButton.value = this.submitMessage;\r\n }\r\n }\r\n }\r\n\r\n private addUnobtrusiveField(field: FieldElement) {\r\n if (!FormHelper.isFieldElement(field)) {\r\n return;\r\n }\r\n const self = this;\r\n\r\n const validElement: IValidationElement = {\r\n field: field,\r\n };\r\n\r\n field.addEventListener(\"invalid\", function handleInvalidField(event) {\r\n self.handleInvalid(field, event);\r\n });\r\n\r\n field.addEventListener(\"blur\", function handleFieldBlur() {\r\n const validElement = self.validationElements.get(field);\r\n self.clearErrorMessage(validElement);\r\n field.checkValidity();\r\n });\r\n\r\n // is there a related field that gets any messages that we have?\r\n if (field.name) {\r\n validElement.messageField = this.form.querySelector('[data-valmsg-for=\"' + field.name + '\"]');\r\n }\r\n\r\n var attributes = field.getAttributeNames();\r\n for (const attrkey of attributes) {\r\n const fixfunc = fixups[attrkey];\r\n if (fixfunc) {\r\n fixfunc(validElement, field.getAttribute(attrkey));\r\n }\r\n }\r\n\r\n this.validationElements.set(field, validElement);\r\n }\r\n\r\n private handleInvalid(field: FieldElement, event: Event) {\r\n // find the validElement\r\n event.preventDefault(); // suppress browser error\r\n const validElement = this.validationElements.get(field);\r\n const validity = field.validity;\r\n if (!validity) {\r\n this.setErrorMessage(validElement, null);\r\n return;\r\n }\r\n\r\n // check for missing\r\n if (validity.valueMissing && validElement.requiredMessage) {\r\n this.setErrorMessage(validElement, validElement.requiredMessage);\r\n return;\r\n }\r\n if (validity.typeMismatch) {\r\n if (validElement.emailMessage) {\r\n this.setErrorMessage(validElement, validElement.emailMessage);\r\n return;\r\n }\r\n if (validElement.creditcardMessage) {\r\n this.setErrorMessage(validElement, validElement.creditcardMessage);\r\n return;\r\n }\r\n if (validElement.phoneMessage) {\r\n this.setErrorMessage(validElement, validElement.phoneMessage);\r\n return;\r\n }\r\n }\r\n if (validity.tooLong) {\r\n this.setErrorMessage(validElement, validElement.maxlengthMessage);\r\n return;\r\n }\r\n if (validity.tooShort) {\r\n this.setErrorMessage(validElement, validElement.minlengthMessage);\r\n return;\r\n }\r\n if (validity.patternMismatch && validElement.regexMessage) {\r\n this.setErrorMessage(validElement, validElement.regexMessage);\r\n return;\r\n }\r\n\r\n // default...fall throught\r\n this.setErrorMessage(validElement, null);\r\n }\r\n\r\n private setErrorMessage(validElement: IValidationElement, message: string) {\r\n validElement.field.setAttribute(\"aria-invalid\", \"true\");\r\n validElement.field.classList.add(\"input-validation-error\");\r\n if (validElement.messageField) {\r\n validElement.messageField.innerHTML = message ? message : DEFAULTINVALIDMESSAGE;\r\n validElement.messageField.classList.remove(\"field-validation-valid\");\r\n validElement.messageField.classList.add(\"field-validation-error\");\r\n }\r\n }\r\n\r\n private clearErrorMessage(validElement: IValidationElement) {\r\n validElement.field.removeAttribute(\"aria-invalid\");\r\n validElement.field.classList.remove(\"input-validation-error\");\r\n\r\n if (validElement.messageField) {\r\n validElement.messageField.innerHTML = '';\r\n validElement.messageField.classList.add(\"field-validation-valid\");\r\n validElement.messageField.classList.remove(\"field-validation-error\");\r\n }\r\n }\r\n\r\n // Get the validity attribute. This probably isn't necessary, but just to \r\n // be safe\r\n private static isFieldElement(field: Element): boolean {\r\n if (field instanceof HTMLInputElement ||\r\n field instanceof HTMLSelectElement ||\r\n field instanceof HTMLTextAreaElement) {\r\n return true;\r\n }\r\n return false;\r\n }\r\n}"],"names":["__webpack_require__","exports","definition","key","o","Object","defineProperty","enumerable","get","obj","prop","prototype","hasOwnProperty","call","Symbol","toStringTag","value","jQuery","setupRegistration","click","show","hide","fixups","validElement","attrval","requiredMessage","field","setAttribute","emailMessage","phoneMessage","creditcardMessage","maxlengthMessage","minlengthMessage","regexMessage","FormHelper","constructor","setup","self","this","form","document","querySelector","submitButton","submitMessage","checkDoubleSubmit","isSubmitted","checkValid","validationElements","Map","submitConfirmWarning","addEventListener","e","submit","console","warn","preventDoubleSubmit","addSubmitConfirmWarning","warning","addRequiredAttributes","allfields","elements","idxEl","length","getAttribute","addUnobtrusiveAttributes","noValidate","addUnobtrusiveField","reportValidity","preventDefault","window","confirm","showSubmitted","nodeName","toLowerCase","innerHTML","isFieldElement","event","handleInvalid","clearErrorMessage","checkValidity","name","messageField","attributes","getAttributeNames","attrkey","fixfunc","set","validity","valueMissing","setErrorMessage","typeMismatch","tooLong","tooShort","patternMismatch","message","classList","add","remove","removeAttribute","HTMLInputElement","HTMLSelectElement","HTMLTextAreaElement"],"sourceRoot":""}