Fix invisible Add Custom engine dialog and a TDZ error on Engines tab (v1.14.5)
Two unclosed <div class="card"> tags in the TTS settings markup left the add-engine dialog nested inside the TTS panel's DOM subtree, so it rendered at zero size whenever another Engines sub-tab (e.g. Speech Recognition) was active. Also fixed a `let` declared after its first use, which threw a ReferenceError on every Engines-tab page load. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
parent
939d33f7cc
commit
2a2c34fb56
@ -9,6 +9,14 @@ Follows [Keep a Changelog](https://keepachangelog.com/en/1.0.0/) · versioned wi
|
|||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
|
## [1.14.5] — 2026-07-08
|
||||||
|
|
||||||
|
### Fixed
|
||||||
|
- **"Add Custom" engine dialog was invisible/unclickable from the Speech Recognition and Language Models tabs** — two unclosed `<div class="card">` tags in the TTS settings markup left the dialog (and everything after it) nested inside the TTS panel's DOM subtree. Since that panel is `display:none` whenever another Engines tab is active, the dialog opened with zero size and no way to interact with it. Closed the missing tags so the dialog renders as a top-level element.
|
||||||
|
- **Uncaught `ReferenceError: Cannot access '_localContainersLoadSeq' before initialization`** thrown on every page load when the Engines tab was active — a `let` declaration for the container-load sequence counter was placed after the code that first used it. Moved the declaration above its first use.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
## [1.14.4] — 2026-07-08
|
## [1.14.4] — 2026-07-08
|
||||||
|
|
||||||
### Fixed
|
### Fixed
|
||||||
|
|||||||
@ -10,7 +10,7 @@
|
|||||||
<meta name="format-detection" content="telephone=no">
|
<meta name="format-detection" content="telephone=no">
|
||||||
<meta name="color-scheme" content="light dark">
|
<meta name="color-scheme" content="light dark">
|
||||||
<meta name="theme-color" content="#2563EB">
|
<meta name="theme-color" content="#2563EB">
|
||||||
<meta name="app-version" content="1.14.4">
|
<meta name="app-version" content="1.14.5">
|
||||||
<link rel="manifest" href="/manifest.webmanifest">
|
<link rel="manifest" href="/manifest.webmanifest">
|
||||||
<link rel="icon" href="/static/icon.svg" type="image/svg+xml">
|
<link rel="icon" href="/static/icon.svg" type="image/svg+xml">
|
||||||
<link rel="apple-touch-icon" href="/static/icon.svg">
|
<link rel="apple-touch-icon" href="/static/icon.svg">
|
||||||
@ -27,7 +27,7 @@
|
|||||||
|
|
||||||
<!-- ── Core styles (local — no CDN dependency for first paint) ────────── -->
|
<!-- ── Core styles (local — no CDN dependency for first paint) ────────── -->
|
||||||
<link rel="stylesheet" href="/static/vendor/mdi/materialdesignicons.min.css">
|
<link rel="stylesheet" href="/static/vendor/mdi/materialdesignicons.min.css">
|
||||||
<link rel="stylesheet" href="/static/style.css?v=1.14.4">
|
<link rel="stylesheet" href="/static/style.css?v=1.14.5">
|
||||||
|
|
||||||
|
|
||||||
<!-- ── Flag icons — non-blocking (loaded async, icons appear after JS) ── -->
|
<!-- ── Flag icons — non-blocking (loaded async, icons appear after JS) ── -->
|
||||||
@ -365,7 +365,7 @@ window.toggleNavTree = function(treeId, chevronId) {
|
|||||||
</script>
|
</script>
|
||||||
|
|
||||||
<!-- loader.js: fetches sections → loads JS modules → removes skeleton -->
|
<!-- loader.js: fetches sections → loads JS modules → removes skeleton -->
|
||||||
<script src="/static/loader.js?v=1.14.4"></script>
|
<script src="/static/loader.js?v=1.14.5"></script>
|
||||||
|
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
|
|||||||
@ -188,6 +188,7 @@ if (document.getElementById('s-studio')?.classList.contains('is-active')) initEl
|
|||||||
if (typeof renderIntegrationSnippets === 'function') renderIntegrationSnippets();
|
if (typeof renderIntegrationSnippets === 'function') renderIntegrationSnippets();
|
||||||
|
|
||||||
// ── Engines section: load containers when that section is visible ──────────
|
// ── Engines section: load containers when that section is visible ──────────
|
||||||
|
let _localContainersLoadSeq = 0;
|
||||||
if (document.getElementById('s-llms')?.classList.contains('is-active')) {
|
if (document.getElementById('s-llms')?.classList.contains('is-active')) {
|
||||||
loadLocalContainers();
|
loadLocalContainers();
|
||||||
}
|
}
|
||||||
@ -307,7 +308,6 @@ function editCustomEngineCard(card) {
|
|||||||
|
|
||||||
// ── Local Docker container management ─────────────────────────────────────
|
// ── Local Docker container management ─────────────────────────────────────
|
||||||
|
|
||||||
let _localContainersLoadSeq = 0;
|
|
||||||
let _lastLocalContainers = null;
|
let _lastLocalContainers = null;
|
||||||
|
|
||||||
function cardType(card) {
|
function cardType(card) {
|
||||||
|
|||||||
@ -544,6 +544,7 @@
|
|||||||
<span class="s-hint">Controls payload shape for the normal TTS API URL.</span>
|
<span class="s-hint">Controls payload shape for the normal TTS API URL.</span>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
<div class="card" style="margin-bottom: 24px;">
|
<div class="card" style="margin-bottom: 24px;">
|
||||||
<div class="s-page-head">
|
<div class="s-page-head">
|
||||||
@ -558,6 +559,7 @@
|
|||||||
</select>
|
</select>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
<div class="s-page-actions" style="margin-top: 15px;">
|
<div class="s-page-actions" style="margin-top: 15px;">
|
||||||
<button class="btn-primary s-save-btn">Save settings</button>
|
<button class="btn-primary s-save-btn">Save settings</button>
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user