add(ui/ux): german and english ui with a toggle in the navbar
This commit is contained in:
+140
-175
@@ -13,13 +13,15 @@
|
||||
<header>
|
||||
<h1>📚 wordarr</h1>
|
||||
<nav>
|
||||
<button data-view="search" class="active">Suche</button>
|
||||
<button data-view="search" class="active" data-i18n="nav.search"></button>
|
||||
<button data-view="missing">
|
||||
Missing <span id="missing-badge" class="badge" hidden></span>
|
||||
<span data-i18n="nav.missing"></span>
|
||||
<span id="missing-badge" class="badge" hidden></span>
|
||||
</button>
|
||||
<button data-view="imported">Importiert</button>
|
||||
<button data-view="import">Import</button>
|
||||
<button data-view="settings">Libraries</button>
|
||||
<button data-view="imported" data-i18n="nav.imported"></button>
|
||||
<button data-view="import" data-i18n="nav.import"></button>
|
||||
<button data-view="settings" data-i18n="nav.settings"></button>
|
||||
<button id="lang-toggle" class="secondary" data-i18n-title="nav.langToggle"></button>
|
||||
</nav>
|
||||
</header>
|
||||
<main>
|
||||
@@ -30,71 +32,67 @@
|
||||
<option value="audiobook">Audiobook</option>
|
||||
<option value="comic">Comic/Manga</option>
|
||||
</select>
|
||||
<select id="search-language" title="Sprache der Ausgabe — filtert Ebook- und Audiobook-Suche">
|
||||
<option value="">Alle Sprachen</option>
|
||||
<option value="german">Deutsch</option>
|
||||
<option value="english">Englisch</option>
|
||||
<select id="search-language" data-i18n-title="search.languageTitle">
|
||||
<option value="" data-i18n="search.allLanguages"></option>
|
||||
<option value="german" data-i18n="lang.german"></option>
|
||||
<option value="english" data-i18n="lang.english"></option>
|
||||
</select>
|
||||
<input id="search-q" placeholder="Titel, Autor oder ISBN…" required />
|
||||
<button type="submit" id="search-btn">Suchen</button>
|
||||
<button type="button" id="manual-btn" class="secondary">
|
||||
Manuell anlegen
|
||||
</button>
|
||||
<input id="search-q" data-i18n-placeholder="search.placeholder" required />
|
||||
<button type="submit" id="search-btn" data-i18n="common.search"></button>
|
||||
<button type="button" id="manual-btn" class="secondary" data-i18n="search.manual"></button>
|
||||
</form>
|
||||
<div id="search-results" class="cards"></div>
|
||||
|
||||
<dialog id="manual-dialog">
|
||||
<form id="manual-form" method="dialog">
|
||||
<h3>Manuell anfragen</h3>
|
||||
<h3 data-i18n="manual.heading"></h3>
|
||||
<label
|
||||
>Typ
|
||||
><span data-i18n="common.type"></span>
|
||||
<select name="media_type">
|
||||
<option value="ebook">Ebook</option>
|
||||
<option value="audiobook">Audiobook</option>
|
||||
<option value="comic">Comic/Manga</option>
|
||||
</select>
|
||||
</label>
|
||||
<label>Titel <input name="title" required /></label>
|
||||
<label>Autor(en) <input name="authors" /></label>
|
||||
<label>Sprecher <input name="narrator" /></label>
|
||||
<label>Serie <input name="series" /></label>
|
||||
<label>Band <input name="volume" type="number" min="0" /></label>
|
||||
<label><span data-i18n="common.title"></span> <input name="title" required /></label>
|
||||
<label><span data-i18n="common.authors"></span> <input name="authors" /></label>
|
||||
<label><span data-i18n="common.narrator"></span> <input name="narrator" /></label>
|
||||
<label><span data-i18n="common.series"></span> <input name="series" /></label>
|
||||
<label><span data-i18n="common.volume"></span> <input name="volume" type="number" min="0" /></label>
|
||||
<label
|
||||
>bis Band (Bulk, optional)
|
||||
><span data-i18n="manual.volumeTo"></span>
|
||||
<input name="volume_to" type="number" min="0" />
|
||||
<span class="muted"
|
||||
>Legt pro Band/Folge eine Anfrage an, z.B. 1 bis 300</span
|
||||
>
|
||||
<span class="muted" data-i18n="manual.bulkHint"></span>
|
||||
</label>
|
||||
<label>Jahr <input name="year" type="number" /></label>
|
||||
<label>ISBN/ID <input name="external_id" /></label>
|
||||
<label><span data-i18n="common.year"></span> <input name="year" type="number" /></label>
|
||||
<label><span data-i18n="manual.externalId"></span> <input name="external_id" /></label>
|
||||
<label
|
||||
>Library
|
||||
><span data-i18n="common.library"></span>
|
||||
<select name="library_id" id="manual-library"></select
|
||||
></label>
|
||||
<div class="row">
|
||||
<button value="cancel" class="secondary">Abbrechen</button>
|
||||
<button value="ok" id="manual-submit">Anfragen</button>
|
||||
<button value="cancel" class="secondary" data-i18n="common.cancel"></button>
|
||||
<button value="ok" id="manual-submit" data-i18n="common.request"></button>
|
||||
</div>
|
||||
</form>
|
||||
</dialog>
|
||||
|
||||
<dialog id="series-dialog">
|
||||
<h3 id="series-title">Serie anfragen</h3>
|
||||
<h3 id="series-title"></h3>
|
||||
<p class="muted" id="series-info"></p>
|
||||
<div class="bar wrap">
|
||||
<label>von Folge <input id="series-from" type="number" min="0" /></label>
|
||||
<label>bis Folge <input id="series-to" type="number" min="0" /></label>
|
||||
<button type="button" id="series-all" class="secondary">Alle</button>
|
||||
<button type="button" id="series-none" class="secondary">Keine</button>
|
||||
<label><span data-i18n="series.from"></span> <input id="series-from" type="number" min="0" /></label>
|
||||
<label><span data-i18n="series.to"></span> <input id="series-to" type="number" min="0" /></label>
|
||||
<button type="button" id="series-all" class="secondary" data-i18n="common.all"></button>
|
||||
<button type="button" id="series-none" class="secondary" data-i18n="common.none"></button>
|
||||
</div>
|
||||
<div id="series-list" class="series-list"></div>
|
||||
<div class="row">
|
||||
<label>Library <select id="series-library"></select></label>
|
||||
<label><span data-i18n="common.library"></span> <select id="series-library"></select></label>
|
||||
</div>
|
||||
<div class="row">
|
||||
<button type="button" id="series-cancel" class="secondary">Abbrechen</button>
|
||||
<button type="button" id="series-submit">Anfragen</button>
|
||||
<button type="button" id="series-cancel" class="secondary" data-i18n="common.cancel"></button>
|
||||
<button type="button" id="series-submit" data-i18n="common.request"></button>
|
||||
</div>
|
||||
</dialog>
|
||||
</section>
|
||||
@@ -102,23 +100,21 @@
|
||||
<section id="view-missing" hidden>
|
||||
<div class="bar wrap">
|
||||
<select id="missing-filter-type">
|
||||
<option value="">Alle Typen</option>
|
||||
<option value="" data-i18n="list.allTypes"></option>
|
||||
<option value="ebook">Ebook</option>
|
||||
<option value="audiobook">Audiobook</option>
|
||||
<option value="comic">Comic/Manga</option>
|
||||
</select>
|
||||
<select id="missing-filter-library">
|
||||
<option value="">Alle Libraries</option>
|
||||
<option value="" data-i18n="list.allLibraries"></option>
|
||||
</select>
|
||||
<input id="missing-search" placeholder="Filtern (Titel/Autor/Serie)…" />
|
||||
<button id="missing-select-all" class="secondary">Alle auswählen</button>
|
||||
<button id="missing-bulk-delete" class="danger" hidden>
|
||||
Ausgewählte entfernen
|
||||
</button>
|
||||
<div class="view-toggle" role="group" aria-label="Ansicht">
|
||||
<button data-viewmode="list" title="Liste">☰</button>
|
||||
<button data-viewmode="small" title="Kleine Symbole">▦</button>
|
||||
<button data-viewmode="large" title="Große Symbole">⊞</button>
|
||||
<input id="missing-search" data-i18n-placeholder="list.filterPlaceholder" />
|
||||
<button id="missing-select-all" class="secondary" data-i18n="common.selectAll"></button>
|
||||
<button id="missing-bulk-delete" class="danger" hidden data-i18n="common.removeSelected"></button>
|
||||
<div class="view-toggle" role="group" data-i18n-aria="list.view">
|
||||
<button data-viewmode="list" data-i18n-title="list.viewList">☰</button>
|
||||
<button data-viewmode="small" data-i18n-title="list.viewSmall">▦</button>
|
||||
<button data-viewmode="large" data-i18n-title="list.viewLarge">⊞</button>
|
||||
</div>
|
||||
</div>
|
||||
<div id="missing-list" class="cards"></div>
|
||||
@@ -126,15 +122,13 @@
|
||||
|
||||
<section id="view-imported" hidden>
|
||||
<div class="bar wrap">
|
||||
<input id="imported-search" placeholder="Filtern (Titel/Autor/Serie)…" />
|
||||
<button id="imported-select-all" class="secondary">Alle auswählen</button>
|
||||
<button id="imported-bulk-delete" class="danger" hidden>
|
||||
Ausgewählte entfernen
|
||||
</button>
|
||||
<div class="view-toggle" role="group" aria-label="Ansicht">
|
||||
<button data-viewmode="list" title="Liste">☰</button>
|
||||
<button data-viewmode="small" title="Kleine Symbole">▦</button>
|
||||
<button data-viewmode="large" title="Große Symbole">⊞</button>
|
||||
<input id="imported-search" data-i18n-placeholder="list.filterPlaceholder" />
|
||||
<button id="imported-select-all" class="secondary" data-i18n="common.selectAll"></button>
|
||||
<button id="imported-bulk-delete" class="danger" hidden data-i18n="common.removeSelected"></button>
|
||||
<div class="view-toggle" role="group" data-i18n-aria="list.view">
|
||||
<button data-viewmode="list" data-i18n-title="list.viewList">☰</button>
|
||||
<button data-viewmode="small" data-i18n-title="list.viewSmall">▦</button>
|
||||
<button data-viewmode="large" data-i18n-title="list.viewLarge">⊞</button>
|
||||
</div>
|
||||
</div>
|
||||
<div id="imported-list" class="cards"></div>
|
||||
@@ -142,73 +136,61 @@
|
||||
|
||||
<section id="view-import" hidden>
|
||||
<div class="bar wrap">
|
||||
<button id="scan-btn">Download-Ordner scannen</button>
|
||||
<button id="scan-btn" data-i18n="import.scan"></button>
|
||||
<label class="muted"
|
||||
><input type="checkbox" id="split-dirs" /> Ordner als Einzeldateien
|
||||
behandeln (z.B. Folgen-Sammlungen)</label
|
||||
>
|
||||
><input type="checkbox" id="split-dirs" /> <span data-i18n="import.splitDirs"></span
|
||||
></label>
|
||||
<span id="scan-info" class="muted"></span>
|
||||
</div>
|
||||
<div class="bar wrap" id="import-toolbar" hidden>
|
||||
<input id="import-filter-text" placeholder="Filtern (Name/Pfad)…" />
|
||||
<input id="import-filter-text" data-i18n-placeholder="import.filterPlaceholder" />
|
||||
<select id="import-filter-mode">
|
||||
<option value="all">Alle</option>
|
||||
<option value="suggested">Nur mit Vorschlag</option>
|
||||
<option value="unassigned">Nur ohne Zuordnung</option>
|
||||
<option value="conflict">Nur Konflikte</option>
|
||||
<option value="all" data-i18n="common.all"></option>
|
||||
<option value="suggested" data-i18n="import.modeSuggested"></option>
|
||||
<option value="unassigned" data-i18n="import.modeUnassigned"></option>
|
||||
<option value="conflict" data-i18n="import.modeConflict"></option>
|
||||
</select>
|
||||
<select id="import-filter-format" title="Nur Einträge mit diesem Dateiformat zeigen">
|
||||
<option value="">Alle Formate</option>
|
||||
<select id="import-filter-format" data-i18n-title="import.formatTitle">
|
||||
<option value="" data-i18n="import.allFormats"></option>
|
||||
</select>
|
||||
<select id="import-sort">
|
||||
<option value="none">Reihenfolge: Scan</option>
|
||||
<option value="score">Score absteigend</option>
|
||||
<option value="name">Name A–Z</option>
|
||||
<option value="none" data-i18n="import.sortScan"></option>
|
||||
<option value="score" data-i18n="import.sortScore"></option>
|
||||
<option value="name" data-i18n="import.sortName"></option>
|
||||
</select>
|
||||
<button id="import-select-suggested" class="secondary">
|
||||
Alle mit Vorschlag auswählen
|
||||
</button>
|
||||
<button id="import-select-suggested" class="secondary" data-i18n="import.selectSuggested"></button>
|
||||
<button id="import-select-all" class="secondary"
|
||||
title="Alle Einträge der aktuellen Ansicht auswählen, auch ohne Zuordnung">
|
||||
Alle auswählen
|
||||
</button>
|
||||
data-i18n-title="import.selectAllTitle" data-i18n="common.selectAll"></button>
|
||||
<button id="import-select-page" class="secondary"
|
||||
title="Nur die Einträge dieser Seite auswählen, alle anderen abwählen">
|
||||
Diese Seite auswählen
|
||||
</button>
|
||||
<button id="import-deselect-all" class="secondary">
|
||||
Alle abwählen
|
||||
</button>
|
||||
<button id="import-merge" class="secondary" title="Mehrteiler: ausgewählte Einträge als ein Hörbuch importieren">
|
||||
Ausgewählte zusammenfassen
|
||||
</button>
|
||||
data-i18n-title="import.selectPageTitle" data-i18n="import.selectPage"></button>
|
||||
<button id="import-deselect-all" class="secondary" data-i18n="import.deselectAll"></button>
|
||||
<button id="import-merge" class="secondary"
|
||||
data-i18n-title="import.mergeTitle" data-i18n="import.merge"></button>
|
||||
<button id="import-from-names" class="secondary"
|
||||
title="Für ausgewählte Einträge ohne Zuordnung Anfragen aus den Ordnernamen anlegen">
|
||||
Anfragen aus Ordnernamen
|
||||
</button>
|
||||
data-i18n-title="import.fromNamesTitle" data-i18n="import.fromNames"></button>
|
||||
</div>
|
||||
<div class="table-scroll">
|
||||
<table id="import-table" hidden>
|
||||
<thead>
|
||||
<tr>
|
||||
<th></th>
|
||||
<th>Datei/Ordner</th>
|
||||
<th>Typ</th>
|
||||
<th>Zuordnung</th>
|
||||
<th>Library</th>
|
||||
<th>Score</th>
|
||||
<th data-i18n="import.colFile"></th>
|
||||
<th data-i18n="common.type"></th>
|
||||
<th data-i18n="import.colAssignment"></th>
|
||||
<th data-i18n="common.library"></th>
|
||||
<th id="import-score-head" data-i18n="common.score"></th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody></tbody>
|
||||
</table>
|
||||
</div>
|
||||
<div class="bar" id="import-pager" hidden>
|
||||
<button id="import-prev" class="secondary">← Zurück</button>
|
||||
<button id="import-prev" class="secondary" data-i18n="import.prev"></button>
|
||||
<span id="import-page-info" class="muted"></span>
|
||||
<button id="import-next" class="secondary">Weiter →</button>
|
||||
<button id="import-next" class="secondary" data-i18n="import.next"></button>
|
||||
</div>
|
||||
<div class="bar">
|
||||
<button id="import-btn" hidden>Ausgewählte importieren</button>
|
||||
<button id="import-btn" hidden data-i18n="import.run"></button>
|
||||
<div id="import-progress" hidden>
|
||||
<progress max="1" value="0"></progress>
|
||||
<span class="muted"></span>
|
||||
@@ -218,49 +200,47 @@
|
||||
<div id="import-results"></div>
|
||||
|
||||
<dialog id="names-dialog">
|
||||
<h3>Anfragen aus Ordnernamen</h3>
|
||||
<h3 data-i18n="names.heading"></h3>
|
||||
<p class="muted" id="names-intro"></p>
|
||||
<div class="bar wrap">
|
||||
<label>Serie <input id="names-series" placeholder="optional, für alle" /></label>
|
||||
<label>Autor <input id="names-authors" placeholder="optional, für alle" /></label>
|
||||
<label>Library <select id="names-library"></select></label>
|
||||
<label><span data-i18n="common.series"></span>
|
||||
<input id="names-series" data-i18n-placeholder="common.optionalForAll" /></label>
|
||||
<label><span data-i18n="common.author"></span>
|
||||
<input id="names-authors" data-i18n-placeholder="common.optionalForAll" /></label>
|
||||
<label><span data-i18n="common.library"></span> <select id="names-library"></select></label>
|
||||
</div>
|
||||
<div id="names-preview" class="series-list"></div>
|
||||
<div class="row">
|
||||
<button type="button" id="names-cancel" class="secondary">Abbrechen</button>
|
||||
<button type="button" id="names-submit">Anlegen & verbinden</button>
|
||||
<button type="button" id="names-cancel" class="secondary" data-i18n="common.cancel"></button>
|
||||
<button type="button" id="names-submit" data-i18n="common.createAndLink"></button>
|
||||
</div>
|
||||
</dialog>
|
||||
|
||||
<dialog id="conflict-dialog">
|
||||
<h3>Mehrfach zugeordnete Anfragen</h3>
|
||||
<h3 data-i18n="conflict.heading"></h3>
|
||||
<p class="muted" id="conflict-intro"></p>
|
||||
<div id="conflict-list" class="series-list"></div>
|
||||
<div class="row">
|
||||
<button type="button" id="conflict-cancel" class="secondary">Abbrechen</button>
|
||||
<button type="button" id="conflict-merge" class="secondary">
|
||||
Als je ein Hörbuch zusammenfassen
|
||||
</button>
|
||||
<button type="button" id="conflict-skip">
|
||||
Konflikte überspringen, Rest importieren
|
||||
</button>
|
||||
<button type="button" id="conflict-cancel" class="secondary" data-i18n="common.cancel"></button>
|
||||
<button type="button" id="conflict-merge" class="secondary" data-i18n="conflict.merge"></button>
|
||||
<button type="button" id="conflict-skip" data-i18n="conflict.skip"></button>
|
||||
</div>
|
||||
</dialog>
|
||||
|
||||
<dialog id="quick-dialog">
|
||||
<h3>Suchen & Anfragen</h3>
|
||||
<h3 data-i18n="quick.heading"></h3>
|
||||
<p class="muted mono" id="quick-file"></p>
|
||||
<p class="muted" id="quick-episode"></p>
|
||||
<form id="quick-search-form" class="bar">
|
||||
<input id="quick-q" placeholder="Titel/Serie suchen…" required />
|
||||
<button type="submit">Suchen</button>
|
||||
<input id="quick-q" data-i18n-placeholder="quick.placeholder" required />
|
||||
<button type="submit" data-i18n="common.search"></button>
|
||||
</form>
|
||||
<label class="muted"
|
||||
>Ziel-Library <select id="quick-library"></select
|
||||
><span data-i18n="quick.targetLibrary"></span> <select id="quick-library"></select
|
||||
></label>
|
||||
<label class="muted"
|
||||
>Offene Anfragen
|
||||
<input id="quick-req-filter" placeholder="nach Titel, Autor, Serie filtern…" />
|
||||
><span data-i18n="quick.openRequests"></span>
|
||||
<input id="quick-req-filter" data-i18n-placeholder="quick.reqFilter" />
|
||||
</label>
|
||||
<div id="quick-scroll">
|
||||
<div id="quick-open-requests"></div>
|
||||
@@ -268,49 +248,48 @@
|
||||
</div>
|
||||
<div id="quick-foot">
|
||||
<details id="quick-manual">
|
||||
<summary id="quick-manual-summary">
|
||||
Nicht bei Audible? Manuell anlegen
|
||||
</summary>
|
||||
<summary id="quick-manual-summary"></summary>
|
||||
<p class="muted" id="quick-based-on" hidden></p>
|
||||
<div class="quick-manual-fields">
|
||||
<label>Titel <input id="quick-m-title" /></label>
|
||||
<label>Autor <input id="quick-m-authors" placeholder="optional" /></label>
|
||||
<label>Serie <input id="quick-m-series" placeholder="optional" /></label>
|
||||
<label><span data-i18n="common.title"></span> <input id="quick-m-title" /></label>
|
||||
<label><span data-i18n="common.author"></span>
|
||||
<input id="quick-m-authors" data-i18n-placeholder="common.optional" /></label>
|
||||
<label><span data-i18n="common.series"></span>
|
||||
<input id="quick-m-series" data-i18n-placeholder="common.optional" /></label>
|
||||
<label class="narrow"
|
||||
>Folge/Band <input id="quick-m-volume" type="number" min="0" /></label>
|
||||
><span data-i18n="quick.episodeVolume"></span>
|
||||
<input id="quick-m-volume" type="number" min="0" /></label>
|
||||
</div>
|
||||
<button type="button" id="quick-m-submit">Anlegen & verbinden</button>
|
||||
<button type="button" id="quick-m-submit" data-i18n="common.createAndLink"></button>
|
||||
</details>
|
||||
<div class="row">
|
||||
<button type="button" id="quick-close" class="secondary">
|
||||
Schließen
|
||||
</button>
|
||||
<button type="button" id="quick-close" class="secondary" data-i18n="common.close"></button>
|
||||
</div>
|
||||
</div>
|
||||
</dialog>
|
||||
</section>
|
||||
|
||||
<section id="view-settings" hidden>
|
||||
<h3>Libraries</h3>
|
||||
<h3 data-i18n="lib.heading"></h3>
|
||||
<div class="table-scroll">
|
||||
<table id="lib-table">
|
||||
<thead>
|
||||
<tr>
|
||||
<th>Name</th>
|
||||
<th>Typ</th>
|
||||
<th>Pfad</th>
|
||||
<th>Ordner-Schema</th>
|
||||
<th>Datei-Schema</th>
|
||||
<th>Sprache</th>
|
||||
<th data-i18n="common.name"></th>
|
||||
<th data-i18n="common.type"></th>
|
||||
<th data-i18n="common.path"></th>
|
||||
<th data-i18n="lib.folderTemplate"></th>
|
||||
<th data-i18n="lib.fileTemplate"></th>
|
||||
<th data-i18n="common.language"></th>
|
||||
<th></th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody></tbody>
|
||||
</table>
|
||||
</div>
|
||||
<h4 id="lib-form-title">Neue Library</h4>
|
||||
<h4 id="lib-form-title"></h4>
|
||||
<form id="lib-form" class="bar wrap">
|
||||
<input name="name" placeholder="Name (z.B. Kids)" required />
|
||||
<input name="name" data-i18n-placeholder="lib.namePlaceholder" required />
|
||||
<select name="media_type">
|
||||
<option value="ebook">Ebook</option>
|
||||
<option value="audiobook">Audiobook</option>
|
||||
@@ -324,29 +303,17 @@
|
||||
list="path-suggestions"
|
||||
autocomplete="off" />
|
||||
<datalist id="path-suggestions"></datalist>
|
||||
<input
|
||||
name="folder_template"
|
||||
placeholder="Ordner-Schema (optional)"
|
||||
class="wide" />
|
||||
<input
|
||||
name="file_template"
|
||||
placeholder="Datei-Schema (optional)"
|
||||
class="wide" />
|
||||
<select name="language" title="Sprache der Ausgaben in dieser Library — filtert die Metadaten-Suche">
|
||||
<option value="">Sprache: egal</option>
|
||||
<option value="german">Deutsch</option>
|
||||
<option value="english">Englisch</option>
|
||||
<input name="folder_template" data-i18n-placeholder="lib.folderPlaceholder" class="wide" />
|
||||
<input name="file_template" data-i18n-placeholder="lib.filePlaceholder" class="wide" />
|
||||
<select name="language" data-i18n-title="lib.languageTitle">
|
||||
<option value="" data-i18n="lib.anyLanguage"></option>
|
||||
<option value="german" data-i18n="lang.german"></option>
|
||||
<option value="english" data-i18n="lang.english"></option>
|
||||
</select>
|
||||
<button type="submit" id="lib-form-submit">Anlegen</button>
|
||||
<button type="button" id="lib-form-cancel" class="secondary" hidden>
|
||||
Abbrechen
|
||||
</button>
|
||||
<button type="submit" id="lib-form-submit" data-i18n="common.create"></button>
|
||||
<button type="button" id="lib-form-cancel" class="secondary" hidden data-i18n="common.cancel"></button>
|
||||
</form>
|
||||
<p class="muted">
|
||||
Platzhalter: {Author} {Authors} {Narrator} {Narrators} {Title} {Year}
|
||||
{Series} {Volume} — {Author}/{Narrator} nennen den ersten Namen,
|
||||
{Authors}/{Narrators} alle. Leere Werte fallen samt Trenner weg.
|
||||
</p>
|
||||
<p class="muted" data-i18n="lib.placeholders"></p>
|
||||
</section>
|
||||
</main>
|
||||
|
||||
@@ -360,32 +327,30 @@
|
||||
<p class="muted" id="detail-status"></p>
|
||||
</div>
|
||||
</div>
|
||||
<label>Titel <input name="title" required /></label>
|
||||
<label>Autor(en) <input name="authors" /></label>
|
||||
<label>Sprecher <input name="narrator" /></label>
|
||||
<label>Serie <input name="series" /></label>
|
||||
<label><span data-i18n="common.title"></span> <input name="title" required /></label>
|
||||
<label><span data-i18n="common.authors"></span> <input name="authors" /></label>
|
||||
<label><span data-i18n="common.narrator"></span> <input name="narrator" /></label>
|
||||
<label><span data-i18n="common.series"></span> <input name="series" /></label>
|
||||
<div class="row">
|
||||
<label>Band <input name="volume" type="number" min="0" /></label>
|
||||
<label>Jahr <input name="year" type="number" /></label>
|
||||
<label><span data-i18n="common.volume"></span> <input name="volume" type="number" min="0" /></label>
|
||||
<label><span data-i18n="common.year"></span> <input name="year" type="number" /></label>
|
||||
</div>
|
||||
<label>ISBN/ASIN <input name="external_id" /></label>
|
||||
<label>Library <select name="library_id" id="detail-library"></select></label>
|
||||
<label><span data-i18n="detail.externalId"></span> <input name="external_id" /></label>
|
||||
<label><span data-i18n="common.library"></span>
|
||||
<select name="library_id" id="detail-library"></select></label>
|
||||
<p class="muted mono" id="detail-path"></p>
|
||||
<div class="row">
|
||||
<button value="cancel" class="secondary">Abbrechen</button>
|
||||
<button type="button" id="detail-retag" class="secondary" hidden>
|
||||
Speichern & neu taggen
|
||||
</button>
|
||||
<button value="cancel" class="secondary" data-i18n="common.cancel"></button>
|
||||
<button type="button" id="detail-retag" class="secondary" hidden data-i18n="detail.retag"></button>
|
||||
<button type="button" id="detail-relocate" class="secondary" hidden
|
||||
title="Ordner und Dateinamen nach dem Schema der Library neu anlegen">
|
||||
Speichern & neu ablegen
|
||||
</button>
|
||||
<button value="ok" id="detail-save">Speichern</button>
|
||||
data-i18n-title="detail.relocateTitle" data-i18n="detail.relocate"></button>
|
||||
<button value="ok" id="detail-save" data-i18n="common.save"></button>
|
||||
</div>
|
||||
</form>
|
||||
</dialog>
|
||||
|
||||
<div id="toast" hidden></div>
|
||||
<script src="/i18n.js"></script>
|
||||
<script src="/app.js"></script>
|
||||
</body>
|
||||
</html>
|
||||
|
||||
Reference in New Issue
Block a user