PageSourceSearch

https://www.ravenferramentas.com.br/wp-content/themes/sync360/publ…/shortcode-member-profile.js?ver=1776176873

js ravenferramentas.com.br collected 2026-09-24 13:29:38 UTC 4,466 bytes, 104 lines download raw bytes

1document.addEventListener('DOMContentLoaded', function () {
2  const forms = document.querySelectorAll('.js-member-profile-form');
3  if (!forms.length) return;
4
5  forms.forEach((form) => {
6    const submitButton = form.querySelector('button[type="submit"], input[type="submit"]');
7    const messageBox = form.querySelector('.form-messages') || (() => {
8      const el = document.createElement('div');
9      el.className = 'form-messages';
10      form.appendChild(el);
11      return el;
12    })();
13
14    form.addEventListener('submit', async function (e) {
15      e.preventDefault();
16
17      const name = (form.querySelector('[name="name"]')?.value || '').trim();
18      const email = (form.querySelector('[name="email"]')?.value || '').trim();
19      const phone = (form.querySelector('[name="phone"]')?.value || '').trim();
20      const old_password = (form.querySelector('[name="old_password"]')?.value || '');
21      const new_password = (form.querySelector('[name="new_password"]')?.value || '');
22      const confirm_password = (form.querySelector('[name="confirm_password"]')?.value || '');
23
24      const restUrl = form.dataset.restUrl || '/wp-json/sync360/v1/member-profile';
25      const restNonce = form.dataset.restNonce || '';
26
27      if (!name || !email || !phone) {
28        messageBox.style.display = 'block';
29        messageBox.innerHTML = '<p style="color:red">Preencha todos os campos.</p>';
30        return;
31      }
32
33      const wantsPasswordChange = !!(old_password || new_password || confirm_password);
34      if (wantsPasswordChange) {
35        const pwErrors = [];
36        if (!old_password) pwErrors.push('Informe a senha atual.');
37        if (!new_password) pwErrors.push('Informe a nova senha.');
38        if (new_password && new_password.length < 8) pwErrors.push('A nova senha deve ter pelo menos 8 caracteres.');
39        if (new_password !== confirm_password) pwErrors.push('A confirmação de senha não confere.');
40        if (pwErrors.length) {
41          messageBox.style.display = 'block';
42          messageBox.innerHTML = pwErrors.map((m) => `<p style="color:red">${m}</p>`).join('');
43          return;
44        }
45      }
46
47      // Initial feedback
48      if (submitButton) {
49        submitButton.disabled = true;
50        submitButton.dataset._originalText = submitButton.textContent;
51        submitButton.textContent = 'Salvando...';
52      }
53      messageBox.innerHTML = '';
54      messageBox.style.display = 'none';
55
56      try {
57        const payload = { name, email, phone };
58        if (wantsPasswordChange) {
59          payload.old_password = old_password;
60          payload.new_password = new_password;
61          payload.confirm_password = confirm_password;
62        }
63
64        const response = await fetch(restUrl, {
65          method: 'POST',
66          credentials: 'same-origin',
67          headers: {
68            'Content-Type': 'application/json',
69            ...(restNonce ? { 'X-WP-Nonce': restNonce } : {}),
70          },
71          body: JSON.stringify(payload),
72        });
73
74        const result = await response.json().catch(() => ({}));
75        messageBox.style.display = 'block';
76
77        if (response.ok && result && result.success) {
78          let msg = 'Perfil atualizado com sucesso.';
79          if (result.password_updated) {
80            msg += ' Sua senha foi alterada. Você pode precisar entrar novamente.';
81            if (form.querySelector('[name="old_password"]')) form.querySelector('[name="old_password"]').value = '';
82            if (form.querySelector('[name="new_password"]')) form.querySelector('[name="new_password"]').value = '';
83            if (form.querySelector('[name="confirm_password"]')) form.querySelector('[name="confirm_password"]').value = '';
84          }
85          messageBox.innerHTML = `<p style="color:green">${msg}</p>`;
86        } else if (result && result.errors) {
87          messageBox.innerHTML = result.errors.map((msg) => `<p style="color:red">${msg}</p>`).join('');
88        } else {
89          messageBox.innerHTML = '<p style="color:red">Não foi possível atualizar o perfil.</p>';
90        }
91      } catch (err) {
92        console.error(err);
93        messageBox.style.display = 'block';
94        messageBox.innerHTML = '<p style="color:red">Erro ao conectar com o servidor.</p>';
95      } finally {
96        if (submitButton) {
97          submitButton.disabled = false;
98          submitButton.textContent = submitButton.dataset._originalText || 'Salvar alterações';
99        }
100      }
101    });
102  });
103});
104

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.