Apply new frontend theme
Full style rewrite (holographic/chrome dark theme) plus matching favicon, authored externally and dropped in at /home/andrew/alembic-theme. Verified every template's variable names, form field names, and action URLs match the actual data each router passes before importing -- all matched exactly with zero router/service changes needed. Validated all templates parse (Jinja2 env.get_template over the full tree) and confirmed the live container serves the new theme after rebuild+redeploy.
This commit is contained in:
@@ -1,23 +1,36 @@
|
||||
{% extends "base.html" %}
|
||||
{% block title %}Library — alembic{% endblock %}
|
||||
{% block content %}
|
||||
<h1>Library{% if grouping %} — {{ grouping }}{% endif %}</h1>
|
||||
<table>
|
||||
<thead>
|
||||
<tr><th>Artist</th><th>Title</th><th>Album</th><th>Format</th><th></th></tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
{% for item in items %}
|
||||
<tr>
|
||||
<td>{{ item.artist }}</td>
|
||||
<td>{{ item.title }}</td>
|
||||
<td>{{ item.albumartist }}</td>
|
||||
<td>{{ item.format }}</td>
|
||||
<td><a href="/library/track/{{ item.id }}">edit</a></td>
|
||||
</tr>
|
||||
{% else %}
|
||||
<tr><td colspan="5" class="muted">No tracks found{% if grouping %} for grouping "{{ grouping }}"{% endif %}.</td></tr>
|
||||
{% endfor %}
|
||||
</tbody>
|
||||
</table>
|
||||
<div class="page-header">
|
||||
<div>
|
||||
<h1>Library{% if grouping %} <span class="muted">— {{ grouping }}</span>{% endif %}</h1>
|
||||
<p class="subtitle muted">Tracks currently imported into beets.</p>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="table-wrap scroll">
|
||||
<table>
|
||||
<thead>
|
||||
<tr><th>Artist</th><th>Title</th><th>Album</th><th>Format</th><th></th></tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
{% for item in items %}
|
||||
<tr>
|
||||
<td>{{ item.artist }}</td>
|
||||
<td>{{ item.title }}</td>
|
||||
<td class="muted">{{ item.albumartist }}</td>
|
||||
<td><span class="badge badge-muted">{{ item.format }}</span></td>
|
||||
<td><a href="/library/track/{{ item.id }}" class="btn btn-sm btn-ghost">Edit</a></td>
|
||||
</tr>
|
||||
{% else %}
|
||||
<tr class="empty-row"><td colspan="5">
|
||||
<div class="empty-state">
|
||||
<span class="sparkle" style="position:relative; display:inline-block; margin-bottom:0.5rem;"></span>
|
||||
<p class="muted" style="margin:0;">No tracks found{% if grouping %} for grouping "{{ grouping }}"{% endif %}.</p>
|
||||
</div>
|
||||
</td></tr>
|
||||
{% endfor %}
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
{% endblock %}
|
||||
|
||||
@@ -1,38 +1,53 @@
|
||||
{% extends "base.html" %}
|
||||
{% block title %}{{ item.artist }} — {{ item.title }} — alembic{% endblock %}
|
||||
{% block content %}
|
||||
<p><a href="/library">← back to library</a></p>
|
||||
<h1>{{ item.artist }} — {{ item.title }}</h1>
|
||||
<p class="muted">{{ item.path }}</p>
|
||||
<a class="back-link" href="/library">← back to library</a>
|
||||
|
||||
<div class="page-header">
|
||||
<div>
|
||||
<h1>{{ item.artist }} — {{ item.title }}</h1>
|
||||
<p class="subtitle muted mono truncate" style="max-width:none;">{{ item.path }}</p>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
{% if request.query_params.get('changed') %}
|
||||
<p>Updated {{ request.query_params.get('changed') }} field(s).</p>
|
||||
<div class="notice success">Updated {{ request.query_params.get('changed') }} field(s).</div>
|
||||
{% endif %}
|
||||
|
||||
<h2>Edit tags</h2>
|
||||
<form method="post" action="/library/track/{{ item.id }}">
|
||||
{% for field in editable_fields %}
|
||||
<div>
|
||||
<label for="{{ field }}">{{ field }}</label>
|
||||
<input type="text" id="{{ field }}" name="{{ field }}" value="{{ item.get(field, '') or '' }}">
|
||||
</div>
|
||||
{% endfor %}
|
||||
<button type="submit">Save</button>
|
||||
</form>
|
||||
<div class="panel" style="max-width:560px;">
|
||||
<form method="post" action="/library/track/{{ item.id }}">
|
||||
{% for field in editable_fields %}
|
||||
<div class="field">
|
||||
<label for="{{ field }}">{{ field }}</label>
|
||||
<input type="text" id="{{ field }}" name="{{ field }}" value="{{ item.get(field, '') or '' }}">
|
||||
</div>
|
||||
{% endfor %}
|
||||
<button type="submit" class="btn btn-primary">Save</button>
|
||||
</form>
|
||||
</div>
|
||||
|
||||
<h2>Set genre for this artist (all their tracks)</h2>
|
||||
<form method="post" action="/library/track/{{ item.id }}/genre">
|
||||
<input type="hidden" name="artist" value="{{ item.artist }}">
|
||||
<label for="genre">Genre (e.g. "IDM; Electronic")</label>
|
||||
<input type="text" id="genre" name="genre" required>
|
||||
<button type="submit">Set genre</button>
|
||||
</form>
|
||||
<div class="panel" style="max-width:560px;">
|
||||
<form method="post" action="/library/track/{{ item.id }}/genre">
|
||||
<input type="hidden" name="artist" value="{{ item.artist }}">
|
||||
<div class="field">
|
||||
<label for="genre">Genre</label>
|
||||
<input type="text" id="genre" name="genre" required placeholder="IDM; Electronic">
|
||||
</div>
|
||||
<button type="submit" class="btn">Set genre</button>
|
||||
</form>
|
||||
</div>
|
||||
|
||||
<h2>Re-fetch metadata from Spotify/iTunes URL</h2>
|
||||
<form method="post" action="/library/track/{{ item.id }}/retag">
|
||||
<label for="url">URL</label>
|
||||
<input type="text" id="url" name="url" required>
|
||||
<label><input type="checkbox" name="keep_genre" value="true"> keep existing genre</label>
|
||||
<button type="submit">Retag</button>
|
||||
</form>
|
||||
<div class="panel" style="max-width:560px;">
|
||||
<form method="post" action="/library/track/{{ item.id }}/retag">
|
||||
<div class="field">
|
||||
<label for="url">URL</label>
|
||||
<input type="text" id="url" name="url" required>
|
||||
</div>
|
||||
<label class="checkbox-field"><input type="checkbox" name="keep_genre" value="true"> Keep existing genre</label>
|
||||
<button type="submit" class="btn">Retag</button>
|
||||
</form>
|
||||
</div>
|
||||
{% endblock %}
|
||||
|
||||
Reference in New Issue
Block a user