diff --git a/src/lib/Event.svelte b/src/lib/Event.svelte index 023ca4c..387bc56 100644 --- a/src/lib/Event.svelte +++ b/src/lib/Event.svelte @@ -60,12 +60,12 @@
{#if duration}
{duration}m
{/if} {#if e.track} -
{trackRender(e.track)}
+
{trackRender(e.track)}
{/if} {#if e.tags}
{#each e.tags as tag} -
#{tag}
+
#{tag}
{/each}
{/if} diff --git a/src/lib/WordCloud.svelte b/src/lib/WordCloud.svelte index 20481c9..b05a20e 100644 --- a/src/lib/WordCloud.svelte +++ b/src/lib/WordCloud.svelte @@ -5,6 +5,7 @@ import { select } from "d3-selection"; import { scaleOrdinal } from "d3-scale"; import * as CS from "d3-scale-chromatic"; + import { layouts } from "$lib/stores.js"; $: outerWidth = 0; $: innerWidth = 0; @@ -54,6 +55,8 @@ const onWordMouseOut = (d) => dispatch("mouseout", d); const onWordMouseMove = (d) => dispatch("mousemove", d); + let layout = null + $: cwidth = outerWidth > 1152 ? 1000 @@ -62,23 +65,40 @@ : outerWidth - 50; $: cheight = cwidth < 800 ? 400 : cwidth < 500 ? 600 : 250; - function makeLayout() { - 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 - ); + async function makeLayout() { + const lid = [cwidth, cheight].join(':') + let l = null + await layouts.update(larr => { + + console.log(Object.keys(larr)) + if (larr && larr[lid]) { + console.log('making from stored layout') + l = larr[lid] + + } else { + + l = 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 + ); + + larr[lid] = l + } + + console.log(Object.keys(larr)) + return larr + }) + return l } - let layout = null; - function draw(words) { - select("#wordcloud").selectAll("*").remove(); + //select("#wordcloud").selectAll("*").remove(); select("#wordcloud") .append("svg") @@ -110,8 +130,8 @@ .on("mousemove", onWordMouseMove); } - function drawAll() { - layout = makeLayout().on("end", draw); + async function drawAll() { + layout = (await makeLayout()).on("end", draw); layout.start(); } diff --git a/src/lib/stores.js b/src/lib/stores.js index 223f5c0..520e9e8 100644 --- a/src/lib/stores.js +++ b/src/lib/stores.js @@ -24,3 +24,6 @@ export const userDataLocal = writable({ tickets: [], orders: [], }) + +export const layouts = writable({ test: null }) + diff --git a/src/routes/program.svelte b/src/routes/program.svelte index 42741ca..b18afe2 100644 --- a/src/routes/program.svelte +++ b/src/routes/program.svelte @@ -52,10 +52,31 @@ if (tag) { goto(`/program?tag=${tag}`) } + return true } $: events = applyFilters($page, $bundle) $: ids = [] + $: filters = makeFilters($page, $bundle) + + function makeFilters (pg, bd) { + const search = pg.url.searchParams + let fl = [] + + // tags + if (search.get('tag')) { + fl.push({ type: 'tag', title: `Tag: #${search.get('tag')}` }) + } + // tracks + if (search.get('track')) { + const track = bd.spec.tracks.find(t => t.id === search.get('track')) + if (!track) { + return goto('/program') + } + fl.push({ type: 'track', title: `Sekce: ${track.name}` }) + } + return fl + } function applyFilters (pg, bd) { if (!pg || !bd) { @@ -66,6 +87,9 @@ if (search.get('tag')) { arr = arr.filter(e => e.tags && e.tags.includes(search.get('tag'))) } + if (search.get('track')) { + arr = arr.filter(e => e.track === search.get('track')) + } ids = arr.map(a => a.id) return arr } @@ -98,12 +122,26 @@
hodin obsahu
-
- -
+ {#if filters.length > 0} +
+
Filtry:
+
+ {#each filters as filter} +
{filter.title}
+ {/each} +
+
+ Zrušit filtr +
+
+ {:else} +
+ +
+ {/if}

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

{#each $bundle.spec.events as e} diff --git a/src/routes/udalosti.svelte b/src/routes/udalosti.svelte index 0500911..ae4cd68 100644 --- a/src/routes/udalosti.svelte +++ b/src/routes/udalosti.svelte @@ -60,11 +60,18 @@
+ {#if duration} +
{duration}m
+ {/if} {#if e.track}
{trackRender(e.track)}
{/if} - {#if duration} -
{duration}m
+ {#if e.tags} +
+ {#each e.tags as tag} +
#{tag}
+ {/each} +
{/if}
@@ -96,11 +103,6 @@
{/if} - {#if e.tags && e.tags.length > 0} -
- Tagy: {e.tags.join(", ")} -
- {/if} {#if e.parent}

Součást události: