diff --git a/package-lock.json b/package-lock.json index cea6aa1..cedcdf4 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "utxo22-web", - "version": "1.1.0", + "version": "1.2.1", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "utxo22-web", - "version": "1.1.0", + "version": "1.2.1", "hasInstallScript": true, "dependencies": { "@fontsource/fira-mono": "^4.5.0", @@ -21,7 +21,8 @@ "ethereum-blockies-base64": "^1.0.2", "fuse.js": "^6.5.3", "lodash": "^4.17.21", - "remove-markdown": "^0.3.0" + "remove-markdown": "^0.3.0", + "svelte-youtube": "^0.0.2" }, "devDependencies": { "@faker-js/faker": "^6.1.2", @@ -1415,6 +1416,11 @@ "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", "dev": true }, + "node_modules/load-script": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/load-script/-/load-script-1.0.0.tgz", + "integrity": "sha1-BJGTngvuVkPuSUp+PaPSuscMbKQ=" + }, "node_modules/lodash": { "version": "4.17.21", "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", @@ -1870,6 +1876,11 @@ "node": ">=6" } }, + "node_modules/sister": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/sister/-/sister-3.0.2.tgz", + "integrity": "sha512-p19rtTs+NksBRKW9qn0UhZ8/TUI9BPw9lmtHny+Y3TinWlOa9jWh9xB0AtPSdmOy49NJJJSSe0Ey4C7h0TrcYA==" + }, "node_modules/source-map-js": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz", @@ -1913,7 +1924,6 @@ "version": "3.46.6", "resolved": "https://registry.npmjs.org/svelte/-/svelte-3.46.6.tgz", "integrity": "sha512-o9nNft/OzCz/9kJpmWa1S52GAM+huCjPIsNWydYmgei74ZWlOA9/hN9+Z12INdklghu31seEXZMRHhS1+8DETw==", - "dev": true, "engines": { "node": ">= 8" } @@ -1943,6 +1953,17 @@ "svelte": "^3.0.0" } }, + "node_modules/svelte-youtube": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/svelte-youtube/-/svelte-youtube-0.0.2.tgz", + "integrity": "sha512-uwHG0MiLwlB9MU9WP2/5drrT5YyXpcf4dAi/titwPQyrYXjk7EVcpL6ZmEwSAA7CAcfAXpsnyFPzJJeoyKxx+A==", + "dependencies": { + "youtube-player": "^5.5.2" + }, + "peerDependencies": { + "svelte": "^3.0.0" + } + }, "node_modules/tailwindcss": { "version": "3.0.23", "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.0.23.tgz", @@ -2065,6 +2086,29 @@ "engines": { "node": ">= 6" } + }, + "node_modules/youtube-player": { + "version": "5.5.2", + "resolved": "https://registry.npmjs.org/youtube-player/-/youtube-player-5.5.2.tgz", + "integrity": "sha512-ZGtsemSpXnDky2AUYWgxjaopgB+shFHgXVpiJFeNB5nWEugpW1KWYDaHKuLqh2b67r24GtP6HoSW5swvf0fFIQ==", + "dependencies": { + "debug": "^2.6.6", + "load-script": "^1.0.0", + "sister": "^3.0.0" + } + }, + "node_modules/youtube-player/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/youtube-player/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" } }, "dependencies": { @@ -2971,6 +3015,11 @@ "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", "dev": true }, + "load-script": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/load-script/-/load-script-1.0.0.tgz", + "integrity": "sha1-BJGTngvuVkPuSUp+PaPSuscMbKQ=" + }, "lodash": { "version": "4.17.21", "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", @@ -3249,6 +3298,11 @@ "mri": "^1.1.0" } }, + "sister": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/sister/-/sister-3.0.2.tgz", + "integrity": "sha512-p19rtTs+NksBRKW9qn0UhZ8/TUI9BPw9lmtHny+Y3TinWlOa9jWh9xB0AtPSdmOy49NJJJSSe0Ey4C7h0TrcYA==" + }, "source-map-js": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz", @@ -3279,8 +3333,7 @@ "svelte": { "version": "3.46.6", "resolved": "https://registry.npmjs.org/svelte/-/svelte-3.46.6.tgz", - "integrity": "sha512-o9nNft/OzCz/9kJpmWa1S52GAM+huCjPIsNWydYmgei74ZWlOA9/hN9+Z12INdklghu31seEXZMRHhS1+8DETw==", - "dev": true + "integrity": "sha512-o9nNft/OzCz/9kJpmWa1S52GAM+huCjPIsNWydYmgei74ZWlOA9/hN9+Z12INdklghu31seEXZMRHhS1+8DETw==" }, "svelte-hmr": { "version": "0.14.11", @@ -3299,6 +3352,14 @@ "marked": "^4.0.10" } }, + "svelte-youtube": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/svelte-youtube/-/svelte-youtube-0.0.2.tgz", + "integrity": "sha512-uwHG0MiLwlB9MU9WP2/5drrT5YyXpcf4dAi/titwPQyrYXjk7EVcpL6ZmEwSAA7CAcfAXpsnyFPzJJeoyKxx+A==", + "requires": { + "youtube-player": "^5.5.2" + } + }, "tailwindcss": { "version": "3.0.23", "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.0.23.tgz", @@ -3377,6 +3438,31 @@ "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz", "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==", "dev": true + }, + "youtube-player": { + "version": "5.5.2", + "resolved": "https://registry.npmjs.org/youtube-player/-/youtube-player-5.5.2.tgz", + "integrity": "sha512-ZGtsemSpXnDky2AUYWgxjaopgB+shFHgXVpiJFeNB5nWEugpW1KWYDaHKuLqh2b67r24GtP6HoSW5swvf0fFIQ==", + "requires": { + "debug": "^2.6.6", + "load-script": "^1.0.0", + "sister": "^3.0.0" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "requires": { + "ms": "2.0.0" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + } + } } } } diff --git a/package.json b/package.json index 7f7b5db..4724e84 100644 --- a/package.json +++ b/package.json @@ -39,6 +39,7 @@ "ethereum-blockies-base64": "^1.0.2", "fuse.js": "^6.5.3", "lodash": "^4.17.21", - "remove-markdown": "^0.3.0" + "remove-markdown": "^0.3.0", + "svelte-youtube": "^0.0.2" } } diff --git a/src/app.html b/src/app.html index 0cb5e1d..f4f82d9 100644 --- a/src/app.html +++ b/src/app.html @@ -53,7 +53,7 @@
%svelte.body%
- + diff --git a/src/lib/Event.svelte b/src/lib/Event.svelte index 234f438..f87f895 100644 --- a/src/lib/Event.svelte +++ b/src/lib/Event.svelte @@ -78,7 +78,7 @@ {/if}
-
+
{#if duration}
{duration}m
{/if} {#if e.track}
diff --git a/src/lib/EventTypeLabel.svelte b/src/lib/EventTypeLabel.svelte index 6222965..e2722e5 100644 --- a/src/lib/EventTypeLabel.svelte +++ b/src/lib/EventTypeLabel.svelte @@ -1,29 +1,31 @@
-
{current.title}
diff --git a/src/lib/header/Header.svelte b/src/lib/header/Header.svelte index cf9b8fb..aa6da51 100644 --- a/src/lib/header/Header.svelte +++ b/src/lib/header/Header.svelte @@ -22,7 +22,7 @@ >
- {#if $page.url.pathname !== "/"} + {#if !["/", "/tv"].includes($page.url.pathname)}
@@ -40,38 +40,58 @@ @@ -81,7 +101,7 @@ class="relative mx-auto lg:px-6 px-4 pt-4 sm:pt-6 sm:pb-6 pb-2 max-w-6xl text-left text-white" >
-
+
Otevřená komunitní kryptoměnová konference
diff --git a/src/lib/stores.js b/src/lib/stores.js index 30c5c87..3d123bc 100644 --- a/src/lib/stores.js +++ b/src/lib/stores.js @@ -30,6 +30,9 @@ export const layouts = writable({ test: null }) export const loadInfo = writable({ loaded: false }) export const schedulePref = writable({ - stages: [], - tracks: [] + stage: null, + track: null, + time: null, + tracks: [], + showDescriptions: false }); diff --git a/src/routes/casova-osa.svelte b/src/routes/casova-osa.svelte deleted file mode 100644 index 8d22a1c..0000000 --- a/src/routes/casova-osa.svelte +++ /dev/null @@ -1,355 +0,0 @@ - - - - - - Časová osa | UTXO.22 - - -
-

Časová osa

- {#if $bundle} -
Plán (řešení)
-
- -
- {/if} -
-
- {#if $bundle} -
-
-
Sál / Místo
-
- - {#each $bundle.spec.stages as et} -
- - ($schedulePref.stages = [et.id])} - >{et.name} -
- {/each} -
-
-
-
Kategorie
-
- - {#each $bundle.spec.tracks as et} -
- - ($schedulePref.tracks = [et.id])} - > - {et.shortname || et.name} -
- {/each} -
-
-
- {#each scheduleTimes($bundle) as st} -
-

- {format(new Date(st.date), "iiii d.M.y", { locale: cs })} -

-
-
-
- - - - - {/if} - {/each} - - - - {#each dateSlots(plan, st.period, $bundle, $schedulePref) as ds} - - - {#each activeStages($bundle, $bundle.spec.stages, st.date, plan) as stage} - {#if $schedulePref && $schedulePref.stages.includes(stage.id)} - {#if ds.stages[stage.id] === undefined} - - {/each} - {/if} - {/if} - {/each} - - - {/each} - -
- {#each activeStages($bundle, $bundle.spec.stages, st.date, plan) as stage} - {#if $schedulePref && $schedulePref.stages.includes(stage.id)} - -
{stage.capacity.seat} + {stage.capacity.stand}
-
{stage.name}
-
{ds.title} - {:else if ds.stages[stage.id] !== null} - {#each [[ds.stages[stage.id], findEvent($bundle, ds.stages[stage.id].event)]] as [si, event]} - -
-
- {format( - new Date(si.period.start), - "HH:mm" - )}-{format(new Date(si.period.end), "HH:mm")} #{si.id} - {#if event.track}[{#each [$bundle.spec.tracks.find((t) => t.id === event.track)] as track}{track.shortname || - track.name}{/each}]{/if} -
- -
- {@html showEventDetail($bundle, event)} -
-
- {event.tags.map((t) => `#${t}`).join(", ")} -
-
-
-
-
- {/each} - {:else} - Načítám .. - {/if} -
- - diff --git a/src/routes/mapa.svelte b/src/routes/mapa.svelte new file mode 100644 index 0000000..580444c --- /dev/null +++ b/src/routes/mapa.svelte @@ -0,0 +1,20 @@ + + + + + + Mapa | {$bundle ? $bundle.name : "UTXO.22"} + + +
+

Mapa

+ +
+ TBA +
+
diff --git a/src/routes/prakticke.svelte b/src/routes/prakticke.svelte new file mode 100644 index 0000000..f8b5a9d --- /dev/null +++ b/src/routes/prakticke.svelte @@ -0,0 +1,20 @@ + + + + + + Praktické informace | {$bundle ? $bundle.name : "UTXO.22"} + + +
+

Praktické informace

+ +
+ TBA +
+
diff --git a/src/routes/program.svelte b/src/routes/program.svelte index d461c7f..29d6cc9 100644 --- a/src/routes/program.svelte +++ b/src/routes/program.svelte @@ -3,155 +3,290 @@ @@ -159,85 +294,213 @@ Program | UTXO.22 -
-

Program

-
-

- Program stále připravujeme. Aktuálně finišujeme jeho přípravu a nejpozději ráno v pondělí 30. května zde najdete konkrétní časové rozpisy jednotlivých sálů. Těšíme se na vás! 🙏❤️ - UTXO.22 organizační team -

-
- - -
- 🔥 Chcete kryptokomunitě něco říct? prezentovat svůj projekt nebo nápad? nebo snad prodiskutovat nějaké krypto téma? Každopádně potkat nové lidi? Uspořádejte Campfire session! Jde o náš nový formát, kterým chceme dát možnost doplnit obsah na UTXO.22 i široké komunitě.
- Detaily o Campfire formátu a přihlášku naleznete na tomto odkazu. -
- - {#if filters.length > 0} -
-
Filtry:
-
- {#each filters as filter} -
- {filter.title} -
- {/each} -
-
- Zrušit filtr +
+ {#if $bundle} +
Plán (řešení)
+
+ +
+ {/if} +
+

Program

+ +
+ {#if $bundle} +
+
+
Den
+ {#each allScheduleTimes($bundle) as st} + + {/each} +
+
+
+
+
Sál
+ {#each allStages($bundle) as et} + + + {/each} +
+
+
+
-
- {:else if $loadInfo.loaded} -
- -
- {/if} -
-
-

- Seznam událostí ({ids.length}/{$bundle.spec.events.length}) -

-
-
-
Hledat:
-
- -
-
+ + {/if}
-
- {#each ids as id} - e.id === id)} /> - {/each} -
- +
+
+ {#if $bundle} + {#each scheduleTimes($bundle, $schedulePref.time) as st} +
+

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

+
+
+
+ + + + + {#each activeStages($bundle, $bundle.spec.stages, st, plan) as stage} + {#if $schedulePref && ($schedulePref.stage === stage.id || $schedulePref.stage === 'all')} + + {/if} + {/each} + + + + {#each dateSlots(plan, st.period, $bundle, $schedulePref) as ds} + + + {#each activeStages($bundle, $bundle.spec.stages, st, plan) as stage} + {#if $schedulePref && ($schedulePref.stage === stage.id || $schedulePref.stage === 'all')} + {#if ds.stages[stage.id] === undefined} + + {/each} + {/if} + {/if} + {/each} + + + {/each} + +
{format(new Date(st.date), "iiiiii", { locale: cs })}
{format(new Date(st.date), "d.M.")}
+
{stage.capacity.seat} + {stage.capacity.stand}
+
{stage.name}
+
{ds.title} + {:else if ds.stages[stage.id] !== null} + {#each [[ds.stages[stage.id], findEvent($bundle, ds.stages[stage.id].event)]] as [si, event]} + +
+
+ {format( + new Date(si.period.start), + "HH:mm" + )}-{format(new Date(si.period.end), "HH:mm")} @{si.id} + {#if event.track}[{#each [$bundle.spec.tracks.find((t) => t.id === event.track)] as track}{track.shortname || + track.name}{/each}]{/if} +
+ +
+ {@html showEventDetail($bundle, event)} +
+
+ {event.tags.map((t) => `#${t}`).join(", ")} +
+ {#if event.description && $schedulePref.showDescriptions} + {#each [makeSpoiler(event)] as spoiler} +
+ + {#if spoiler.stripped} + + {/if} +
+ {/each} + {/if} +
+
+
+
+ {/each} + {:else} + Načítám .. + {/if} +
+ + diff --git a/src/routes/seznam-udalosti.svelte b/src/routes/seznam-udalosti.svelte new file mode 100644 index 0000000..2588faa --- /dev/null +++ b/src/routes/seznam-udalosti.svelte @@ -0,0 +1,243 @@ + + + + + + Seznam událostí | UTXO.22 + + +
+

Program → Seznam událostí

+
+

+ Program stále připravujeme. Aktuálně finišujeme jeho přípravu a nejpozději ráno v pondělí 30. května zde najdete konkrétní časové rozpisy jednotlivých sálů. Těšíme se na vás! 🙏❤️ - UTXO.22 organizační team +

+
+ + +
+ 🔥 Chcete kryptokomunitě něco říct? prezentovat svůj projekt nebo nápad? nebo snad prodiskutovat nějaké krypto téma? Každopádně potkat nové lidi? Uspořádejte Campfire session! Jde o náš nový formát, kterým chceme dát možnost doplnit obsah na UTXO.22 i široké komunitě.
+ Detaily o Campfire formátu a přihlášku naleznete na tomto odkazu. +
+ + {#if filters.length > 0} +
+
Filtry:
+
+ {#each filters as filter} +
+ {filter.title} +
+ {/each} +
+ +
+ {:else if $loadInfo.loaded} +
+ +
+ {/if} + +
+
+

+ Seznam událostí ({ids.length}/{$bundle.spec.events.length}) +

+
+
+
Hledat:
+
+ +
+
+
+
+ {#each ids as id} + e.id === id)} /> + {/each} +
+ +
diff --git a/src/routes/tv.svelte b/src/routes/tv.svelte new file mode 100644 index 0000000..a5bf97e --- /dev/null +++ b/src/routes/tv.svelte @@ -0,0 +1,141 @@ + + + + + + UTXO.TV + + +
+
+ {#if $bundle} + {#each $bundle.spec.stages.filter(s => s.livestream) as stage, i} +
+

#{i+1} | {stage.name}

+
+
+ +
+
+ {#each [stageStatus[stage.id]] as ss} +
+ {#if ss.current} +
Právě probíhá
+
{format(new Date(ss.current.period.start), 'HH:mm')}-{format(new Date(ss.current.period.end), 'HH:mm')} {ss.current._event.name}
+
+ {#each ss.current._event.speakers.map(sp => findSpeaker(sp, $bundle)) as speaker} + + {/each} +
+ {#if ss.current._event.description} + {#each [makeSpoiler(ss.current._event)] as spoiler} +
+ + {#if spoiler.stripped} + + {/if} +
+ {/each} + {/if} +
{@html ss.current._event.tags.map(t => `#${t}`).join(' ')}
+ {:else} +
☕ Přestávka
+ {/if} +
+ {/each} +
Následuje
+
+ {#each stageStatus[stage.id].next as ne} +
{format(new Date(ne.period.start), 'HH:mm')}-{format(new Date(ne.period.end), 'HH:mm')} {ne._event.name}
+ {/each} +
+
+
+
+ {/each} + {:else} + Načítám ... + {/if} +
+
diff --git a/src/routes/udalosti.svelte b/src/routes/udalosti.svelte index 2fc758e..bcbcd7a 100644 --- a/src/routes/udalosti.svelte +++ b/src/routes/udalosti.svelte @@ -21,7 +21,7 @@ $: id = getId($page.url.search); $: e = $bundle ? $bundle.spec.events.find((ev) => ev.id === id) : null; $: duration = e ? calcDuration(e, $bundle) : null; - $: childrens = $bundle.spec.events.filter((i) => i.parent === e.id); + $: childrens = e ? $bundle.spec.events.filter((i) => i.parent === e.id) : [] function getId(search) { const searchParams = new URLSearchParams(search);