diff options
| author | Fuwn <[email protected]> | 2024-05-16 13:31:30 -0700 |
|---|---|---|
| committer | Fuwn <[email protected]> | 2024-05-16 13:31:30 -0700 |
| commit | fcc1b4f646d6e9ab9b594a402f2c88ce3b4b67f1 (patch) | |
| tree | 8c6b87e8497cabc42c6905610ca1415961e52e5a /src/lib/List/CleanGrid.svelte | |
| parent | feat(anime): refresh upcoming after due increment (diff) | |
| download | due.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.svelte | 65 |
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> |