Files
wordarr/static/index.html
T
SteppenstreunerandClaude Fable 5 508ae5f26e Add wordarr: request & import manager for ebooks, comics and audiobooks
FastAPI + SQLite backend with vanilla-JS web UI. Requests via Open
Library / Audible / AniList metadata search (or manual entry) with
per-request target library selection. Manual import flow: scan the
download dir, fuzzy-match files against missing requests, review,
then move+rename into the library per configurable naming templates.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-08-28 12:34:07 +02:00

117 lines
4.2 KiB
HTML

<!DOCTYPE html>
<html lang="de">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>wordarr</title>
<link rel="stylesheet" href="/style.css">
</head>
<body>
<header>
<h1>📚 wordarr</h1>
<nav>
<button data-view="search" class="active">Suche</button>
<button data-view="missing">Missing</button>
<button data-view="imported">Importiert</button>
<button data-view="import">Import</button>
<button data-view="settings">Libraries</button>
</nav>
</header>
<main>
<section id="view-search">
<form id="search-form" class="bar">
<select id="search-type">
<option value="ebook">Ebook</option>
<option value="audiobook">Audiobook</option>
<option value="comic">Comic/Manga</option>
</select>
<input id="search-q" placeholder="Titel, Autor oder ISBN…" required>
<button type="submit">Suchen</button>
<button type="button" id="manual-btn" class="secondary">Manuell anlegen</button>
</form>
<div id="search-results" class="cards"></div>
<dialog id="manual-dialog">
<form id="manual-form" method="dialog">
<h3>Manuell anfragen</h3>
<label>Typ
<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>Serie <input name="series"></label>
<label>Band <input name="volume" type="number" min="0"></label>
<label>Jahr <input name="year" type="number"></label>
<label>ISBN/ID <input name="external_id"></label>
<label>Library <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>
</div>
</form>
</dialog>
</section>
<section id="view-missing" hidden>
<div class="bar">
<select id="missing-filter-type">
<option value="">Alle Typen</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></select>
</div>
<div id="missing-list" class="cards"></div>
</section>
<section id="view-imported" hidden>
<div id="imported-list" class="cards"></div>
</section>
<section id="view-import" hidden>
<div class="bar">
<button id="scan-btn">Download-Ordner scannen</button>
<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">
<button id="import-btn" hidden>Ausgewählte importieren</button>
</div>
<div id="import-results"></div>
</section>
<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>
<h4>Neue Library</h4>
<form id="lib-form" class="bar wrap">
<input name="name" placeholder="Name (z.B. Kids)" required>
<select name="media_type">
<option value="ebook">Ebook</option>
<option value="audiobook">Audiobook</option>
<option value="comic">Comic/Manga</option>
</select>
<input name="root_path" placeholder="/library/ebooks/kids" required class="wide">
<input name="folder_template" placeholder="Ordner-Schema (optional)" class="wide">
<input name="file_template" placeholder="Datei-Schema (optional)" class="wide">
<button type="submit">Anlegen</button>
</form>
<p class="muted">Platzhalter: {Author} {Authors} {Title} {Year} {Series} {Volume}</p>
</section>
</main>
<div id="toast" hidden></div>
<script src="/app.js"></script>
</body>
</html>