// Page Projet — écritures de jalons (0.35.0, issue #26). // Les formulaires data-ms-form sont interceptés : POST vers // l'API Kanbante (qui écrit dans la forge), puis rechargement // pour refléter l'état réel. (() => { const csrf = document.querySelector('meta[name="csrf-token"]')?.content || ''; document.querySelectorAll('form[data-ms-form]').forEach((form) => { form.addEventListener('submit', async (e) => { e.preventDefault(); const confirmMsg = form.dataset.confirm; if (confirmMsg && !window.confirm(confirmMsg)) return; const fd = new FormData(form); fd.append('csrf_token', csrf); const btn = form.querySelector('button[type="submit"]'); if (btn) btn.disabled = true; try { const r = await fetch(form.dataset.action, { method: 'POST', body: fd }); const data = await r.json().catch(() => ({})); if (!r.ok || !data.ok) throw new Error(data.error || ('HTTP ' + r.status)); window.location.reload(); } catch (err) { if (btn) btn.disabled = false; window.alert('❌ ' + err.message); } }); }); })();