From 51b9660d398943e23385332213aa1da24a95ab76 Mon Sep 17 00:00:00 2001 From: ceitine Date: Tue, 22 Oct 2024 10:58:27 +0300 Subject: [PATCH] fix a couple bugs, some games page progress --- src/lib/types/Games.ts | 14 ++++- src/routes/games/+layout.svelte | 83 +++++++++++++++++++++++-- src/routes/games/[slug]/+page.server.ts | 2 +- src/routes/games/[slug]/+page.svelte | 6 +- src/routes/play/[slug]/+layout.svelte | 16 ++--- src/routes/play/[slug]/+page.server.ts | 13 +--- src/routes/team/+layout.svelte | 14 +++-- tailwind.config.js | 4 +- 8 files changed, 111 insertions(+), 41 deletions(-) diff --git a/src/lib/types/Games.ts b/src/lib/types/Games.ts index 7c78463..9b819dc 100644 --- a/src/lib/types/Games.ts +++ b/src/lib/types/Games.ts @@ -8,6 +8,7 @@ export interface Game { state?: GameState; contestDetails?: ContestDetails; sboxIdent?: string; + slug?: string; } export interface ContestDetails { @@ -19,7 +20,10 @@ export interface ContestDetails { export enum Placement { '1st', '2nd', - '3rd' + '3rd', + '4th', + '5th', + None } export enum GameState { @@ -51,7 +55,7 @@ export const Games: Game[] = [ contestDetails: { url: 'https://sbox.game/c/gamejam2', placement: Placement['2nd'], - title: 'Facepunch Game Contest' + title: 'Facepunch Game Contest II' }, sboxIdent: 'fish.deathcard' }, @@ -111,3 +115,9 @@ export const Games: Game[] = [ contributors: ['ubre', 'Grodbert', 'ceitine', 'Luke', 'rndtrash', 'Mungus'] } ]; + +// Give all games a slug! +Games.forEach((game) => { + if (game.slug) return; + game.slug = game.title.toLowerCase().replaceAll(' ', '_').replaceAll('/[^a-z0-9]/gi', ''); +}); diff --git a/src/routes/games/+layout.svelte b/src/routes/games/+layout.svelte index e512550..16978b5 100644 --- a/src/routes/games/+layout.svelte +++ b/src/routes/games/+layout.svelte @@ -1,21 +1,94 @@ -

{game.title}

+ + Games / {game.title} + + +
+ +
+ +
+ +
+

quick fish games navigation:

+
+ {#each Games as game} + {@const activeClass = + game.slug == $page.params.slug || (!$page.params.slug && game == Games[0]) + ? 'bg-white text-blue' + : 'text-white'} + {game.title} + {/each} +
+
+
+ + +
+ + {#if game.contestDetails} + {@const placement = Placement[game.contestDetails.placement]} + +
+
+ {/if} +
+
+
+ + diff --git a/src/routes/games/[slug]/+page.server.ts b/src/routes/games/[slug]/+page.server.ts index 102e67b..ddd791e 100644 --- a/src/routes/games/[slug]/+page.server.ts +++ b/src/routes/games/[slug]/+page.server.ts @@ -3,7 +3,7 @@ import { Games, type Game } from '$lib/types/Games'; /** @type {import('./$types').EntryGenerator} */ export function entries() { return Games.map(function (g) { - return { slug: decodeURI(g.title) }; + return { slug: g.slug ?? 'fuck-you-kid' }; }); } diff --git a/src/routes/games/[slug]/+page.svelte b/src/routes/games/[slug]/+page.svelte index cf9513f..4c63611 100644 --- a/src/routes/games/[slug]/+page.svelte +++ b/src/routes/games/[slug]/+page.svelte @@ -3,10 +3,10 @@ import { Games, type Game } from '$lib/types/Games'; function getGameFromSlug(): Boolean { - let slug = $page.params.slug; - const decodedName = decodeURI(slug); + const slug = $page.params.slug; + const decodedName = slug?.toLocaleLowerCase(); - let target = Games.find((g) => g.title.toLowerCase() === decodedName.toLocaleLowerCase()); + const target = Games.find((g) => g.slug == decodedName); if (target == null) return false; initialGame = target; diff --git a/src/routes/play/[slug]/+layout.svelte b/src/routes/play/[slug]/+layout.svelte index f9ab05f..97d122a 100644 --- a/src/routes/play/[slug]/+layout.svelte +++ b/src/routes/play/[slug]/+layout.svelte @@ -10,14 +10,11 @@ return ident; }; - function getGameFromIdent(): boolean { + function getGameFromSlug(): boolean { const slug = $page.params.slug; - const decodedName = decodeURI(slug); + const decodedName = slug.toLocaleLowerCase(); - const target = Games.find( - (g) => - cullIdent(g.sboxIdent ?? 'fuck-you-kid').toLowerCase() === decodedName.toLocaleLowerCase() - ); + const target = Games.find((g) => (g.slug ?? 'fuck-you-kid').toLowerCase() === decodedName); if (target == null) return false; game = target; @@ -33,7 +30,7 @@ - {#if getGameFromIdent()} + {#if getGameFromSlug()} {#if game.summary} @@ -75,9 +72,4 @@ p { text-shadow: 2px 2px 2px rgba(0, 0, 0, 0.5); } - - .pixelated { - image-rendering: pixelated; - filter: drop-shadow(2px 2px 2px rgba(0, 0, 0, 0.5)); - } diff --git a/src/routes/play/[slug]/+page.server.ts b/src/routes/play/[slug]/+page.server.ts index e75f650..3ce4935 100644 --- a/src/routes/play/[slug]/+page.server.ts +++ b/src/routes/play/[slug]/+page.server.ts @@ -1,14 +1,9 @@ import { Games, type Game } from '$lib/types/Games'; -const cullIdent = (ident: string): string => { - if (ident.startsWith('fish.')) ident = ident.substring(5); - return ident; -}; - /** @type {import('./$types').EntryGenerator} */ export function entries() { return Games.filter((g) => g.sboxIdent != undefined).map(function (g) { - return { slug: cullIdent(decodeURI(g.sboxIdent ?? 'fuck-you-kid')) }; + return { slug: g.slug ?? 'fuck-you-kid' }; }); } @@ -17,10 +12,8 @@ import { error, redirect } from '@sveltejs/kit'; /** @type {import('./$types').PageLoad} */ export function load({ params }) { const slug = params.slug; - const decodedName = cullIdent(decodeURI(slug).toLocaleLowerCase()); - const game = Games.find( - (g) => cullIdent(g.sboxIdent?.toLowerCase() ?? 'fuck-you-kid') === decodedName - ); + const decodedName = slug.toLocaleLowerCase(); + const game = Games.find((g) => (g.slug?.toLowerCase() ?? 'fuck-you-kid') === decodedName); if (!game?.sboxIdent) { throw error(404, { diff --git a/src/routes/team/+layout.svelte b/src/routes/team/+layout.svelte index 7184fb9..4ffa5a2 100644 --- a/src/routes/team/+layout.svelte +++ b/src/routes/team/+layout.svelte @@ -233,17 +233,19 @@ - {#if member} - Team / {member.name} - {:else} - Team - {/if} + {#key member} + {#if member} + Team / {member.name} + {:else} + Team + {/if} + {/key}
-
+
{#await promise then options}