{"version":3,"file":"../mailcheck-init-315.min.js","sources":["mailcheck-init-315.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\t\t\n\t\tformFieldWrapperSelector: '.form-row',\n\t\tinputFieldWrapperSelector: '.woocommerce-input-wrapper',\n\t\tsuggestionElementSelector: '[data-mailcheck-suggestion]',\n\t\tsuggestionApplySelector: '[data-mailcheck-apply]',\n\n\t\tmailFieldSuggestedClass: 'has-email-suggestion',\n\n\t\tsuggestionValueAttr: 'data-suggestion-value',\n\n\t\tsuggestedElementTemplate: '
Did you mean {suggestion}?
',\n\t\tsuggestionTemplate: '{address}@{domain}',\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\tif ( _tempTarget === null ) return;\n\t\t\n\t\tvar parent = _tempTarget.closest( _settings.inputFieldWrapperSelector );\n\t\tvar suggestions = parent.querySelectorAll( _settings.suggestionElementSelector );\n\t\t\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_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\tremoveSuggestions();\n\n\t\tif ( _tempTarget === null ) return;\n\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// Create suggestion element and add it after the field\n\t\tvar parent = _tempTarget.parentNode;\n\t\tvar element = document.createElement( 'div' );\n\t\telement.innerHTML = suggestedElementHtml;\n\t\tparent.insertBefore( element.firstChild, _tempTarget.nextSibling );\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\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 suggestion message\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\tif ( Mailcheck !== undefined && e.target.matches( _settings.mailFieldSelector ) ) {\n\t\t\t_tempTarget = e.target;\n\n\t\t\tMailcheck.run( {\n\t\t\t\temail: _tempTarget.value,\n\t\t\t\tsuggested: handleSuggested,\n\t\t\t\tempty: removeSuggestions\n\t\t\t} );\n\n\t\t\t_tempTarget = null;\n\t\t}\n\t};\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\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( 'keyup', handleTriggerEvents, 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","suggestedElementHtml","element","removeSuggestions","_tempTarget","suggestionHtml","_settings","suggestionTemplate","replaceAll","address","domain","suggestedElementTemplate","full","parent","parentNode","document","createElement","innerHTML","insertBefore","firstChild","nextSibling","classList","add","mailFieldSuggestedClass","handleTriggerEvents","e","undefined","Mailcheck","target","matches","mailFieldSelector","run","email","value","suggested","empty","handleClick","targetField","closest","suggestionApplySelector","preventDefault","suggestionElement","parentFormRow","formFieldWrapperSelector","querySelector","getAttribute","suggestionValueAttr","focus","CheckoutValidation","validateField","handleKeyDown","defaultPrevented","FCUtils","keyboardKeys","ENTER","key","SPACE","_hasInitialized","_publicMethods","inputFieldWrapperSelector","suggestionElementSelector","suggestions","querySelectorAll","i","length","removeChild","remove","init","options","extendObject","addEventListener"],"mappings":"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"}