rework(ui/uix): total update of ui/ux

This commit is contained in:
Steppenstreuner
2026-08-28 17:50:51 +02:00
parent 9791469017
commit 435382d42a
6 changed files with 467 additions and 88 deletions
+94 -29
View File
@@ -4,6 +4,9 @@
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<title>wordarr</title>
<link
rel="icon"
href="data:image/svg+xml,<svg xmlns=%22http://www.w3.org/2000/svg%22 viewBox=%220 0 100 100%22><text y=%22.9em%22 font-size=%2290%22>📚</text></svg>" />
<link rel="stylesheet" href="/style.css" />
</head>
<body>
@@ -11,7 +14,9 @@
<h1>📚 wordarr</h1>
<nav>
<button data-view="search" class="active">Suche</button>
<button data-view="missing">Missing</button>
<button data-view="missing">
Missing <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>
@@ -26,7 +31,7 @@
<option value="comic">Comic/Manga</option>
</select>
<input id="search-q" placeholder="Titel, Autor oder ISBN…" required />
<button type="submit">Suchen</button>
<button type="submit" id="search-btn">Suchen</button>
<button type="button" id="manual-btn" class="secondary">
Manuell anlegen
</button>
@@ -71,7 +76,7 @@
</section>
<section id="view-missing" hidden>
<div class="bar">
<div class="bar wrap">
<select id="missing-filter-type">
<option value="">Alle Typen</option>
<option value="ebook">Ebook</option>
@@ -81,16 +86,23 @@
<select id="missing-filter-library">
<option value="">Alle Libraries</option>
</select>
<input id="missing-search" placeholder="Filtern (Titel/Autor/Serie)…" />
<button id="missing-bulk-delete" class="danger" hidden>
Ausgewählte entfernen
</button>
</div>
<div id="missing-list" class="cards"></div>
</section>
<section id="view-imported" hidden>
<div class="bar wrap">
<input id="imported-search" placeholder="Filtern (Titel/Autor/Serie)…" />
</div>
<div id="imported-list" class="cards"></div>
</section>
<section id="view-import" hidden>
<div class="bar">
<div class="bar wrap">
<button id="scan-btn">Download-Ordner scannen</button>
<label class="muted"
><input type="checkbox" id="split-dirs" /> Ordner als Einzeldateien
@@ -98,18 +110,39 @@
>
<span id="scan-info" class="muted"></span>
</div>
<table id="import-table" hidden>
<thead>
<tr>
<th></th>
<th>Datei/Ordner</th>
<th>Typ</th>
<th>Zuordnung</th>
<th>Score</th>
</tr>
</thead>
<tbody></tbody>
</table>
<div class="bar wrap" id="import-toolbar" hidden>
<input id="import-filter-text" placeholder="Filtern (Name/Pfad)…" />
<select id="import-filter-mode">
<option value="all">Alle</option>
<option value="suggested">Nur mit Vorschlag</option>
<option value="unassigned">Nur ohne Zuordnung</option>
</select>
<select id="import-sort">
<option value="none">Reihenfolge: Scan</option>
<option value="score">Score absteigend</option>
<option value="name">Name AZ</option>
</select>
<button id="import-select-suggested" class="secondary">
Alle mit Vorschlag auswählen
</button>
<button id="import-deselect-all" class="secondary">
Alle abwählen
</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>Score</th>
</tr>
</thead>
<tbody></tbody>
</table>
</div>
<div class="bar" id="import-pager" hidden>
<button id="import-prev" class="secondary">← Zurück</button>
<span id="import-page-info" class="muted"></span>
@@ -118,6 +151,7 @@
<div class="bar">
<button id="import-btn" hidden>Ausgewählte importieren</button>
</div>
<div id="import-summary"></div>
<div id="import-results"></div>
<dialog id="quick-dialog">
@@ -141,19 +175,21 @@
<section id="view-settings" hidden>
<h3>Libraries</h3>
<table id="lib-table">
<thead>
<tr>
<th>Name</th>
<th>Typ</th>
<th>Pfad</th>
<th>Ordner-Schema</th>
<th>Datei-Schema</th>
<th></th>
</tr>
</thead>
<tbody></tbody>
</table>
<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></th>
</tr>
</thead>
<tbody></tbody>
</table>
</div>
<h4>Neue Library</h4>
<form id="lib-form" class="bar wrap">
<input name="name" placeholder="Name (z.B. Kids)" required />
@@ -186,6 +222,35 @@
</p>
</section>
</main>
<dialog id="detail-dialog">
<form id="detail-form" method="dialog">
<div class="detail-head">
<img id="detail-cover" alt="" hidden />
<div class="nocover" id="detail-nocover">?</div>
<div>
<h3 id="detail-title"></h3>
<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>
<div class="row">
<label>Band <input name="volume" type="number" min="0" /></label>
<label>Jahr <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>
<p class="muted mono" id="detail-path"></p>
<div class="row">
<button value="cancel" class="secondary">Abbrechen</button>
<button value="ok" id="detail-save">Speichern</button>
</div>
</form>
</dialog>
<div id="toast" hidden></div>
<script src="/app.js"></script>
</body>