diff options
| author | Fuwn <[email protected]> | 2024-01-21 17:51:59 -0800 |
|---|---|---|
| committer | Fuwn <[email protected]> | 2024-01-21 17:51:59 -0800 |
| commit | 5093d2fea38a6b781ead5d8f0ddb90260ed3e62c (patch) | |
| tree | 93df20f963af92ee5de48ec9bc5291b02a32d771 | |
| parent | feat(badges): awc integration (diff) | |
| download | due.moe-5093d2fea38a6b781ead5d8f0ddb90260ed3e62c.tar.xz due.moe-5093d2fea38a6b781ead5d8f0ddb90260ed3e62c.zip | |
refactor(schedule): move top-level tool to route
| -rw-r--r-- | src/lib/Tools/Schedule/Tool.svelte | 93 | ||||
| -rw-r--r-- | src/routes/schedule/+page.svelte | 94 |
2 files changed, 91 insertions, 96 deletions
diff --git a/src/lib/Tools/Schedule/Tool.svelte b/src/lib/Tools/Schedule/Tool.svelte deleted file mode 100644 index 2fe9a275..00000000 --- a/src/lib/Tools/Schedule/Tool.svelte +++ /dev/null @@ -1,93 +0,0 @@ -<script lang="ts"> - import Error from '$lib/Error/RateLimited.svelte'; - import type { SubsPlease } from '$lib/Media/Anime/Airing/Subtitled/subsPlease'; - import { onMount } from 'svelte'; - import { parseOrDefault } from '$lib/Utility/parameters'; - import { browser } from '$app/environment'; - import type { Media } from '$lib/AniList/media'; - import { scheduleMediaListCollection } from '$lib/AniList/schedule'; - import { season } from '$lib/Media/Anime/season'; - import HeadTitle from '$lib/Home/HeadTitle.svelte'; - import Crunchyroll from '$lib/Tools/Schedule/Crunchyroll.svelte'; - import Loading from '$lib/Utility/Loading.svelte'; - import './container.css'; - import Days from './Days.svelte'; - import settings from '$stores/settings'; - import root from '$lib/Utility/root'; - - let subsPleasePromise: Promise<SubsPlease>; - let scheduledMediaPromise: Promise<Partial<Media[]>>; - const urlParameters = browser ? new URLSearchParams(window.location.search) : null; - let timeZone = parseOrDefault( - urlParameters, - 'tz', - Intl.DateTimeFormat().resolvedOptions().timeZone - ); - let crunchyrollExpanded = false; - let forceListMode = parseOrDefault(urlParameters, 'list', false); - - onMount(async () => { - subsPleasePromise = fetch(root(`/api/subsplease?tz=${timeZone}`)).then((r) => r.json()); - scheduledMediaPromise = scheduleMediaListCollection(new Date().getFullYear(), season(), true); - }); -</script> - -<HeadTitle route="Schedule" path="/schedule" /> - -<blockquote> - <select - bind:value={timeZone} - on:change={() => - (subsPleasePromise = fetch(root(`/api/subsplease?tz=${timeZone}`)).then((r) => r.json()))} - > - {#each Intl.supportedValuesOf('timeZone') as zone} - <option value={zone}> - {zone.split('/').reverse().join(', ').replace(/_/g, ' ')} - </option> - {/each} - </select> -</blockquote> - -<details bind:open={crunchyrollExpanded}> - <summary - >Crunchyroll Release Calender (Click to {crunchyrollExpanded ? 'collapse' : 'expand'})</summary - > - - <p /> - - <Crunchyroll /> -</details> - -<p /> - -{#await subsPleasePromise} - <Loading type="subtitle release data" percent={49.5} /> -{:then subsPlease} - {#if subsPlease} - {#await scheduledMediaPromise} - <Loading type="anime schedule" percent={82.5} /> - {:then scheduledMedia} - {#if scheduledMedia} - {@const columnCount = Math.ceil(Object.keys(subsPlease.schedule).length / 2)} - - <div - class="list-container" - id="schedule" - style={`column-count: ${ - columnCount / ($settings.displayScheduleListMode || forceListMode ? 1 : 2) - }`} - > - <Days {subsPlease} {scheduledMedia} {forceListMode} /> - </div> - {:else} - <Loading type="anime schedule" percent={66} /> - {/if} - {:catch} - <Error type="Media" loginSessionError={false} card /> - {/await} - {:else} - <Loading type="subtitle release data" percent={33} /> - {/if} -{:catch} - <Error type="Schedule" loginSessionError={false} card /> -{/await} diff --git a/src/routes/schedule/+page.svelte b/src/routes/schedule/+page.svelte index 7d24c17c..3fc3d411 100644 --- a/src/routes/schedule/+page.svelte +++ b/src/routes/schedule/+page.svelte @@ -1,5 +1,93 @@ -<script> - import Tool from '$lib/Tools/Schedule/Tool.svelte'; +<script lang="ts"> + import Error from '$lib/Error/RateLimited.svelte'; + import type { SubsPlease } from '$lib/Media/Anime/Airing/Subtitled/subsPlease'; + import { onMount } from 'svelte'; + import { parseOrDefault } from '$lib/Utility/parameters'; + import { browser } from '$app/environment'; + import type { Media } from '$lib/AniList/media'; + import { scheduleMediaListCollection } from '$lib/AniList/schedule'; + import { season } from '$lib/Media/Anime/season'; + import HeadTitle from '$lib/Home/HeadTitle.svelte'; + import Crunchyroll from '$lib/Tools/Schedule/Crunchyroll.svelte'; + import Loading from '$lib/Utility/Loading.svelte'; + import '$lib/Tools/Schedule/container.css'; + import Days from '$lib/Tools/Schedule/Days.svelte'; + import settings from '$stores/settings'; + import root from '$lib/Utility/root'; + + let subsPleasePromise: Promise<SubsPlease>; + let scheduledMediaPromise: Promise<Partial<Media[]>>; + const urlParameters = browser ? new URLSearchParams(window.location.search) : null; + let timeZone = parseOrDefault( + urlParameters, + 'tz', + Intl.DateTimeFormat().resolvedOptions().timeZone + ); + let crunchyrollExpanded = false; + let forceListMode = parseOrDefault(urlParameters, 'list', false); + + onMount(async () => { + subsPleasePromise = fetch(root(`/api/subsplease?tz=${timeZone}`)).then((r) => r.json()); + scheduledMediaPromise = scheduleMediaListCollection(new Date().getFullYear(), season(), true); + }); </script> -<Tool /> +<HeadTitle route="Schedule" path="/schedule" /> + +<blockquote> + <select + bind:value={timeZone} + on:change={() => + (subsPleasePromise = fetch(root(`/api/subsplease?tz=${timeZone}`)).then((r) => r.json()))} + > + {#each Intl.supportedValuesOf('timeZone') as zone} + <option value={zone}> + {zone.split('/').reverse().join(', ').replace(/_/g, ' ')} + </option> + {/each} + </select> +</blockquote> + +<details bind:open={crunchyrollExpanded}> + <summary> + Crunchyroll Release Calender (Click to {crunchyrollExpanded ? 'collapse' : 'expand'}) + </summary> + + <p /> + + <Crunchyroll /> +</details> + +<p /> + +{#await subsPleasePromise} + <Loading type="subtitle release data" percent={49.5} /> +{:then subsPlease} + {#if subsPlease} + {#await scheduledMediaPromise} + <Loading type="anime schedule" percent={82.5} /> + {:then scheduledMedia} + {#if scheduledMedia} + {@const columnCount = Math.ceil(Object.keys(subsPlease.schedule).length / 2)} + + <div + class="list-container" + id="schedule" + style={`column-count: ${ + columnCount / ($settings.displayScheduleListMode || forceListMode ? 1 : 2) + }`} + > + <Days {subsPlease} {scheduledMedia} {forceListMode} /> + </div> + {:else} + <Loading type="anime schedule" percent={66} /> + {/if} + {:catch} + <Error type="Media" loginSessionError={false} card /> + {/await} + {:else} + <Loading type="subtitle release data" percent={33} /> + {/if} +{:catch} + <Error type="Schedule" loginSessionError={false} card /> +{/await} |