tts-voice-creator-clone-and.../static/sections/s-library.html
mARTin-B78 ce0f4c43bc fix: restore My Voices after infinite recursion + settings crash (v1.12.18-19)
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>
2026-06-28 01:57:49 +02:00

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 &mdash; 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&hellip;</p>
</div>
</div>