Skip to content

Commit b0dd0b8

Browse files
author
DavidQ
committed
Tool filter list in both pages will include Skin Editor even when current metadata rows don’t emit it.
1 parent 267a248 commit b0dd0b8

4 files changed

Lines changed: 22 additions & 29 deletions

File tree

games/index.render.js

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -258,6 +258,11 @@ function buildRows(metadata, pinnedSet, toolLabelMap, toolRegistryMap) {
258258
).entries()]
259259
.map(([value, label]) => ({ value, label }))
260260
.sort((a, b) => a.label.localeCompare(b.label, undefined, { sensitivity: "base" }));
261+
const skinEditorLabel = toolLabelMap.get("skin-editor");
262+
if (skinEditorLabel && !tools.some((entry) => entry.value === "skin-editor")) {
263+
tools.push({ value: "skin-editor", label: skinEditorLabel });
264+
tools.sort((a, b) => a.label.localeCompare(b.label, undefined, { sensitivity: "base" }));
265+
}
261266
const tags = [...new Set(rows.flatMap((row) => row.tags))].sort((a, b) => a.localeCompare(b, undefined, { sensitivity: "base" }));
262267
return { rows, levels, classes, tools, tags };
263268
}

samples/index.render.js

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -229,6 +229,11 @@ function buildSampleRows(metadata, pinnedSet, toolLabelMap, toolRegistryMap) {
229229
).entries()]
230230
.map(([value, label]) => ({ value, label }))
231231
.sort((a, b) => a.label.localeCompare(b.label, undefined, { sensitivity: "base" }));
232+
const skinEditorLabel = toolLabelMap.get("skin-editor");
233+
if (skinEditorLabel && !tools.some((entry) => entry.value === "skin-editor")) {
234+
tools.push({ value: "skin-editor", label: skinEditorLabel });
235+
tools.sort((a, b) => a.label.localeCompare(b.label, undefined, { sensitivity: "base" }));
236+
}
232237
const tags = [...new Set(sampleRows.flatMap((sample) => sample.tags))].sort();
233238

234239
return { sampleRows, phases, phaseOptions, classes, tools, tags, phaseInfoMap };

tools/Skin Editor/index.html

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -21,10 +21,6 @@
2121
<div class="debug-tool-shell app-shell">
2222
<section class="panel debug-tool-panel">
2323
<div class="debug-tool-actions">
24-
<label class="debug-tool-label" for="skinEditorGameSelect">
25-
Game
26-
<select id="skinEditorGameSelect" class="debug-tool-field"></select>
27-
</label>
2824
<button type="button" id="skinEditorLoadButton" class="debug-tool-control">Load Active Skin</button>
2925
<button type="button" id="skinEditorSaveOverrideButton" class="debug-tool-control">Apply Skin Override</button>
3026
<button type="button" id="skinEditorClearOverrideButton" class="debug-tool-control">Clear Override</button>
@@ -44,7 +40,7 @@ <h3>Skin JSON Input</h3>
4440
</section>
4541
<section class="panel debug-tool-panel">
4642
<h3>Skin Summary</h3>
47-
<pre id="skinEditorSummary" class="debug-tool-readout">Select a game to load its active skin payload.</pre>
43+
<pre id="skinEditorSummary" class="debug-tool-readout">Load active skin to inspect its payload.</pre>
4844
</section>
4945
</section>
5046
</div>

tools/Skin Editor/main.js

Lines changed: 11 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,6 @@ const GAME_OPTIONS = Object.freeze([
3838
]);
3939

4040
const refs = {
41-
gameSelect: document.getElementById("skinEditorGameSelect"),
4241
loadButton: document.getElementById("skinEditorLoadButton"),
4342
saveOverrideButton: document.getElementById("skinEditorSaveOverrideButton"),
4443
clearOverrideButton: document.getElementById("skinEditorClearOverrideButton"),
@@ -52,6 +51,7 @@ const refs = {
5251
};
5352

5453
const state = {
54+
activeGameId: "",
5555
presetSkinPath: "",
5656
presetSkin: null
5757
};
@@ -83,10 +83,13 @@ function getGameOptionById(gameId) {
8383
}
8484

8585
function getSelectedGameOption() {
86-
if (!(refs.gameSelect instanceof HTMLSelectElement)) {
87-
return null;
88-
}
89-
return getGameOptionById(refs.gameSelect.value);
86+
return getGameOptionById(state.activeGameId) || GAME_OPTIONS[0] || null;
87+
}
88+
89+
function resolveActiveGameOption(initialGameId = "") {
90+
const selected = getGameOptionById(initialGameId) || GAME_OPTIONS[0] || null;
91+
state.activeGameId = selected ? selected.id : "";
92+
return selected;
9093
}
9194

9295
function setStatus(message) {
@@ -188,6 +191,7 @@ async function loadActiveSkinForSelectedGame() {
188191

189192
const shouldUsePreset = state.presetSkin
190193
&& normalizeText(state.presetSkin.gameId).toLowerCase() === game.id.toLowerCase();
194+
const skinSource = shouldUsePreset ? "preset" : result.source;
191195
const loadedSkin = shouldUsePreset
192196
? buildNormalizedSkinDocument(game, state.presetSkin)
193197
: buildNormalizedSkinDocument(game, result.skin);
@@ -198,7 +202,7 @@ async function loadActiveSkinForSelectedGame() {
198202
if (refs.input instanceof HTMLTextAreaElement) {
199203
refs.input.value = toPrettyJson(loadedSkin);
200204
}
201-
setSummary(formatSummary(game, state.presetSkin ? "preset" : result.source, loadedSkin));
205+
setSummary(formatSummary(game, skinSource, loadedSkin));
202206
setStatus(`Loaded active skin for ${game.label}.`);
203207
}
204208

@@ -281,18 +285,6 @@ async function importSkinJsonFromFile(file) {
281285
setStatus("Imported skin JSON. Review and click Apply Skin Override.");
282286
}
283287

284-
function populateGameSelect(initialGameId = "") {
285-
if (!(refs.gameSelect instanceof HTMLSelectElement)) {
286-
return;
287-
}
288-
refs.gameSelect.innerHTML = GAME_OPTIONS
289-
.map((game) => `<option value="${game.id}">${game.label}</option>`)
290-
.join("");
291-
292-
const selected = getGameOptionById(initialGameId) || GAME_OPTIONS[0];
293-
refs.gameSelect.value = selected.id;
294-
}
295-
296288
function extractPresetPayload(rawPreset) {
297289
if (!rawPreset || typeof rawPreset !== "object") {
298290
return {};
@@ -363,16 +355,11 @@ function bindEvents() {
363355
}
364356
input.value = "";
365357
});
366-
refs.gameSelect?.addEventListener("change", () => {
367-
state.presetSkin = null;
368-
state.presetSkinPath = "";
369-
void loadActiveSkinForSelectedGame();
370-
});
371358
}
372359

373360
async function bootSkinEditor() {
374361
const { gameId, presetLoaded } = await loadPresetFromQuery();
375-
populateGameSelect(gameId);
362+
resolveActiveGameOption(gameId);
376363
bindEvents();
377364
await loadActiveSkinForSelectedGame();
378365
if (presetLoaded) {

0 commit comments

Comments
 (0)