{"version":3,"file":"ctct-plugin-frontend.min.js","mappings":"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","sources":["webpack://constant-contact-forms/./assets/js/ctct-plugin-frontend/util.js","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 * General-purpose utility stuff for CC plugin.\n */\n( function() {\n\twindow.addEventListener('load', function () {\n\t\tlet buttons = document.querySelectorAll('.ctct-submitted');\n\t\tif (buttons) {\n\t\t\tbuttons.forEach( (button ) => {\n\t\t\t\tbutton.addEventListener('click', () => {\n\t\t\t\t\tsetTimeout(() => {\n\t\t\t\t\t\tdisableSendButton( button );\n\t\t\t\t\t\tsetTimeout(() => { enableSendButton(button) }, 3000);\n\t\t\t\t\t}, 100);\n\t\t\t\t});\n\t\t\t} );\n\t\t}\n\t} );\n\n\t/**\n\t * Disable form submit button.\n\t *\n\t * @author Constant Contact\n\t * @since 1.0.0\n\t *\n\t * @return {mixed} jQuery if attribute is set, undefined if not.\n\t */\n\tfunction disableSendButton( button ) {\n\t\tbutton.setAttribute('disabled', 'disabled');\n\t}\n\n\t/**\n\t * Re-enable form submit buttons.\n\t *\n\t * @author Constant Contact\n\t * @since 1.0.0\n\t *\n\t * @return {mixed} jQuery if attribute is set, undefined if not.\n\t */\n\tfunction enableSendButton( button ) {\n\t\tbutton.removeAttribute('disabled');\n\t}\n} () );\n","/**\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\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\n\t\tlet submitbtn = form.querySelector( '.ctct-submitted' );\n\t\tsubmitbtn.setAttribute( 'disabled', 'disabled' );\n\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\t\t\tsubmitbtn.removeAttribute('disabled');\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\tevent.preventDefault();\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\tapp.handleSubmission(event, form);\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\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\n\t\t\tif ( form.recaptcha && 0 < form.recaptcha.length ) {\n\t\t\t\tform.submitButton.setAttribute('disabled','disabled');\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","addEventListener","buttons","document","querySelectorAll","forEach","button","setTimeout","setAttribute","disableSendButton","removeAttribute","enableSendButton","CTCTSupport","app","init","cache","bindEvents","forms","wrapper","length","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","validateSubmission","getAttribute","fields","checkValidity","showMessage","message","classes","arguments","undefined","role","parentElement","message_tag","createElement","innerHTML","dismiss_btn","prepend","this","submitForm","submitbtn","data","FormData","formData","formParams","URLSearchParams","append","options","method","body","fetch","ajaxurl","then","response","json","status","errors","style","display","reset","handleSubmission","clearTimeout","preventDefault","__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":""}