aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorFuwn <[email protected]>2023-12-20 02:37:50 -0800
committerFuwn <[email protected]>2023-12-20 02:37:50 -0800
commit33cd7975e0ca8671297944d4c5bab835df5118bb (patch)
treeb4044ca2d3e955ed118e847e8256b9da4efb7025 /src
parentfeat(schedule): match media to anilist (diff)
downloaddue.moe-33cd7975e0ca8671297944d4c5bab835df5118bb.tar.xz
due.moe-33cd7975e0ca8671297944d4c5bab835df5118bb.zip
feat(schedule): respect outbound links
Diffstat (limited to 'src')
-rw-r--r--src/lib/Media/links.ts21
-rw-r--r--src/routes/schedule/+page.svelte14
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}