"use strict"; import $ from "jquery"; import Events from "../lib/_events"; const NoCaptcha = (($) => { // Constants const $window = $(window); const D = document; const $Body = $("body"); const NAME = "jsNoCaptcha"; class NoCaptcha { static init() { const ui = this; ui.dispose(); console.log(`${NAME}: init`); if ( $(".g-recaptcha").length && typeof $window[0].grecaptcha === "undefined" ) { console.log(`${NAME}: Loading Captcha API`); $.getScript( "https://www.google.com/recaptcha/api.js?render=explicit&hl=en&onload=noCaptchaFieldRender", () => { this.renderCaptcha(); } ); } else { this.renderCaptcha(); } } static dispose() { console.log(`${NAME}: dispose`); } static renderCaptcha() { const grecaptcha = $window[0].grecaptcha; if ( typeof grecaptcha === "undefined" || typeof grecaptcha.render === "undefined" ) { return; } console.log(`${NAME}: Rendering Captcha`); const $_noCaptchaFields = $(".g-recaptcha"); if (!$(".g-recaptcha").length) { console.log(`${NAME}: No Captcha fields`); return; } const submitListener = (e) => { const $field = $(e.currentTarget).find(".g-recaptcha"); grecaptcha.execute($field.data("widgetid")); }; $_noCaptchaFields.each((i, field) => { const $field = $(field); if ($field.data("widgetid") || $field.html().length) { return; } const $form = $field.data("form") ? $(`#${$field.data("form")}`) : $field.parents("form"); const widget_id = grecaptcha.render(field, $field.data()); $field.data("widgetid", widget_id); // For the invisible captcha we need to setup some callback listeners if ($field.data("size") === "invisible" && !$field.data("callback")) { grecaptcha.execute(widget_id); $form.on("submit", submitListener); } }); } } $window.on(`${NAME}.init ${Events.AJAX} ${Events.LOADED}`, () => { NoCaptcha.init(); }); $window.data(`${NAME}`, NoCaptcha); $window[0].noCaptchaFieldRender = NoCaptcha.renderCaptcha; return NoCaptcha; })($); export default NoCaptcha;