aboutsummaryrefslogtreecommitdiff
path: root/src/lib/List
diff options
context:
space:
mode:
authorFuwn <[email protected]>2026-04-01 11:02:59 +0000
committerFuwn <[email protected]>2026-04-01 11:02:59 +0000
commit9c98a399632b5cbe4be11350d72b84cb8fcbace9 (patch)
tree9278067a3f743a2c9504d80d1f277c1eb8d0a6df /src/lib/List
parentfix(badges): hide outbound link notice (diff)
downloaddue.moe-9c98a399632b5cbe4be11350d72b84cb8fcbace9.tar.xz
due.moe-9c98a399632b5cbe4be11350d72b84cb8fcbace9.zip
feat(ui): add april fools executive mode
Diffstat (limited to 'src/lib/List')
-rw-r--r--src/lib/List/Anime/CleanAnimeList.svelte13
-rw-r--r--src/lib/List/Anime/DueAnimeList.svelte10
-rw-r--r--src/lib/List/Anime/UpcomingAnimeList.svelte6
-rw-r--r--src/lib/List/ListTitle.svelte6
-rw-r--r--src/lib/List/Manga/CleanMangaList.svelte25
-rw-r--r--src/lib/List/Manga/MangaListTemplate.svelte33
6 files changed, 63 insertions, 30 deletions
diff --git a/src/lib/List/Anime/CleanAnimeList.svelte b/src/lib/List/Anime/CleanAnimeList.svelte
index 808a8e5b..93c8f208 100644
--- a/src/lib/List/Anime/CleanAnimeList.svelte
+++ b/src/lib/List/Anime/CleanAnimeList.svelte
@@ -19,6 +19,8 @@ import stateBin from "$stores/stateBin";
import localforage from "localforage";
import MediaRoulette from "../MediaRoulette.svelte";
import type { Title } from "../mediaTitle";
+import aprilFools from "$stores/aprilFools";
+import { executiveCopy, executiveTitle } from "$lib/Utility/executiveMode";
export let media: Media[];
export let title: Title;
@@ -222,7 +224,7 @@ const increment = (anime: Media, progress: number) => {
count={$settings.displayTotalDueEpisodes || $settings.displayTotalEpisodes
? totalEpisodeDueCount
: filteredMedia.length}
- {title}
+ title={executiveTitle($aprilFools, title)}
hideTime={dummy}
hideCount={dummy}
>
@@ -230,16 +232,17 @@ const increment = (anime: Media, progress: number) => {
<button
class="small-button"
onclick={() => (showRoulette = true)}
- title="Pick a random anime to watch"
+ title={executiveCopy($aprilFools, "Roulette")}
>
- Roulette
+ {executiveCopy($aprilFools, "Roulette")}
</button>
{/if}
</ListTitle>
{#if media.length === 0}
- No anime to display. <button onclick={() => (animeLists = cleanCache(user, $identity))}>
- Force refresh
+ {$aprilFools ? "No deliverables to display." : "No anime to display."}
+ <button onclick={() => (animeLists = cleanCache(user, $identity))}>
+ {executiveCopy($aprilFools, "Force refresh")}
</button>
{:else if $settings.displayMediaListFilter && !disableFilter}
<select value={selectedList} onchange={updateSelectedList}>
diff --git a/src/lib/List/Anime/DueAnimeList.svelte b/src/lib/List/Anime/DueAnimeList.svelte
index 2c707ffb..8e6cb0ef 100644
--- a/src/lib/List/Anime/DueAnimeList.svelte
+++ b/src/lib/List/Anime/DueAnimeList.svelte
@@ -14,6 +14,8 @@ import {
hasNoAiredEpisodes,
} from "$lib/Media/Anime/Airing/classify";
import { addNotification } from "$lib/Notification/store";
+import { executiveTitle } from "$lib/Utility/executiveMode";
+import aprilFools from "$stores/aprilFools";
import locale from "$stores/locale";
import identity from "$stores/identity";
@@ -153,4 +155,10 @@ const cleanMedia = (
};
</script>
-<AnimeList {endTime} {cleanMedia} bind:animeLists {user} title={$locale().lists.due.episodes} />
+<AnimeList
+ {endTime}
+ {cleanMedia}
+ bind:animeLists
+ {user}
+ title={executiveTitle($aprilFools, $locale().lists.due.episodes)}
+/>
diff --git a/src/lib/List/Anime/UpcomingAnimeList.svelte b/src/lib/List/Anime/UpcomingAnimeList.svelte
index d9b91122..6bee4955 100644
--- a/src/lib/List/Anime/UpcomingAnimeList.svelte
+++ b/src/lib/List/Anime/UpcomingAnimeList.svelte
@@ -12,6 +12,8 @@ import type { SubsPlease } from "$lib/Media/Anime/Airing/Subtitled/subsPlease";
import { addNotification } from "$lib/Notification/store";
import locale from "$stores/locale";
import identity from "$stores/identity";
+import aprilFools from "$stores/aprilFools";
+import { executiveTitle } from "$lib/Utility/executiveMode";
import { injectAiringTime } from "$lib/Media/Anime/Airing/Subtitled/match";
import {
hasDueEpisodes,
@@ -120,7 +122,7 @@ $: {
{cleanMedia}
bind:animeLists
{user}
- title={$locale().lists.upcoming.episodes}
+ title={executiveTitle($aprilFools, $locale().lists.upcoming.episodes)}
upcoming
/>
@@ -132,7 +134,7 @@ $: {
{cleanMedia}
bind:animeLists
{user}
- title={$locale().lists.upcoming.notYetReleased}
+ title={executiveTitle($aprilFools, $locale().lists.upcoming.notYetReleased)}
notYetReleased
plannedOnly
/>
diff --git a/src/lib/List/ListTitle.svelte b/src/lib/List/ListTitle.svelte
index d000e91f..535d0807 100644
--- a/src/lib/List/ListTitle.svelte
+++ b/src/lib/List/ListTitle.svelte
@@ -1,5 +1,7 @@
<script lang="ts">
import tooltip from "$lib/Tooltip/tooltip";
+import { executiveCopy } from "$lib/Utility/executiveMode";
+import aprilFools from "$stores/aprilFools";
import type { Title } from "./mediaTitle";
export let time: number | undefined = undefined;
@@ -14,7 +16,9 @@ export let hideCount = false;
</script>
<summary>
- <span title={title.hint || undefined} use:tooltip>{title.title}</span>
+ <span title={title.hint || undefined} use:tooltip
+ >{executiveCopy($aprilFools, title.title)}</span
+ >
{#if !hideCount}[{count === -1337 ? '...' : count}]{/if}
<!-- {#if !hideCount}[{#if count === -1337}...{:else}<NumberTicker
end={count}
diff --git a/src/lib/List/Manga/CleanMangaList.svelte b/src/lib/List/Manga/CleanMangaList.svelte
index 56de1df1..aab8be97 100644
--- a/src/lib/List/Manga/CleanMangaList.svelte
+++ b/src/lib/List/Manga/CleanMangaList.svelte
@@ -22,12 +22,14 @@ import settings from "$stores/settings";
import ListTitle from "../ListTitle.svelte";
import { onMount } from "svelte";
import root from "$lib/Utility/root";
+import { executiveCopy, executiveTitle } from "$lib/Utility/executiveMode";
import locale from "$stores/locale";
import Skeleton from "$lib/Loading/Skeleton.svelte";
import { browser } from "$app/environment";
import "../covers.css";
import CleanGrid from "../CleanGrid.svelte";
import CleanList from "../CleanList.svelte";
+import aprilFools from "$stores/aprilFools";
import stateBin from "$stores/stateBin";
import localforage from "localforage";
import MediaRoulette from "../MediaRoulette.svelte";
@@ -122,26 +124,30 @@ const increment = (manga: Media) => {
? totalEpisodeDueCount
: filteredMedia.length}
time={endTime / 1000}
- title={due
- ? $locale().lists.due.mangaAndLightNovels
- : $locale().lists.completed.mangaAndLightNovels}
+ title={executiveTitle(
+ $aprilFools,
+ due
+ ? $locale().lists.due.mangaAndLightNovels
+ : $locale().lists.completed.mangaAndLightNovels,
+ )}
hideTime={dummy}
hideCount={dummy}
>
{#if !dummy}
<button
class="small-button"
- title="Force a full refresh"
+ title={executiveCopy($aprilFools, "Force refresh")}
onclick={cleanCache}
- data-umami-event="Force Refresh Manga">Refresh</button
+ data-umami-event="Force Refresh Manga"
+ >{executiveCopy($aprilFools, "Refresh")}</button
>
{#if $settings.displayMediaRoulette && filteredMedia.length > 0}
<button
class="small-button"
onclick={() => (showRoulette = true)}
- title="Pick a random manga to read"
+ title={executiveCopy($aprilFools, "Pick a random manga to read")}
>
- Roulette
+ {executiveCopy($aprilFools, "Roulette")}
</button>
{/if}
{/if}
@@ -177,8 +183,9 @@ const increment = (manga: Media) => {
{/if}
<p>
- No manga to display. <button onclick={cleanCache} data-umami-event="Force Refresh No Manga"
- >Force refresh</button
+ {$aprilFools ? "No deliverables to display." : "No manga to display."}
+ <button onclick={cleanCache} data-umami-event="Force Refresh No Manga"
+ >{executiveCopy($aprilFools, "Force refresh")}</button
>
</p>
diff --git a/src/lib/List/Manga/MangaListTemplate.svelte b/src/lib/List/Manga/MangaListTemplate.svelte
index 52649098..daa3a27b 100644
--- a/src/lib/List/Manga/MangaListTemplate.svelte
+++ b/src/lib/List/Manga/MangaListTemplate.svelte
@@ -15,6 +15,8 @@ import { chapterCount, hydrateChapterCounts } from "$lib/Media/Manga/chapters";
import { options } from "$lib/Notification/options";
import { addNotification } from "$lib/Notification/store";
import privilegedUser from "$lib/Utility/privilegedUser";
+import { executiveCopy, executiveTitle } from "$lib/Utility/executiveMode";
+import aprilFools from "$stores/aprilFools";
import identity from "$stores/identity";
import lastPruneTimes from "$stores/lastPruneTimes";
import locale from "$stores/locale";
@@ -50,6 +52,13 @@ let keyCacher: ReturnType<typeof setInterval> | undefined;
let keyCacheMinutes = -1;
let nativeEnhancementVersion = 0;
let nativeEnhancementKey = "";
+const mangaListTitle = () =>
+ executiveTitle(
+ $aprilFools,
+ due
+ ? $locale().lists.due.mangaAndLightNovels
+ : $locale().lists.completed.mangaAndLightNovels,
+ );
$: authorised =
env.PUBLIC_ALWAYS_REFRESH_MANGA === "true" || privilegedUser($identity.id);
@@ -366,26 +375,26 @@ const cleanCache = () => {
<ListTitle
count={0}
time={endTime / 1000}
- title={$locale().lists.due.mangaAndLightNovels}
+ title={mangaListTitle()}
hideTime={dummy}
hideCount={dummy}
>
{#if !dummy}
<button
data-umami-event="Force Refresh Manga"
- title="Force a full refresh"
+ title={executiveCopy($aprilFools, "Force refresh")}
onclick={() => {
cleanCache();
forceFlag = true;
- }}>Refresh</button
+ }}>{executiveCopy($aprilFools, "Refresh")}</button
>
{/if}
</ListTitle>
{:else}
<ListTitle
{progress}
- title={$locale().lists.due.mangaAndLightNovels}
+ title={mangaListTitle()}
hideTime={dummy}
hideCount={dummy}
/>
@@ -415,26 +424,26 @@ const cleanCache = () => {
<ListTitle
count={0}
time={endTime / 1000}
- title={$locale().lists.due.mangaAndLightNovels}
+ title={mangaListTitle()}
hideTime={dummy}
hideCount={dummy}
>
{#if !dummy}
<button
data-umami-event="Force Refresh Manga"
- title="Force a full refresh"
+ title={executiveCopy($aprilFools, "Force refresh")}
onclick={() => {
cleanCache();
forceFlag = true;
- }}>Refresh</button
+ }}>{executiveCopy($aprilFools, "Refresh")}</button
>
{/if}
</ListTitle>
{:else}
<ListTitle
{progress}
- title={$locale().lists.due.mangaAndLightNovels}
+ title={mangaListTitle()}
hideTime={dummy}
hideCount={dummy}
/>
@@ -447,19 +456,19 @@ const cleanCache = () => {
<ListTitle
count={cleanedMedia.length}
time={endTime / 1000}
- title={$locale().lists.due.mangaAndLightNovels}
+ title={mangaListTitle()}
hideTime={dummy}
hideCount={dummy}
>
{#if !dummy}
<button
data-umami-event="Force Refresh Manga"
- title="Force a full refresh"
+ title={executiveCopy($aprilFools, "Force refresh")}
onclick={() => {
cleanCache();
forceFlag = true;
- }}>Refresh</button
+ }}>{executiveCopy($aprilFools, "Refresh")}</button
>
{/if}
</ListTitle>
@@ -484,7 +493,7 @@ const cleanCache = () => {
<ListTitle
count={-1337}
time={0}
- title={$locale().lists.due.mangaAndLightNovels}
+ title={mangaListTitle()}
hideTime={dummy}
hideCount={dummy}
/>