diff options
| author | Fuwn <[email protected]> | 2023-12-24 03:05:43 -0800 |
|---|---|---|
| committer | Fuwn <[email protected]> | 2023-12-24 03:05:43 -0800 |
| commit | 43336c04b4c646699ca004acdda6638bb7b3d241 (patch) | |
| tree | 0dcbf617debf0f3ef1d1554261b3835248a12812 /src/lib/Tools/ActivityHistory/Tool.svelte | |
| parent | refactor(utility): move utilities to module (diff) | |
| download | due.moe-43336c04b4c646699ca004acdda6638bb7b3d241.tar.xz due.moe-43336c04b4c646699ca004acdda6638bb7b3d241.zip | |
refactor(tools): activity history to module
Diffstat (limited to 'src/lib/Tools/ActivityHistory/Tool.svelte')
| -rw-r--r-- | src/lib/Tools/ActivityHistory/Tool.svelte | 117 |
1 files changed, 117 insertions, 0 deletions
diff --git a/src/lib/Tools/ActivityHistory/Tool.svelte b/src/lib/Tools/ActivityHistory/Tool.svelte new file mode 100644 index 00000000..f60774ee --- /dev/null +++ b/src/lib/Tools/ActivityHistory/Tool.svelte @@ -0,0 +1,117 @@ +<script lang="ts"> + import { + activityHistory, + fillMissingDays, + type ActivityHistoryEntry + } from '$lib/AniList/activity'; + import { onMount } from 'svelte'; + import userIdentity from '../../../stores/userIdentity'; + import { + userIdentity as getUserIdentity, + type AniListAuthorisation + } from '$lib/AniList/identity'; + import { clearAllParameters } from '../../Utility/parameters'; + import { domToBlob } from 'modern-screenshot'; + import ActivityHistoryGrid from './Grid.svelte'; + + export let user: AniListAuthorisation; + + let activityHistoryData: Promise<ActivityHistoryEntry[]>; + let currentUserIdentity = { name: '', id: -1 }; + let generated = false; + + onMount(async () => { + clearAllParameters(); + + if (user !== undefined) { + if ($userIdentity === '') userIdentity.set(JSON.stringify(await getUserIdentity(user))); + + currentUserIdentity = JSON.parse($userIdentity); + currentUserIdentity.name = currentUserIdentity.name; + activityHistoryData = activityHistory(currentUserIdentity); + } + }); + + // const incrementDate = (date: Date): Date => { + // date.setDate(date.getDate() + 1); + + // return date; + // }; + + const screenshot = async () => { + let element = document.querySelector('.grid') as HTMLElement; + + if (element !== null) { + domToBlob(element, { + quality: 1, + scale: 2 + }).then((blob) => { + const downloadWrapper = document.createElement('a'); + const image = document.createElement('img'); + const object = (window.URL || window.webkitURL || window || {}).createObjectURL(blob); + + downloadWrapper.href = object; + downloadWrapper.target = '_blank'; + image.src = object; + + downloadWrapper.appendChild(image); + + const gridFinal = document.getElementById('grid-final'); + + if (gridFinal !== null) { + gridFinal.innerHTML = ''; + + gridFinal.appendChild(downloadWrapper); + + generated = true; + } + + downloadWrapper.click(); + }); + } + }; +</script> + +{#if user === undefined} + Please log in to view this page. +{:else} + {#await activityHistoryData} + Loading activity history ... 33% + {:then activities} + {#if activities === undefined} + Loading activities ... 66% + {:else} + {@const filledActivities = fillMissingDays(activities)} + + <ActivityHistoryGrid {user} /> + + <p /> + + <div id="grid-final" /> + + {#if generated} + <p /> + {/if} + + <p><a href={'#'} on:click={screenshot}>Generate grid image</a></p> + + <details open> + <summary> + Days in risk of developing an activity history hole. (days with one activity) + </summary> + + <ul> + {#each filledActivities as activity} + {#if activity.amount === 0} + <li> + {new Date( + activity.date * 1000 + new Date().getTimezoneOffset() * 60 * 1000 + ).toDateString()} + </li> + {/if} + {/each} + </ul> + </details> + {/if} + {/await} +{/if} |