1"use strict"; 2 3let recaptchaSiteKey = $('#get-google-recaptcha-key').data('value'); 4let recaptchaGenerateStatus = $('#get-google-recaptcha-status').data('value')?.toString(); 5recaptchaGenerateStatus = recaptchaGenerateStatus === 'true' || recaptchaGenerateStatus === '1' || recaptchaGenerateStatus === 1; 6 7function showDefaultCaptchaSection($element, defaultSectionElement) { 8 let $form = $element.closest('form'); 9 10 if ($element.next('[name="set_default_captcha"]').length === 0) { 11 $element.after('<input type="hidden" name="set_default_captcha" class="set_default_captcha_value" value="1">'); 12 } else { 13 $form.find('[name="set_default_captcha"]')?.val(1); 14 } 15 16 $form.find('.dynamic-default-and-recaptcha-section')?.addClass('active'); 17 18 if($form.find('.default-captcha-container')?.length > 0){ 19 let defaultCaptchaContainer = $form.find('.default-captcha-container'); 20 getSessionRecaptchaCode(defaultCaptchaContainer.data("session"), defaultCaptchaContainer.find("input")); 21 } 22 23 let defaultDynamicElement = $(defaultSectionElement); 24 if (defaultDynamicElement?.length > 0) { 25 defaultDynamicElement.find('[name="default_captcha_value"]')?.attr('required', true); 26 defaultDynamicElement.removeClass('d-none'); 27 } 28 setTimeout(function () { 29 $form.find('[type="submit"]').removeAttr('disabled'); 30 }, 5000); 31} 32 33function generateRecaptcha($element, $input, action, defaultSectionElement) { 34 let defaultDynamicElement = $(defaultSectionElement); 35 if (defaultDynamicElement?.length > 0) { 36 defaultDynamicElement.find('[name="default_captcha_value"]')?.removeAttr('required'); 37 } 38 let generatedToken = null; 39 if (typeof grecaptcha !== 'undefined') { 40 try { 41 grecaptcha.execute(recaptchaSiteKey, { action: action }) 42 .then(function (token) { 43 $element.val(token); 44 generatedToken = token; 45 defaultDynamicElement?.find('[name="default_captcha_value"]')?.val(''); 46 // Enable submit button after token is set 47 let $form = $element.closest('form'); 48 $form.find('[name="set_default_captcha"]')?.val(0); 49 $form.find('[type="submit"]').removeAttr('disabled'); 50 }) 51 .catch(function () { 52 $element.val(''); 53 showDefaultCaptchaSection($element, defaultSectionElement); 54 }); 55 } catch (err) { 56 showDefaultCaptchaSection($element, defaultSectionElement); 57 } 58 } else { 59 showDefaultCaptchaSection($element, defaultSectionElement); 60 } 61} 62 63$('.render-grecaptcha-response').each(function () { 64 let $element = $(this); 65 let action = $element.data('action'); 66 let defaultSectionElement = $element.data('default-captcha'); 67 let $input = $element.next('.set_default_captcha_value'); 68 69 if ($input.length === 0) { 70 $element.after('<input type="hidden" name="set_default_captcha" class="set_default_captcha_value" value="">'); 71 $input = $element.next('.set_default_captcha_value'); 72 } 73 74 let formElement = $element.closest('form'); 75 if (!formElement.length) { 76 console.warn('No form found for element:', $element); 77 return; 78 } 79 80 let submitButton = formElement.find('[type="submit"]'); 81 82 submitButton.on('mouseover mousedown', function () { 83 if (!$input.val()) { 84 submitButton.attr('disabled', true); 85 generateRecaptcha($element, $input, action, defaultSectionElement); 86 setTimeout(function () { 87 submitButton.attr('disabled', false); 88 }, 2000); 89 } 90 }); 91 92 formElement.on('mouseover mousedown', function () { 93 if (!$input.val()) { 94 submitButton.attr('disabled', true); 95 generateRecaptcha($element, $input, action, defaultSectionElement); 96 setTimeout(function () { 97 submitButton.attr('disabled', false); 98 }, 2000); 99 } 100 }); 101 102 submitButton.on('click', function () { 103 setTimeout(function () { 104 generateRecaptcha($element, $input, action, defaultSectionElement); 105 }, 10000); 106 }); 107 108 // Listen for any typing/select/file change inside the form 109 formElement.on('input change', 'input, textarea, select', function () { 110 if (!$input.val()) { 111 submitButton.attr('disabled', true); 112 generateRecaptcha($element, $input, action, defaultSectionElement); 113 submitButton.attr('disabled', false); 114 } 115 }); 116}); 117 118 119$('.default-captcha-container').each(function () { 120 let defaultCaptchaContainer = $(this); 121 let placeholderText = defaultCaptchaContainer?.data('placeholder') ?? 'Enter captcha value'; 122 let baseUrl = defaultCaptchaContainer?.data('base-url'); 123 let session = defaultCaptchaContainer?.data('session'); 124 125 let html = `<input type="text" name="default_captcha_value" value="" required placeholder="${placeholderText}">`; 126 127 let htmlIcon = `<?xml version="1.0" encoding="utf-8"?> 128 <svg width="20px" height="20px" viewBox="0 0 20 20" fill="none" xmlns="http://www.w3.org/2000/svg"> 129 <path d="M5.05028 14.9497C4.65975 14.5592 4.65975 13.9261 5.05028 13.5355C5.4408 13.145 6.07397 13.145 6.46449 13.5355C7.39677 14.4678 8.655 15 10 15C12.7614 15 15 12.7614 15 10C15 9.44772 15.4477 9 16 9C16.5523 9 17 9.44772 17 10C17 13.866 13.866 17 10 17C8.11912 17 6.35391 16.2534 5.05028 14.9497Z" fill="#000000"/> 130 <path d="M13.5585 12.832C13.099 13.1384 12.4781 13.0141 12.1718 12.5546C11.8655 12.0951 11.9897 11.4742 12.4492
13011.1679L15.4496 9.16787C15.9091 8.86154 16.53 8.98575 16.8363 9.4453C17.1426 9.90484 17.0184 10.5257 16.5589 10.832L13.5585 12.832Z" fill="#000000"/> 131 <path d="M18.8321 12.4452C19.1384 12.9048 19.0143 13.5256 18.5547 13.832C18.0952 14.1383 17.4743 14.0142 17.168 13.5546L15.168 10.5546C14.8616 10.0951 14.9858 9.47424 15.4453 9.16789C15.9049 8.86153 16.5257 8.98571 16.8321 9.44524L18.8321 12.4452Z" fill="#000000"/> 132 <path d="M14.8571 4.85116C15.2477 5.24168 15.2477 5.87485 14.8571 6.26537C14.4666 6.65589 13.8334 6.65589 13.4429 6.26537C12.5106 5.33309 11.2524 4.8009 9.90738 4.8009C7.14596 4.8009 4.90738 7.03948 4.90738 9.8009C4.90738 10.3532 4.45967 10.8009 3.90738 10.8009C3.3551 10.8009 2.90738 10.3532 2.90738 9.8009C2.90738 5.93491 6.04139 2.8009 9.90738 2.8009C11.7883 2.8009 13.5535 3.54752 14.8571 4.85116Z" fill="#000000"/> 133 <path d="M6.34889 6.96887C6.80844 6.66255 7.4293 6.78676 7.73563 7.2463C8.04195 7.70585 7.91775 8.32671 7.4582 8.63304L4.45782 10.633C3.99828 10.9394 3.37741 10.8152 3.07109 10.3556C2.76476 9.89606 2.88897 9.2752 3.34852 8.96887L6.34889 6.96887Z" fill="#000000"/> 134<path d="M1.07533 7.35567C0.768977 6.89614 0.893151 6.27527 1.35268 5.96892C1.81221 5.66256 2.43308 5.78674 2.73943 6.24627L4.73943 9.24627C5.04578 9.7058 4.92161 10.3267 4.46208 10.633C4.00255 10.9394 3.38168 10.8152 3.07533 10.3557L1.07533 7.35567Z" fill="#000000"/> 135</svg>`; 136 137 html += `<div class="captcha-image-container"><img alt="captcha" src="${baseUrl + '?sessionKey=' + session + '&token=' + Math.random()}"> 138 <span class="refresh-icon">${htmlIcon}</span></div>`; 139 defaultCaptchaContainer.append(html); 140 141 defaultCaptchaContainer.find('.captcha-image-container').on('click', function () { 142 if (defaultCaptchaContainer?.find(".refresh-icon")?.hasClass('rotate-active')) { 143 defaultCaptchaContainer.find(".refresh-icon").removeClass('rotate-active'); 144 } else { 145 defaultCaptchaContainer.find(".refresh-icon").addClass('rotate-active'); 146 } 147 defaultCaptchaContainer.find("img").attr('src', baseUrl + '?sessionKey=' + session + '&token=' + Math.random()); 148 getSessionRecaptchaCode(defaultCaptchaContainer.data("session"), defaultCaptchaContainer.find("input")); 149 }); 150}); 151 152function getSessionRecaptchaCode(sessionKey, inputSelector) { 153 try { 154 let routeGetSessionRecaptchaCode = $( 155 "#route-get-session-recaptcha-code" 156 ); 157 let csrfToken = $('meta[name="_token"]').attr("content"); 158 if (routeGetSessionRecaptchaCode.data("mode").toString() === "dev") { 159 let string = "."; 160 let intervalId = setInterval(() => { 161 if (string === "......") { 162 string = "."; 163 } 164 string = string + "."; 165 $(inputSelector).val(string); 166 }, 100); 167 168 setTimeout(() => { 169 clearInterval(intervalId); 170 $.ajaxSetup({ 171 headers: { 172 "X-CSRF-TOKEN": csrfToken, 173 }, 174 }); 175 $.ajax({ 176 type: "POST", 177 url: $("#route-get-session-recaptcha-code").data("route"), 178 data: { 179 _token: csrfToken, 180 sessionKey: sessionKey, 181 }, 182 success: function (response) { 183 $(inputSelector).val(response?.code); 184 }, 185 }); 186 }, 1000); 187 } 188 } catch (e) { 189 console.log(e); 190 } 191}
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.