From 633ee048503ced01e83933b55a6581c688d296d7 Mon Sep 17 00:00:00 2001 From: tree Date: Wed, 1 Jun 2022 03:06:46 +0200 Subject: [PATCH] Add legend to program, various fixes --- src/lib/Event.svelte | 2 +- src/lib/EventSchedule.svelte | 14 +++++-- src/lib/api.js | 8 ++-- src/lib/config.js | 33 +++++++++++++++ src/routes/program.svelte | 69 ++++++++++++++++++------------- src/routes/seznam-udalosti.svelte | 10 +++-- src/routes/tv.svelte | 27 +++++++----- src/routes/vstupenky.svelte | 2 +- 8 files changed, 115 insertions(+), 50 deletions(-) create mode 100644 src/lib/config.js diff --git a/src/lib/Event.svelte b/src/lib/Event.svelte index d08c4a8..b297e70 100644 --- a/src/lib/Event.svelte +++ b/src/lib/Event.svelte @@ -85,7 +85,7 @@
{#if schedule && !hideDate} - + {/if} {#if duration}
{duration}m
{/if} {#if e.track} diff --git a/src/lib/EventSchedule.svelte b/src/lib/EventSchedule.svelte index 1e2e3d5..3d6bb98 100644 --- a/src/lib/EventSchedule.svelte +++ b/src/lib/EventSchedule.svelte @@ -9,11 +9,19 @@ ? bundle.spec.stages.find((s) => s.id === item.stage) : null; - $: start = typeof(item.period.start) === 'string' ? new Date(item.period.start) : item.period.start - $: end = typeof(item.period.end) === 'string' ? new Date(item.period.end) : item.period.end + $: start = + typeof item.period.start === "string" + ? new Date(item.period.start) + : item.period.start; + $: end = + typeof item.period.end === "string" + ? new Date(item.period.end) + : item.period.end;
{formatCET(start, "yyyy-MM-dd") === "2022-06-04" ? "SO" : "NE"} - {formatCET(start, "HH:mm")}-{formatCET(end, "HH:mm")} ({stage ? stage.name : "n/a"}) @{item.id} + {formatCET(start, "HH:mm")}-{formatCET(end, "HH:mm")} ({stage + ? stage.name + : "n/a"}) @{item.id}
diff --git a/src/lib/api.js b/src/lib/api.js index 0bc88e8..86f7385 100644 --- a/src/lib/api.js +++ b/src/lib/api.js @@ -37,9 +37,11 @@ class API { description: sp.desc } }) - const schedule = this.bundle.schedule.find(s => s.event === ev.id) - if (schedule) { - ev.scheduleId = '@' + schedule.id + if (this.bundle.schedule) { + const schedule = this.bundle.schedule.find(s => s.event === ev.id) + if (schedule) { + ev.scheduleId = '@' + schedule.id + } } } } diff --git a/src/lib/config.js b/src/lib/config.js new file mode 100644 index 0000000..e07472a --- /dev/null +++ b/src/lib/config.js @@ -0,0 +1,33 @@ + +export const EventTypes = { + panel: { + color: 'bg-orange-400', + colorLight: 'bg-orange-400/20', + colorDark: 'bg-orange-400/40' + }, + talk: { + color: 'bg-custom-green', + colorLight: 'bg-custom-green/20', + colorDark: 'bg-custom-green/40' + }, + workshop: { + color: 'bg-custom-blue', + colorLight: 'bg-custom-blue/20', + colorDark: 'bg-custom-blue/40' + }, + campfire: { + color: 'bg-purple-400', + colorLight: 'bg-purple-400/20', + colorDark: 'bg-purple-400/40' + }, + 'lightning-series': { + color: 'bg-yellow-400', + colorLight: 'bg-yellow-400/20', + colorDark: 'bg-yellow-400/40' + }, + other: { + color: 'bg-rose-400', + colorLight: 'bg-rose-400/20', + colorDark: 'bg-rose-400/40' + } +} diff --git a/src/routes/program.svelte b/src/routes/program.svelte index 4776b4c..df457d4 100644 --- a/src/routes/program.svelte +++ b/src/routes/program.svelte @@ -7,10 +7,11 @@ import { goto } from "$app/navigation"; import { page } from "$app/stores"; import { format, compareAsc, compareDesc } from "date-fns"; - import { formatCET } from '$lib/utils.js'; + import { formatCET } from "$lib/utils.js"; import { bundle, userData, loadInfo, schedulePref } from "$lib/stores.js"; import { parsePeriod } from "$lib/periods.js"; - import { cs } from "date-fns/locale/index.js" + import { cs } from "date-fns/locale/index.js"; + import { EventTypes } from "$lib/config.js"; import SvelteMarkdown from "svelte-markdown"; import SvelteTooltip from "$lib/SvelteTooltip.svelte"; const renderers = { link: Link }; @@ -228,6 +229,16 @@ return "border border-blue-web/50"; } + $: eventTypes = $bundle && $bundle.spec ? extendEventTypes($bundle) : []; + + function extendEventTypes(bundle) { + return bundle.spec["event-types"] + .map((et) => { + return Object.assign({}, et, EventTypes[et.id]); + }) + .filter((et) => !et.hidden); + } + function isPeriodOverlap(x, y) { const xstart = new Date(x.start); const xend = new Date(x.end); @@ -274,25 +285,9 @@ console.log(`Event not found: ${eventId}`); return null; } - switch (ev.type) { - case "panel": - ev.color = "bg-orange-400/20 hover:bg-orange-400/40"; - break; - case "talk": - ev.color = "bg-custom-green/20 hover:bg-custom-green/40"; - break; - case "workshop": - ev.color = "bg-custom-blue/20 hover:bg-custom-blue/40"; - break; - case "campfire": - ev.color = "bg-purple-400/20 hover:bg-purple-400/40"; - break; - case "lightning-series": - ev.color = "bg-yellow-400/20 hover:bg-yellow-400/40"; - break; - default: - ev.color = "bg-rose-400/20 hover:bg-rose-400/40"; - } + const et = EventTypes[ev.type]; + ev.color = et.color ? `${et.colorLight} hover:${et.colorDark}` : ""; + console.log(ev.color); return ev; } @@ -402,26 +397,40 @@ {#if $bundle} {#each scheduleTimes($bundle, $schedulePref.time) as st}
-

+

{#if st.name} {st.name} {:else} {formatCET(new Date(st.date), "iiii d.M.y")} {/if}

-
+ +
+ {#each eventTypes as et} +
+
+
+ {#if et.url}{et.shortname || et.name}{:else}{et.shortname || et.name}{/if} +
+
+ {/each} +
@@ -541,8 +550,12 @@
{/each} -
- Všechny časy jsou lokální - středoevropské časové pásmo CET (+02:00). Všechny události jsou v češtině nebo slovenštině, pokud není uvedeno jinak. +
+ Všechny časy jsou lokální - středoevropské časové pásmo CET (+02:00). + Všechny události jsou v češtině nebo slovenštině, pokud není uvedeno + jinak.
{:else} Načítám .. diff --git a/src/routes/seznam-udalosti.svelte b/src/routes/seznam-udalosti.svelte index c603f95..a0cc36b 100644 --- a/src/routes/seznam-udalosti.svelte +++ b/src/routes/seznam-udalosti.svelte @@ -106,10 +106,12 @@ arr = arr.filter((e) => e.track === f.key); } if (f.type === "text") { - if (f.key.substring(0,1) === '@') { - const schedule = bd.spec.schedule.find(e => e.id === f.key.substring(1)) + if (f.key.substring(0, 1) === "@") { + const schedule = bd.spec.schedule.find( + (e) => e.id === f.key.substring(1) + ); if (schedule) { - const ev = bd.spec.events.find(e => e.id === schedule.event) + const ev = bd.spec.events.find((e) => e.id === schedule.event); arr = [ev]; } else { arr = []; @@ -243,7 +245,7 @@
- {#each ids.map(id => $bundle.spec.events.find(e => e.id === id)) as ev} + {#each ids.map((id) => $bundle.spec.events.find((e) => e.id === id)) as ev} {/each}
diff --git a/src/routes/tv.svelte b/src/routes/tv.svelte index 21cb6f0..eb5c740 100644 --- a/src/routes/tv.svelte +++ b/src/routes/tv.svelte @@ -6,6 +6,7 @@ import { onMount, onDestroy } from "svelte"; import { bundle, userData } from "$lib/stores.js"; import { format, formatDistanceToNow } from "date-fns"; + import { formatCET } from "$lib/utils.js"; import { parsePeriod } from "$lib/periods.js"; import EventTypeLabel from "$lib/EventTypeLabel.svelte"; import Avatar from "$lib/Avatar.svelte"; @@ -89,8 +90,8 @@ } function genStatus(_bundle) { - const now = new Date(`2022-06-04T${format(new Date(), "HH:mm:ss")}`); - //const now = new Date() + //const now = new Date(`2022-06-05T${format(new Date(), "HH:mm:ss")}`); + const now = new Date(); //const now = new Date(`2022-06-04T13:25`) let globalNextEvents = events.filter((ev) => { @@ -130,7 +131,10 @@ currentPercentage = elapsed / (duration / 100); } - const day = format(new Date(nextStreams[0].period.start), "yyyy-MM-dd"); + const day = formatCET( + new Date(nextStreams[0].period.start), + "yyyy-MM-dd" + ); let ctime = 0; if (day === "2022-06-05") { ctime = 2; @@ -178,7 +182,7 @@ on:click={() => startStream(stage.id)} >
- #{i + 1} + {stage.name}
@@ -200,10 +204,10 @@
{format( + >{formatCET( new Date(ss.current.period.start), "HH:mm" - )}-{format( + )}-{formatCET( new Date(ss.current.period.end), "HH:mm" )} {:else} ☕ Přestávka {#if ss.next[0]}do {format( + >☕ Přestávka {#if ss.next[0]}do {formatCET( new Date(ss.next[0].period.start), "HH:mm" )}{/if} {#each $bundle.spec.stages.filter((s) => s.livestream) as stage, i}
-
+
{/each} +
+ Všechny časy jsou lokální - středoevropské časové pásmo CET (+02:00). +
{:else} Načítám ... {/if} diff --git a/src/routes/vstupenky.svelte b/src/routes/vstupenky.svelte index e1df9e9..26b1d37 100644 --- a/src/routes/vstupenky.svelte +++ b/src/routes/vstupenky.svelte @@ -951,7 +951,7 @@
Platební metoda
- {#if $apiStatus.config.paymentMethods.find((pm) => pm.id === "btcpay") && ($apiStatus.config.paymentMethods.find((pm) => pm.id === "btcpay").hidden === true)} + {#if $apiStatus.config.paymentMethods.find((pm) => pm.id === "btcpay") && $apiStatus.config.paymentMethods.find((pm) => pm.id === "btcpay").hidden === true}
Platba pomocí BTC není dočasně k dispozici, zkuste to prosím později. Omlouváme se :(