document.addEventListener('DOMContentLoaded', function() { // Initialisation de l'éditeur Quill const quill = new Quill('#editor', { theme: 'snow', modules: { toolbar: [ [{ 'header': [1, 2, 3, false] }], ['bold', 'italic', 'underline'], [{ 'list': 'ordered'}, { 'list': 'bullet' }], ['link', 'blockquote'], ['clean'] ] } }); // Gestion du tri des chapitres const chaptersList = document.getElementById('chaptersList'); if (chaptersList) { new Sortable(chaptersList, { animation: 150, handle: '.chapter-number', onEnd: updateChaptersOrder }); } // Gestion des événements const modal = document.getElementById('chapterEditor'); const addChapterBtn = document.getElementById('addChapter'); const saveChapterBtn = document.getElementById('saveChapter'); const cancelEditBtn = document.getElementById('cancelEdit'); let currentEditingChapter = null; if (addChapterBtn) { addChapterBtn.addEventListener('click', () => { currentEditingChapter = null; document.getElementById('chapterTitle').value = ''; quill.setContents([]); modal.style.display = 'block'; }); } // Sauvegarde d'un chapitre if (saveChapterBtn) { saveChapterBtn.addEventListener('click', async () => { const title = document.getElementById('chapterTitle').value; const content = quill.root.innerHTML; const storyId = document.querySelector('input[name="id"]').value; try { const response = await fetch('api/save-chapter.php', { method: 'POST', headers: { 'Content-Type': 'application/json', }, body: JSON.stringify({ storyId, chapterId: currentEditingChapter, title, content }) }); if (response.ok) { window.location.reload(); } else { throw new Error('Erreur lors de la sauvegarde'); } } catch (error) { alert('Erreur lors de la sauvegarde du chapitre'); } }); } // Fermeture du modal if (cancelEditBtn) { cancelEditBtn.addEventListener('click', () => { modal.style.display = 'none'; }); } // Écoute des clics sur la liste des chapitres if (chaptersList) { chaptersList.addEventListener('click', (e) => { if (e.target.matches('.delete-chapter')) { if (confirm('Voulez-vous vraiment supprimer ce chapitre ?')) { const chapterId = e.target.closest('.chapter-item').dataset.id; deleteChapter(chapterId); } } else if (e.target.matches('.chapter-title')) { const chapterItem = e.target.closest('.chapter-item'); currentEditingChapter = chapterItem.dataset.id; document.getElementById('chapterTitle').value = e.target.value; quill.root.innerHTML = chapterItem.querySelector('.editor').innerHTML; modal.style.display = 'block'; } }); } }); // Mise à jour de l'ordre des chapitres async function updateChaptersOrder() { const chapters = Array.from(document.querySelectorAll('.chapter-item')) .map((item, index) => ({ id: item.dataset.id, order: index })); try { const response = await fetch('api/update-chapters-order.php', { method: 'POST', headers: { 'Content-Type': 'application/json', }, body: JSON.stringify(chapters) }); if (!response.ok) { throw new Error('Erreur lors de la mise à jour'); } } catch (error) { alert('Erreur lors de la mise à jour de l\'ordre des chapitres'); } } // Suppression d'un chapitre async function deleteChapter(chapterId) { try { const response = await fetch('api/delete-chapter.php', { method: 'POST', headers: { 'Content-Type': 'application/json', }, body: JSON.stringify({ chapterId }) }); if (response.ok) { window.location.reload(); } else { throw new Error('Erreur lors de la suppression'); } } catch (error) { alert('Erreur lors de la suppression du chapitre'); } }