refactor: establish standalone application boundary

This commit is contained in:
leefer
2026-08-03 21:42:25 +08:00
parent cc5fb8d73e
commit e1e76cd51e
324 changed files with 63090 additions and 44743 deletions
File diff suppressed because it is too large Load Diff
+19
View File
@@ -0,0 +1,19 @@
<section id="ladderView" class="workspace-view page redesigned-ladder-view">
<div class="section-toolbar lad-head redesigned-page-head ladder-page-head">
<div class="section-title-group">
<h2>市场天梯</h2>
<span class="section-subtitle">按连板高度观察空间板与梯队完整度 · <b id="ladderDateRange">--</b></span>
</div>
<div class="ladder-head-actions">
<div id="ladderSortSegment" class="ladder-sort-segment" role="group" aria-label="天梯排序">
<button type="button" class="active" data-ladder-sort="time" aria-pressed="true">按封板时间</button>
<button type="button" data-ladder-sort="open" aria-pressed="false">按开板次数</button>
</div>
<button id="ladderExportButton" class="button" type="button">导出 CSV</button>
</div>
</div>
<div class="market-ladder-workspace lad-grid">
<div id="ladderBoard" class="market-ladder-board"></div>
<aside id="ladderInsights" class="market-ladder-insights" aria-label="天梯结构解读"></aside>
</div>
</section>
+16 -3
View File
@@ -1,6 +1,5 @@
window.XiaobaiPageModules.register("ladder", ["ladderView"]);
window.XiaobaiPageModules.register("ladder", ["ladderView"], { bind: bindLadderEvents });
/* PRESERVATION-SOURCE-BEGIN app.js:2125-2216 */
function renderLadderMini(ladders) {
const container = document.querySelector("#ladderMini");
const highest = ladders.length ? Math.max(...ladders.map((item) => number(item.level))) : 0;
@@ -93,4 +92,18 @@ function renderLadderBoard(ladders) {
refreshIcons();
}
/* PRESERVATION-SOURCE-END app.js:2125-2216 */
function bindLadderEvents() {
document.querySelectorAll("[data-ladder-sort]").forEach((button) => {
button.addEventListener("click", () => {
state.ladderSortMode = button.dataset.ladderSort === "open" ? "open" : "time";
document.querySelectorAll("[data-ladder-sort]").forEach((item) => {
const active = item === button;
item.classList.toggle("active", active);
item.setAttribute("aria-pressed", String(active));
});
renderLadderBoard(state.dashboard?.ladders || []);
});
});
document.querySelector("#ladderExportButton").addEventListener("click", exportLadder);
}