51 lines
3 KiB
JavaScript
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';
|
|
}
|
|
});
|
|
}
|
|
});
|