?
| Current Path : /home/webyoo/www/bat-mitsva-romy/ |
| Current File : /home/webyoo/www/bat-mitsva-romy/rsvp.js |
// Compte à rebours dynamique : 7 juin 2026, 19h45 heure d'Israël (UTC+3 → 16:45 UTC)
const cible = new Date('2026-06-07T16:45:00Z').getTime();
const elJ = document.getElementById('cd-j');
const elH = document.getElementById('cd-h');
const elM = document.getElementById('cd-m');
const elS = document.getElementById('cd-s');
const pad = n => (n < 10 ? '0' + n : '' + n);
function maj(){
let d = cible - Date.now();
if(d <= 0){ elJ.textContent='00';elH.textContent='00';elM.textContent='00';elS.textContent='00';return; }
const j = Math.floor(d / 86400000); d -= j*86400000;
const h = Math.floor(d / 3600000); d -= h*3600000;
const m = Math.floor(d / 60000); d -= m*60000;
const s = Math.floor(d / 1000);
elJ.textContent = pad(j);
elH.textContent = pad(h);
elM.textContent = pad(m);
elS.textContent = pad(s);
}
maj();
setInterval(maj, 1000);
// ==== Formulaire RSVP : envoi AJAX vers Web3Forms (en JSON pour préserver l'UTF-8) ====
const formRsvp = document.getElementById('form-rsvp');
if(formRsvp){
formRsvp.addEventListener('submit', async (e)=>{
e.preventDefault();
const btn = formRsvp.querySelector('.btn');
const oldHtml = btn.innerHTML;
btn.disabled = true;
btn.innerHTML = '<span class="btn-fr">ENVOI EN COURS…</span><span class="btn-he">שולח…</span>';
try {
const formData = new FormData(formRsvp);
const payload = Object.fromEntries(formData.entries());
const resp = await fetch('https://api.web3forms.com/submit', {
method: 'POST',
headers: {
'Content-Type': 'application/json; charset=UTF-8',
'Accept': 'application/json'
},
body: JSON.stringify(payload)
});
const json = await resp.json();
if(resp.ok && json.success){
document.getElementById('rsvp-form').classList.add('envoye');
document.getElementById('merci').scrollIntoView({ behavior:'smooth', block:'center' });
} else {
throw new Error(json.message || 'Réponse non-OK');
}
} catch(err){
alert("Désolé, l'envoi a échoué. Merci de réessayer ou de contacter Sarah directement.\n\nמצטערים, השליחה נכשלה. נסו שוב או פנו ישירות לשרה.");
btn.disabled = false;
btn.innerHTML = oldHtml;
}
});
}
// ==== Mode CALIBRATION (?cal=1) ====
if(new URLSearchParams(location.search).has('cal')){
document.body.classList.add('cal');
const carte = document.querySelector('.invitation');
const cibles = document.querySelectorAll('.overlay');
const panel = document.createElement('div');
panel.id = 'cal-panel';
panel.innerHTML = '<b>MODE CALIBRATION</b><br>Glisse les blocs pour les positionner.<br><button id="cal-copy">Copier les valeurs CSS</button><pre id="cal-output"></pre>';
document.body.appendChild(panel);
const out = panel.querySelector('#cal-output');
function refresh(){
let txt = '';
cibles.forEach(el=>{
const cls = [...el.classList].find(c=>c.startsWith('bloc-'));
const r = el.getBoundingClientRect();
const p = carte.getBoundingClientRect();
const left = ((r.left - p.left) / p.width * 100).toFixed(2);
const top = ((r.top - p.top ) / p.height * 100).toFixed(2);
const width = (r.width / p.width * 100).toFixed(2);
const height = (r.height / p.height * 100).toFixed(2);
txt += '.' + cls + ' { left:' + left + '%; top:' + top + '%; width:' + width + '%; height:' + height + '%; }\n';
});
out.textContent = txt;
}
function startDrag(el, e, mode){
e.preventDefault(); e.stopPropagation();
const startX = e.clientX, startY = e.clientY;
const r = el.getBoundingClientRect();
const p = carte.getBoundingClientRect();
const startLeft = r.left - p.left;
const startTop = r.top - p.top;
const startW = r.width;
const startH = r.height;
function move(ev){
const dx = ev.clientX - startX, dy = ev.clientY - startY;
if(mode === 'move'){
el.style.left = ((startLeft + dx) / p.width * 100) + '%';
el.style.top = ((startTop + dy) / p.height * 100) + '%';
} else {
el.style.width = ((startW + dx) / p.width * 100) + '%';
el.style.height = ((startH + dy) / p.height * 100) + '%';
}
refresh();
}
function up(){
window.removeEventListener('mousemove', move);
window.removeEventListener('mouseup', up);
}
window.addEventListener('mousemove', move);
window.addEventListener('mouseup', up);
}
cibles.forEach(el=>{
el.addEventListener('mousedown', e=>{
const r = el.getBoundingClientRect();
const inHandle = (e.clientX > r.right - 22) && (e.clientY > r.bottom - 22);
startDrag(el, e, inHandle ? 'resize' : 'move');
});
el.querySelectorAll('a').forEach(a=>{
a.addEventListener('click', e=>e.preventDefault());
});
});
panel.querySelector('#cal-copy').addEventListener('click', ()=>{
navigator.clipboard.writeText(out.textContent);
panel.querySelector('#cal-copy').textContent = '✓ Copié !';
setTimeout(()=>panel.querySelector('#cal-copy').textContent='Copier les valeurs CSS', 1500);
});
refresh();
window.addEventListener('resize', refresh);
}