diff --git a/package.json b/package.json index b99b0e4..fccf4cb 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "@yusurko/vigil", "private": true, - "version": "0.1.0-dev49", + "version": "0.1.0-dev62", "type": "module", "scripts": { "dev": "vite dev", diff --git a/src/lib/HomeMenu.svelte b/src/lib/HomeMenu.svelte index 36e2669..35f359a 100644 --- a/src/lib/HomeMenu.svelte +++ b/src/lib/HomeMenu.svelte @@ -1,5 +1,5 @@ - + {#if data} {/if} diff --git a/src/routes/+page.svelte b/src/routes/+page.svelte index 62912a1..d44dd7e 100644 --- a/src/routes/+page.svelte +++ b/src/routes/+page.svelte @@ -3,7 +3,7 @@ import type { GuildEntry, PostEntry } from "$lib/backend"; import Centered from "$lib/Centered.svelte"; import Feed from "$lib/Feed.svelte"; - import { activePostCount, activeUserCount, appName, getMe } from "$lib/globals.svelte"; + import { activePostCount, activeUserCount, appName, getMe, isLoaded } from "$lib/globals.svelte"; import HomeMenu from "$lib/HomeMenu.svelte"; import SLayout from "$lib/SLayout.svelte"; @@ -12,6 +12,7 @@ let { feed } : { feed: PostEntry[] } = $derived(data); let { top_guilds }: { top_guilds: GuildEntry[] } = $derived(data); + // TODO infinite scrolling // $effect(() => { // if (me && data?.feed) { // feed.push(...data.feed.slice(feedIndex)); @@ -46,6 +47,10 @@ {/if} {/snippet} +{:else if !isLoaded()} + +

{appName()} is now loading…

+
{:else}

{appName()} is a social media platform made by people like you.
diff --git a/src/routes/+page.ts b/src/routes/+page.ts index 4c7c5ac..47fef40 100644 --- a/src/routes/+page.ts +++ b/src/routes/+page.ts @@ -42,7 +42,7 @@ async function loadTopGuilds (event: LoadEvent): Promise { export async function load(event): Promise<{feed: PostEntry[] | null, top_guilds?: GuildEntry[] | null}> { // delay loading after layout if (!isFirstLoad) { - await sleep(2000); + await sleep(500); isFirstLoad = true; } diff --git a/src/routes/[x+40][name]/+page.svelte b/src/routes/[x+40][name]/+page.svelte index 722d93a..16fa2af 100644 --- a/src/routes/[x+40][name]/+page.svelte +++ b/src/routes/[x+40][name]/+page.svelte @@ -4,7 +4,6 @@ import SLayout from "$lib/SLayout.svelte"; import UserAbout from "$lib/UserAbout.svelte"; import UserMenu from "$lib/UserMenu.svelte"; - import { RiUserLine } from "svelte-remixicon"; let { data } : { data: { user: UserEntry, feed: PostEntry[] } } = $props(); diff --git a/src/routes/[x+40][name]/+page.ts b/src/routes/[x+40][name]/+page.ts index dc0b03e..6f52826 100644 --- a/src/routes/[x+40][name]/+page.ts +++ b/src/routes/[x+40][name]/+page.ts @@ -8,7 +8,7 @@ export async function load(event) { const resp = await backend.withEvent(event).fetch('user/@' + encodeURIComponent(name) + '/feed'); - if(resp.status === 404) { + if (resp.status === 404) { error(404); } diff --git a/src/routes/about/+page.svelte b/src/routes/about/+page.svelte new file mode 100644 index 0000000..2759739 --- /dev/null +++ b/src/routes/about/+page.svelte @@ -0,0 +1,13 @@ + + +

+

About

+ + +
\ No newline at end of file diff --git a/src/routes/about/+page.ts b/src/routes/about/+page.ts new file mode 100644 index 0000000..82092be --- /dev/null +++ b/src/routes/about/+page.ts @@ -0,0 +1,19 @@ +import { backend } from '$lib/backend.js'; +import { error } from '@sveltejs/kit'; + + + +export async function load(event) { + + const resp = await backend.withEvent(event).fetch('about/about'); + + if(resp.status === 404) { + error(404); + } + + const respJ = await resp.json(); + + const { content } = respJ; + + return { content }; +} \ No newline at end of file diff --git a/src/routes/explore/+page.svelte b/src/routes/explore/+page.svelte new file mode 100644 index 0000000..ec63fe6 --- /dev/null +++ b/src/routes/explore/+page.svelte @@ -0,0 +1,50 @@ + + + + + + {#snippet left()} + + {/snippet} + + {#snippet right()} + {#if top_guilds} + +
    + {#each top_guilds as gu} +
  • + +{gu.name} - + {gu.post_count ?? 0} posts - + {gu.subscriber_count ?? 0} subscribers +
  • + {/each} +
+
+ {/if} + {/snippet} +
+ + diff --git a/src/routes/explore/+page.ts b/src/routes/explore/+page.ts new file mode 100644 index 0000000..978dd28 --- /dev/null +++ b/src/routes/explore/+page.ts @@ -0,0 +1,53 @@ +import { backend, type GuildEntry, type PostEntry } from '$lib/backend.js'; +import { getMe, sleep } from '$lib/globals.svelte.js'; +import type { LoadEvent } from '@sveltejs/kit'; + + +async function loadFeed (event: LoadEvent): Promise { + const resp = await backend.withEvent(event).fetch('explore/feed'); + + if ([200].indexOf(resp.status) < 0) { + console.error(`fetch feed returned status ${resp.status}`); + return null; + } + try { + const respJ = await resp.json(); + + const { feed } : { feed: PostEntry[] } = respJ; + + return feed; + } catch (e) { + return null; + } +} + +async function loadTopGuilds (event: LoadEvent): Promise { + const resp = await backend.withEvent(event).fetch('top/guilds'); + + if ([200].indexOf(resp.status) < 0) { + console.error(`fetch top_guilds returned status ${resp.status}`); + return null; + } + try { + const respJ = await resp.json(); + + const { has: top_guilds } : { has: GuildEntry[] } = respJ; + return top_guilds; + } catch (e) { + return null; + } +} + +export async function load(event): Promise<{feed: PostEntry[] | null, top_guilds?: GuildEntry[] | null}> { + + let feed = null; + let me = getMe(); + let top_guilds = null; + + if (me) { + feed = await loadFeed(event); + top_guilds = await loadTopGuilds(event); + } + + return { feed, top_guilds }; +}