PageSourceSearch

https://www.robinsonpetshop.it/app/mu-plugins/robinson-recaptcha-p…/assets/js/recaptcha-v3.js?ver=1.1.0

js robinsonpetshop.it collected 2026-09-26 19:20:01 UTC 5,088 bytes, 152 lines download raw bytes

1/* global RbsRecaptcha, grecaptcha */
2
3(function () {
4  var DEBUG = !!(window.RbsRecaptcha && window.RbsRecaptcha.debug);
5
6  function isSubmitControl(el) {
7    if (!el) return false;
8    var tag = (el.tagName || '').toLowerCase();
9    if (tag === 'button') return (el.type || 'submit') === 'submit';
10    if (tag === 'input') return (el.type || '').toLowerCase() === 'submit';
11    return false;
12  }
13
14  function addHiddenSubmitter(form, submitter) {
15    if (!submitter) return null;
16    var name = submitter.getAttribute('name');
17    if (!name) return null;
18    var value = submitter.getAttribute('value') || submitter.value || '';
19
20    // Rimuovi eventuale precedente
21    var prev = form.querySelector('[data-rbs-recaptcha-submitter="1"]');
22    if (prev) prev.remove();
23
24    var input = document.createElement('input');
25    input.type = 'hidden';
26    input.name = name;
27    input.value = value;
28    input.setAttribute('data-rbs-recaptcha-submitter', '1');
29    form.appendChild(input);
30    return input;
31  }
32
33  function findForms() {
34    return Array.prototype.slice.call(
35      document.querySelectorAll('form')
36    ).filter(function (form) {
37      return form.querySelector('[data-rbs-recaptcha-token]');
38    });
39  }
40
41  function ensureCompatTokenInput(form, token) {
42    var compat = form.querySelector('input[data-rbs-recaptcha-compat]');
43    if (compat) {
44      compat.value = token;
45    }
46  }
47
48  function bindForm(form) {
49    if (form.dataset.rbsRecaptchaBound === '1') return;
50    form.dataset.rbsRecaptchaBound = '1';
51
52    var lastSubmitter = null;
53    form.addEventListener('click', function (e) {
54      var t = e.target;
55      if (isSubmitControl(t)) {
56        lastSubmitter = t;
57      } else if (t && t.closest) {
58        var btn = t.closest('button, input[type="submit"]');
59        if (isSubmitControl(btn)) lastSubmitter = btn;
60      }
61    }, true);
62
63    if (DEBUG) {
64      // eslint-disable-next-line no-console
65      console.log('[rbs-recaptcha:v3] bound form', form);
66    }
67
68    form.addEventListener('submit', function (e) {
69      var tokenInput = form.querySelector('[data-rbs-recaptcha-token]');
70      if (!tokenInput) return;
71
72      var submitter = e.submitter || lastSubmitter;
73
74      // Evita loop: al secondo giro lasciamo proseguire.
75      if (form.dataset.rbsRecaptchaReady === '1' && tokenInput.value) {
76        form.dataset.rbsRecaptchaReady = '';
77        return;
78      }
79
80      e.preventDefault();
81
82      if (form.dataset.rbsRecaptchaInProgress === '1') return;
83      form.dataset.rbsRecaptchaInProgress = '1';
84
85      var action = tokenInput.getAttribute('data-rbs-recaptcha-action') || 'custom';
86
87      if (DEBUG) {
88        // eslint-disable-next-line no-console
89        console.log('[rbs-recaptcha:v3] submit intercepted', { action: action, hasGrecaptcha: typeof grecaptcha !== 'undefined', submitterName: submitter && submitter.getAttribute ? submitter.getAttribute('name') : null });
90      }
91
92      if (typeof grecaptcha === 'undefined' || !grecaptcha.execute) {
93        // Se reCAPTCHA non è disponibile lasciamo fallire lato server con messaggio coerente.
94        form.dataset.rbsRecaptchaInProgress = '';
95        form.dataset.rbsRecaptchaReady = '1';
96        // Mantieni name/value del bottone submit (WooCommerce si aspetta "register"/"login")
97        addHiddenSubmitter(form, submitter);
98        if (form.requestSubmit && submitter) form.requestSubmit(submitter);
99        else form.submit();
100        return;
101      }
102
103      grecaptcha.ready(function () {
104        grecaptcha
105          .execute(RbsRecaptcha.siteKey, { action: action })
106          .then(function (token) {
107            if (DEBUG) {
108              // eslint-disable-next-line no-console
109              console.log('[rbs-recaptcha:v3] token received', { action: action, tokenLen: token ? token.length : 0 });
110            }
111            tokenInput.value = token;
112            ensureCompatTokenInput(form, token);
113            form.dataset.rbsRecaptchaInProgress = '';
114            form.dataset.rbsRecaptchaReady = '1';
115            addHiddenSubmitter(form, submitter);
116            if (form.requestSubmit && submitter) form.requestSubmit(submitter);
117            else form.submit();
118          })
119          .catch(function () {
120            if (DEBUG) {
121              // eslint-disable-next-line no-console
122              console.warn('[rbs-recaptcha:v3] grecaptcha.execute failed');
123            }
124            form.dataset.rbsRecaptchaInProgress = '';
125            form.dataset.rbsRecaptchaReady = '1';
126            addHiddenSubmitter(form, submitter);
127            if (form.requestSubmit && submitter) form.requestSubmit(submitter);
128            else form.submit();
129          });
130      });
131    });
132  }
133
134  function boot() {
135    if (!window.RbsRecaptcha || !RbsRecaptcha.siteKey) {
136      if (DEBUG) {
137        // eslint-disable-next-line no-console
138        console.warn('[rbs-recaptcha:v3] missing siteKey');
139      }
140      return;
141    }
142    findForms().forEach(bindForm);
143  }
144
145  if (document.readyState === 'loading') {
146    document.addEventListener('DOMContentLoaded', boot);
147  } else {
148    boot();
149  }
150})();
151
152

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.