diff --git a/Dockerfile b/Dockerfile index e711b8d..cbc5331 100644 --- a/Dockerfile +++ b/Dockerfile @@ -5,4 +5,4 @@ RUN npm install --omit=dev COPY . . ENV NODE_ENV=production EXPOSE 3000 -CMD ["node", "src/server.js"] +CMD ["sh", "-c", "npm run migrate && node src/server.js"] diff --git a/public/css/style.css b/public/css/style.css index 769fd43..903b119 100644 --- a/public/css/style.css +++ b/public/css/style.css @@ -1528,6 +1528,13 @@ button.calendar-filters-close { display: none; } .rehearsal-row:last-child { border-bottom: none; } +.rehearsal-row.highlight { + outline: 2px solid var(--accent); + outline-offset: 4px; + border-radius: 4px; + transition: outline-color 3s ease; +} + .rehearsal-actions { display: flex; align-items: center; diff --git a/public/js/admin.js b/public/js/admin.js index b117c36..5ed8796 100644 --- a/public/js/admin.js +++ b/public/js/admin.js @@ -189,6 +189,7 @@ async function loadSlotSettingsForm() { form.marginMinutes.value = settings.marginMinutes; form.concertStart.value = settings.concertStart; form.concertEnd.value = settings.concertEnd; + form.rehearsalConfirmThreshold.value = settings.rehearsalConfirmThreshold; } async function onSaveSlotSettings(e) { @@ -205,6 +206,7 @@ async function onSaveSlotSettings(e) { marginMinutes: parseInt(form.marginMinutes.value, 10), concertStart: form.concertStart.value, concertEnd: form.concertEnd.value, + rehearsalConfirmThreshold: parseInt(form.rehearsalConfirmThreshold.value, 10), }); statusEl.textContent = 'Horaires enregistrés.'; } catch (err) { @@ -267,6 +269,14 @@ async function onSaveSlotSettings(e) { Comme la date d'un concert n'a pas d'heure enregistrée, ces horaires sont utilisés pour pré-remplir les liens « ajouter à mon agenda » sur /calendar.html et /concerts.html.

+ +

+ Une répétition proposée reste une « suggestion » tant que ce nombre de votes « accepter » + n'est pas atteint ; elle passe ensuite en répétition confirmée (dans l'application et dans le + flux ICS). +

diff --git a/public/js/calendar.js b/public/js/calendar.js index 564a3ce..70becf3 100644 --- a/public/js/calendar.js +++ b/public/js/calendar.js @@ -104,11 +104,17 @@ function concertLinksHtml(concert) { `; } +function rehearsalStatusLabel(r) { + if (r.status === 'confirmed') return 'Répétition confirmée'; + const accepted = r.votes.filter((v) => v.vote === 'accept').length; + return `Suggestion de répétition (${accepted}/${r.confirmThreshold} votes)`; +} + function rehearsalInfoHtml(r) { const linkArgs = { uid: `rehearsal-${r.id}`, title: 'Répétition Octane', startISO: r.startsAt, endISO: r.endsAt, location: r.location }; return `