aboutsummaryrefslogtreecommitdiff
path: root/src/lib/Schedule
diff options
context:
space:
mode:
authorFuwn <[email protected]>2026-03-01 16:20:51 -0800
committerFuwn <[email protected]>2026-03-01 16:21:02 -0800
commiteae5d24d9e79e59a19d4721caaeaa0ca650ecb33 (patch)
tree1b685bb248e051dfa26d2bfdebe6689402dd93c5 /src/lib/Schedule
parentchore(tooling): remove legacy eslint and prettier (diff)
downloaddue.moe-eae5d24d9e79e59a19d4721caaeaa0ca650ecb33.tar.xz
due.moe-eae5d24d9e79e59a19d4721caaeaa0ca650ecb33.zip
chore(biome): drop formatter style overrides
Diffstat (limited to 'src/lib/Schedule')
-rw-r--r--src/lib/Schedule/CoverBypass.svelte18
-rw-r--r--src/lib/Schedule/Crunchyroll.svelte52
-rw-r--r--src/lib/Schedule/Days.svelte159
-rw-r--r--src/lib/Schedule/container.css2
4 files changed, 126 insertions, 105 deletions
diff --git a/src/lib/Schedule/CoverBypass.svelte b/src/lib/Schedule/CoverBypass.svelte
index 74810105..2656a696 100644
--- a/src/lib/Schedule/CoverBypass.svelte
+++ b/src/lib/Schedule/CoverBypass.svelte
@@ -1,12 +1,12 @@
<script lang="ts">
-import type { Media } from '$lib/Data/AniList/media';
-import MediaTitleDisplay from '$lib/List/MediaTitleDisplay.svelte';
-import type { SubsPleaseEpisode } from '$lib/Media/Anime/Airing/Subtitled/subsPlease';
+import type { Media } from "$lib/Data/AniList/media";
+import MediaTitleDisplay from "$lib/List/MediaTitleDisplay.svelte";
+import type { SubsPleaseEpisode } from "$lib/Media/Anime/Airing/Subtitled/subsPlease";
-import { outboundLink } from '$lib/Media/links';
-import tooltip from '$lib/Tooltip/tooltip';
-import { abbreviate } from '$lib/Utility/string';
-import settings from '$stores/settings';
+import { outboundLink } from "$lib/Media/links";
+import tooltip from "$lib/Tooltip/tooltip";
+import { abbreviate } from "$lib/Utility/string";
+import settings from "$stores/settings";
export let media: Media | null;
export let entry: SubsPleaseEpisode;
@@ -16,7 +16,9 @@ export let showTooltip = true;
const abbreviateTo = 40;
const titleSelect = (media: Media | null) =>
- media ? media.title.english || media.title.romaji || media.title.native : null;
+ media
+ ? media.title.english || media.title.romaji || media.title.native
+ : null;
</script>
<a
diff --git a/src/lib/Schedule/Crunchyroll.svelte b/src/lib/Schedule/Crunchyroll.svelte
index becabebc..1f5f121c 100644
--- a/src/lib/Schedule/Crunchyroll.svelte
+++ b/src/lib/Schedule/Crunchyroll.svelte
@@ -1,46 +1,50 @@
<script lang="ts">
-import Spacer from '$lib/Layout/Spacer.svelte';
-import crunchyroll from '$lib/Data/Static/crunchyroll.json';
-import './container.css';
-
-interface CrunchyrollMedia<T = number | 'soon' | 'continuing'> {
- year: number;
- month: number;
- day: T;
- title: string;
+import Spacer from "$lib/Layout/Spacer.svelte";
+import crunchyroll from "$lib/Data/Static/crunchyroll.json";
+import "./container.css";
+
+interface CrunchyrollMedia<T = number | "soon" | "continuing"> {
+ year: number;
+ month: number;
+ day: T;
+ title: string;
}
type KnownMedia = { [key: string]: CrunchyrollMedia<number>[] };
const days: KnownMedia = crunchyroll
- .filter((media) => media.day !== 'soon' && media.day !== 'continuing')
- .reduce((acc: KnownMedia, media) => {
- const date = new Date(media.year, media.month - 1, media.day as number).toLocaleDateString();
+ .filter((media) => media.day !== "soon" && media.day !== "continuing")
+ .reduce((acc: KnownMedia, media) => {
+ const date = new Date(
+ media.year,
+ media.month - 1,
+ media.day as number,
+ ).toLocaleDateString();
- if (!acc[date]) acc[date] = [];
+ if (!acc[date]) acc[date] = [];
- acc[date].push(media as CrunchyrollMedia<number>);
+ acc[date].push(media as CrunchyrollMedia<number>);
- return acc;
- }, {});
+ return acc;
+ }, {});
const continuing: CrunchyrollMedia<number | string>[] = crunchyroll.filter(
- (media) => media.day === 'continuing'
+ (media) => media.day === "continuing",
);
const soon: CrunchyrollMedia<number | string>[] = crunchyroll.filter(
- (media) => media.day === 'soon'
+ (media) => media.day === "soon",
);
$: columnCount = Math.ceil(Object.keys(days).length / 2);
const ordinalSuffix = (i: number) => {
- const j = i % 10;
- const k = i % 100;
+ const j = i % 10;
+ const k = i % 100;
- if (j === 1 && k !== 11) return i + 'st';
- if (j === 2 && k !== 12) return i + 'nd';
- if (j === 3 && k !== 13) return i + 'rd';
+ if (j === 1 && k !== 11) return i + "st";
+ if (j === 2 && k !== 12) return i + "nd";
+ if (j === 3 && k !== 13) return i + "rd";
- return i + 'th';
+ return i + "th";
};
</script>
diff --git a/src/lib/Schedule/Days.svelte b/src/lib/Schedule/Days.svelte
index ed0ee4d9..0eb30579 100644
--- a/src/lib/Schedule/Days.svelte
+++ b/src/lib/Schedule/Days.svelte
@@ -1,102 +1,117 @@
<script lang="ts">
-import { browser } from '$app/environment';
-import type { AniListAuthorisation } from '$lib/Data/AniList/identity';
-import { mediaListCollection, Type, type Media } from '$lib/Data/AniList/media';
-import { findClosestMedia } from '$lib/Media/Anime/Airing/Subtitled/match';
-import type { SubsPlease, SubsPleaseEpisode } from '$lib/Media/Anime/Airing/Subtitled/subsPlease';
-import { outboundLink } from '$lib/Media/links';
-import { parseOrDefault } from '$lib/Utility/parameters';
-import settings from '$stores/settings';
-import CoverBypass from './CoverBypass.svelte';
-import '$lib/List/covers.css';
-import ParallaxImage from '$lib/Image/ParallaxImage.svelte';
-import LinkedTooltip from '$lib/Tooltip/LinkedTooltip.svelte';
-import { onMount } from 'svelte';
-import identity from '$stores/identity';
-import anime from '$stores/anime';
-import lastPruneTimes from '$stores/lastPruneTimes';
-import Message from '$lib/Loading/Message.svelte';
-import Skeleton from '$lib/Loading/Skeleton.svelte';
-import RateLimitedError from '$lib/Error/RateLimited.svelte';
+import { browser } from "$app/environment";
+import type { AniListAuthorisation } from "$lib/Data/AniList/identity";
+import { mediaListCollection, Type, type Media } from "$lib/Data/AniList/media";
+import { findClosestMedia } from "$lib/Media/Anime/Airing/Subtitled/match";
+import type {
+ SubsPlease,
+ SubsPleaseEpisode,
+} from "$lib/Media/Anime/Airing/Subtitled/subsPlease";
+import { outboundLink } from "$lib/Media/links";
+import { parseOrDefault } from "$lib/Utility/parameters";
+import settings from "$stores/settings";
+import CoverBypass from "./CoverBypass.svelte";
+import "$lib/List/covers.css";
+import ParallaxImage from "$lib/Image/ParallaxImage.svelte";
+import LinkedTooltip from "$lib/Tooltip/LinkedTooltip.svelte";
+import { onMount } from "svelte";
+import identity from "$stores/identity";
+import anime from "$stores/anime";
+import lastPruneTimes from "$stores/lastPruneTimes";
+import Message from "$lib/Loading/Message.svelte";
+import Skeleton from "$lib/Loading/Skeleton.svelte";
+import RateLimitedError from "$lib/Error/RateLimited.svelte";
export let subsPlease: SubsPlease;
export let scheduledMedia: Partial<Media[]>;
export let forceListMode = false;
export let user: AniListAuthorisation | undefined;
-const urlParameters = browser ? new URLSearchParams(window.location.search) : null;
-let day: string | null = parseOrDefault(urlParameters, 'day', null);
+const urlParameters = browser
+ ? new URLSearchParams(window.location.search)
+ : null;
+let day: string | null = parseOrDefault(urlParameters, "day", null);
let mediaListPromise: Promise<Media[]>;
onMount(async () => {
- if (user === undefined || $identity.id === -2) mediaListPromise = Promise.resolve([]);
- else
- mediaListPromise = mediaListCollection(
- user,
- $identity,
- Type.Anime,
- $anime,
- $lastPruneTimes.anime,
- {
- all: true
- }
- );
+ if (user === undefined || $identity.id === -2)
+ mediaListPromise = Promise.resolve([]);
+ else
+ mediaListPromise = mediaListCollection(
+ user,
+ $identity,
+ Type.Anime,
+ $anime,
+ $lastPruneTimes.anime,
+ {
+ all: true,
+ },
+ );
});
-const shiftSubsPleaseSchedule = (schedule: SubsPlease['schedule']) => {
- const shiftedSchedule: { [key: string]: SubsPleaseEpisode[] } = {};
+const shiftSubsPleaseSchedule = (schedule: SubsPlease["schedule"]) => {
+ const shiftedSchedule: { [key: string]: SubsPleaseEpisode[] } = {};
- if (day && Object.keys(schedule).includes(day)) {
- shiftedSchedule[day] = schedule[day as keyof typeof schedule] as unknown as SubsPleaseEpisode[];
+ if (day && Object.keys(schedule).includes(day)) {
+ shiftedSchedule[day] = schedule[
+ day as keyof typeof schedule
+ ] as unknown as SubsPleaseEpisode[];
- return shiftedSchedule;
- }
+ return shiftedSchedule;
+ }
- const days = Object.keys(schedule);
- const currentDayIndex = days.indexOf(new Date().toLocaleString('en-us', { weekday: 'long' }));
+ const days = Object.keys(schedule);
+ const currentDayIndex = days.indexOf(
+ new Date().toLocaleString("en-us", { weekday: "long" }),
+ );
- days
- .slice(currentDayIndex)
- .concat(days.slice(0, currentDayIndex))
- .forEach((day) => {
- const scheduleEntry = schedule[day as keyof typeof schedule];
+ days
+ .slice(currentDayIndex)
+ .concat(days.slice(0, currentDayIndex))
+ .forEach((day) => {
+ const scheduleEntry = schedule[day as keyof typeof schedule];
- shiftedSchedule[day] = Array.isArray(scheduleEntry)
- ? scheduleEntry
- : ([scheduleEntry] as unknown as SubsPleaseEpisode[]);
- });
+ shiftedSchedule[day] = Array.isArray(scheduleEntry)
+ ? scheduleEntry
+ : ([scheduleEntry] as unknown as SubsPleaseEpisode[]);
+ });
- Object.entries(shiftedSchedule).forEach(([day, scheduleEntry]) => {
- if (scheduleEntry.length === 0) {
- delete shiftedSchedule[day];
- }
- });
+ Object.entries(shiftedSchedule).forEach(([day, scheduleEntry]) => {
+ if (scheduleEntry.length === 0) {
+ delete shiftedSchedule[day];
+ }
+ });
- return shiftedSchedule;
+ return shiftedSchedule;
};
-const associateMedia = (media: (Media | undefined)[], title: string, mediaList: Media[]) => {
- const closestMedia = findClosestMedia(media as Media[], title);
+const associateMedia = (
+ media: (Media | undefined)[],
+ title: string,
+ mediaList: Media[],
+) => {
+ const closestMedia = findClosestMedia(media as Media[], title);
- if ($settings.displayScheduleFilterList && closestMedia && mediaList)
- return mediaList.find((m) => m.id === closestMedia?.id) || null;
+ if ($settings.displayScheduleFilterList && closestMedia && mediaList)
+ return mediaList.find((m) => m.id === closestMedia?.id) || null;
- return closestMedia;
+ return closestMedia;
};
const episode = (media: Media, weekday: string) => {
- if (media.nextAiringEpisode?.episode === 1) return 1;
-
- if (
- media.nextAiringEpisode?.airingAt &&
- weekday === new Date().toLocaleString('en-us', { weekday: 'long' }) &&
- new Date(media.nextAiringEpisode.airingAt * 1000).getTime() - new Date().getTime() >
- 24 * 60 * 60 * 1000
- )
- return media.nextAiringEpisode?.episode - 1;
-
- return media.nextAiringEpisode?.episode || 1;
+ if (media.nextAiringEpisode?.episode === 1) return 1;
+
+ if (
+ media.nextAiringEpisode?.airingAt &&
+ weekday === new Date().toLocaleString("en-us", { weekday: "long" }) &&
+ new Date(media.nextAiringEpisode.airingAt * 1000).getTime() -
+ new Date().getTime() >
+ 24 * 60 * 60 * 1000
+ )
+ return media.nextAiringEpisode?.episode - 1;
+
+ return media.nextAiringEpisode?.episode || 1;
};
</script>
diff --git a/src/lib/Schedule/container.css b/src/lib/Schedule/container.css
index 8690629d..3a3beb1f 100644
--- a/src/lib/Schedule/container.css
+++ b/src/lib/Schedule/container.css
@@ -1,3 +1,3 @@
.list-container {
- column-width: 250px;
+ column-width: 250px;
}