{"version":3,"file":"../mailcheck-init-326.min.js","sources":["mailcheck-init-326.js"],"sourcesContent":["/**\n * Handles Mailcheck runs on email fields\n */\n(function (root, factory) {\n\tif ( typeof define === 'function' && define.amd ) {\n\t\tdefine([], factory(root));\n\t} else if ( typeof exports === 'object' ) {\n\t\tmodule.exports = factory(root);\n\t} else {\n\t\troot.MailcheckInit = factory(root);\n\t}\n})(typeof global !== 'undefined' ? global : this.window || this.global, function (root) {\n\n\t'use strict';\n\n\tvar $ = jQuery;\n\n\tvar _hasInitialized = false;\n\tvar _publicMethods = { }\n\tvar _settings = {\n\t\tmailFieldSelector: '[data-mailcheck]',\n\n\t\tformFieldWrapperSelector: '.form-row',\n\t\tinputFieldWrapperSelector: '.woocommerce-input-wrapper',\n\t\tsuggestionElementSelector: '[data-mailcheck-suggestion]',\n\t\tsuggestionApplySelector: '[data-mailcheck-apply]',\n\t\terrorMessageElementSelector: '.woocommerce-error',\n\n\t\tmailFieldSuggestedClass: 'has-email-suggestion',\n\n\t\tsuggestionValueAttr: 'data-suggestion-value',\n\n\t\tsuggestedElementTemplate: '<div class=\"fc-mailcheck-suggestion\" data-mailcheck-suggestion>Did you mean <a class=\"mailcheck-suggestion\" href=\"#apply-suggestion\" data-mailcheck-apply data-suggestion-value=\"{suggestion-value}\">{suggestion}</a>?</div>',\n\t\tsuggestionTemplate: '{address}@<span class=\"mailcheck-suggestion-domain\">{domain}</span>',\n\t}\n\tvar _tempTarget = null;\n\n\n\n\t/**\n\t * METHODS\n\t */\n\n\n\n\t/**\n\t * Remove Mailcheck suggestions elements\n\t */\n\tvar removeSuggestions = function() {\n\t\t// Bail if there is no target\n\t\tif ( ! _tempTarget ) { return; }\n\n\t\t// Get variables\n\t\tvar parent = _tempTarget.closest( _settings.formFieldWrapperSelector );\n\n\t\t// Bail if no parent found\n\t\tif ( ! parent ) { return; }\n\n\t\t// Get suggestion elements to be removed\n\t\tvar suggestions = parent.querySelectorAll( _settings.suggestionElementSelector );\n\n\t\t// Remove suggestions\n\t\tfor ( var i = 0; i < suggestions.length; i++ ) {\n\t\t\tsuggestions[ i ].parentNode.removeChild( suggestions[i] );\n\t\t}\n\n\t\t// Remove suggested class\n\t\t_tempTarget.classList.remove( _settings.mailFieldSuggestedClass );\n\t}\n\n\n\n\t/**\n\t * Add Mailcheck suggestions elements\n\t */\n\tvar handleSuggested = function( suggestion ) {\n\t\t// Remove existing suggestions\n\t\tremoveSuggestions();\n\n\t\t// Bail if there is no target\n\t\tif ( ! _tempTarget ) { return; }\n\n\t\t// Get variables\n\t\tvar parent = _tempTarget.closest( _settings.inputFieldWrapperSelector );\n\t\tvar suggestionHtml = _settings.suggestionTemplate.replaceAll( '{address}', suggestion.address ).replaceAll( '{domain}', suggestion.domain );\n\t\tvar suggestedElementHtml = _settings.suggestedElementTemplate.replaceAll( '{suggestion}', suggestionHtml ).replaceAll( '{suggestion-value}', suggestion.full );\n\n\t\t// Get target sibling\n\t\tvar insertPositionElement = _tempTarget.nextSibling;\n\n\t\t// Handle position when error messages are present\n\t\tif ( parent.querySelector( _settings.errorMessageElementSelector ) ) {\n\t\t\tvar errorMessageElements = parent.querySelectorAll( _settings.errorMessageElementSelector );\n\n\t\t\t// Get last error message element\n\t\t\tinsertPositionElement = errorMessageElements[ errorMessageElements.length - 1 ].nextSibling;\n\t\t}\n\n\t\t// Create suggestion element and add it after the field\n\t\tvar element = document.createElement( 'div' );\n\t\telement.innerHTML = suggestedElementHtml;\n\t\tparent.insertBefore( element.firstChild, insertPositionElement );\n\t\telement = null;\n\n\t\t_tempTarget.classList.add( _settings.mailFieldSuggestedClass );\n\t}\n\n\n\n\t/**\n\t * Apply an email suggestion value to the email field\n\t */\n\tvar applySuggestion = function( suggestionElement ){\n\t\t// Bail if there are no suggestions\n\t\tif ( suggestionElement === null ) { return; }\n\n\t\t// Get form row\n\t\tvar parentFormRow = suggestionElement.closest( _settings.formFieldWrapperSelector );\n\t\t\n\t\t// Bail if parent form row not found\n\t\tif ( parentFormRow === null ) { return; }\n\n\t\tvar targetField = parentFormRow.querySelector( _settings.mailFieldSelector )\n\n\t\t// Bail if target field not found\n\t\tif ( targetField === null ) { return; }\n\n\t\t// Apply suggested value\n\t\ttargetField.value = suggestionElement.getAttribute( _settings.suggestionValueAttr );\n\t\t\n\t\t// Remove existing suggestions\n\t\t_tempTarget = targetField;\n\t\tremoveSuggestions();\n\t\t_tempTarget = null;\n\n\t\t// Refocus on the target field\n\t\ttargetField.focus();\n\n\t\t// Revalidate the field\n\t\tif ( window.CheckoutValidation ) {\n\t\t\tCheckoutValidation.validateField( targetField, 'apply-mailcheck-suggestion' );\n\t\t}\n\t}\n\n\n\n\t/**\n\t * Handle captured keyup event and route to appropriate function.\n\t * @param {Event} e Event data.\n\t */\n\tvar handleTriggerEvents = function( e ) {\n\t\t// Bail if Mailcheck not available\n\t\tif ( undefined === Mailcheck ) { return; }\n\n\t\t// Get the target field\n\t\t_tempTarget = e.target;\n\n\t\t// Run Mailcheck and handle suggestions\n\t\tMailcheck.run( {\n\t\t\temail: _tempTarget.value,\n\t\t\tsuggested: handleSuggested,\n\t\t\tempty: removeSuggestions\n\t\t} );\n\n\t\t// Clear the temp target\n\t\t_tempTarget = null;\n\t};\n\tvar handleTriggerEventsDebounced = FCUtils.debounce( handleTriggerEvents, 100 );\n\n\n\n\t/**\n\t * Handle document clicks and route to the appropriate function.\n\t */\n\tvar handleClick = function( e ) {\n\t\t// APPLY SUGGESTION\n\t\tif ( e.target.closest( _settings.suggestionApplySelector ) ) {\n\t\t\te.preventDefault();\n\t\t\tapplySuggestion( e.target.closest( _settings.suggestionApplySelector ) );\n\t\t}\n\t}\n\n\n\n\t/**\n\t * Handle keypress event.\n\t */\n\tvar handleKeyDown = function( e ) {\n\t\t// Should do nothing if the default action has been cancelled\n\t\tif ( e.defaultPrevented ) { return; }\n\n\t\t// ENTER or SPACE on apply-suggestion element\n\t\tif ( ( FCUtils.keyboardKeys.ENTER === e.key || FCUtils.keyboardKeys.SPACE === e.key ) && e.target.closest( _settings.suggestionApplySelector ) ) {\n\t\t\t// Simulate click\n\t\t\thandleClick( e );\n\t\t}\n\t};\n\n\n\n\t/**\n\t * Initialize Mailcheck feature\n\t */\n\t_publicMethods.init = function( options ) {\n\t\tif ( _hasInitialized ) { return; }\n\n\t\t// Merge settings\n\t\t_settings = FCUtils.extendObject( true, _settings, options );\n\n\t\t// Add event listeners\n\t\twindow.addEventListener( 'input', handleTriggerEventsDebounced, true );\n\t\twindow.addEventListener( 'click', handleClick, true );\n\t\tdocument.addEventListener( 'keydown', handleKeyDown, true );\n\n\t\t_hasInitialized = true;\n\t};\n\n\t\n\t//\n\t// Public APIs\n\t//\n\treturn _publicMethods;\n\n});\n"],"names":["root","factory","define","amd","exports","module","MailcheckInit","global","this","window","jQuery","handleSuggested","suggestion","parent","suggestedElementHtml","element","removeSuggestions","_tempTarget","closest","_settings","inputFieldWrapperSelector","suggestionHtml","suggestionTemplate","replaceAll","address","domain","suggestedElementTemplate","full","insertPositionElement","nextSibling","querySelector","errorMessageElementSelector","errorMessageElements","querySelectorAll","length","document","createElement","innerHTML","insertBefore","firstChild","classList","add","mailFieldSuggestedClass","handleClick","e","targetField","target","suggestionApplySelector","preventDefault","suggestionElement","parentFormRow","formFieldWrapperSelector","mailFieldSelector","value","getAttribute","suggestionValueAttr","focus","CheckoutValidation","validateField","handleKeyDown","defaultPrevented","FCUtils","keyboardKeys","ENTER","key","SPACE","_hasInitialized","_publicMethods","suggestionElementSelector","suggestions","i","parentNode","removeChild","remove","handleTriggerEventsDebounced","debounce","undefined","Mailcheck","run","email","suggested","empty","init","options","extendObject","addEventListener"],"mappings":"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"}