Compare commits
No commits in common. "develop" and "r2025.9.6" have entirely different histories.
10 changed files with 8 additions and 72 deletions
|
@ -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;
|
||||||
|
|
|
@ -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;
|
||||||
|
|
|
@ -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"
|
||||||
|
|
|
@ -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"
|
||||||
|
|
|
@ -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>
|
||||||
|
|
|
@ -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)"
|
||||||
|
|
|
@ -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 {
|
||||||
|
|
|
@ -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>
|
||||||
|
|
|
@ -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;
|
||||||
});
|
});
|
||||||
|
|
|
@ -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.
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue