diff options
| author | Fuwn <[email protected]> | 2023-12-20 02:37:50 -0800 |
|---|---|---|
| committer | Fuwn <[email protected]> | 2023-12-20 02:37:50 -0800 |
| commit | 33cd7975e0ca8671297944d4c5bab835df5118bb (patch) | |
| tree | b4044ca2d3e955ed118e847e8256b9da4efb7025 /src | |
| parent | feat(schedule): match media to anilist (diff) | |
| download | due.moe-33cd7975e0ca8671297944d4c5bab835df5118bb.tar.xz due.moe-33cd7975e0ca8671297944d4c5bab835df5118bb.zip | |
feat(schedule): respect outbound links
Diffstat (limited to 'src')
| -rw-r--r-- | src/lib/Media/links.ts | 21 | ||||
| -rw-r--r-- | src/routes/schedule/+page.svelte | 14 |
2 files changed, 28 insertions, 7 deletions
diff --git a/src/lib/Media/links.ts b/src/lib/Media/links.ts index 4385d348..1e65f82f 100644 --- a/src/lib/Media/links.ts +++ b/src/lib/Media/links.ts @@ -1,10 +1,14 @@ import type { Media } from '$lib/AniList/media'; export const outboundLink = ( - media: Media, + media: Media | null, type: 'anime' | 'manga', - setting: 'anilist' | 'livechartme' | 'animeschedule' | 'myanimelist' + setting: 'anilist' | 'livechartme' | 'animeschedule' | 'myanimelist', + search = false, + title: string | null = null ) => { + media = media as Media; + if (type === 'manga') switch (setting) { case 'livechartme': @@ -22,24 +26,31 @@ export const outboundLink = ( else switch (setting) { case 'anilist': - return `https://anilist.co/${type}/${media.id}`; + return search + ? `https://anilist.co/search?search=${encodeURIComponent(title || '')}` + : `https://anilist.co/${type}/${media.id}`; case 'livechartme': return `https://www.livechart.me/search?q=${( + title || media.title.native || media.title.english || media.title.romaji ).replace(/ /g, '+')}`; case 'animeschedule': return `https://animeschedule.net/shows?q=${( + title || media.title.native || media.title.english || media.title.romaji ).replace(/ /g, '+')}`; - case 'myanimelist': - return media.idMal + case 'myanimelist': { + return search + ? `https://myanimelist.net/anime.php?q=${title}&cat=anime` + : media.idMal ? `https://myanimelist.net/anime/${media.idMal}` : `https://myanimelist.net/anime.php?q=${ media.title.native || media.title.english || media.title.romaji }&cat=anime`; + } } }; diff --git a/src/routes/schedule/+page.svelte b/src/routes/schedule/+page.svelte index 2a975c46..8ca3759b 100644 --- a/src/routes/schedule/+page.svelte +++ b/src/routes/schedule/+page.svelte @@ -10,6 +10,7 @@ import { season } from '$lib/Media/Anime/season'; import { findClosestMedia } from '$lib/Media/Anime/airing'; import MediaTitleDisplay from '$lib/List/MediaTitleDisplay.svelte'; + import { outboundLink } from '$lib/Media/links'; let subsPleasePromise: Promise<SubsPlease>; let scheduledMediaPromise: Promise<Partial<Media[]>>; @@ -69,6 +70,9 @@ const associateMedia = (media: (Media | undefined)[], title: string) => findClosestMedia(media as Media[], title); + + const titleSelect = (media: Media | null) => + media ? media.title.english || media.title.romaji || media.title.native : null; </script> {#await subsPleasePromise} @@ -124,8 +128,14 @@ > <a href={media - ? `https://anilist.co/anime/${media.id}` - : `https://anilist.co/search?search=${encodeURIComponent(entry.title)}`} + ? outboundLink(media, 'anime', $settings.displayOutboundLinksTo) + : outboundLink( + null, + 'anime', + $settings.displayOutboundLinksTo, + true, + titleSelect(media) || entry.title + )} target="_blank" > {#if media} |