starshard/peafowl
Template
1
Fork 0
mirror of https://github.com/starshardstudio/peafowl.git synced 2024-11-21 12:34:20 +00:00

Move progress to being game-specific

This commit is contained in:
Steffo 2024-11-05 13:11:03 +01:00
parent e4189e1bf0
commit ef52a09787
Signed by: steffo
GPG key ID: 5ADA3868646C3FC0
6 changed files with 133 additions and 137 deletions

View file

@ -1,6 +1,6 @@
import {formatDateIso} from "../_utils/date.ts" import {formatDateIso} from "../_utils/date.ts"
import {GameData} from "../_utils/game.ts" import {GameData} from "../_utils/game.ts"
import {Progress, progressToClassName, progressToIconDef, progressToTitle} from "../_utils/progress.ts" import {GameProgress, gameProgressToClassName, gameProgressToIconDef, gameProgressToTitle} from "../_utils/game.ts"
import {ratingToClassName} from "../_utils/rating.ts" import {ratingToClassName} from "../_utils/rating.ts"
@ -25,9 +25,9 @@ export function GameRow({game, columns = gameRowColumnKindDefault, priority}: Ga
const ratingClass: string = ratingToClassName(game.rating) const ratingClass: string = ratingToClassName(game.rating)
const progressClass: string = progressToClassName(game.progress) const progressClass: string = gameProgressToClassName(game.progress)
const progressIcon: string = progressToIconDef(game.progress) const progressIcon: string = gameProgressToIconDef(game.progress)
const progressTitle: string = progressToTitle(game.progress) const progressTitle: string = gameProgressToTitle(game.progress)
const priorityClass: string = priority ? `priority-${priority}` : "" const priorityClass: string = priority ? `priority-${priority}` : ""
@ -45,7 +45,7 @@ export function GameRow({game, columns = gameRowColumnKindDefault, priority}: Ga
case "progress": { case "progress": {
return ( return (
<td key={index} className={`game-progress ${progressClass}`}> <td key={index} className={`game-progress ${progressClass}`}>
<data value={game.progress ?? Progress.Unset} title={progressTitle}> <data value={game.progress ?? GameProgress.Unset} title={progressTitle}>
{progressIcon && <i className={`fa-sharp fa-regular ${progressIcon} ${activeClassFa}`}></i>} {progressIcon && <i className={`fa-sharp fa-regular ${progressIcon} ${activeClassFa}`}></i>}
</data> </data>
</td> </td>

View file

@ -1,6 +1,6 @@
import {formatDateIso} from "../_utils/date.ts" import {formatDateIso} from "../_utils/date.ts"
import {GameData, GameIdentifier} from "../_utils/game.ts" import {GameData, GameIdentifier} from "../_utils/game.ts"
import {Progress, progressToClassName, progressToIconDef, progressToTitle} from "../_utils/progress.ts" import {GameProgress, gameProgressToClassName, gameProgressToIconDef, gameProgressToTitle} from "../_utils/game.ts"
import {ReviewInfo} from "../_components/ReviewInfo.tsx" import {ReviewInfo} from "../_components/ReviewInfo.tsx"
@ -20,12 +20,12 @@ export default function(data: GameData, helpers: Lume.Helpers) {
const progressRow = data.progress ? ( const progressRow = data.progress ? (
<ReviewInfo.MetadataRow <ReviewInfo.MetadataRow
className={`game-progress ${progressToClassName(data.progress)}`} className={`game-progress ${gameProgressToClassName(data.progress)}`}
label={"Progress"} label={"Progress"}
icon={<i className={`fa-sharp fa-regular ${progressToIconDef(data.progress)} ${data.active ? "fa-beat-fade" : ""}`}/>} icon={<i className={`fa-sharp fa-regular ${gameProgressToIconDef(data.progress)} ${data.active ? "fa-beat-fade" : ""}`}/>}
> >
<data value={data.progress}> <data value={data.progress}>
{progressToTitle(data.progress)} {gameProgressToTitle(data.progress)}
</data> </data>
{data.active && {data.active &&
<> <>
@ -56,7 +56,7 @@ export default function(data: GameData, helpers: Lume.Helpers) {
<ReviewInfo.MetadataRow <ReviewInfo.MetadataRow
className={`game-purchasedon`} className={`game-purchasedon`}
label={"Purchased on"} label={"Purchased on"}
icon={<i className={`fa-sharp fa-regular ${progressToIconDef(Progress.New)}`}/>} icon={<i className={`fa-sharp fa-regular ${gameProgressToIconDef(GameProgress.New)}`}/>}
> >
<time dateTime={purchasedOnValue}> <time dateTime={purchasedOnValue}>
{purchasedOnValue} {purchasedOnValue}
@ -69,7 +69,7 @@ export default function(data: GameData, helpers: Lume.Helpers) {
<ReviewInfo.MetadataRow <ReviewInfo.MetadataRow
className={`game-startedon`} className={`game-startedon`}
label={"Started on"} label={"Started on"}
icon={<i className={`fa-sharp fa-regular ${progressToIconDef(Progress.Started)}`}/>} icon={<i className={`fa-sharp fa-regular ${gameProgressToIconDef(GameProgress.Started)}`}/>}
> >
<time dateTime={startedOnValue}> <time dateTime={startedOnValue}>
{startedOnValue} {startedOnValue}
@ -82,7 +82,7 @@ export default function(data: GameData, helpers: Lume.Helpers) {
<ReviewInfo.MetadataRow <ReviewInfo.MetadataRow
className={`game-beatenon`} className={`game-beatenon`}
label={"Beaten on"} label={"Beaten on"}
icon={<i className={`fa-sharp fa-regular ${progressToIconDef(Progress.Beaten)}`}/>} icon={<i className={`fa-sharp fa-regular ${gameProgressToIconDef(GameProgress.Beaten)}`}/>}
> >
<time dateTime={beatenOnValue}> <time dateTime={beatenOnValue}>
{beatenOnValue} {beatenOnValue}
@ -95,7 +95,7 @@ export default function(data: GameData, helpers: Lume.Helpers) {
<ReviewInfo.MetadataRow <ReviewInfo.MetadataRow
className={`game-completedon`} className={`game-completedon`}
label={"Completed on"} label={"Completed on"}
icon={<i className={`fa-sharp fa-regular ${progressToIconDef(Progress.Completed)}`}/>} icon={<i className={`fa-sharp fa-regular ${gameProgressToIconDef(GameProgress.Completed)}`}/>}
> >
<time dateTime={completedOnValue}> <time dateTime={completedOnValue}>
{completedOnValue} {completedOnValue}
@ -108,7 +108,7 @@ export default function(data: GameData, helpers: Lume.Helpers) {
<ReviewInfo.MetadataRow <ReviewInfo.MetadataRow
className={`game-masteredon`} className={`game-masteredon`}
label={"Mastered on"} label={"Mastered on"}
icon={<i className={`fa-sharp fa-regular ${progressToIconDef(Progress.Mastered)}`}/>} icon={<i className={`fa-sharp fa-regular ${gameProgressToIconDef(GameProgress.Mastered)}`}/>}
> >
<time dateTime={masteredOnValue}> <time dateTime={masteredOnValue}>
{masteredOnValue} {masteredOnValue}

View file

@ -1,7 +1,7 @@
import {compareDate} from "../_utils/date.ts" import {compareDate} from "../_utils/date.ts"
import { GameData } from "../_utils/game.ts"; import { GameData } from "../_utils/game.ts";
import {GameTable} from "../_components/GameTable.tsx" import {GameTable} from "../_components/GameTable.tsx"
import {compare_progress} from "../_utils/progress.ts" import {compareGameProgress} from "../_utils/game.ts"
import {GlobalData} from "../_utils/site.ts" import {GlobalData} from "../_utils/site.ts"
@ -62,7 +62,7 @@ export default function(data: GlobalData, helpers: Lume.Helpers) {
) )
const progress_games = games const progress_games = games
.sort((a, b) => -compare_progress(a, b)) .sort((a, b) => -compareGameProgress(a, b))
.slice(0, 10) .slice(0, 10)
const progress_games_section = ( const progress_games_section = (

View file

@ -3,7 +3,7 @@ import {default as site} from "../_config.ts"
import {formatDateIso} from "../_utils/date.ts" import {formatDateIso} from "../_utils/date.ts"
import {GameData, GameIdentifier, GamePage} from "../_utils/game.ts" import {GameData, GameIdentifier, GamePage} from "../_utils/game.ts"
import {stringifyYaml} from "lume/cms/deps/std.ts" import {stringifyYaml} from "lume/cms/deps/std.ts"
import {Progress} from "../_utils/progress.ts" import {GameProgress} from "../_utils/game.ts"
/* This is arguably one of the worst scripts I've ever written. */ /* This is arguably one of the worst scripts I've ever written. */
@ -102,7 +102,7 @@ for(const game of games) {
name_sort: page?.name_sort ?? game?.sort_as ?? "", name_sort: page?.name_sort ?? game?.sort_as ?? "",
rating: page?.rating ?? 0, rating: page?.rating ?? 0,
active: page?.active ?? false, active: page?.active ?? false,
progress: page?.progress ?? Progress.Unset, progress: page?.progress ?? GameProgress.Unset,
hours_played: Math.max(page?.hours_played ?? 0, Math.round((game?.playtime_forever ?? 0) / 60)), hours_played: Math.max(page?.hours_played ?? 0, Math.round((game?.playtime_forever ?? 0) / 60)),
purchased_on: page?.purchased_on ?? NaN, purchased_on: page?.purchased_on ?? NaN,
started_on: page?.started_on ?? NaN, started_on: page?.started_on ?? NaN,

View file

@ -1,33 +1,130 @@
import {Progress} from "./progress.ts" import { ReviewData } from "./review.ts";
import {ReviewData} from "./review.ts"
export interface GameBaseIdentifier { export interface GameBaseIdentifier {
type: string, type: string;
synced_on?: string, synced_on?: string;
} }
export interface GameSteamIdentifier extends GameBaseIdentifier { export interface GameSteamIdentifier extends GameBaseIdentifier {
type: "steam", type: "steam";
appid: string, appid: string;
name?: string, name?: string;
} }
export type GameIdentifier = GameSteamIdentifier; export type GameIdentifier = GameSteamIdentifier;
export interface GameData extends ReviewData { export interface GameData extends ReviewData {
active?: boolean, active?: boolean;
progress?: Progress, progress?: GameProgress;
hours_played?: number hours_played?: number;
purchased_on?: Date, purchased_on?: Date;
started_on?: Date, started_on?: Date;
beaten_on?: Date, beaten_on?: Date;
completed_on?: Date, completed_on?: Date;
mastered_on?: Date, mastered_on?: Date;
identifiers?: GameIdentifier[] identifiers?: GameIdentifier[];
} }
export type GamePage = Lume.Page<GameData> export type GamePage = Lume.Page<GameData>;
export enum GameProgress {
Unset = "",
NotApplicable = "notapplicable",
New = "new",
Started = "started",
Beaten = "beaten",
Completed = "completed",
Mastered = "mastered",
}
export function gameProgressToIconDef(progress?: GameProgress): string {
switch (progress) {
case undefined:
return "";
case GameProgress.Unset:
return "";
case GameProgress.NotApplicable:
return "fa-x";
case GameProgress.New:
return "fa-ellipsis";
case GameProgress.Started:
return "fa-play";
case GameProgress.Beaten:
return "fa-circle-check";
case GameProgress.Completed:
return "fa-star";
case GameProgress.Mastered:
return "fa-trophy";
}
}
export function gameProgressToClassName(progress?: GameProgress): string {
switch (progress) {
case undefined:
return "progress-unset";
case GameProgress.Unset:
return "progress-unset";
case GameProgress.NotApplicable:
return "progress-notapplicable";
case GameProgress.New:
return "progress-new";
case GameProgress.Started:
return "progress-started";
case GameProgress.Beaten:
return "progress-beaten";
case GameProgress.Completed:
return "progress-completed";
case GameProgress.Mastered:
return "progress-mastered";
}
}
export function gameProgressToTitle(progress?: GameProgress): string {
switch (progress) {
case undefined:
return "";
case GameProgress.Unset:
return "";
case GameProgress.NotApplicable:
return "Not applicable";
case GameProgress.New:
return "New";
case GameProgress.Started:
return "Started";
case GameProgress.Beaten:
return "Beaten";
case GameProgress.Completed:
return "Completed";
case GameProgress.Mastered:
return "Mastered";
}
}
// Duplicated in _static/scripting/sort.js
export function gameProgressToNumber(progress?: GameProgress): number {
switch (progress) {
case undefined:
return 0;
case GameProgress.Unset:
return 0;
case GameProgress.NotApplicable:
return 5;
case GameProgress.New:
return 10;
case GameProgress.Started:
return 20;
case GameProgress.Beaten:
return 30;
case GameProgress.Completed:
return 40;
case GameProgress.Mastered:
return 50;
}
}
export function compareGameProgress(a: GameData, b: GameData): number {
return gameProgressToNumber(a.progress) - gameProgressToNumber(b.progress);
}

View file

@ -1,101 +0,0 @@
import {GameData} from "./game.ts"
export enum Progress {
Unset = "",
NotApplicable = "notapplicable",
New = "new",
Started = "started",
Beaten = "beaten",
Completed = "completed",
Mastered = "mastered",
}
export function progressToIconDef(progress?: Progress): string {
switch (progress) {
case undefined:
return "";
case Progress.Unset:
return "";
case Progress.NotApplicable:
return "fa-x";
case Progress.New:
return "fa-ellipsis";
case Progress.Started:
return "fa-play";
case Progress.Beaten:
return "fa-circle-check";
case Progress.Completed:
return "fa-star";
case Progress.Mastered:
return "fa-trophy";
}
}
export function progressToClassName(progress?: Progress): string {
switch (progress) {
case undefined:
return "progress-unset";
case Progress.Unset:
return "progress-unset";
case Progress.NotApplicable:
return "progress-notapplicable";
case Progress.New:
return "progress-new";
case Progress.Started:
return "progress-started";
case Progress.Beaten:
return "progress-beaten";
case Progress.Completed:
return "progress-completed";
case Progress.Mastered:
return "progress-mastered";
}
}
export function progressToTitle(progress?: Progress): string {
switch (progress) {
case undefined:
return "";
case Progress.Unset:
return "";
case Progress.NotApplicable:
return "Not applicable";
case Progress.New:
return "New";
case Progress.Started:
return "Started";
case Progress.Beaten:
return "Beaten";
case Progress.Completed:
return "Completed";
case Progress.Mastered:
return "Mastered";
}
}
// Duplicated in _static/scripting/sort.js
export function progress_to_number(progress?: Progress): number {
switch (progress) {
case undefined:
return 0;
case Progress.Unset:
return 0;
case Progress.NotApplicable:
return 5;
case Progress.New:
return 10;
case Progress.Started:
return 20;
case Progress.Beaten:
return 30;
case Progress.Completed:
return 40;
case Progress.Mastered:
return 50;
}
}
export function compare_progress(a: GameData, b: GameData): number {
return progress_to_number(a.progress) - progress_to_number(b.progress)
}