From ab1dfbb1747dbd4d759ec819c2ac0f69b9f373d6 Mon Sep 17 00:00:00 2001 From: tree Date: Tue, 26 Apr 2022 06:39:46 +0200 Subject: [PATCH] Updates --- src/app.html | 1 + src/lib/Event.svelte | 29 +-- src/lib/EventTypeLabel.svelte | 6 +- src/lib/WordCloud.svelte | 22 +- src/lib/stores.js | 2 + src/routes/__layout.svelte | 6 +- src/routes/program.svelte | 145 +++++++----- src/routes/udalosti.svelte | 14 +- src/routes/vstupenky.svelte | 26 +- src/routes/vyzvednuti-vstupenky.svelte | 314 ++++++++++++------------- 10 files changed, 308 insertions(+), 257 deletions(-) diff --git a/src/app.html b/src/app.html index d55f2ec..296dbb5 100644 --- a/src/app.html +++ b/src/app.html @@ -34,5 +34,6 @@ })(); + diff --git a/src/lib/Event.svelte b/src/lib/Event.svelte index 6762fcc..8c6ecb3 100644 --- a/src/lib/Event.svelte +++ b/src/lib/Event.svelte @@ -13,18 +13,18 @@ $: e = event; $: duration = calcDuration(e, $bundle); - $: spoiler = makeSpoiler(e) + $: spoiler = makeSpoiler(e); - function makeSpoiler (_e) { + function makeSpoiler(_e) { if (!_e.description) { - return {} + return {}; } - const parts = _e.description.split("\n\n") - const stripped = parts.length > 1 + const parts = _e.description.split("\n\n"); + const stripped = parts.length > 1; return { md: parts[0], // + ` ([Zobrazit celý popis](/udalosti?id=${_e.id}))`, - stripped - } + stripped, + }; } function speakersMap(arr) { @@ -77,14 +77,16 @@
{#if duration}
{duration}m
{/if} {#if e.track} -
{trackRender(e.track)}
+
+ {trackRender(e.track)} +
{/if} {#if e.tags} -
- {#each e.tags as tag} -
#{tag}
- {/each} -
+
+ {#each e.tags as tag} +
#{tag}
+ {/each} +
{/if} @@ -135,5 +137,4 @@ {/if} - diff --git a/src/lib/EventTypeLabel.svelte b/src/lib/EventTypeLabel.svelte index 1aa9555..bf00368 100644 --- a/src/lib/EventTypeLabel.svelte +++ b/src/lib/EventTypeLabel.svelte @@ -7,7 +7,11 @@ talk: { title: "Přednáška", style: "bg-custom-green text-white" }, workshop: { title: "Workshop", style: "bg-custom-blue text-white" }, other: { title: "Ostatní", style: "bg-custom-yellow" }, - lightning: { title: "Lightning talk", style: "bg-pink-400" }, + lightning: { title: "Blesková přednáška", style: "bg-pink-400" }, + "lightning-series": { + title: "Pásmo bleskových přednášek", + style: "bg-pink-400", + }, }; $: current = config[event.type]; diff --git a/src/lib/WordCloud.svelte b/src/lib/WordCloud.svelte index b15f39e..e6abe04 100644 --- a/src/lib/WordCloud.svelte +++ b/src/lib/WordCloud.svelte @@ -55,7 +55,7 @@ const onWordMouseOut = (d) => dispatch("mouseout", d); const onWordMouseMove = (d) => dispatch("mousemove", d); - let layout = null + let layout = null; $: cwidth = outerWidth > 1152 @@ -66,7 +66,7 @@ $: cheight = cwidth < 800 ? 400 : cwidth < 500 ? 600 : 250; async function makeLayout() { - const lid = [cwidth, cheight].join(':') + /*const lid = [cwidth, cheight].join(':') let l = null await layouts.update(larr => { @@ -94,11 +94,21 @@ //console.log(Object.keys(larr)) return larr }) - return l + return l*/ + return cloud() + .size([cwidth, cheight]) + .words(words) + .padding(padding) + .rotate(() => ~~(Math.random() * maxRotate) + minRotate) + .font(font) + .fontSize( + //(d) => Math.floor((d.count / maxWordCount) * maxFontSize) + (d) => d.count + 15 + ); } function draw(words) { - //select("#wordcloud").selectAll("*").remove(); + select("#wordcloud").selectAll("*").remove(); select("#wordcloud") .append("svg") @@ -147,7 +157,7 @@ fwidth = outerWidth; } }, 500); - }, 100); + }, 1); setTimeout(() => { drawAll(); fwidth = outerWidth; @@ -168,7 +178,7 @@ style="background-color: {backgroundColor}; width: {cwidth}px; height: {cheight}px;" class="justify-end {show ? 'opacity-100' - : 'opacity-0'} transition transition-all" + : 'opacity-0'} transition transition-all transition-fast" /> diff --git a/src/lib/stores.js b/src/lib/stores.js index 520e9e8..37d62d1 100644 --- a/src/lib/stores.js +++ b/src/lib/stores.js @@ -27,3 +27,5 @@ export const userDataLocal = writable({ export const layouts = writable({ test: null }) +export const loadInfo = writable({ loaded: false }) + diff --git a/src/routes/__layout.svelte b/src/routes/__layout.svelte index 2bd2c77..1671f05 100644 --- a/src/routes/__layout.svelte +++ b/src/routes/__layout.svelte @@ -4,7 +4,7 @@ import "../app.css"; import api from "$lib/api.js"; import { page } from "$app/stores"; - import { userData, userDataLocal, apiStatus } from "$lib/stores"; + import { userData, userDataLocal, apiStatus, loadInfo } from "$lib/stores"; import { loadOrders, loadApiStatus } from "$lib/orders"; import { onMount, onDestroy } from "svelte"; @@ -23,6 +23,10 @@ localStorage.setItem("userData", JSON.stringify(ud)); }); + setTimeout(() => { + loadInfo.set({ loaded: true }); + }, 300); + await loadApiStatus(); await loadOrders($userData); }); diff --git a/src/routes/program.svelte b/src/routes/program.svelte index 0cf8705..71d27f9 100644 --- a/src/routes/program.svelte +++ b/src/routes/program.svelte @@ -4,19 +4,19 @@ @@ -176,14 +185,18 @@
Filtry:
{#each filters as filter} -
{filter.title}
+
+ {filter.title} +
{/each}
- {:else} + {:else if $loadInfo.loaded}
@@ -197,12 +210,19 @@
Hledat:
-
+
+ +
{#each ids as id} - e.id === id)} /> + e.id === id)} /> {/each}
- diff --git a/src/routes/udalosti.svelte b/src/routes/udalosti.svelte index e7965b0..11c6fbb 100644 --- a/src/routes/udalosti.svelte +++ b/src/routes/udalosti.svelte @@ -64,14 +64,16 @@
{duration}m
{/if} {#if e.track} - + {/if} {#if e.tags} -
- {#each e.tags as tag} - - {/each} -
+
+ {#each e.tags as tag} + + {/each} +
{/if}
diff --git a/src/routes/vstupenky.svelte b/src/routes/vstupenky.svelte index af18411..8da90c3 100644 --- a/src/routes/vstupenky.svelte +++ b/src/routes/vstupenky.svelte @@ -33,12 +33,11 @@ } const ticketTypes = { - public: 'Běžná vstupenka', - speaker: 'Přednášející', - organizator: 'Organizátor', - host: 'Doprovod', - } - + public: "Běžná vstupenka", + speaker: "Přednášející", + organizator: "Organizátor", + host: "Doprovod", + }; let forceShow = false; let loading = true; @@ -330,8 +329,15 @@ class="border-l border-b border-r p-4 rounded-b-md shadow-md border-blue-web" >
- {#if ticket.type === 'speaker' && ticket.link && ticket.link.id} - s.id === ticket.link.id)} size="semi-small" /> + {#if ticket.type === "speaker" && ticket.link && ticket.link.id} + s.id === ticket.link.id + )} + size="semi-small" + /> {:else}
#{ticket.id}
-
{ticketTypes[ticket.type || 'public']}
+
+ {ticketTypes[ticket.type || "public"]} +
{#if ticket.data} diff --git a/src/routes/vyzvednuti-vstupenky.svelte b/src/routes/vyzvednuti-vstupenky.svelte index 458a293..d490b48 100644 --- a/src/routes/vyzvednuti-vstupenky.svelte +++ b/src/routes/vyzvednuti-vstupenky.svelte @@ -10,54 +10,54 @@ import { faker } from "@faker-js/faker"; import api from "$lib/api.js"; import Avatar from "$lib/Avatar.svelte"; - import removeMd from 'remove-markdown'; + import removeMd from "remove-markdown"; import { userData } from "$lib/stores"; - let claim = null + let claim = null; let form = { - email: '', - name: '', - org: '', - twitter: '' - } - let formProcessing = false - let formError = null + email: "", + name: "", + org: "", + twitter: "", + }; + let formProcessing = false; + let formError = null; - $: target = $bundle && claim ? findTarget(claim.link) : null + $: target = $bundle && claim ? findTarget(claim.link) : null; - function findTarget (link) { - if (link.type === 'speaker') { - return $bundle.spec.speakers.find(s => s.id === link.id) + function findTarget(link) { + if (link.type === "speaker") { + return $bundle.spec.speakers.find((s) => s.id === link.id); } - return null + return null; } - async function loadClaim (code) { - const resp = await api.apiCall("claimInfo", { method: 'post' }, { code }) - return resp + async function loadClaim(code) { + const resp = await api.apiCall("claimInfo", { method: "post" }, { code }); + return resp; } onMount(async () => { - const search = new URLSearchParams($page.url.search) - claim = await loadClaim(search.get('kod')) + const search = new URLSearchParams($page.url.search); + claim = await loadClaim(search.get("kod")); if (!claim) { - goto('/') + goto("/"); } - if ($bundle && claim.link && claim.link.type === 'speaker') { - const sp = $bundle.spec.speakers.find(s => s.id === claim.link.id) + if ($bundle && claim.link && claim.link.type === "speaker") { + const sp = $bundle.spec.speakers.find((s) => s.id === claim.link.id); if (sp) { - form.name = sp.name || '' - form.org = sp.orgs ? removeMd(sp.orgs).substring(0, 25) : '' - form.twitter = sp.twitter ? '@'+sp.twitter : '' + form.name = sp.name || ""; + form.org = sp.orgs ? removeMd(sp.orgs).substring(0, 25) : ""; + form.twitter = sp.twitter ? "@" + sp.twitter : ""; } } - }) + }); const linkTypes = { speaker: { - title: 'Přednášející' - } - } + title: "Přednášející", + }, + }; function processErrors(error) { if (typeof error === "string") { @@ -75,9 +75,7 @@ (fe) => (ticket = fe.instancePath.match(/\/twitter/)) ) ) { - suberrs.push( - `Neplatný Twitter účet.` - ); + suberrs.push(`Neplatný Twitter účet.`); } out.title = "Nesprávně vyplněný formulář: " + @@ -90,23 +88,27 @@ return out; } - async function submitClaim () { - formProcessing = true + async function submitClaim() { + formProcessing = true; let resp; try { - resp = await api.apiCall('claim', { method: 'post' }, { code: claim.code, form }) + resp = await api.apiCall( + "claim", + { method: "post" }, + { code: claim.code, form } + ); } catch (e) { - console.error(e) + console.error(e); } if (resp.error) { - formError = processErrors(resp.error) - formProcessing = false + formError = processErrors(resp.error); + formProcessing = false; return null; } if (!resp.ok || !resp.ticket) { - formError = { title: 'Neznámá chyba' } - formProcessing= false + formError = { title: "Neznámá chyba" }; + formProcessing = false; return null; } @@ -115,13 +117,12 @@ if (!ud.tickets) { ud.tickets = []; } - ud.tickets.push([ resp.ticket.id, resp.ticket.secret ].join(':')); + ud.tickets.push([resp.ticket.id, resp.ticket.secret].join(":")); return ud; }); - window.location.replace('/vstupenky'); + window.location.replace("/vstupenky"); } - @@ -132,127 +133,126 @@

Vyzvednutí vstupenky

{#if claim && $bundle} - -
-
-
-
Kód vyzvednutí
-
- {claim.code} -
-
-
-
Typ vstupenky
-
- {linkTypes[claim.link.type].title} - {#if target} - - {target.name} - {/if} -
-
- {#if claim.claimed} -
-
Již vyzvednuto!
-
- {:else} -
-
Email
-
- Kontaktní email, na který budou zaslány vstupenky. -
-
- -
-
-
-
- Vstupenka -
-
- Informace, které budou vytištěné na Vaší konferenční - jmenovku. Tyto údaje jsou nepovinné a bude možné je změnit - později. -
-
-
-
-
-
-
-
- Jméno (Přezdívka) -
-
- -
-
-
-
- Organizace (Firma) -
-
- -
-
-
-
Twitter účet
-
- -
-
-
+
+
+
+
Kód vyzvednutí
+
+ {claim.code} +
+
+
+
Typ vstupenky
+
+ {linkTypes[claim.link.type].title} + {#if target} + - + {target.name} + {/if} +
+
+ {#if claim.claimed} +
+
Již vyzvednuto!
+
+ {:else} +
+
Email
+
+ Kontaktní email, na který budou zaslány vstupenky. +
+
+ +
+
+
+
Vstupenka
+
+ Informace, které budou vytištěné na Vaší konferenční jmenovku. + Tyto údaje jsou nepovinné a bude možné je změnit později. +
+
+
+
+
+
+
+
Jméno (Přezdívka)
+
+
-
- {#if !formProcessing} -
- -
- {#if formError} -
- {formError.title} -
- {/if} - {:else} -
-
- -
-
- Odesílám žádost .. -
-
- {/if} +
+
Organizace (Firma)
+
+ +
+
+
+
Twitter účet
+
+ +
+
+
+
+
+
+ {#if !formProcessing} +
+ +
+ {#if formError} +
+ {formError.title} +
+ {/if} + {:else} +
+
+ +
+
+ Odesílám žádost ..
{/if}
- - + {/if} +
+
{:else}
Načítám ...
{/if}