aboutsummaryrefslogtreecommitdiff
path: root/src/lib/List/CleanGrid.svelte
diff options
context:
space:
mode:
authorFuwn <[email protected]>2024-05-16 13:31:30 -0700
committerFuwn <[email protected]>2024-05-16 13:31:30 -0700
commitfcc1b4f646d6e9ab9b594a402f2c88ce3b4b67f1 (patch)
tree8c6b87e8497cabc42c6905610ca1415961e52e5a /src/lib/List/CleanGrid.svelte
parentfeat(anime): refresh upcoming after due increment (diff)
downloaddue.moe-fcc1b4f646d6e9ab9b594a402f2c88ce3b4b67f1.tar.xz
due.moe-fcc1b4f646d6e9ab9b594a402f2c88ce3b4b67f1.zip
refactor(list): generic grid list
Diffstat (limited to 'src/lib/List/CleanGrid.svelte')
-rw-r--r--src/lib/List/CleanGrid.svelte65
1 files changed, 65 insertions, 0 deletions
diff --git a/src/lib/List/CleanGrid.svelte b/src/lib/List/CleanGrid.svelte
new file mode 100644
index 00000000..faf3d7b3
--- /dev/null
+++ b/src/lib/List/CleanGrid.svelte
@@ -0,0 +1,65 @@
+<script lang="ts">
+ import type { Media } from '$lib/Data/AniList/media';
+ import ParallaxImage from '$lib/Image/ParallaxImage.svelte';
+ import { outboundLink } from '$lib/Media/links';
+ import LinkedTooltip from '$lib/Tooltip/LinkedTooltip.svelte';
+ import settings from '$stores/settings';
+ import { mediaTitle } from './mediaTitle';
+ import './covers.css';
+
+ export let media: Media[];
+ export let dummy = false;
+ export let type: 'anime' | 'manga';
+ export let upcoming = false;
+ export let notYetReleased = false;
+</script>
+
+<div
+ class="covers"
+ style={`grid-template-columns: repeat(auto-fill, minmax(${$settings.displayCoverWidth}px, 1fr))`}
+>
+ {#each media as title}
+ {@const progress = (title.mediaListEntry || { progress: 0 }).progress}
+
+ {#if type === 'anime' ? upcoming || notYetReleased || progress !== (title.nextAiringEpisode?.episode || 9999) - 1 : progress != title.episodes}
+ <div class="cover-card" id={`${type}-${title.id}`}>
+ <LinkedTooltip
+ pin={`${type}-${title.id}`}
+ content={title ? mediaTitle(title) : ''}
+ relative={dummy}
+ >
+ <div class="cover-card-image">
+ <a
+ href={$settings.displayCopyMediaTitleNotLink
+ ? '#'
+ : outboundLink(title, type, $settings.displayOutboundLinksTo)}
+ on:click={(e) => {
+ if ($settings.displayCopyMediaTitleNotLink) {
+ e.preventDefault();
+
+ navigator.clipboard.writeText(title.title.romaji);
+ }
+ }}
+ target="_blank"
+ >
+ <span class="cover-container">
+ <ParallaxImage
+ source={title.coverImage.extraLarge}
+ alternativeText="Cover"
+ limit={12.5}
+ classList={`cover${
+ title.isAdult && $settings.displayBlurAdultContent ? ' adult' : ''
+ }`}
+ />
+ </span>
+ </a>
+ </div>
+ </LinkedTooltip>
+
+ <div class="cover-title">
+ <slot name="title" {progress} {title} />
+ </div>
+ </div>
+ {/if}
+ {/each}
+</div>