update select video
CI / test (pull_request) Failing after 2m20s

This commit is contained in:
2026-08-09 15:59:09 +08:00
parent ee006fba18
commit 9f9aa2825a
3 changed files with 64 additions and 20 deletions
+40 -14
View File
@@ -526,27 +526,46 @@ function renderAttempt(attempt) {
root.append(label, title, form);
}
function filterChip(label, value, type, active) {
function filterOption(label, value, type, active) {
const button = document.createElement("button");
button.className = `filter-chip${active ? " active" : ""}`;
button.className = `filter-option${active ? " active" : ""}`;
button.textContent = label;
button.dataset[type] = value;
button.setAttribute("role", "option");
button.addEventListener("click", () => {
if (type === "ability") state.videoAbility = value;
if (type === "discipline") state.videoDiscipline = value;
renderVideoFilters();
renderVideos();
closeFilterDropdowns();
});
return button;
}
function closeFilterDropdowns() {
$$(".filter-dropdown-panel").forEach((panel) => panel.classList.add("hidden"));
$$(".filter-dropdown-toggle").forEach((toggle) => toggle.setAttribute("aria-expanded", "false"));
}
function toggleFilterDropdown(type) {
const panel = $(`#${type}-panel`);
const toggle = $(`#${type}-toggle`);
const isOpen = !panel.classList.contains("hidden");
closeFilterDropdowns();
if (!isOpen) {
panel.classList.remove("hidden");
toggle.setAttribute("aria-expanded", "true");
}
}
function renderVideoFilters() {
if (!state.videoCatalog) return;
const abilityRoot = $("#ability-filters");
abilityRoot.replaceChildren(
filterChip(`全部 ${state.videoCatalog.total}`, "", "ability", !state.videoAbility),
const abilityPanel = $("#ability-panel");
abilityPanel.replaceChildren(
filterOption(`全部 ${state.videoCatalog.total}`, "", "ability", !state.videoAbility),
...state.videoCatalog.abilities.map((ability) =>
filterChip(
filterOption(
`${ability.icon} ${ability.label} ${ability.count}`,
ability.id,
"ability",
@@ -554,11 +573,14 @@ function renderVideoFilters() {
)
),
);
const disciplineRoot = $("#discipline-filters");
disciplineRoot.replaceChildren(
filterChip("全部专业", "", "discipline", !state.videoDiscipline),
const abilityLabel = state.videoCatalog.abilities.find((a) => a.id === state.videoAbility);
$("#ability-label").textContent = abilityLabel ? `${abilityLabel.icon} ${abilityLabel.label}` : "全部维度";
const disciplinePanel = $("#discipline-panel");
disciplinePanel.replaceChildren(
filterOption("全部专业", "", "discipline", !state.videoDiscipline),
...state.videoCatalog.disciplines.map((discipline) =>
filterChip(
filterOption(
`${discipline.icon || "∑"} ${discipline.name}`,
discipline.name,
"discipline",
@@ -566,11 +588,10 @@ function renderVideoFilters() {
)
),
);
const disciplineLabel = state.videoCatalog.disciplines.find((d) => d.name === state.videoDiscipline);
$("#discipline-label").textContent = disciplineLabel ? `${disciplineLabel.icon || "∑"} ${disciplineLabel.name}` : "全部专业";
const selected = state.videoCatalog.abilities.find(
(item) => item.id === state.videoAbility
);
$("#video-stream-title").textContent = selected ? `${selected.label}视频流` : "全部视频";
$("#video-stream-title").textContent = abilityLabel ? `${abilityLabel.label}视频流` : "全部视频";
$$(".ability-node").forEach((node) => {
node.classList.toggle("active", node.dataset.ability === state.videoAbility);
});
@@ -1128,6 +1149,11 @@ function bindUI() {
});
$("#enter-alumni").addEventListener("click", showLifeSkills);
$("#back-to-hub").addEventListener("click", showLifeHub);
$("#ability-toggle").addEventListener("click", () => toggleFilterDropdown("ability"));
$("#discipline-toggle").addEventListener("click", () => toggleFilterDropdown("discipline"));
document.addEventListener("click", (event) => {
if (!event.target.closest(".filter-dropdown")) closeFilterDropdowns();
});
$$(".route-card").forEach((card) => {
card.addEventListener("click", (event) => {
if (event.target.closest(".route-enter")) return;