diff options
| author | Fuwn <[email protected]> | 2024-01-18 07:43:37 -0800 |
|---|---|---|
| committer | Fuwn <[email protected]> | 2024-01-18 07:43:37 -0800 |
| commit | 3bcc3accc659dc76405c22850dd378c54b7d7fe4 (patch) | |
| tree | 95462b7c10761324eaf75270f37f73b6c7745f7d /src/lib | |
| parent | refactor(schedule): move days to component (diff) | |
| download | due.moe-3bcc3accc659dc76405c22850dd378c54b7d7fe4.tar.xz due.moe-3bcc3accc659dc76405c22850dd378c54b7d7fe4.zip | |
feat(schedule): cover mode
Diffstat (limited to 'src/lib')
| -rw-r--r-- | src/lib/Settings/Categories/Display.svelte | 4 | ||||
| -rw-r--r-- | src/lib/Tools/Schedule/CoverBypass.svelte | 5 | ||||
| -rw-r--r-- | src/lib/Tools/Schedule/Days.svelte | 108 | ||||
| -rw-r--r-- | src/lib/Tools/Schedule/Tool.svelte | 7 |
4 files changed, 104 insertions, 20 deletions
diff --git a/src/lib/Settings/Categories/Display.svelte b/src/lib/Settings/Categories/Display.svelte index 69b26aec..553204ce 100644 --- a/src/lib/Settings/Categories/Display.svelte +++ b/src/lib/Settings/Categories/Display.svelte @@ -101,6 +101,10 @@ text="Show media cover when hovering on supported media titles" /> <SettingCheckboxToggle + setting="displayScheduleListMode" + text="Display schedule in list mode (legacy behaviour)" +/> +<SettingCheckboxToggle setting="displayCoverMode" text="Show anime lists with media covers instead of text" lineBreak={false} diff --git a/src/lib/Tools/Schedule/CoverBypass.svelte b/src/lib/Tools/Schedule/CoverBypass.svelte index 0467c68e..235979c1 100644 --- a/src/lib/Tools/Schedule/CoverBypass.svelte +++ b/src/lib/Tools/Schedule/CoverBypass.svelte @@ -15,6 +15,7 @@ export let media: Media | null; export let entry: SubsPleaseEpisode; + export let cover = true; let hoverCoverState: HoverCoverResponse = {}; @@ -60,4 +61,6 @@ {/if} </a> -<HoverCover options={hoverCoverState} width={300} /> +{#if cover} + <HoverCover options={hoverCoverState} width={300} /> +{/if} diff --git a/src/lib/Tools/Schedule/Days.svelte b/src/lib/Tools/Schedule/Days.svelte index 9247d109..9b4ef6b2 100644 --- a/src/lib/Tools/Schedule/Days.svelte +++ b/src/lib/Tools/Schedule/Days.svelte @@ -3,6 +3,7 @@ import type { Media } from '$lib/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'; @@ -72,32 +73,103 @@ > <summary>{day}</summary> - <ol> - {#each Object.values(scheduleEntry) as entry} - {@const media = associateMedia(scheduledMedia, entry.title)} - - <li class="entry"> - <CoverBypass {media} {entry} /> - {#if !$settings.displayCountdownRightAligned} - <span style="opacity: 50%;">|</span> - {/if} - <span class:countdown={$settings.displayCountdownRightAligned}> - {#if media && media.nextAiringEpisode} - <span style="opacity: 50%;"> - {episode(media, day)}{media.episodes ? `/${media.episodes}` : ''} at + {#if !$settings.displayScheduleListMode} + <div + id="covers" + style={`grid-template-columns: repeat(auto-fill, minmax(${$settings.displayCoverWidth}px, 1fr))`} + > + {#each Object.values(scheduleEntry) as entry} + {@const media = associateMedia(scheduledMedia, entry.title)} + + <div class="cover-card"> + <a + href={outboundLink( + media ? media : null, + 'anime', + $settings.displayOutboundLinksTo, + media === null, + entry.title + )} + target="_blank" + > + <img + class="cover" + src={media + ? media.coverImage.extraLarge + : `https://subsplease.org${entry.image_url}`} + alt="Cover" + /> + </a> + + <div class="cover-title"> + <CoverBypass {media} {entry} cover={false} /> + <span class:countdown={$settings.displayCountdownRightAligned}> + {#if media && media.nextAiringEpisode} + <span style="opacity: 50%;"> + {episode(media, day)}{media.episodes ? `/${media.episodes}` : ''} at + </span> + {/if} + {entry.time} </span> + </div> + </div> + {/each} + </div> + {:else} + <ol> + {#each Object.values(scheduleEntry) as entry} + {@const media = associateMedia(scheduledMedia, entry.title)} + + <li class="entry"> + <CoverBypass {media} {entry} /> + {#if !$settings.displayCountdownRightAligned} + <span style="opacity: 50%;">|</span> {/if} - {entry.time} - </span> - </li> - {/each} - </ol> + <span class:countdown={$settings.displayCountdownRightAligned}> + {#if media && media.nextAiringEpisode} + <span style="opacity: 50%;"> + {episode(media, day)}{media.episodes ? `/${media.episodes}` : ''} at + </span> + {/if} + {entry.time} + </span> + </li> + {/each} + </ol> + {/if} </details> <p /> {/each} <style> + #covers { + display: grid; + justify-content: center; + gap: 0.5rem; + row-gap: 1rem; + margin-top: 0.5rem; + } + + .cover { + background-size: cover; + background-position: center; + border-radius: 8px; + width: 7.5rem; + } + + .cover-card { + display: flex; + flex-direction: column; + justify-content: center; + align-items: center; + } + + .cover-title { + text-align: center; + margin: 0.25rem; + } + .entry::after { content: ''; display: table; diff --git a/src/lib/Tools/Schedule/Tool.svelte b/src/lib/Tools/Schedule/Tool.svelte index 1e919abf..5dda97cc 100644 --- a/src/lib/Tools/Schedule/Tool.svelte +++ b/src/lib/Tools/Schedule/Tool.svelte @@ -12,6 +12,7 @@ import Loading from '$lib/Utility/Loading.svelte'; import './container.css'; import Days from './Days.svelte'; + import settings from '$stores/settings'; let subsPleasePromise: Promise<SubsPlease>; let scheduledMediaPromise: Promise<Partial<Media[]>>; @@ -67,7 +68,11 @@ {#if scheduledMedia} {@const columnCount = Math.ceil(Object.keys(subsPlease.schedule).length / 2)} - <div class="list-container" id="schedule" style={`column-count: ${columnCount}`}> + <div + class="list-container" + id="schedule" + style={`column-count: ${columnCount / ($settings.displayScheduleListMode ? 1 : 2)}`} + > <Days {subsPlease} {scheduledMedia} /> </div> {:else} |