Root cause 1 (v1.12.18): `window.loadVoiceLibrary = () => loadVoiceLibrary()` overwrites the global binding the arrow function references, causing immediate RangeError: Maximum call stack size exceeded on every call. Changed to direct assignment `window.loadVoiceLibrary = loadVoiceLibrary`. Root cause 2 (v1.12.18): `loadSettings()` called `renderSettingsAbout()` which lives in conversation.js (batch E), loaded after init.js. Guard added with typeof check; nav.js already calls it safely when the About section opens. Also (v1.12.18): s-library.html duplicated cl-book-filter / cl-search / cl-grid from s-characters.html, breaking getElementById. Characters panel in Library now redirects to s-characters instead of duplicating its DOM nodes. Also (v1.12.19): engines.js triggers a second loadVoiceLibrary() after nav.js already rendered voices, blanking the list briefly. Second call now silently re-fetches without clearing the list when voices are already present. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
32 lines
1.7 KiB
HTML
32 lines
1.7 KiB
HTML
<div class="section-head">
|
|
<span class="section-icon"><span class="mdi mdi-bookshelf"></span></span>
|
|
<div class="section-title">
|
|
<h2>Library</h2>
|
|
<p>Your productions in one place — books to read aloud, theater plays to rehearse, and the shared character cast that links them.</p>
|
|
</div>
|
|
</div>
|
|
|
|
<div class="lib-tabs">
|
|
<button class="lib-tab is-active" data-library-view="books" onclick="navLibraryView('books')"><span class="mdi mdi-book-open-page-variant-outline"></span> Books</button>
|
|
<button class="lib-tab" data-library-view="plays" onclick="navLibraryView('plays')"><span class="mdi mdi-theater"></span> Theater Plays</button>
|
|
<button class="lib-tab" data-library-view="characters" onclick="navLibraryView('characters')"><span class="mdi mdi-account-box-multiple-outline"></span> Characters / Cast</button>
|
|
</div>
|
|
|
|
<!-- Books -->
|
|
<div class="lib-panel is-active" data-library-panel="books">
|
|
<div id="lib-books-list" class="reh-bookshelf"></div>
|
|
</div>
|
|
|
|
<!-- Theater Plays -->
|
|
<div class="lib-panel" data-library-panel="plays">
|
|
<div id="lib-plays-list" class="reh-bookshelf"></div>
|
|
</div>
|
|
|
|
<!-- Characters / Cast — navigates to s-characters to avoid duplicate IDs -->
|
|
<div class="lib-panel" data-library-panel="characters">
|
|
<div style="padding:32px;text-align:center;color:var(--subtext);font-size:14px">
|
|
<span class="mdi mdi-account-box-multiple-outline" style="font-size:40px;display:block;margin-bottom:12px;opacity:0.4"></span>
|
|
<p>Opening Characters…</p>
|
|
</div>
|
|
</div>
|