aboutsummaryrefslogtreecommitdiff
path: root/src/lib/Tools/Likes.svelte
blob: dde5c75507facbc6fc5b45a74924c45fa51132c8 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
<script lang="ts">
import { activityLikes } from "$lib/Data/AniList/activity";
import { threadLikes } from "$lib/Data/AniList/forum";
import RateLimited from "$lib/Error/RateLimited.svelte";
import Skeleton from "$lib/Loading/Skeleton.svelte";
import tooltip from "$lib/Tooltip/tooltip";
import settings from "$stores/settings";
import InputTemplate from "./InputTemplate.svelte";

let submission = "";

$: normalisedSubmission = submission.replace(
	/.*\/(activity|thread)\/(\d+).*/,
	"$2",
);
$: submissionType = submission.replace(/.*\/(activity|thread)\/(\d+).*/, "$1");
$: likesPromise =
	submissionType === "activity"
		? activityLikes(Number(normalisedSubmission))
		: submissionType === "thread"
			? threadLikes(Number(normalisedSubmission))
			: Promise.resolve(null);
</script>

<InputTemplate
  field="Activity or Thread URL"
  bind:submission
  event="Get All Likes"
  submitText="Get All Likes"
>
  {#if submission.length > 5 && submission.match(/https:\/\/anilist.co\/(activity|forum\/thread)\/\d+/)}
    {#await likesPromise}
      <Skeleton card={false} count={5} height="0.9rem" list />
    {:then likes}
      {#if likes && likes.length > 0}
        <ul>
          {#each likes as like}
            <li>
              <a
                href={`https://anilist.co/user/${like.name}`}
                target="_blank"
                title={`<img src="${
                  $settings.displayDataSaver ? like.avatar?.medium : like.avatar?.large
                }" style="width: 150px; object-fit: cover; border-radius: 8px;" />`}
                use:tooltip
              >
                {like.name}
              </a>
            </li>
          {/each}
        </ul>
      {:else}
        No likes were found for that {submissionType}.
      {/if}
    {:catch}
      <RateLimited type="Likes" list={false} />
    {/await}
  {:else}
    Please enter a valid Activity or Thread URL.
  {/if}
</InputTemplate>