diff --git a/AquaNet/bun.lockb b/AquaNet/bun.lockb index 8cd8a7e8..a2087b1f 100755 Binary files a/AquaNet/bun.lockb and b/AquaNet/bun.lockb differ diff --git a/AquaNet/src/libs/i18n/en_ref.ts b/AquaNet/src/libs/i18n/en_ref.ts index e7548aba..84de145e 100644 --- a/AquaNet/src/libs/i18n/en_ref.ts +++ b/AquaNet/src/libs/i18n/en_ref.ts @@ -69,6 +69,7 @@ export const EN_REF_LEADERBOARD = { 'Leaderboard.Accuracy': 'Accuracy', 'Leaderboard.FC': 'FC', 'Leaderboard.AP': 'AP', + 'Leaderboard.Loading': "Loading..." } export const EN_REF_GENERAL = { diff --git a/AquaNet/src/libs/i18n/zh.ts b/AquaNet/src/libs/i18n/zh.ts index e1abb124..0b819651 100644 --- a/AquaNet/src/libs/i18n/zh.ts +++ b/AquaNet/src/libs/i18n/zh.ts @@ -81,6 +81,7 @@ const zhLeaderboard: typeof EN_REF_LEADERBOARD = { 'Leaderboard.Accuracy': '准确率', 'Leaderboard.FC': 'FC', 'Leaderboard.AP': 'AP', + 'Leaderboard.Loading': '请等一下。' } const zhGeneral: typeof EN_REF_GENERAL = { diff --git a/AquaNet/src/libs/sdk.ts b/AquaNet/src/libs/sdk.ts index c6e36a72..ccd8317e 100644 --- a/AquaNet/src/libs/sdk.ts +++ b/AquaNet/src/libs/sdk.ts @@ -227,8 +227,8 @@ export const GAME = { post(`/api/v2/game/mai2/my-photo`, { }), userSummary: (username: string, game: GameName): Promise => post(`/api/v2/game/${game}/user-summary`, { username }), - ranking: (game: GameName): Promise => - post(`/api/v2/game/${game}/ranking`, { }), + ranking: (game: GameName, page?: number): Promise => + post(`/api/v2/game/${game}/ranking`, typeof page === "number" ? { page } : {}), changeName: (game: GameName, newName: string): Promise<{ newName: string }> => post(`/api/v2/game/${game}/change-name`, { newName }), export: (game: GameName): Promise> => diff --git a/AquaNet/src/pages/Ranking.svelte b/AquaNet/src/pages/Ranking.svelte index 80f246b2..11432abc 100644 --- a/AquaNet/src/pages/Ranking.svelte +++ b/AquaNet/src/pages/Ranking.svelte @@ -9,53 +9,32 @@ import { t } from "../libs/i18n"; import UserCard from "../components/UserCard.svelte"; import Tooltip from "../components/Tooltip.svelte"; - import Pagination from "../components/Pagination.svelte"; + import Cap from "./Ranking/Cap.svelte"; export let game: GameName = 'mai2'; title(`Ranking`); - let d: { users: GenericRanking[] }; + let loadedPages: GenericRanking[][]; let error: string | null; - let page = 1 - const perPage = 50 - let totalPages = 1 - - function handleUpdatePage(event: CustomEvent) { - page = event.detail; - const url = new URL(window.location.toString()) - url.searchParams.set('page', page.toString()) - history.pushState({}, '', url.toString()) - window.scrollTo(0, 0) - } + let earliestPage = 0 + //const perPage = 50 onMount(() => { const url = new URL(window.location.toString()) const pageParam = url.searchParams.get('page') - if (pageParam) { - page = parseInt(pageParam, 10) || 1 - } - - window.addEventListener('popstate', () => { - const url = new URL(window.location.toString()) - const pageParam = url.searchParams.get('page') - page = parseInt(pageParam, 10) || 1 - window.scrollTo(0, 0) - }) + if (pageParam) + earliestPage = parseInt(pageParam, 10) || 0 + Promise.all([GAME.ranking(game, earliestPage)]) + .then(([users]) => { + loadedPages = [ users ] + }) + .catch((e) => error = e.message); }) - Promise.all([GAME.ranking(game)]) - .then(([users]) => { - d = { users } - totalPages = Math.ceil(users.length / perPage) - }) - .catch((e) => error = e.message); - let hoveringUser = ""; let hoverLoading = false; - - $: paginatedUsers = d ? d.users.slice((page - 1) * perPage, page * perPage) : []
@@ -68,13 +47,9 @@ - {#if d} - {#if page > 1} - - {/if} - + {#if loadedPages}
-
hoveringUser = paginatedUsers[0]?.username} role="heading" aria-level="2"> +
hoveringUser = ""} role="heading" aria-level="2"> {t("Leaderboard.Rank")} {t("Leaderboard.Rating")} @@ -82,7 +57,8 @@ {t("Leaderboard.FC")} {t("Leaderboard.AP")}
- {#each paginatedUsers as user, i (user.rank)} + + {#each loadedPages.flat() as user, i (user.rank)}
hoveringUser = user.username} on:focus={() => {}}> @@ -104,16 +80,15 @@ {user.allPerfect}
{/each} +
- - hoverLoading = l} /> {/if} - +
\ No newline at end of file