diff --git a/src/lib/components/CalendarList.svelte b/src/lib/components/CalendarList.svelte new file mode 100644 index 00000000..f9c2b21a --- /dev/null +++ b/src/lib/components/CalendarList.svelte @@ -0,0 +1,39 @@ + + +
+ {#each segments as segment} +
+
{format(new Date(segment.startTime), "HH:mm")} - {format(new Date(segment.endTime), "HH:mm")}
+
+
+
+ {#if !event} + {(segment.event || event)[event && event.shortname ? 'shortname' : 'name']} + {:else} + {event.shortname || event.name} + {/if} + {#if segment.title} + - {segment.title} + {/if} +
+
+ {#if (segment.venues || event.venues)} + @ {@html ((segment.venues || event.venues).map(vId => { + const place = bundle.places.find(p => p.id === vId) + return `${place.name}` + })).join(", ")} + {:else if (segment.event || event).venueName} + @ {(segment.event || event).venueName} + {/if} +
+
+
+ {/each} +
\ No newline at end of file diff --git a/src/lib/components/TimelineHeatmap.svelte b/src/lib/components/TimelineHeatmap.svelte index 6d6135e9..efe54634 100644 --- a/src/lib/components/TimelineHeatmap.svelte +++ b/src/lib/components/TimelineHeatmap.svelte @@ -1,10 +1,12 @@ {#if homepage} -
-
+
+

Prague Blockchain Week 2023

June 2-11, 2023
{/if} -
+
\ No newline at end of file diff --git a/src/routes/[entry]/+layout.js b/src/routes/[entry]/+layout.js index 599131e9..5899d5c7 100644 --- a/src/routes/[entry]/+layout.js +++ b/src/routes/[entry]/+layout.js @@ -2,6 +2,7 @@ import * as dataApi from "$lib/dataApi"; export async function load({ params, url }) { return { + params, bundle: await dataApi.load(params.entry, url.hostname), schema: await dataApi.loadSchema(), }; diff --git a/src/routes/[entry]/+page.svelte b/src/routes/[entry]/+page.svelte index 021401b1..54cba6bd 100644 --- a/src/routes/[entry]/+page.svelte +++ b/src/routes/[entry]/+page.svelte @@ -17,7 +17,7 @@
- +

Conferences & Hackathons ({conferences.length})

diff --git a/src/routes/[entry]/[type]/+page.svelte b/src/routes/[entry]/[type]/+page.svelte index 3743798f..9e740823 100644 --- a/src/routes/[entry]/[type]/+page.svelte +++ b/src/routes/[entry]/[type]/+page.svelte @@ -9,6 +9,9 @@ import EventTypeBadge from '$lib/components/EventTypeBadge.svelte'; import { formatItemDate, bareDomain, getFlagEmoji } from '$lib/utils.js'; import makeBlockie from 'ethereum-blockies-base64'; + import TimelineHeatmap from '$lib/components/TimelineHeatmap.svelte'; + import { compareAsc, compareDesc, addMinutes } from 'date-fns'; + import { writable } from 'svelte/store'; export let data; @@ -17,17 +20,27 @@ $: tc = config.collections[type] $: items = data.bundle[type] - - function processItems(_items) { + function processItems(_items, query = {}) { if (!_items) return []; _items = JSON.parse(JSON.stringify(_items)) if (type === 'events') { _items = _items.sort((x, y) => x.date > y.date ? 1 : -1) } + if (type === 'events' && query.start && query.end) { + _items = _items.filter(item => { + return item.segments.find(sgm => { + const [ tstart, tend ] = sgm.times.split("-") + return compareAsc(new Date(sgm.startTime), new Date(query.start)) <= 0 + && compareAsc(new Date(sgm.endTime), new Date(query.end)) >= 0 + }) + // return compareAsc(item.new Date(query.segment) > 0) + }) + } + return _items } - - $: processedItems = processItems(items) + + $: processedItems = processItems(items) //, Object.fromEntries($page.url.searchParams)) onMount(async () => { if (!config.collections[$page.params.type]) { @@ -53,8 +66,9 @@
+

{tc.title} ({processedItems.length})

-
+
diff --git a/src/routes/[entry]/[type]/[slug]/+page.svelte b/src/routes/[entry]/[type]/[slug]/+page.svelte index 3972f574..13920ad6 100644 --- a/src/routes/[entry]/[type]/[slug]/+page.svelte +++ b/src/routes/[entry]/[type]/[slug]/+page.svelte @@ -2,11 +2,13 @@ export let data; import { page } from '$app/stores'; import CollectionList from '$lib/components/CollectionList.svelte'; + import CalendarList from '$lib/components/CalendarList.svelte'; import EventTypeBadge from '$lib/components/EventTypeBadge.svelte'; import Footer from '$lib/components/Footer.svelte'; import SvelteMarkdown from 'svelte-markdown'; import { formatItemDate, bareDomain, getFlagEmoji } from '$lib/utils.js'; import { config } from '$lib/pbw'; + import { format } from 'date-fns'; const colsDef = Object.fromEntries(Object.keys(config.collections).map(col => { return [ config.collections[col].model, col ]})) @@ -16,6 +18,17 @@ linkedin: { col: x => x.linkedin ? 'https://linkedin.com/in/'+x.linkedin : null } } + function eventDates(event) { + const dates = [] + for (const seg of event.segments) { + const date = format(new Date(seg.startTime), 'yyyy-MM-dd') + if (!dates.includes(date)) { + dates.push(date) + } + } + return dates + } + $: entry = $page.params.entry $: col = $page.params.type $: colPlural = colsDef[col] @@ -224,6 +237,17 @@ {/if} {#if col === "event"} + {#if item.segments} +

Day Schedule

+ {#each eventDates(item) as date} +
+

{format(new Date(date), "EEEE - MMMM d, yyyy")}

+
+ s.startTime.match(new RegExp("^"+date)))} entry={entry} bundle={data.bundle} event={item} /> +
+
+ {/each} + {/if} {#if item.venues}

Venues ({item.venues?.length || 0})

diff --git a/src/routes/[entry]/day/[date]/+page.svelte b/src/routes/[entry]/day/[date]/+page.svelte new file mode 100644 index 00000000..2e930fc9 --- /dev/null +++ b/src/routes/[entry]/day/[date]/+page.svelte @@ -0,0 +1,60 @@ + + + + {format(new Date($page.params.date), "EEEE MMMM d, yyyy")} | #PBW{$page.params.entry} Inspector + + +
+
+
+
+

#PBW23.days

+
+
+ + +

{format(new Date($page.params.date), "MMMM d, yyyy - EEEE")}

+
+ +
+
+
+
\ No newline at end of file diff --git a/tailwind.config.cjs b/tailwind.config.cjs index 149ac89e..1a61eb74 100644 --- a/tailwind.config.cjs +++ b/tailwind.config.cjs @@ -19,5 +19,6 @@ module.exports = { }, }, }, + darkMode: 'class', plugins: [] };