aboutsummaryrefslogtreecommitdiffstats
path: root/src/routes/blog/_posts
diff options
context:
space:
mode:
Diffstat (limited to 'src/routes/blog/_posts')
-rw-r--r--src/routes/blog/_posts/+page.server.ts13
-rw-r--r--src/routes/blog/_posts/+page.svelte32
2 files changed, 45 insertions, 0 deletions
diff --git a/src/routes/blog/_posts/+page.server.ts b/src/routes/blog/_posts/+page.server.ts
new file mode 100644
index 0000000..bc9d5d9
--- /dev/null
+++ b/src/routes/blog/_posts/+page.server.ts
@@ -0,0 +1,13 @@
+import { parsePost, type Post } from '$/lib/blog/Post.svelte'
+
+const posts = import.meta.glob("../posts/*.svx") as Record<string, () => Promise<Post>>
+const returnedData = Promise.all(Object.entries(posts).map(v => v[1]().then(r => [v[0], {
+ ...parsePost(r as Post),
+ default: null,
+}] as const)));
+
+export const load = async () => {
+ return {
+ posts: Object.fromEntries(await returnedData)
+ }
+}
diff --git a/src/routes/blog/_posts/+page.svelte b/src/routes/blog/_posts/+page.svelte
new file mode 100644
index 0000000..2f7ca25
--- /dev/null
+++ b/src/routes/blog/_posts/+page.svelte
@@ -0,0 +1,32 @@
+<script lang="ts">
+ import { resolve } from '$app/paths';
+ import type { PageProps } from '../_/$types';
+ import { browser } from '$app/environment';
+ import { onMount, tick } from 'svelte';
+ import { goto } from '$app/navigation';
+
+ let { data }: PageProps = $props();
+ let posts = $derived(Object.entries(data.posts));
+ onMount(() => {
+ requestAnimationFrame(() => goto(resolve('/blog/')));
+ tick().then(() => goto(resolve('/blog/')));
+ });
+</script>
+
+{#if !browser}
+ {#each posts as a}
+ <!-- svelte-ignore a11y_consider_explicit_label -->
+ <a
+ href={resolve('/blog/[id=int]-[slug]', {
+ id: a[1].metadata.id.toString(),
+ slug: a[1].metadata.slug,
+ })}
+ ></a>
+ <!-- svelte-ignore a11y_consider_explicit_label -->
+ <a
+ href={resolve('/blog/[id=int]', {
+ id: a[1].metadata.id.toString(),
+ })}
+ ></a>
+ {/each}
+{/if}