aboutsummaryrefslogtreecommitdiff
path: root/src/routes
diff options
context:
space:
mode:
Diffstat (limited to 'src/routes')
-rw-r--r--src/routes/+layout.svelte60
-rw-r--r--src/routes/+page.svelte14
-rw-r--r--src/routes/completed/+page.svelte10
3 files changed, 62 insertions, 22 deletions
diff --git a/src/routes/+layout.svelte b/src/routes/+layout.svelte
index 39a2e40b..d08e6828 100644
--- a/src/routes/+layout.svelte
+++ b/src/routes/+layout.svelte
@@ -29,10 +29,15 @@ import settingsSyncTimes from "$stores/settingsSyncTimes";
import Announcement from "$lib/Announcement.svelte";
import Message from "$lib/Loading/Message.svelte";
import { requestNotifications } from "$lib/Utility/notifications";
+import { executiveCopy } from "$lib/Utility/executiveMode";
import { database as userDatabase } from "$lib/Database/IDB/user";
import CommandPalette from "$lib/CommandPalette/CommandPalette.svelte";
import { defaultActions } from "$lib/CommandPalette/actions";
import { toolsAsCommandPaletteActions } from "$lib/Tools/tools";
+import aprilFools, {
+ aprilFoolsVisible,
+ hydrateAprilFools,
+} from "$stores/aprilFools";
import localforage from "localforage";
import { dev } from "$app/environment";
import { injectAnalytics } from "@vercel/analytics/sveltekit";
@@ -90,6 +95,8 @@ const handleScroll = () => {
};
onMount(async () => {
+ hydrateAprilFools();
+
if (browser) {
if (await localforage.getItem("redirect")) {
window.location.href = (await localforage.getItem("redirect")) ?? "/";
@@ -213,41 +220,66 @@ $: {
{:else}
<Announcement />
+ {#if aprilFoolsVisible()}
+ <div class="card card-centered april-fools-banner">
+ <b>Executive Mode {$aprilFools ? 'enabled' : 'disabled'}.</b>
+ All media are now deliverables.
+ <Spacer />
+ <button class="small-button" onclick={() => aprilFools.toggle()}>
+ {$aprilFools ? 'Disable' : 'Enable'} Executive Mode
+ </button>
+ </div>
+ {/if}
+
<div class="container">
<div class="card card-centered header" class:header-hidden={!isHeaderVisible}>
<div>
- <a href={root('/')} class="header-item">{$locale().navigation.home}</a><a
+ <a href={root('/')} class="header-item"
+ >{executiveCopy($aprilFools, $locale().navigation.home)}</a
+ ><a
href={root('/completed')}
class="header-item"
>
- {$locale().navigation.completed}
+ {executiveCopy($aprilFools, $locale().navigation.completed)}
</a>
<Dropdown
items={[
- { name: $locale().navigation.subtitleSchedule, url: root('/schedule') },
+ {
+ name: executiveCopy($aprilFools, $locale().navigation.subtitleSchedule),
+ url: root('/schedule')
+ },
{ name: $locale().navigation.hololive, url: root('/hololive') },
{ name: $locale().tools.tool.characterBirthdays.short, url: root('/birthdays') },
- { name: $locale().navigation.newReleases, url: root('/updates') }
+ { name: executiveCopy($aprilFools, $locale().navigation.newReleases), url: root('/updates') }
]}
header={false}
>
- <span slot="title" class="header-item">{$locale().navigation.schedule}</span>
+ <span slot="title" class="header-item">
+ {executiveCopy($aprilFools, $locale().navigation.schedule)}
+ </span>
</Dropdown>
- <a href={root('/tools')} class="header-item">{$locale().navigation.tools}</a>
- <a href={root('/settings')} class="header-item">{$locale().navigation.settings}</a>
+ <a href={root('/tools')} class="header-item"
+ >{executiveCopy($aprilFools, $locale().navigation.tools)}</a
+ >
+ <a href={root('/settings')} class="header-item"
+ >{executiveCopy($aprilFools, $locale().navigation.settings)}</a
+ >
<span class="header-item opaque separator">•</span>
{#if data.user}
<Dropdown
items={[
- { name: $locale().navigation.myProfile, url: root(`/user/${$userIdentity.name}`) },
{
- name: $locale().navigation.myBadgeWall,
+ name: executiveCopy($aprilFools, $locale().navigation.myProfile),
+ url: root(`/user/${$userIdentity.name}`)
+ },
+ {
+ name: executiveCopy($aprilFools, $locale().navigation.myBadgeWall),
url: root(`/user/${$userIdentity.name}/badges`)
},
{
- name: $locale().navigation.logOut,
+ name: executiveCopy($aprilFools, $locale().navigation.logOut),
url: '#',
preventDefault: true,
onClick: async () => {
@@ -263,7 +295,7 @@ $: {
header={false}
>
<span slot="title" class="header-item">
- {$locale().navigation.profile}
+ {executiveCopy($aprilFools, $locale().navigation.profile)}
</span>
</Dropdown>
{/if}
@@ -279,7 +311,7 @@ $: {
);
}}
>
- {$locale().navigation.logIn}
+ {executiveCopy($aprilFools, $locale().navigation.logIn)}
</a>
{:else if data.user}
<a href={root(`/user/${$userIdentity.name}`)} class="header-item">
@@ -332,6 +364,10 @@ $: {
transition: transform 0.3s ease;
}
+ .april-fools-banner {
+ margin-bottom: 1rem;
+ }
+
.header-hidden {
transform: translateY(-150%);
}
diff --git a/src/routes/+page.svelte b/src/routes/+page.svelte
index 268e9713..a3fcad28 100644
--- a/src/routes/+page.svelte
+++ b/src/routes/+page.svelte
@@ -8,6 +8,8 @@ import ListTitle from "$lib/List/ListTitle.svelte";
import HeadTitle from "$lib/Home/HeadTitle.svelte";
import { createHeightObserver } from "$lib/Utility/html.js";
import Skeleton from "$lib/Loading/Skeleton.svelte";
+import aprilFools from "$stores/aprilFools";
+import { executiveTitle } from "$lib/Utility/executiveMode";
import locale from "$stores/locale.js";
import Landing from "$lib/Landing.svelte";
import LandingHero from "$lib/LandingHero.svelte";
@@ -106,12 +108,12 @@ onDestroy(() => removeHeightObserver?.());
{#if UpcomingAnimeListComponent}
<UpcomingAnimeListComponent user={data.user} />
{:else}
- <ListTitle title={$locale().lists.upcoming.episodes} />
+ <ListTitle title={executiveTitle($aprilFools, $locale().lists.upcoming.episodes)} />
<Skeleton card={false} count={5} height="0.9rem" list />
{/if}
{:else}
- <ListTitle title={$locale().lists.upcoming.episodes} />
+ <ListTitle title={executiveTitle($aprilFools, $locale().lists.upcoming.episodes)} />
<Skeleton card={false} count={5} height="0.9rem" list />
{/if}
@@ -123,7 +125,7 @@ onDestroy(() => removeHeightObserver?.());
<IndexColumnComponent user={data.user} userIdentity={$userIdentity} />
{:else}
<details bind:open={$stateBin.dueAnimeListOpen} class="list list-due">
- <ListTitle title={$locale().lists.due.episodes} />
+ <ListTitle title={executiveTitle($aprilFools, $locale().lists.due.episodes)} />
<Skeleton card={false} count={5} height="0.9rem" list />
</details>
@@ -137,7 +139,7 @@ onDestroy(() => removeHeightObserver?.());
<IndexColumnComponent user={data.user} userIdentity={$userIdentity} />
{:else}
<details bind:open={$stateBin.dueAnimeListOpen} class="list list-due">
- <ListTitle title={$locale().lists.due.episodes} />
+ <ListTitle title={executiveTitle($aprilFools, $locale().lists.due.episodes)} />
<Skeleton card={false} count={5} height="0.9rem" list />
</details>
@@ -154,12 +156,12 @@ onDestroy(() => removeHeightObserver?.());
due={true}
/>
{:else}
- <ListTitle title={$locale().lists.due.mangaAndLightNovels} />
+ <ListTitle title={executiveTitle($aprilFools, $locale().lists.due.mangaAndLightNovels)} />
<Skeleton card={false} count={5} height="0.9rem" list />
{/if}
{:else}
- <ListTitle title={$locale().lists.due.mangaAndLightNovels} />
+ <ListTitle title={executiveTitle($aprilFools, $locale().lists.due.mangaAndLightNovels)} />
<Skeleton card={false} count={5} height="0.9rem" list />
{/if}
diff --git a/src/routes/completed/+page.svelte b/src/routes/completed/+page.svelte
index bcad912b..69706b8e 100644
--- a/src/routes/completed/+page.svelte
+++ b/src/routes/completed/+page.svelte
@@ -9,6 +9,8 @@ import HeadTitle from "$lib/Home/HeadTitle.svelte";
import { createHeightObserver } from "$lib/Utility/html.js";
import Skeleton from "$lib/Loading/Skeleton.svelte";
import locale from "$stores/locale.js";
+import aprilFools from "$stores/aprilFools";
+import { executiveTitle } from "$lib/Utility/executiveMode";
import Landing from "$lib/Landing.svelte";
import stateBin, { hydrateStateBin } from "$stores/stateBin.js";
import type { PageData } from "./$types";
@@ -84,12 +86,12 @@ onDestroy(() => removeHeightObserver?.());
{#if WatchingAnimeListComponent}
<WatchingAnimeListComponent user={data.user} />
{:else}
- <ListTitle title={$locale().lists.completed.anime} />
+ <ListTitle title={executiveTitle($aprilFools, $locale().lists.completed.anime)} />
<Skeleton card={false} count={5} height="0.9rem" list />
{/if}
{:else}
- <ListTitle title={$locale().lists.completed.anime} />
+ <ListTitle title={executiveTitle($aprilFools, $locale().lists.completed.anime)} />
<Skeleton card={false} count={5} height="0.9rem" list />
{/if}
@@ -106,12 +108,12 @@ onDestroy(() => removeHeightObserver?.());
due={false}
/>
{:else}
- <ListTitle title={$locale().lists.completed.mangaAndLightNovels} />
+ <ListTitle title={executiveTitle($aprilFools, $locale().lists.completed.mangaAndLightNovels)} />
<Skeleton card={false} count={5} height="0.9rem" list />
{/if}
{:else}
- <ListTitle title={$locale().lists.completed.mangaAndLightNovels} />
+ <ListTitle title={executiveTitle($aprilFools, $locale().lists.completed.mangaAndLightNovels)} />
<Skeleton card={false} count={5} height="0.9rem" list />
{/if}