{"version":3,"file":"./ctct-plugin-frontend.min.js","mappings":"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","sources":["webpack://constant-contact-forms/./assets/js/ctct-plugin-frontend/validation.js","webpack://constant-contact-forms/webpack/bootstrap","webpack://constant-contact-forms/webpack/runtime/compat get default export","webpack://constant-contact-forms/webpack/runtime/define property getters","webpack://constant-contact-forms/webpack/runtime/hasOwnProperty shorthand"],"sourcesContent":["/**\n * Front-end form validation.\n *\n * @since 1.0.0\n */\n\n window.CTCTSupport = {};\n\n( function( window, app ) {\n\n\t/**\n\t * @constructor\n\t *\n\t * @author Constant Contact\n\t * @since 1.0.0\n\t */\n\tapp.init = () => {\n\t\tapp.cache();\n\t\tapp.bindEvents();\n\t};\n\n\t/**\n\t * Cache DOM elements.\n\t *\n\t * @author Constant Contact\n\t * @since 1.0.0\n\t */\n\tapp.cache = () => {\n\n\t\tapp.cache = {\n\t\t\tforms: []\n\t\t};\n\n\t\tlet wrapper = document.querySelectorAll('.ctct-form-wrapper');\n\t\tif (wrapper.length) {\n\t\t\twrapper.forEach((formWrapper) => {\n\t\t\t\tlet found = formWrapper.querySelector('form');\n\t\t\t\tif (found) {\n\t\t\t\t\tapp.cache.forms.push(found);\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\n\t\tapp.cache.forms.forEach((form, index) => {\n\t\t\tapp.cache.forms[index].honeypot = form.querySelector('.ctct_usage_field');\n\t\t\tapp.cache.forms[index].submitButton = form.querySelector('input[type=submit]');\n\t\t\tapp.cache.forms[index].recaptcha = form.querySelector('.g-recaptcha');\n\t\t});\n\n\t\tapp.timeout = null;\n\t};\n\n\t/**\n\t * Remove the ctct-invalid class from elements that have it.\n\t *\n\t * @author Constant Contact\n\t * @since 1.0.0\n\t */\n\tapp.setAllInputsValid = () => {\n\t\tapp.cache.forms.forEach((form) => {\n\t\t\tlet invalid = form.querySelectorAll('.ctct-invalid');\n\t\t\tArray.from(invalid).forEach((field) => {\n\t\t\t\tfield.classList.remove('ctct-invalid');\n\t\t\t});\n\t\t});\n\t};\n\n\t/**\n\t * Adds .ctct-invalid HTML class to inputs whose values are invalid.\n\t *\n\t * @author Constant Contact\n\t * @since 1.0.0\n\t *\n\t * @param {object} error AJAX response error object.\n\t */\n\tapp.processError = ( error ) => {\n\n\t\t// If we have an id property set.\n\t\tif ( 'undefined' !== typeof( error.id ) ) {\n\t\t\tlet invalid = document.querySelectorAll('#' + error.id);\n\t\t\tArray.from(invalid).forEach((theInvalid) => {\n\t\t\t\ttheInvalid.classList.add('ctct-invalid');\n\t\t\t});\n\t\t}\n\t};\n\n\t/**\n\t * Check the value of the hidden honeypot field; disable form submission button if anything in it.\n\t *\n\t * @author Constant Contact\n\t * @since 1.0.0\n\t *\n\t * @param {object} event The change or keyup event triggering this callback.\n\t * @param {object} honeyPot The object for the actual input field being checked.\n\t * @param {object} submitButton The object for the submit button in the same form as the honeypot field.\n\t */\n\tapp.checkHoneypot = ( event, honeyPot, submitButton ) => {\n\t\t// If there is text in the honeypot, disable the submit button.\n\n\t\t// Leaving this disabling in place because it should not be getting used by screen readers in the first place, and I feel it's going to help more than hurt to keep.\n\t\tif ( 0 < honeyPot.value.length ) {\n\t\t\tsubmitButton.setAttribute('disabled','disabled');\n\t\t} else {\n\t\t\tsubmitButton.removeAttribute('disabled');\n\t\t}\n\t};\n\t/**\n\t * Ensures that we should use AJAX to process the specified form, and that all required fields are not empty.\n\t *\n\t * @author Constant Contact\n\t * @since 1.0.0\n\t *\n\t * @param {object} form object for the form being validated.\n\t * @return {boolean} False if AJAX processing is disabled for this form or if a required field is empty.\n\t */\n\tapp.validateSubmission = ( form ) => {\n\t\tif ( 'on' !== form.getAttribute( 'data-doajax' ) ) {\n\t\t\treturn false;\n\t\t}\n\n\t\tlet fields = form.querySelectorAll('[required]');\n\t\tArray.from(fields).forEach((field) => {\n\t\t\tif (false === field.checkValidity()) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t});\n\n\t\treturn true;\n\t};\n\n\t/**\n\t * Prepends form with a message that fades out in 5 seconds.\n\t *\n\t * @author Constant Contact\n\t * @since 1.0.0\n\t *\n\t * @param {object} form object for the form a message is being displayed for.\n\t * @param {string} message The message content.\n\t * @param {string} classes Optional. HTML classes to add to the message wrapper.\n\t * @param {string} role Role attribute for accessibility.\n\t */\n\tapp.showMessage = ( form, message, classes = '', role = 'log' ) => {\n\n\t\tconst wrapper = form.parentElement;\n\n\t\tif ( wrapper.querySelector('p.ctct-message') ) {\n\t\t\twrapper.querySelector('p.ctct-message').remove();\n\t\t}\n\n\t\tlet message_tag = document.createElement('p');\n\t\tmessage_tag.setAttribute('class', 'ctct-message ' + classes);\n\t\tmessage_tag.setAttribute('role', role);\n\t\tmessage_tag.innerHTML = message;\n\n\t\tlet dismiss_btn = document.createElement('button');\n\t\tdismiss_btn.setAttribute('class', 'button button-secondary ctct-dismiss ctct-dismiss-ajax-notice');\n\t\tdismiss_btn.setAttribute('aria-label', 'Dismiss notification');\n\t\tdismiss_btn.innerHTML = '✕';\n\n\t\tmessage_tag.prepend(dismiss_btn);\n\n\t\tform.parentElement.prepend(message_tag);\n\n\t\twrapper.querySelector( '.ctct-dismiss-ajax-notice' ).addEventListener(\n\t\t\t'click',\n\t\t\tfunction() {\n\t\t\t\tthis.parentElement.remove();\n\t\t\t}\n\t\t);\n\t};\n\n\t/**\n\t * Submits the actual form via AJAX.\n\t *\n\t * @author Constant Contact\n\t * @since 1.0.0\n\t *\n\t * @param {object} form object for the form being submitted.\n\t */\n\tapp.submitForm = ( form ) => {\n\t\tconst data = new FormData();\n\t\tconst formData = new FormData(form);\n\t\tconst formParams = new URLSearchParams(formData);\n\n\t\tdata.append('action', 'ctct_process_form');\n\t\tdata.append('data', formParams);\n\n\t\tlet options = {\n\t\t\tmethod: 'POST',\n\t\t\tbody: data\n\t\t};\n\n\t\tfetch(\n\t\t\twindow.ajaxurl,\n\t\t\toptions\n\t\t)\n\t\t.then((response)=>response.json())\n\t\t.then((response)=>{\n\n\t\t\tif ( 'undefined' === typeof response.status ) {\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\tif ( 'success' !== response.status ) {\n\t\t\t\tif ('undefined' !== typeof (response.errors)) {\n\t\t\t\t\tapp.setAllInputsValid();\n\t\t\t\t\tresponse.errors.forEach(app.processError);\n\t\t\t\t} else {\n\t\t\t\t\tapp.showMessage(form, response.message, 'ctct-error', 'alert');\n\t\t\t\t}\n\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\tform.style.display = 'none';\n\t\t\t// If we're here, the submission was a success; show message and reset form fields.\n\t\t\tapp.showMessage(form, response.message, 'ctct-success', 'status');\n\t\t\tform.reset();\n\t\t});\n\t};\n\n\t/**\n\t * Handle the form submission.\n\t *\n\t * @author Constant Contact\n\t * @since 1.0.0\n\t *\n\t * @param {object} event The submit event.\n\t * @param {object} form object for the current form being handled.\n\t * @return {boolean} False if unable to validate the form.\n\t */\n\tapp.handleSubmission = ( event, form ) => {\n\n\t\tif ( ! app.validateSubmission( form ) ) {\n\t\t\treturn false;\n\t\t}\n\n\t\tclearTimeout( app.timeout );\n\n\t\tif (form.checkValidity()) {\n\t\t\tapp.timeout = setTimeout(app.submitForm, 500, form);\n\t\t}\n\t};\n\n\t/**\n\t * Set up event bindings and callbacks.\n\t *\n\t * @author Constant Contact\n\t * @since 1.0.0\n\t */\n\tapp.bindEvents = () => {\n\t\tapp.cache.forms.forEach((form) => {\n\t\t\tlet thesubmit = form.querySelector('[type=submit]');\n\t\t\tthesubmit.addEventListener('click', (event) => {\n\t\t\t\tlet doingajax = form.getAttribute( 'data-doajax' );\n\t\t\t\tif ( doingajax && 'on' === doingajax ) {\n\t\t\t\t\tevent.preventDefault();\n\t\t\t\t}\n\n\t\t\t\tif ( form.classList.contains( 'ctct-submitted' ) ) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tform.classList.add( 'ctct-submitted' );\n\t\t\t\tapp.handleSubmission( event, form );\n\t\t\t\tform.classList.remove( 'ctct-submitted' );\n\t\t\t});\n\n\t\t\tform.honeypot.addEventListener('change', (event) => {\n\t\t\t\tapp.checkHoneypot(\n\t\t\t\t\tevent,\n\t\t\t\t\tform.honeypot,\n\t\t\t\t\tform.submitButton\n\t\t\t\t);\n\t\t\t});\n\n\t\t\tform.honeypot.addEventListener('keyup', (event) => {\n\t\t\t\tapp.checkHoneypot(\n\t\t\t\t\tevent,\n\t\t\t\t\tform.honeypot,\n\t\t\t\t\tform.submitButton\n\t\t\t\t);\n\t\t\t});\n\t\t});\n\t};\n\n\tapp.init();\n\n} ( window, window.CTCTSupport ) );\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","// getDefaultExport function for compatibility with non-harmony modules\n__webpack_require__.n = function(module) {\n\tvar getter = module && module.__esModule ?\n\t\tfunction() { return module['default']; } :\n\t\tfunction() { return module; };\n\t__webpack_require__.d(getter, { a: getter });\n\treturn getter;\n};","// define getter functions for harmony exports\n__webpack_require__.d = function(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 = function(obj, prop) { return Object.prototype.hasOwnProperty.call(obj, prop); }"],"names":["window","CTCTSupport","app","init","cache","bindEvents","forms","wrapper","document","querySelectorAll","length","forEach","formWrapper","found","querySelector","push","form","index","honeypot","submitButton","recaptcha","timeout","setAllInputsValid","invalid","Array","from","field","classList","remove","processError","error","id","theInvalid","add","checkHoneypot","event","honeyPot","value","setAttribute","removeAttribute","validateSubmission","getAttribute","fields","checkValidity","showMessage","message","classes","arguments","undefined","role","parentElement","message_tag","createElement","innerHTML","dismiss_btn","prepend","addEventListener","this","submitForm","data","FormData","formData","formParams","URLSearchParams","append","options","method","body","fetch","ajaxurl","then","response","json","status","errors","style","display","reset","handleSubmission","clearTimeout","setTimeout","doingajax","preventDefault","contains","__webpack_module_cache__","__webpack_require__","moduleId","cachedModule","exports","module","__webpack_modules__","n","getter","__esModule","d","a","definition","key","o","Object","defineProperty","enumerable","get","obj","prop","prototype","hasOwnProperty","call"],"sourceRoot":""}