Compare commits

..

No commits in common. "develop" and "r2025.9.6" have entirely different histories.

10 changed files with 8 additions and 72 deletions

View file

@ -3,10 +3,7 @@
SPDX-License-Identifier: AGPL-3.0-or-later SPDX-License-Identifier: AGPL-3.0-or-later
--> -->
<template> <template>
<section <section class="event">
class="event"
:class="{ cancelled: event.cancelled }"
>
<h3>{{ event.name }}</h3> <h3>{{ event.name }}</h3>
<p v-if=event.host> <p v-if=event.host>
Host: {{ event.host }} Host: {{ event.host }}
@ -39,12 +36,7 @@
<h4>Timeslots</h4> <h4>Timeslots</h4>
<ul> <ul>
<li <li v-for="slot in event.slots.values()" :key="slot.id">
v-for="slot in event.slots.values()"
:key="slot.id"
class="slot"
:class="{ cancelled: slot.cancelled }"
>
{{ formatTime(slot.start) }} - {{ formatTime(slot.end) }} {{ formatTime(slot.start) }} - {{ formatTime(slot.end) }}
<button <button
v-if="accountStore.valid && event.slots.size > 1" v-if="accountStore.valid && event.slots.size > 1"
@ -99,10 +91,6 @@ async function toggle(type: "event" | "slot", id: number, slotIds?: number[]) {
padding: 0.5rem; padding: 0.5rem;
border-radius: 0.5rem; border-radius: 0.5rem;
} }
.event.cancelled>*, .slot.cancelled {
text-decoration: line-through;
color: grey;
}
.event h3 { .event h3 {
margin: 0; margin: 0;
} }
@ -110,9 +98,7 @@ async function toggle(type: "event" | "slot", id: number, slotIds?: number[]) {
margin-block-start: 0.5rem; margin-block-start: 0.5rem;
} }
.event .notice { .notice {
text-decoration: none;
color: CanvasText;
display: flex; display: flex;
width: fit-content; width: fit-content;
gap: 0.5rem; gap: 0.5rem;

View file

@ -3,10 +3,7 @@
SPDX-License-Identifier: AGPL-3.0-or-later SPDX-License-Identifier: AGPL-3.0-or-later
--> -->
<template> <template>
<section <section class="eventSlot">
class="eventSlot"
:class="{ cancelled: slot.cancelled || event?.cancelled }"
>
<hgroup> <hgroup>
<h3>{{ event?.name }}</h3> <h3>{{ event?.name }}</h3>
<p> <p>
@ -78,10 +75,6 @@ function formatTime(time: DateTime) {
padding: 0.5rem; padding: 0.5rem;
border-radius: 0.5rem; border-radius: 0.5rem;
} }
.eventSlot.cancelled>* {
text-decoration: line-through;
color: grey;
}
.eventSlot h3 { .eventSlot h3 {
margin: 0; margin: 0;
} }
@ -89,9 +82,7 @@ function formatTime(time: DateTime) {
margin-block-start: 0.5rem; margin-block-start: 0.5rem;
} }
.eventSlot .notice { .notice {
text-decoration: none;
color: CanvasText;
display: flex; display: flex;
width: fit-content; width: fit-content;
gap: 0.5rem; gap: 0.5rem;

View file

@ -29,12 +29,6 @@
:after='event.crew ? "No" : "Yes"' :after='event.crew ? "No" : "Yes"'
:state :state
/> />
<DiffFieldString
title="Cancelled"
:before='event.serverCancelled ? "Yes" : "No"'
:after='event.cancelled ? "Yes" : "No"'
:state
/>
<DiffFieldString <DiffFieldString
title="Notice" title="Notice"
:before="event.serverNotice" :before="event.serverNotice"

View file

@ -24,12 +24,6 @@
:entities="schedule.locations" :entities="schedule.locations"
:state :state
/> />
<DiffFieldString
title="Cancelled"
:before='slot.serverCancelled ? "Yes" : "No"'
:after='slot.cancelled ? "Yes" : "No"'
:state
/>
<DiffFieldSetEntityId <DiffFieldSetEntityId
title="Assigned" title="Assigned"
:before="slot.serverAssigned" :before="slot.serverAssigned"

View file

@ -12,7 +12,6 @@
<th>duration</th> <th>duration</th>
<th>event</th> <th>event</th>
<th>location</th> <th>location</th>
<th title="cancelled">c</th>
<th>assigned</th> <th>assigned</th>
<th v-if="edit"></th> <th v-if="edit"></th>
</tr> </tr>
@ -51,7 +50,6 @@
/> />
</td> </td>
<td></td> <td></td>
<td></td>
<td> <td>
Add at Add at
<button <button
@ -99,11 +97,6 @@
v-model="es.slot.locationIds" v-model="es.slot.locationIds"
/> />
</td> </td>
<td>
<input
type="checkbox"
v-model="es.slot.cancelled">
</td>
<td> <td>
<SelectMultiEntity <SelectMultiEntity
:entities="usersStore.users" :entities="usersStore.users"
@ -156,7 +149,6 @@
/> />
</td> </td>
<td></td> <td></td>
<td></td>
<td colspan="2"> <td colspan="2">
<button <button
type="button" type="button"
@ -185,7 +177,6 @@
<td>{{ es.end.diff(es.start).toFormat('hh:mm') }}</td> <td>{{ es.end.diff(es.start).toFormat('hh:mm') }}</td>
<td>{{ es.event?.name }}</td> <td>{{ es.event?.name }}</td>
<td></td> <td></td>
<td>{{ es.slot.cancelled ? "x" : undefined }}</td>
<td><AssignedCrew :modelValue="es.slot.assigned" :edit="false" /></td> <td><AssignedCrew :modelValue="es.slot.assigned" :edit="false" /></td>
</template> </template>
</tr> </tr>

View file

@ -14,7 +14,6 @@
<th>notice</th> <th>notice</th>
<th>description</th> <th>description</th>
<th>p</th> <th>p</th>
<th title="cancelled">c</th>
<th>s</th> <th>s</th>
<th v-if="edit"></th> <th v-if="edit"></th>
</tr> </tr>
@ -70,13 +69,6 @@
@change="event.crew = !event.crew" @change="event.crew = !event.crew"
> >
</td> </td>
<td>
<input
type="checkbox"
:disabled="!canEdit(event)"
v-model="event.cancelled"
>
</td>
<td>{{ event.slots.size ? event.slots.size : "" }}</td> <td>{{ event.slots.size ? event.slots.size : "" }}</td>
<td> <td>
<button <button
@ -131,7 +123,6 @@
> >
</td> </td>
<td></td> <td></td>
<td></td>
<td> <td>
<button <button
v-if="eventExists(newEventName)" v-if="eventExists(newEventName)"

View file

@ -55,6 +55,7 @@ nav {
} }
.tab { .tab {
display: flex; display: flex;
flex-wrap: wrap;
} }
.tab.active { .tab.active {
padding-block-start: 1px; padding-block-start: 1px;
@ -64,7 +65,6 @@ nav {
} }
.tab .spacer { .tab .spacer {
flex: 1 0 0.75rem; flex: 1 0 0.75rem;
width: 0.75rem;
} }
.tab .flap, .tab .flap,
.tab .spacer { .tab .spacer {

View file

@ -102,11 +102,7 @@
v-for="cell, index in row" v-for="cell, index in row"
:key="index" :key="index"
:colSpan="cell.span" :colSpan="cell.span"
:class="{ :class='{"event": cell.slot, "crew": cell.event?.crew }'
event: cell.slot,
crew: cell.event?.crew,
cancelled: cell.event?.cancelled || cell.slot?.cancelled,
}"
:title="cell.event?.name" :title="cell.event?.name"
> >
{{ cell.event?.notice ? "⚠️" : undefined }} {{ cell.event?.notice ? "⚠️" : undefined }}
@ -795,9 +791,4 @@ tr.hours>th + th.dayShift div {
.event.crew { .event.crew {
background-color: color-mix(in oklab, var(--background), rgb(127, 127, 127) 60%); background-color: color-mix(in oklab, var(--background), rgb(127, 127, 127) 60%);
} }
.event.cancelled {
color: color-mix(in oklab, CanvasText, rgb(127, 127, 127) 80%);
text-decoration: line-through;
}
</style> </style>

View file

@ -43,7 +43,6 @@ export default defineEventHandler(async (event) => {
// Workaround to properly handle stream errors. See https://github.com/unjs/h3/issues/986 // Workaround to properly handle stream errors. See https://github.com/unjs/h3/issues/986
setHeader(event, "Access-Control-Allow-Origin", "*"); setHeader(event, "Access-Control-Allow-Origin", "*");
setHeader(event, "Content-Type", "text/event-stream"); setHeader(event, "Content-Type", "text/event-stream");
setHeader(event, "Cache-Control", "no-store");
pipeline(stream as unknown as NodeJS.ReadableStream, event.node.res, (err) => { /* ignore */ }); pipeline(stream as unknown as NodeJS.ReadableStream, event.node.res, (err) => { /* ignore */ });
event._handled = true; event._handled = true;
}); });

View file

@ -192,9 +192,8 @@ function sendEventToStream(stream: EventStream, event: ApiEvent) {
if (event.type === "session-expired") { if (event.type === "session-expired") {
if (stream.sessionId === event.sessionId) { if (stream.sessionId === event.sessionId) {
stream.close("session expired"); stream.close("session expired");
return false;
} }
return true; return false;
} }
// Account events are specially handled and only sent to the user they belong to. // Account events are specially handled and only sent to the user they belong to.