diff --git a/package-lock.json b/package-lock.json index ba5d22a..5d8cf8f 100644 --- a/package-lock.json +++ b/package-lock.json @@ -29,6 +29,7 @@ "svelte": "^4.0.5", "svelte-check": "^3.4.3", "svelte-heros-v2": "^0.9.3", + "svelte-local-storage-store": "^0.6.0", "svelte-multicssclass": "^2.1.1", "tailwindcss": "^3.3.3", "tslib": "^2.4.1", @@ -4871,6 +4872,18 @@ "svelte": "^3.19.0 || ^4.0.0-next.0" } }, + "node_modules/svelte-local-storage-store": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/svelte-local-storage-store/-/svelte-local-storage-store-0.6.0.tgz", + "integrity": "sha512-UbCY/yT/YUadU5IX/gZkoRQnA+ebFZHKKQjlJvfWHnBj3CPe9sNn8ndxYz/xy4LUzGjuBLq8+wH5RYK54ba3wA==", + "dev": true, + "engines": { + "node": ">=0.14" + }, + "peerDependencies": { + "svelte": "^3.48.0 || ^4.0.0" + } + }, "node_modules/svelte-multicssclass": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/svelte-multicssclass/-/svelte-multicssclass-2.1.1.tgz", diff --git a/package.json b/package.json index faaaf7a..2c14343 100644 --- a/package.json +++ b/package.json @@ -28,6 +28,7 @@ "svelte": "^4.0.5", "svelte-check": "^3.4.3", "svelte-heros-v2": "^0.9.3", + "svelte-local-storage-store": "^0.6.0", "svelte-multicssclass": "^2.1.1", "tailwindcss": "^3.3.3", "tslib": "^2.4.1", diff --git a/src/lib/stores.ts b/src/lib/stores.ts index bcfcad4..55eba30 100644 --- a/src/lib/stores.ts +++ b/src/lib/stores.ts @@ -1,5 +1,4 @@ -import { type Writable, writable } from 'svelte/store'; +import { persisted } from 'svelte-local-storage-store'; +import type { Writable } from 'svelte/store'; -export const registered: Writable<{ - username: string; -} | null> = writable(null); +export const playAudio: Writable = persisted('playAudio', false); diff --git a/src/routes/+layout.svelte b/src/routes/+layout.svelte index 16a112d..5fa8163 100644 --- a/src/routes/+layout.svelte +++ b/src/routes/+layout.svelte @@ -2,6 +2,8 @@ import '../app.css'; import { env } from '$env/dynamic/public'; import { goto } from '$app/navigation'; + import Settings from './Settings.svelte'; + import { playAudio } from '$lib/stores'; let navPaths = [ { @@ -56,9 +58,20 @@ let isTouch = false; let nav: HTMLDivElement; + let settings: HTMLDialogElement; { + if (e.key === 'Escape') { + e.preventDefault(); + if (settings.open) { + settings.close(); + } else { + settings.show(); + } + } + }} on:touchend={(e) => { // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore @@ -83,9 +96,12 @@ let activePath = navPaths.find((path) => path.active); if (activePath !== undefined) { goto(activePath.href); - } else { - showMenuPermanent = !showMenuPermanent; + } else if ($playAudio) { + new Audio( + `${env.PUBLIC_BASE_PATH}/aud/chest-${showMenuPermanent ? 'close' : 'open'}.mp3` + ).play(); } + showMenuPermanent = !showMenuPermanent; } }} on:touchend={() => { @@ -147,3 +163,13 @@ + + + diff --git a/src/routes/Settings.svelte b/src/routes/Settings.svelte new file mode 100644 index 0000000..59262d2 --- /dev/null +++ b/src/routes/Settings.svelte @@ -0,0 +1,42 @@ + + +
+

Einstellungen

+
+
+
+ {#each settings as setting} +
+

{setting.name}

+ + + +
+ { + // eslint-disable-next-line @typescript-eslint/ban-ts-comment + // @ts-ignore + setting.store.set(e.target.checked); + }} + /> + {/each} +
+
+
+
diff --git a/static/aud/chest-close.mp3 b/static/aud/chest-close.mp3 new file mode 100644 index 0000000..01ab259 Binary files /dev/null and b/static/aud/chest-close.mp3 differ diff --git a/static/aud/chest-open.mp3 b/static/aud/chest-open.mp3 new file mode 100644 index 0000000..854424b Binary files /dev/null and b/static/aud/chest-open.mp3 differ