From daf3f779aa5d90f94da55b2d07620fa680c4dabc Mon Sep 17 00:00:00 2001 From: Jonas Kappa Date: Sun, 28 Dec 2025 12:51:43 +0100 Subject: [PATCH] Editor: added game creation and deletion --- src/lib/RessourceManager.svelte | 44 +++++++++- src/lib/Types.ts | 11 +++ src/routes/+page.svelte | 1 + src/routes/editor/+page.svelte | 146 ++++++++++++++++++++++++++++++++ 4 files changed, 199 insertions(+), 3 deletions(-) create mode 100644 src/routes/editor/+page.svelte diff --git a/src/lib/RessourceManager.svelte b/src/lib/RessourceManager.svelte index 6619dbc..938e67b 100644 --- a/src/lib/RessourceManager.svelte +++ b/src/lib/RessourceManager.svelte @@ -27,6 +27,9 @@ let showDeleteDir = $state(false); let dirToDelete: Directory | undefined = $state(); + let showDeleteRessource = $state(false); + let resToDelete: Ressource | undefined = $state(); + let showRenameFile = $state(false); let fileToRename: Ressource | undefined = $state(); let newFileName = $state(""); @@ -73,23 +76,35 @@ }); } - function deleteRessource(res: Ressource | Directory) { + async function deleteRessource(res: Ressource | Directory): Promise { if (isRessource(res)) { - axios + return axios .delete(url("/cdn/" + res.user + "/" + res.filename), { withCredentials: true }) .then((response) => { if (response.status === 200) { fetchDirectory(); + return true; } else { alert("Something went wrong: " + response.status); + return false; } + }) + .catch((err) => { + console.error(err); + return false; }); } else if (isDir(res)) { showDeleteDir = true; dirToDelete = res; + return true; } + return false; + } + + function deleteRessourceCancel() { + resToDelete = undefined; } async function deleteDir() { @@ -313,7 +328,10 @@ class="btn border-red-600 text-red-600" onclick={(event) => { event.stopPropagation(); - deleteRessource(ressource); + if (isRessource(ressource)) { + showDeleteRessource = true; + resToDelete = ressource; + } }}> @@ -365,6 +383,26 @@ + { + if (resToDelete === undefined) return false; + return deleteRessource(resToDelete); + }} + cancelFn={deleteRessourceCancel} +> + {#snippet header()} +

Ressource löschen

+ {/snippet} + +
+ Soll die Ressource {resToDelete?.name} wirklich gelöscht werden? +
+ {#if error.length > 0} +
{error}
+ {/if} +
+ {#snippet header()}

Ordner löschen

diff --git a/src/lib/Types.ts b/src/lib/Types.ts index c858822..f110eb4 100644 --- a/src/lib/Types.ts +++ b/src/lib/Types.ts @@ -22,3 +22,14 @@ export function isDir(dir: Directory | Ressource): dir is Directory { export function isRessource(ressource: Ressource | Directory): ressource is Ressource { return (ressource as Directory).isDir === undefined; } + +export type GameId = string; + +export type Game = { + name: string; + owner: string; + _id: GameId; + walls: WallId[]; +}; + +export type WallId = string; diff --git a/src/routes/+page.svelte b/src/routes/+page.svelte index 0915e07..5dbf3c4 100644 --- a/src/routes/+page.svelte +++ b/src/routes/+page.svelte @@ -59,6 +59,7 @@ +
diff --git a/src/routes/editor/+page.svelte b/src/routes/editor/+page.svelte new file mode 100644 index 0000000..71dc1e4 --- /dev/null +++ b/src/routes/editor/+page.svelte @@ -0,0 +1,146 @@ + + +
+
+

Editor

+ +
+
+ {#each games as game} +
+ {game.name} + + +
+ {/each} +
+
+ + + {#snippet header()} +

Neues Spiel

+ {/snippet} +
+ +
+ +
+ {#if error.length > 0} +
{error}
+ {/if} +
+
+ + + {#snippet header()} +

Spiel löschen

+ {/snippet} + +
Soll das Spiel {gameToDelete?.name} wirklich gelöscht werden?
+ {#if error.length > 0} +
{error}
+ {/if} +
+ +