1/* Conta/registo (ex-inline em _account-modal.php). Gerado 2026-09-09. Lê MarcolinoI18n. */ 2 // Store tokens to prevent duplicates 3 var captchaTokens = { 4 login: '', 5 signup: '' 6 }; 7 8 function onTurnstileCallback(token) { 9 // Only update if token is different or empty 10 if (captchaTokens.signup !== token) { 11 captchaTokens.signup = token; 12 localStorage.setItem('captchaToken_signup', token); 13 $('#cf-turnstile-response').val(token); 14 } 15 } 16 17 function onLoginTurnstileCallback(token) { 18 // Only update if token is different or empty 19 if (captchaTokens.login !== token) { 20 captchaTokens.login = token; 21 localStorage.setItem('captchaToken_login', token); 22 $('#cf-turnstile-response-login').val(token); 23 } 24 } 25 26 // Initialize captcha fields with stored values if available 27 $(document).ready(function() { 28 if (captchaTokens.login) { 29 $('#cf-turnstile-response-login').val(captchaTokens.login); 30 } 31 32 if (captchaTokens.signup) { 33 $('#cf-turnstile-response').val(captchaTokens.signup); 34 } 35 }); 36 37 $('#core-customer--signup').on('submit', function(e) { 38 e.preventDefault(); 39 return false; 40 }); 41 42 // Validate form before submission 43 function validateSignupForm() { 44 let isValid = true; 45 46 // Clear previous error messages 47 $('.help-block').html(''); 48 49 // Check required input fields only 50 $('#core-customer--signup').find('select[aria-required="true"], input[aria-required="true"]').each(function() { 51 let field = $(this); 52 let formGroup = field.closest('.input-wrapper'); 53 let formGroupSelect = field.closest('.select-wrapper-login'); 54 if (!field.val()) { 55 // Handle error display for both regular inputs and select fields 56 if (formGroup.length) { 57 formGroup.parent().find('.help-block').html(MarcolinoI18n.blankFieldError); 58 formGroup.parent().addClass('has-error'); 59 } 60 61 if (formGroupSelect.length) { 62 formGroupSelect.parent().find('.help-block').html(MarcolinoI18n.blankFieldError); 63 formGroupSelect.parent().addClass('has-error'); 64 } 65 66 isValid = false; 67 } else { 68 // Clear error state if field has value 69 if (formGroup.length) { 70 formGroup.parent().removeClass('has-error'); 71 formGroup.parent().find('.help-block').html(''); 72 } 73 74 if (formGroupSelect.length) { 75 formGroupSelect.parent().removeClass('has-error'); 76 formGroupSelect.parent().find('.help-block').html(''); 77 } 78 } 79 }); 80 81 // Check terms & conditions checkbox 82 let termsField = $('#signupform-hasreadtc'); 83 if (termsField.length && !termsField.is(':checked')) { 84 termsField.closest('.form-group').find('.help-block').html(MarcolinoI18n.blankFieldError); 85 termsField.closest('.form-group').addClass('has-error'); 86 isValid = false; 87 } 88 89 // Check gender field 90 /* let genderSelected = $('input[name="SignupForm[gender]"]:checked').val(); 91 if (!genderSelected) { 92 $('input[name="SignupForm[gender]"]').closest('.form-group').find('.help-block').html(MarcolinoI18n.blankFieldError); 93 $('input[name="SignupForm[gender]"]').closest('.form-group').addClass('has-error'); 94 isValid = false; 95 }*/ 96 return isValid; 97 } 98 99 $(".registration-modal-btn").on('click', function (event) { 100 event.preventDefault(); 101 102 // Validate form before submission 103 if (!validateSignupForm()) { 104 return false; 105 } 106 107 var $btn = $(this); 108 if ($btn.prop('disabled')) { 109 return false;
110 } 111 $btn.prop('disabled', true); 112 113 /* let day = parseInt($('#signup-day').val()); 114 let month = parseInt($('#signup-month').val()); 115 let year = parseInt($('#signup-year').val()); 116 117 if (!isNaN(day) && !isNaN(month) && !isNaN(year)) { 118 var date = new Date(year, month - 1, day); 119 if (!(date.getFullYear() === year && date.getMonth() + 1 === month && date.getDate() === day)) { 120 toastr['error'](MarcolinoI18n.invalidDateError); 121 return false; 122 } 123 } else { 124 toastr['error'](MarcolinoI18n.invalidDateError); 125 turnstile.reset(); // Reset captcha 126 return false; 127 }*/ 128 129 // Submit via AJAX 130 $.ajax({ 131 url: $('#core-customer--signup').attr('action'), 132 type: 'POST', 133 data: $('#core-customer--signup').serialize(), 134 success: function(response) { 135 console.log(response); 136 if (response.status === 'success') { 137 toastr['success'](response.message); 138 $(document).trigger('registrationSuccess'); 139 if (response.redirect) { 140 window.location.href = response.redirect; 141 } 142 } else { 143 // Display field-specific errors if available 144 if (response.errors) { 145 $.each(response.errors, function(field, messages) { 146 if (Array.isArray(messages)) { 147 var errorMsg = messages.join('<br>'); 148 } else { 149 var errorMsg = messages; 150 } 151 $('#signupform-' + field.toLowerCase()).closest('.form-group').find('.help-block').html(errorMsg); 152 }); 153 } 154 toastr['error'](response.message || 'Ocorreu um erro ao processar o seu pedido.'); 155 } 156 }, 157 error: function() { 158 toastr['error']('Ocorreu um erro ao processar o seu pedido. Por favor, tente novamente.'); 159 }, 160 complete: function() { 161 $btn.prop('disabled', false); 162 } 163 }); 164 165 return false; 166 });
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.