diff --git a/site/drop-tables.js b/site/drop-tables.js index cb7ea53..f1c8338 100644 --- a/site/drop-tables.js +++ b/site/drop-tables.js @@ -8,6 +8,7 @@ rows: [], table: null, filters: { + mode: "", episode: "", difficulty: "", section: "", @@ -27,6 +28,7 @@ function labelValue(value) { return String(value || "") .replace(/^Episode(\d+)$/, "Episode $1") + .replace(/^VeryHard$/, "Very Hard") .replaceAll("_", " "); } @@ -81,9 +83,20 @@ } } + function orderedDifficultyValues(rows) { + const order = ["Normal", "Hard", "VeryHard", "Ultimate"]; + const present = new Set(rows.map((row) => row.difficulty).filter(Boolean)); + const ordered = order.filter((value) => present.has(value)); + const extras = [...present] + .filter((value) => !order.includes(value)) + .sort((a, b) => String(a).localeCompare(String(b))); + return [...ordered, ...extras]; + } + function populateFilters(rows) { + fillSelect(qs("#drops-rare-mode"), uniqueSorted(rows, "mode"), "All modes"); fillSelect(qs("#drops-episode"), uniqueSorted(rows, "episode"), "All episodes"); - fillSelect(qs("#drops-difficulty"), uniqueSorted(rows, "difficulty"), "All difficulties"); + fillSelect(qs("#drops-difficulty"), orderedDifficultyValues(rows), "All difficulties"); fillSelect(qs("#drops-section"), uniqueSorted(rows, "section_id"), "All Section IDs"); } @@ -91,6 +104,7 @@ const search = state.filters.search.trim().toLowerCase(); return state.rows.filter((row) => { + if (state.filters.mode && row.mode !== state.filters.mode) return false; if (state.filters.episode && row.episode !== state.filters.episode) return false; if (state.filters.difficulty && row.difficulty !== state.filters.difficulty) return false; if (state.filters.section && row.section_id !== state.filters.section) return false; @@ -191,6 +205,7 @@ state.table = table; state.rows = await fetchJson(`generated/drops/peeps/${table.path}`); + state.filters.mode = ""; state.filters.episode = ""; state.filters.difficulty = ""; state.filters.section = ""; @@ -200,6 +215,7 @@ populateFilters(state.rows); + if (qs("#drops-rare-mode")) qs("#drops-rare-mode").value = ""; if (qs("#drops-episode")) qs("#drops-episode").value = ""; if (qs("#drops-difficulty")) qs("#drops-difficulty").value = ""; if (qs("#drops-section")) qs("#drops-section").value = ""; @@ -230,6 +246,11 @@ qs("#drops-mode")?.addEventListener("change", updateMode); qs("#drops-version")?.addEventListener("change", loadPeeps); + qs("#drops-rare-mode")?.addEventListener("change", (event) => { + state.filters.mode = event.target.value; + renderTable(); + }); + qs("#drops-episode")?.addEventListener("change", (event) => { state.filters.episode = event.target.value; renderTable(); diff --git a/site/drops.html b/site/drops.html index 4a0c6cc..299d373 100644 --- a/site/drops.html +++ b/site/drops.html @@ -8,7 +8,7 @@ - + @@ -46,6 +46,11 @@ + + +