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 ? `
    ${allowDelete ? '' : ''} -
    +
    ` : ''} `; } @@ -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);