re-code the userscript
Some checks failed
Deploy App / docker (ubuntu-latest) (push) Failing after 7s

This commit is contained in:
Lee
2024-04-25 23:39:26 +01:00
parent a8158c73c8
commit c8990f21cd
17 changed files with 1928 additions and 122 deletions

View File

@ -0,0 +1,57 @@
import Page from "../page";
import {getElement, getSvelteClass} from "../../common/page-utils";
import {getPlayer, getPlayerIdFromUrl} from "../../common/player";
export default class PlayerPage extends Page {
constructor() {
super("/u/");
}
public async onLoad() {
try {
// Wait for the title element to load, so we know the page is fully loaded
const titleElement = await getElement(".title.is-5.player.has-text-centered-mobile", 250);
const id = getPlayerIdFromUrl();
const player = await getPlayer(id);
console.log(player);
await this.addStats(player);
} catch (error) {
console.error("Failed to load player page", error);
}
}
/**
* Add the custom stats to the player's page
*
* @param player the player to add stats for
*/
private async addStats(player: any) {
await this.addStat(
"+1 PP",
`${player.rawPerGlobalPerformancePoints.toFixed(2)}pp`,
"Raw performance points to gain +1 global PP"
);
}
/**
* Add a stat to the player's stats
*
* @param stat the title of the stat
* @param value the value of the stat
* @param hover the hover text of the stat
*/
private async addStat(stat: string, value: string, hover?: string) {
const statsContainer = await getElement(".stats-container");
const statElement = document.createElement("div");
const svelteClass = getSvelteClass(".stats-container");
statElement.className = `stat-item ${svelteClass}`;
statElement.innerHTML = `
<span class="stat-title ${svelteClass}">${stat}</span>
<span class="stat-spacer ${svelteClass}"></span>
<span class="stat-content ${hover && "has-hover"} ${svelteClass}" ${hover && `title="${hover}"`}>${value}</span>`;
statsContainer.appendChild(statElement);
}
}

34
src/pages/page-handler.ts Normal file
View File

@ -0,0 +1,34 @@
import Page from "./page";
import PlayerPage from "./impl/player-page";
import {pageChangeCallback} from "../common/page-utils";
export default class PageHandler {
private pages: Page[] = [];
constructor() {
// Register the pages to handle
this.registerPage(new PlayerPage());
// Handle page changes
pageChangeCallback((path) => {
console.log(`Page changed to: ${path}`);
for (let page of this.pages) {
if (path.startsWith(page.route)) {
console.log(`Handling page: ${page.route}`);
page.onLoad();
}
}
});
}
/**
* Registers a page to be handled
*
* @param page The page to register
*/
private registerPage(page: Page) {
console.log(`Registered page: ${page.route}`)
this.pages.push(page);
}
}

24
src/pages/page.ts Normal file
View File

@ -0,0 +1,24 @@
export default class Page {
/**
* The route of the page
* eg: /ranking
*/
private readonly _route: string;
constructor(route: string) {
this._route = route;
}
/*
* This gets called when the page is loaded
*/
public onLoad() {}
/**
* The route of the page
*/
get route(): string {
return this._route;
}
}