From e1f407eee6eb22f2558c7f306fb5592fa7f2814f Mon Sep 17 00:00:00 2001 From: Stefano Pigozzi Date: Tue, 5 Nov 2024 13:19:36 +0100 Subject: [PATCH] Add anime functions --- _utils/anime.ts | 96 +++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 96 insertions(+) create mode 100644 _utils/anime.ts diff --git a/_utils/anime.ts b/_utils/anime.ts new file mode 100644 index 0000000..c386d72 --- /dev/null +++ b/_utils/anime.ts @@ -0,0 +1,96 @@ +import { ReviewData } from "./review.ts"; + +export interface GameData extends ReviewData { + name_original: string; + + active?: boolean; + + progress?: AnimeProgress; + + started_on?: Date; + completed_on?: Date; + mastered_on?: Date; +} + +export type AnimePage = Lume.Page; + +export enum AnimeProgress { + Unset = "", + New = "new", + Started = "started", + Completed = "completed", + Mastered = "mastered", +} + +export function animeProgressToIconDef(progress?: AnimeProgress): string { + switch (progress) { + case undefined: + return ""; + case AnimeProgress.Unset: + return ""; + case AnimeProgress.New: + return "fa-ellipsis"; + case AnimeProgress.Started: + return "fa-play"; + case AnimeProgress.Completed: + return "fa-circle-check"; + case AnimeProgress.Mastered: + return "fa-heart"; + } +} + +export function animeProgressToClassName(progress?: AnimeProgress): string { + switch (progress) { + case undefined: + return "progress-unset"; + case AnimeProgress.Unset: + return "progress-unset"; + case AnimeProgress.New: + return "progress-new"; + case AnimeProgress.Started: + return "progress-started"; + case AnimeProgress.Completed: + return "progress-completed"; + case AnimeProgress.Mastered: + return "progress-mastered"; + } +} + +export function animeProgressToTitle(progress?: AnimeProgress): string { + switch (progress) { + case undefined: + return ""; + case AnimeProgress.Unset: + return ""; + case AnimeProgress.New: + return "New"; + case AnimeProgress.Started: + return "Started"; + case AnimeProgress.Completed: + return "Completed"; + case AnimeProgress.Mastered: + return "Mastered"; + } +} + +// Duplicated in _static/scripting/sort.js +export function animeProgressToNumber(progress?: AnimeProgress): number { + switch (progress) { + case undefined: + return 0; + case AnimeProgress.Unset: + return 0; + case AnimeProgress.New: + return 10; + case AnimeProgress.Started: + return 20; + case AnimeProgress.Completed: + return 35; + case AnimeProgress.Mastered: + return 50; + } +} + +export function compareAnimeProgress(a: GameData, b: GameData): number { + return animeProgressToNumber(a.progress) - animeProgressToNumber(b.progress); +}