Lectures/assets/js/story-edit.js

144 lines
4.7 KiB
JavaScript
Raw Normal View History

2025-02-14 18:15:23 +01:00
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');
}
}