document.addEventListener('DOMContentLoaded', function () { // Confirmation data-confirm sur les formulaires (evite confirm() inline bloqué par CSP) document.querySelectorAll('form[data-confirm]').forEach(function (form) { form.addEventListener('submit', function (e) { var msg = form.getAttribute('data-confirm') || 'Confirmer ?'; if (!window.confirm(msg)) { e.preventDefault(); } }); }); // Boutons data-confirm-discard (évite onclick inline bloqué par CSP) document.querySelectorAll('[data-confirm-discard]').forEach(function (btn) { btn.addEventListener('click', function () { var msg = btn.getAttribute('data-confirm-msg') || 'Confirmer ?'; if (window.confirm(msg)) { window.location = btn.getAttribute('data-discard-url'); } }); }); // Sélection globale articles var checkAll = document.getElementById('check-all'); if (checkAll) { checkAll.addEventListener('change', function () { document.querySelectorAll('.bulk-check').forEach(function (cb) { cb.checked = checkAll.checked; }); }); } // Clic sur la ligne entière pour cocher/décocher la case de sélection document.querySelectorAll('table tbody tr').forEach(function (tr) { var cb = tr.querySelector('.bulk-check'); if (!cb) { return; } tr.style.cursor = 'pointer'; tr.addEventListener('click', function (e) { if (e.target.closest('a, button, input, label')) { return; } cb.checked = !cb.checked; if (checkAll) { var total = document.querySelectorAll('.bulk-check').length; var checked = document.querySelectorAll('.bulk-check:checked').length; checkAll.checked = total > 0 && checked === total; checkAll.indeterminate = checked > 0 && checked < total; } }); }); // Indicateurs de traitement formulaire SMTP (config + tester connexion) var smtpForm = document.getElementById('smtp-config-form'); if (smtpForm) { smtpForm.addEventListener('submit', function (e) { var clicked = e.submitter; if (!clicked) return; smtpForm.querySelectorAll('button[type="submit"]').forEach(function (btn) { btn.disabled = true; }); var isSave = clicked.id === 'smtp-save-btn'; clicked.innerHTML = '' + (isSave ? 'Enregistrement…' : 'En cours…'); }); } // Indicateur de traitement envoi email de test var smtpTestForm = document.getElementById('smtp-test-form'); if (smtpTestForm) { smtpTestForm.addEventListener('submit', function () { var btn = document.getElementById('smtp-send-btn'); if (btn) { btn.disabled = true; btn.innerHTML = 'En cours…'; } }); } // Suppression groupée avec confirmation (remplace onclick inline) var bulkDeleteBtn = document.getElementById('bulk-delete-btn'); if (bulkDeleteBtn) { bulkDeleteBtn.addEventListener('click', function (e) { var checked = document.querySelectorAll('.bulk-check:checked').length; if (checked === 0) { e.preventDefault(); return; } var msg = bulkDeleteBtn.getAttribute('data-confirm-bulk') || 'Confirmer ?'; if (!window.confirm(msg)) { e.preventDefault(); } }); } // Ajout d'un article à un livre (remplace onchange="bookAddArticle(this)") var bookArticleSel = document.getElementById('book-article-select'); if (bookArticleSel) { bookArticleSel.addEventListener('change', function () { var slug = bookArticleSel.value; if (!slug) { return; } var ta = document.getElementById('book-articles-ta'); var lines = ta.value.split('\n').map(function (s) { return s.trim(); }).filter(Boolean); if (lines.indexOf(slug) === -1) { lines.push(slug); ta.value = lines.join('\n'); } bookArticleSel.value = ''; }); // Filtre texte en temps réel pour le sélecteur d'articles var bookFilter = document.getElementById('book-article-filter'); if (bookFilter) { var bookOptions = Array.from(bookArticleSel.options); bookFilter.addEventListener('input', function () { var q = bookFilter.value.trim().toLowerCase(); bookArticleSel.innerHTML = ''; bookOptions.forEach(function (opt) { if (opt.value === '' || q === '' || opt.textContent.toLowerCase().includes(q)) { bookArticleSel.appendChild(opt.cloneNode(true)); } }); }); } } // Slug auto pour la création d'un livre var newBookTitle = document.getElementById('new-book-title'); var newBookSlugPreview = document.getElementById('new-book-slug-preview'); var newBookSlugHidden = document.getElementById('new-book-slug-hidden'); if (newBookTitle && newBookSlugPreview && newBookSlugHidden) { function toBookSlug(s) { var map = { 'à':'a','â':'a','ä':'a','é':'e','è':'e','ê':'e','ë':'e','î':'i','ï':'i','ô':'o','ö':'o','ù':'u','û':'u','ü':'u','ç':'c','æ':'ae','œ':'oe' }; s = s.toLowerCase().replace(/[àâäéèêëîïôöùûüçæœ]/g, function (c) { return map[c] || c; }); return s.replace(/[^a-z0-9]+/g, '-').replace(/^-|-$/g, ''); } newBookTitle.addEventListener('input', function () { var slug = toBookSlug(newBookTitle.value); newBookSlugPreview.value = slug; newBookSlugHidden.value = slug; }); } });