Spaces:
Running on Zero
Running on Zero
mode-switch fix, remove example autoplay
Browse files- index.html +14 -22
index.html
CHANGED
|
@@ -97,6 +97,7 @@
|
|
| 97 |
}
|
| 98 |
body { display: flex; flex-direction: column; min-height: 100vh; }
|
| 99 |
.mono { font-family: "JetBrains Mono", ui-monospace, "SF Mono", Menlo, monospace; font-variant-numeric: tabular-nums; }
|
|
|
|
| 100 |
|
| 101 |
/* ===== Top bar ===== */
|
| 102 |
.topbar {
|
|
@@ -654,14 +655,8 @@
|
|
| 654 |
}
|
| 655 |
.examples { order: 1; }
|
| 656 |
.example-chip { padding: 6px 11px; font-size: 12px; }
|
| 657 |
-
.
|
| 658 |
-
|
| 659 |
-
width: 100%;
|
| 660 |
-
padding: 12px 16px;
|
| 661 |
-
font-size: 14px;
|
| 662 |
-
justify-content: center;
|
| 663 |
-
}
|
| 664 |
-
.toast { order: 3; }
|
| 665 |
|
| 666 |
/* Toast — slide up from bottom on mobile for visibility */
|
| 667 |
.toast {
|
|
@@ -733,10 +728,14 @@
|
|
| 733 |
<span id="tc-s">00</span><span class="sep">:</span><span id="tc-f">00</span>
|
| 734 |
<span style="margin-left: 8px; font-size: 11px; color: var(--text-faint)" id="dur-text">0:00</span>
|
| 735 |
</div>
|
| 736 |
-
<div class="spacer"></div>
|
| 737 |
<div class="info">
|
| 738 |
<span class="k">Engine</span><span class="v">Gepard · 32 FSQ heads</span>
|
| 739 |
</div>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 740 |
</div>
|
| 741 |
</section>
|
| 742 |
|
|
@@ -787,10 +786,6 @@
|
|
| 787 |
|
| 788 |
<div class="row-actions">
|
| 789 |
<div class="examples" id="examples"></div>
|
| 790 |
-
<button class="render-btn" id="render-btn" type="button">
|
| 791 |
-
<span class="icon" id="render-icon">▶</span>
|
| 792 |
-
<span id="render-label">Render</span>
|
| 793 |
-
</button>
|
| 794 |
</div>
|
| 795 |
|
| 796 |
<div class="toast hidden" id="toast"></div>
|
|
@@ -867,7 +862,9 @@ const setMode = (m) => {
|
|
| 867 |
mode = m;
|
| 868 |
els.modePreset.classList.toggle("active", m === "preset");
|
| 869 |
els.modeClone.classList.toggle("active", m !== "preset");
|
|
|
|
| 870 |
els.refSection.classList.toggle("hidden", m !== "clone");
|
|
|
|
| 871 |
};
|
| 872 |
els.modePreset.addEventListener("click", () => setMode("preset"));
|
| 873 |
els.modeClone.addEventListener("click", () => setMode("clone"));
|
|
@@ -1049,6 +1046,10 @@ const sliderValue = (key) => Number($(`sl-${key}`).value);
|
|
| 1049 |
|
| 1050 |
// ---------- Player ----------
|
| 1051 |
const loadAudio = (url, script, filename = "gepard.wav") => {
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1052 |
audioEl = new Audio(url);
|
| 1053 |
audioEl.preload = "auto";
|
| 1054 |
audioEl._downloadName = filename;
|
|
@@ -1256,15 +1257,6 @@ document.getElementById("theme-toggle").addEventListener("click", () => {
|
|
| 1256 |
renderExamples(cfg.examples);
|
| 1257 |
client = await Client.connect(window.location.origin);
|
| 1258 |
highlightLoop();
|
| 1259 |
-
|
| 1260 |
-
// Lazy cache: warm the first 3 examples in the background so first
|
| 1261 |
-
// click is instant. Sequential to avoid GPU contention; failures are
|
| 1262 |
-
// silent (next click will retry).
|
| 1263 |
-
(async () => {
|
| 1264 |
-
for (const ex of cfg.examples.slice(0, 3)) {
|
| 1265 |
-
try { await synthesizeForExample(ex); } catch (e) { /* skip */ }
|
| 1266 |
-
}
|
| 1267 |
-
})();
|
| 1268 |
})();
|
| 1269 |
</script>
|
| 1270 |
</body>
|
|
|
|
| 97 |
}
|
| 98 |
body { display: flex; flex-direction: column; min-height: 100vh; }
|
| 99 |
.mono { font-family: "JetBrains Mono", ui-monospace, "SF Mono", Menlo, monospace; font-variant-numeric: tabular-nums; }
|
| 100 |
+
.hidden { display: none !important; }
|
| 101 |
|
| 102 |
/* ===== Top bar ===== */
|
| 103 |
.topbar {
|
|
|
|
| 655 |
}
|
| 656 |
.examples { order: 1; }
|
| 657 |
.example-chip { padding: 6px 11px; font-size: 12px; }
|
| 658 |
+
/* Keep Render compact; on narrow screens let the transport bar wrap. */
|
| 659 |
+
.transport { flex-wrap: wrap; }
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 660 |
|
| 661 |
/* Toast — slide up from bottom on mobile for visibility */
|
| 662 |
.toast {
|
|
|
|
| 728 |
<span id="tc-s">00</span><span class="sep">:</span><span id="tc-f">00</span>
|
| 729 |
<span style="margin-left: 8px; font-size: 11px; color: var(--text-faint)" id="dur-text">0:00</span>
|
| 730 |
</div>
|
|
|
|
| 731 |
<div class="info">
|
| 732 |
<span class="k">Engine</span><span class="v">Gepard · 32 FSQ heads</span>
|
| 733 |
</div>
|
| 734 |
+
<div class="spacer"></div>
|
| 735 |
+
<button class="render-btn" id="render-btn" type="button">
|
| 736 |
+
<span class="icon" id="render-icon">▶</span>
|
| 737 |
+
<span id="render-label">Render</span>
|
| 738 |
+
</button>
|
| 739 |
</div>
|
| 740 |
</section>
|
| 741 |
|
|
|
|
| 786 |
|
| 787 |
<div class="row-actions">
|
| 788 |
<div class="examples" id="examples"></div>
|
|
|
|
|
|
|
|
|
|
|
|
|
| 789 |
</div>
|
| 790 |
|
| 791 |
<div class="toast hidden" id="toast"></div>
|
|
|
|
| 862 |
mode = m;
|
| 863 |
els.modePreset.classList.toggle("active", m === "preset");
|
| 864 |
els.modeClone.classList.toggle("active", m !== "preset");
|
| 865 |
+
// Preset → show speaker dropdown only; Clone → show reference panel only.
|
| 866 |
els.refSection.classList.toggle("hidden", m !== "clone");
|
| 867 |
+
els.speaker.classList.toggle("hidden", m === "clone");
|
| 868 |
};
|
| 869 |
els.modePreset.addEventListener("click", () => setMode("preset"));
|
| 870 |
els.modeClone.addEventListener("click", () => setMode("clone"));
|
|
|
|
| 1046 |
|
| 1047 |
// ---------- Player ----------
|
| 1048 |
const loadAudio = (url, script, filename = "gepard.wav") => {
|
| 1049 |
+
// Silence any previously loaded clip: reassigning `audioEl` alone does not
|
| 1050 |
+
// stop the old element, which is what caused overlapping playback.
|
| 1051 |
+
if (audioEl) { audioEl.pause(); audioEl.src = ""; }
|
| 1052 |
+
isPlaying = false;
|
| 1053 |
audioEl = new Audio(url);
|
| 1054 |
audioEl.preload = "auto";
|
| 1055 |
audioEl._downloadName = filename;
|
|
|
|
| 1257 |
renderExamples(cfg.examples);
|
| 1258 |
client = await Client.connect(window.location.origin);
|
| 1259 |
highlightLoop();
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1260 |
})();
|
| 1261 |
</script>
|
| 1262 |
</body>
|