feat(podcast): del med ukendte, gæstelinks med navn og udløb der kan trækkes tilbage
CI / check (push) Successful in 1m1s
CD / deploy (push) Successful in 1m31s

Claude-Session: https://claude.ai/code/session_01JmhJG6JnhXfzNiKv8f2vHu
This commit is contained in:
agw
2026-11-05 21:31:00 +01:00
parent 04958419ae
commit 86ab8f2a19
5 changed files with 207 additions and 9 deletions
+48
View File
@@ -63,6 +63,54 @@
{% endif %}
</div>
<h2 style="font-size:1.15rem;margin-top:2rem">Del med ukendte</h2>
<p class="wt-muted" style="margin:.3rem 0 .8rem">Gæstelinks til folk uden for familien, fx til en jobsamtale. Hvert link har sin egen nøgle og udløber af sig selv; du kan også trække det tilbage før tid. Det har intet med familiens link eller de personlige adresser at gøre. Kladder vises aldrig.</p>
<form method="post" action="/admin/podcast/gaest" class="wt-card" style="padding:1rem 1.2rem;max-width:48rem;display:flex;gap:.5rem;flex-wrap:wrap;align-items:flex-end">
<input type="hidden" name="handling" value="ny">
<label style="flex:1 1 16rem">Hvem er det til<br>
<input class="wt-input" name="navn" required maxlength="80" placeholder="fx Jobsamtale, Firma A/S" style="width:100%"></label>
<label>Udløber efter<br>
<select class="wt-input" name="dage">
<option value="7">7 dage</option><option value="14">14 dage</option>
<option value="30" selected>30 dage</option><option value="90">90 dage</option>
<option value="0">Aldrig (træk selv tilbage)</option>
</select></label>
<button class="wt-btn wt-btn--primary" type="submit">Lav gæstelink</button>
</form>
<table class="wt-table" style="margin-top:.8rem">
<thead><tr><th>Til</th><th>Link</th><th>Udløber</th><th>Sidst brugt</th><th>Hentninger</th><th></th></tr></thead>
<tbody>
{% for g in gaester %}
{% set doed = g.tilbagekaldt or g.udloebet %}
<tr{% if doed %} style="opacity:.55"{% endif %}>
<td>{{ g.navn }}</td>
<td>{% if doed %}<span class="wt-muted">{{ 'Trukket tilbage' if g.tilbagekaldt else 'Udløbet' }}</span>{% else %}
<div style="display:flex;gap:.4rem;min-width:14rem">
<input class="wt-input" readonly id="g-{{ loop.index }}" value="{{ base }}/podcast/f/{{ g.key }}/"
style="flex:1;font-family:ui-monospace,monospace;font-size:.8rem" onclick="this.select()">
<button class="wt-btn" type="button" onclick="var i=document.getElementById('g-{{ loop.index }}');i.select();navigator.clipboard&&navigator.clipboard.writeText(i.value);this.textContent='Kopieret'">Kopiér</button>
</div>{% endif %}</td>
<td>{% if g.udloeber %}<span data-ts="{{ g.udloeber }}"></span>{% else %}Aldrig{% endif %}</td>
<td data-ts="{{ g.sidst or '' }}"></td>
<td title="{% for h, n in (g.hentet or {}).items() %}{{ h }}: {{ n }}&#10;{% endfor %}">{{ g.hentninger or 0 }}</td>
<td>
<form method="post" action="/admin/podcast/gaest" style="margin:0">
<input type="hidden" name="key" value="{{ g.key }}">
{% if doed %}
<button class="wt-btn" type="submit" name="handling" value="slet">Slet</button>
{% else %}
<button class="wt-btn" type="submit" name="handling" value="tilbagekald"
onclick="return confirm('Træk gæstelinket tilbage? Det holder op med at virke med det samme.')">Træk tilbage</button>
{% endif %}
</form>
</td>
</tr>
{% else %}
<tr><td colspan="6" class="wt-muted">Ingen gæstelinks.</td></tr>
{% endfor %}
</tbody>
</table>
<h2 style="font-size:1.15rem;margin-top:2rem">Lytternes adresser</h2>
<table class="wt-table">
<thead><tr><th>Bruger</th><th>Oprettet</th><th>Sidst hentet</th><th>Hentninger</th><th>App</th><th></th></tr></thead>