From 31fcf3e18911f55acd43cfc28f3bde368f20a255 Mon Sep 17 00:00:00 2001 From: Fuwn Date: Thu, 7 Dec 2023 03:15:28 -0800 Subject: feat(media): outbound links option --- src/lib/List/Anime/CleanAnimeList.svelte | 10 ++------ src/lib/List/Manga/CleanMangaList.svelte | 3 ++- src/lib/Media/media.ts | 42 ++++++++++++++++++++++++++++++++ src/routes/settings/+page.svelte | 15 +++++++++++- src/stores/settings.ts | 4 +-- 5 files changed, 62 insertions(+), 12 deletions(-) create mode 100644 src/lib/Media/media.ts diff --git a/src/lib/List/Anime/CleanAnimeList.svelte b/src/lib/List/Anime/CleanAnimeList.svelte index 9eded7a0..e082f00a 100644 --- a/src/lib/List/Anime/CleanAnimeList.svelte +++ b/src/lib/List/Anime/CleanAnimeList.svelte @@ -7,6 +7,7 @@ import type { AniListAuthorisation, UserIdentity } from '$lib/AniList/identity'; import ListTitle from '../ListTitle.svelte'; import MediaTitle from '../MediaTitleDisplay.svelte'; + import { outboundLink } from '$lib/Media/media'; export let media: Media[]; export let title: string; @@ -38,14 +39,7 @@ {#if title.includes('Upcoming Episodes') || progress !== (anime.nextAiringEpisode?.episode || 9999) - 1}
  • - + import type { Media } from '$lib/AniList/media'; import { volumeCount } from '$lib/Media/manga'; + import { outboundLink } from '$lib/Media/media'; import settings from '../../../stores/settings'; import ListTitle from '../ListTitle.svelte'; import MediaTitle from '../MediaTitleDisplay.svelte'; @@ -34,7 +35,7 @@ {#if progress !== manga.episodes}
  • - + { + if (type === 'manga') { + switch (setting) { + case 'livechartme': + case 'animeschedule': + return `https://anilist.co/${type}/${media.id}`; + case 'myanimelist': + return `https://myanimelist.net/search/all?q=${ + media.title.native || media.title.english || media.title.romaji + }`; + default: + return `https://anilist.co/${type}/${media.id}`; + } + } else { + switch (setting) { + case 'anilist': + return `https://anilist.co/${type}/${media.id}`; + case 'livechartme': + return `https://www.livechart.me/search?q=${( + media.title.native || + media.title.english || + media.title.romaji + ).replace(/ /g, '+')}`; + case 'animeschedule': + return `https://animeschedule.net/shows?q=${( + media.title.native || + media.title.english || + media.title.romaji + ).replace(/ /g, '+')}`; + case 'myanimelist': + return `https://myanimelist.net/search/all?q=${ + media.title.native || media.title.english || media.title.romaji + }`; + } + } +}; diff --git a/src/routes/settings/+page.svelte b/src/routes/settings/+page.svelte index e91e6005..7d557140 100644 --- a/src/routes/settings/+page.svelte +++ b/src/routes/settings/+page.svelte @@ -50,7 +50,6 @@
    Display - Let her remind you. It's for your own benefit. + +

    + + + Outbound Links + + This option is in full respect to anime outbound links. If LiveChart.me or AnimeSchedule is + chosen, manga links will default to AniList. +

    diff --git a/src/stores/settings.ts b/src/stores/settings.ts index 800c824a..aefbd4ac 100644 --- a/src/stores/settings.ts +++ b/src/stores/settings.ts @@ -10,7 +10,7 @@ export interface Settings { displayUnresolved: boolean; roundDownChapters: boolean; sortByDifference: boolean; - linkToLiveChart: boolean; + outboundLinksTo: 'anilist' | 'livechartme' | 'animeschedule' | 'myanimelist'; displayPausedMedia: boolean; limitListHeight: boolean; displaySocialButton: boolean; @@ -26,7 +26,7 @@ export interface Settings { const defaultSettings: Settings = { // Display - linkToLiveChart: false, + outboundLinksTo: 'anilist', displayPausedMedia: true, displayPlannedAnime: true, limitListHeight: false, -- cgit v1.2.3