diff --git a/public/js/setlistEditor.js b/public/js/setlistEditor.js
index a3ba35c..c95a671 100644
--- a/public/js/setlistEditor.js
+++ b/public/js/setlistEditor.js
@@ -14,6 +14,7 @@ function createSetlistEditor({
let setlist = null;
let mainRows = [];
let encoreRows = [];
+ let actionsRevealed = false;
function formatDate(dateStr) {
const d = new Date(dateStr);
@@ -34,10 +35,11 @@ function createSetlistEditor({
const rowHtml = (s) => `
${escapeHtml(s.title)} — ${escapeHtml(s.artist)} ${s.note ? `${escapeHtml(s.note)} ` : ''} `;
const playlistUrl = youtubePlaylistUrl([...main, ...encore].map((s) => s.youtube_url).filter(Boolean));
return `
-
+
${escapeHtml(setlist.name || 'Concert')}
${escapeHtml(setlist.venue || '')} · ${formatDate(setlist.concert_date)}
- ${playlistUrl ? `
` : ''}
+ ${playlistUrl ? `
` : ''}
+
${actionsRevealed ? 'Cliquer pour masquer les actions' : 'Cliquer pour modifier ou supprimer'}
Setlist
@@ -47,10 +49,11 @@ function createSetlistEditor({
Rappel
${encore.length ? `
${encore.map(rowHtml).join('')} ` : '
Aucun morceau de rappel prévu.
'}
+ ${actionsRevealed ? `
Modifier
${allowDelete ? 'Supprimer ce concert ' : ''}
-
+
` : ''}
`;
}
@@ -63,9 +66,16 @@ function createSetlistEditor({
return;
}
container().innerHTML = readOnlyView();
- document.getElementById('edit-btn').addEventListener('click', enterEditMode);
+ document.getElementById('concert-summary-card').addEventListener('click', () => {
+ actionsRevealed = !actionsRevealed;
+ renderReadOnly();
+ });
+ const playlistLink = document.getElementById('playlist-link');
+ if (playlistLink) playlistLink.addEventListener('click', (e) => e.stopPropagation());
+ const editBtn = document.getElementById('edit-btn');
+ if (editBtn) editBtn.addEventListener('click', (e) => { e.stopPropagation(); enterEditMode(); });
const deleteBtn = document.getElementById('delete-btn');
- if (deleteBtn) deleteBtn.addEventListener('click', onDelete);
+ if (deleteBtn) deleteBtn.addEventListener('click', (e) => { e.stopPropagation(); onDelete(); });
}
async function onDelete() {
@@ -158,6 +168,7 @@ function createSetlistEditor({
}
function enterEditMode() {
+ actionsRevealed = false;
mainRows = setlist.songs
.filter((s) => !s.is_encore)
.map((s) => ({ setlistSongId: s.id, songId: s.song_id, title: s.title, artist: s.artist, note: s.note }));
@@ -181,6 +192,8 @@ function createSetlistEditor({
const name = form.name.value.trim();
const venue = form.venue.value.trim();
const concertDate = form.concertDate.value;
+ const submitBtn = form.querySelector('button[type="submit"]');
+ submitBtn.disabled = true;
try {
if (setlist) {
setlist = await api.patch(`/api/setlists/${setlist.id}`, { name, venue, concertDate });
@@ -192,6 +205,7 @@ function createSetlistEditor({
enterEditMode();
} catch (err) {
showError(err.message);
+ submitBtn.disabled = false;
}
});
}
@@ -271,6 +285,7 @@ function createSetlistEditor({
async load() {
try {
setlist = await getSetlist();
+ actionsRevealed = false;
renderReadOnly();
} catch (err) {
showError(err.message);