diff options
| author | Fuwn <[email protected]> | 2026-03-01 16:20:51 -0800 |
|---|---|---|
| committer | Fuwn <[email protected]> | 2026-03-01 16:21:02 -0800 |
| commit | eae5d24d9e79e59a19d4721caaeaa0ca650ecb33 (patch) | |
| tree | 1b685bb248e051dfa26d2bfdebe6689402dd93c5 /src/lib/Schedule | |
| parent | chore(tooling): remove legacy eslint and prettier (diff) | |
| download | due.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.svelte | 18 | ||||
| -rw-r--r-- | src/lib/Schedule/Crunchyroll.svelte | 52 | ||||
| -rw-r--r-- | src/lib/Schedule/Days.svelte | 159 | ||||
| -rw-r--r-- | src/lib/Schedule/container.css | 2 |
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; } |