Ansico-CV-Blocks/frontend.js
2026-04-13 03:48:00 +00:00

51 lines
3 KiB
JavaScript

document.addEventListener('DOMContentLoaded', function() {
const forms = document.querySelectorAll('.cv-contactform form');
forms.forEach(form => {
form.addEventListener('submit', function(e) {
e.preventDefault();
const btn = form.querySelector('button[type="submit"]');
const feedback = form.parentElement.querySelector('.cv-contactform-feedback');
const originalBtnText = btn.innerText;
const receiver = form.getAttribute('data-receiver');
if (!receiver) { alert('Receiver email missing.'); return; }
const expectedAnswer = form.getAttribute('data-control-answer');
if (expectedAnswer && form.querySelector('[name="cv-control"]').value.trim().toLowerCase() !== expectedAnswer.trim().toLowerCase()) { alert('Incorrect answer.'); return; }
btn.innerText = 'Sending...'; btn.disabled = true;
const data = { receiver: receiver, name: form.querySelector('[name="cv-name"]').value, email: form.querySelector('[name="cv-email"]').value, subject: form.querySelector('[name="cv-subject"]').value, message: form.querySelector('[name="cv-message"]').value };
fetch('/wp-json/cv-blocks/v1/send-message', { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify(data) }).then(res => res.json()).then(res => {
if (res.success) { form.style.display = 'none'; feedback.innerHTML = '<div class="cv-success-msg">' + (form.getAttribute('data-success') || 'Sent!') + '</div>'; feedback.style.display = 'block'; }
else { alert('Error.'); btn.innerText = originalBtnText; btn.disabled = false; }
});
});
});
const tocBlocks = document.querySelectorAll('.cv-toc');
if (tocBlocks.length > 0) {
const contentBlocks = document.querySelectorAll('.cv-contentblock');
tocBlocks.forEach(container => {
let hasItems = false;
const ul = document.createElement('ul');
ul.className = 'cv-toc-list';
contentBlocks.forEach((b, i) => {
if (b.getAttribute('data-include-toc') === 'false') return;
const h = b.querySelector('.cv-contentblock-heading');
if (!h || !h.textContent.trim()) return;
if (b.classList.contains('cv-toc')) return;
if (!b.id) b.id = 'cv-sec-' + i;
const li = document.createElement('li');
const a = document.createElement('a');
a.href = '#' + b.id;
a.textContent = h.textContent;
a.onclick = (e) => { e.preventDefault(); document.getElementById(b.id).scrollIntoView({ behavior: 'smooth' }); };
li.appendChild(a);
ul.appendChild(li);
hasItems = true;
});
if (hasItems) {
container.appendChild(ul);
container.style.display = 'block';
} else {
container.style.display = 'none';
}
});
}
});