feat(admin): rebuild page display settings

This commit is contained in:
2026-08-19 00:07:13 +08:00
parent 09b1e8fd35
commit 480e2bf07e
117 changed files with 1815 additions and 9081 deletions
+8 -52
View File
@@ -21,9 +21,8 @@
var state = {
filter_cat: "",
filter_tag: "",
sort: "latest",
page: 1,
cf: {}
sort: "date",
page: 1
};
var activeCat = bar.querySelector("[data-filter-cat].is-active");
@@ -31,12 +30,7 @@
var activeTag = bar.querySelector("[data-filter-tag].is-active");
if (activeTag) state.filter_tag = activeTag.dataset.filterTag || "";
var activeSort = bar.querySelector("[data-filter-sort].is-active");
if (activeSort) state.sort = activeSort.dataset.filterSort || "latest";
bar.querySelectorAll("[data-filter-cf].is-active").forEach(function (el) {
var dimKey = el.dataset.filterCf || "";
var dimVal = el.dataset.filterCfVal || "";
if (dimKey) state.cf[dimKey] = dimVal;
});
if (activeSort) state.sort = activeSort.dataset.filterSort || "date";
function buildUrl() {
var params = new URLSearchParams();
@@ -45,20 +39,8 @@
if (state.filter_cat) params.set("filter_cat", state.filter_cat);
if (state.filter_tag) params.set("filter_tag", state.filter_tag);
var sortMap = { oldest: { orderby: "date", order: "ASC" }, popular: { orderby: "comment_count", order: "DESC" } };
var s = sortMap[state.sort];
params.set("sort", s ? s.orderby : "date");
params.set("order", s ? s.order : "DESC");
params.set("sort", state.sort || "date");
params.set("page", String(state.page));
var cfActive = {};
var hasCf = false;
for (var cfK in state.cf) {
if (state.cf[cfK]) {
cfActive[cfK] = state.cf[cfK];
hasCf = true;
}
}
if (hasCf) params.set("custom_filters", JSON.stringify(cfActive));
return REST_BASE + "?" + params.toString();
}
@@ -70,13 +52,7 @@
el.classList.toggle("is-active", (el.dataset.filterTag || "") === state.filter_tag);
});
bar.querySelectorAll("[data-filter-sort]").forEach(function (el) {
el.classList.toggle("is-active", (el.dataset.filterSort || "latest") === state.sort);
});
bar.querySelectorAll("[data-filter-cf]").forEach(function (el) {
var dimKey = el.dataset.filterCf || "";
var dimVal = el.dataset.filterCfVal || "";
var isActive = dimKey && (state.cf[dimKey] || "") === dimVal;
el.classList.toggle("is-active", isActive);
el.classList.toggle("is-active", (el.dataset.filterSort || "date") === state.sort);
});
}
@@ -131,21 +107,9 @@
url.searchParams.delete("paged");
url.searchParams.delete("aksrt_filter_cat");
url.searchParams.delete("aksrt_filter_tag");
url.searchParams.forEach(function (v, k) {
if (k.indexOf("aksrt_cf_") === 0) url.searchParams.delete(k);
});
if (state.filter_cat) url.searchParams.set("aksrt_filter_cat", state.filter_cat);
if (state.filter_tag) url.searchParams.set("aksrt_filter_tag", state.filter_tag);
for (var cfK2 in state.cf) {
if (state.cf[cfK2]) url.searchParams.set("aksrt_cf_" + cfK2, state.cf[cfK2]);
}
if (state.sort === "oldest") {
url.searchParams.set("orderby", "date");
url.searchParams.set("order", "asc");
} else if (state.sort === "popular") {
url.searchParams.set("orderby", "comment_count");
url.searchParams.set("order", "desc");
}
if (state.sort) url.searchParams.set("orderby", state.sort);
if (state.page > 1) url.searchParams.set("paged", String(state.page));
history.pushState({ aksrtArchive: true, state: Object.assign({}, state) }, "", url.toString());
}
@@ -156,7 +120,7 @@
}
bar.addEventListener("click", function (e) {
var chip = e.target.closest("[data-filter-cat], [data-filter-tag], [data-filter-sort], [data-filter-cf]");
var chip = e.target.closest("[data-filter-cat], [data-filter-tag], [data-filter-sort]");
if (!chip) return;
e.preventDefault();
@@ -176,20 +140,12 @@
}
}
if (chip.dataset.filterSort !== undefined) {
var newSort = chip.dataset.filterSort || "latest";
var newSort = chip.dataset.filterSort || "date";
if (newSort !== state.sort) {
state.sort = newSort;
changed = true;
}
}
if (chip.dataset.filterCf !== undefined) {
var cfKey = chip.dataset.filterCf;
var cfVal = chip.dataset.filterCfVal || "";
if ((state.cf[cfKey] || "") !== cfVal) {
state.cf[cfKey] = cfVal;
changed = true;
}
}
if (changed) {
state.page = 1;