v0.5.84: matches origin filter, mobile gate, refresh reliability.

Ship Web refresh cache/lock, mobile demand gate, matches 职业/国服 filter, and related site updates through 0.5.84.

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
voson
2026-07-29 18:31:55 +08:00
co-authored by Cursor
parent 7681fdb069
commit b01552ee6e
50 changed files with 3406 additions and 487 deletions
+27 -1
View File
@@ -10,7 +10,8 @@
* - rankings: Immortal leaderboard region
* #/rankings[/region] (legacy #/rankings/meta[/bracket] → players / china)
* - matches: star-player recent matches (pro_matches)
* #/matches[/account_id]
* #/matches[/account_id][?origin=pro|china][&page=N]
* (default origin all omitted; page=1 omitted)
* - streamers: curated Douyin streamer directory
* #/streamers
* - trends: medal bracket for the 8-week win/pick board
@@ -50,6 +51,8 @@ const DEFAULT_TRENDS_SORT = "wr_end";
const VALID_TRENDS_SORTS = ["wr_end", "pr_end"];
const TRENDS_SORT_URL = { wr_end: "wr", pr_end: "pr" };
const TRENDS_SORT_FROM_URL = { wr: "wr_end", pr: "pr_end", wr_end: "wr_end", pr_end: "pr_end" };
const DEFAULT_MATCHES_ORIGIN = "all";
const VALID_MATCHES_ORIGINS = ["all", "pro", "china"];
const DEFAULT_MECHANIC_EFFECT = "basic_dispel";
const VALID_MECHANIC_EFFECTS = [
"basic_dispel",
@@ -95,6 +98,8 @@ function parseHash(hash) {
patchVersion: null,
rankingRegion: null,
matchesPlayerId: null,
matchesOrigin: null,
matchesPage: null,
trendsBracket: null,
trendsSort: null,
mechanicEffect: null,
@@ -152,6 +157,17 @@ function parseHash(hash) {
out.trendsSort = TRENDS_SORT_FROM_URL[sortParam];
}
}
if (page === "matches") {
const originParam = params.get("origin");
if (originParam && VALID_MATCHES_ORIGINS.includes(originParam)) {
out.matchesOrigin = originParam;
}
const pageParam = params.get("page");
if (pageParam && /^\d+$/.test(pageParam)) {
const n = parseInt(pageParam, 10);
if (n >= 1) out.matchesPage = n;
}
}
return out;
}
@@ -229,6 +245,16 @@ function serializeHash(state) {
if (state.itemQuery) qs.set("q", state.itemQuery);
const s = qs.toString();
if (s) hash += "?" + s;
} else if (state.page === "matches") {
const qs = new URLSearchParams();
const origin = state.matchesOrigin || DEFAULT_MATCHES_ORIGIN;
if (VALID_MATCHES_ORIGINS.includes(origin) && origin !== DEFAULT_MATCHES_ORIGIN) {
qs.set("origin", origin);
}
const pageNum = Number(state.matchesPage) || 1;
if (pageNum > 1) qs.set("page", String(pageNum));
const s = qs.toString();
if (s) hash += "?" + s;
}
return hash;
}