{"version":3,"file":"ReCaptchaV3.js","names":["ReCaptchaV3","a","setters","ThirdPartyLoader","default","on","trigger","deepMerge","execute","constructor","element","options","arguments","length","scriptUrl","sitekey","initState","state","scriptLoaded","initCache","classes","captcha","captchaResponse","afterInit","loadScript","bindEvents","executeCaptcha","bind","path","onScriptLoaded","grecaptcha","ready","classList","add","onScriptLoadFailed","error","console","message","e","form","onExecuteSuccess","detail","action","then","token","querySelector","document","createElement","setAttribute","appendChild","bubbles"],"sources":["components/global/ReCaptchaV3.js"],"sourcesContent":["import ThirdPartyLoader from 'components/global/ThirdPartyLoader';\nimport { on, trigger } from 'toolbox/event';\nimport { deepMerge } from 'toolbox/deepMerge';\n\n/**\n * This is a description of the ReCaptchaV3 constructor function.\n * @class\n * @classdesc This is a description of the ReCaptchaV3 class.\n * @extends Component\n */\nexport default class ReCaptchaV3 extends ThirdPartyLoader {\n /**\n * Constructor of the class that mainly merge the options of the components\n * @param {HTMLElement} element HTMLElement of the component\n * @param {Object} options options that belongs to the component\n */\n constructor(element, options = {}) {\n super(element, deepMerge({\n scriptUrl: '//www.google.com/recaptcha/api.js',\n sitekey: null,\n }, options));\n }\n\n /**\n * Init the different state of the component\n * It helps to avoid heavy DOM manipulation\n */\n initState() {\n this.state.scriptLoaded = false;\n }\n\n /**\n * All selectors must be cached. Never cache elements that are out of the component scope\n */\n initCache() {\n this.classes = {\n captcha: 'g-recaptcha',\n captchaResponse: 'g-recaptcha-response',\n };\n }\n\n /**\n * Called after component initialization\n */\n afterInit() {\n super.loadScript();\n }\n\n /**\n * Should contain only event listeners and nothing else\n * All the event handlers should be into a separated function. No usage of anonyous function\n */\n bindEvents() {\n on('captcha.execute', this.element, this.executeCaptcha.bind(this));\n }\n\n /**\n * Get path of recaptcha\n */\n get path() {\n const { scriptUrl, sitekey } = this.options;\n return `${scriptUrl}?render=${sitekey}`;\n }\n\n /**\n * On script load handler, called when ReCaptchaV3 is loaded\n */\n onScriptLoaded() {\n super.onScriptLoaded();\n this.state.scriptLoaded = true;\n if (grecaptcha !== undefined) {\n grecaptcha.ready(() => {\n this.element.classList.add(this.classes.captcha);\n });\n }\n }\n\n /**\n * On ReCaptchaV3 script loading failed handler\n *\n * @param {Object} error - Event object\n */\n onScriptLoadFailed(error) {\n super.onScriptLoadFailed();\n console.error(error.message);\n }\n\n /**\n * Call execute function for Google ReCaptchaV3\n * @param {Event} e event object\n */\n executeCaptcha(e) {\n const { form, onExecuteSuccess } = e.detail;\n const { sitekey } = this.options;\n\n grecaptcha.execute(sitekey, { action: 'submit' }).then((token) => {\n let captchaResponse = form.querySelector(`input[name=\"${this.classes.captchaResponse}\"]`);\n\n if (!captchaResponse) {\n captchaResponse = document.createElement('input');\n captchaResponse.setAttribute('type', 'hidden');\n captchaResponse.setAttribute('name', this.classes.captchaResponse);\n captchaResponse.setAttribute('value', '');\n\n form.appendChild(captchaResponse);\n }\n\n captchaResponse.setAttribute('value', token);\n\n trigger('form.captcha.success', this.element, { bubbles: true });\n if (typeof onExecuteSuccess === 'function') {\n onExecuteSuccess(token);\n }\n });\n }\n}\n"],"mappings":"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","ignoreList":[]}