feat(podcast): del med ukendte, gæstelinks med navn og udløb der kan trækkes tilbage
Claude-Session: https://claude.ai/code/session_01JmhJG6JnhXfzNiKv8f2vHu
This commit is contained in:
@@ -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 }} {% 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>
|
||||
|
||||
@@ -52,7 +52,7 @@
|
||||
{% endif %}
|
||||
</div>
|
||||
{% endif %}
|
||||
<p class="wt-muted" style="margin:.2rem 0 .8rem">{% if delt %}Tryk på din app, så kommer nye episoder af sig selv. Linket er familiens fælles, så del det kun inden for familien.{% else %}Tryk på din app. Nye episoder kommer så af sig selv. Adressen er din egen, så del den ikke; familien får hver sin.{% endif %}</p>
|
||||
<p class="wt-muted" style="margin:.2rem 0 .8rem">{% if gaest %}Tryk på din app, så kommer nye episoder af sig selv. Linket er delt med dig personligt{% if gaest.udloeber %} og virker til <span data-ts="{{ gaest.udloeber }}"></span>{% endif %}, så del det ikke videre.{% elif delt %}Tryk på din app, så kommer nye episoder af sig selv. Linket er familiens fælles, så del det kun inden for familien.{% else %}Tryk på din app. Nye episoder kommer så af sig selv. Adressen er din egen, så del den ikke; familien får hver sin.{% endif %}</p>
|
||||
<div style="display:flex;flex-wrap:wrap;gap:.5rem">
|
||||
<a class="wt-btn wt-btn--primary" href="podcast://{{ u.uden_skema }}">Apple Podcasts</a>
|
||||
<a class="wt-btn" href="overcast://x-callback-url/add?url={{ u.feed_enc }}">Overcast</a>
|
||||
@@ -108,6 +108,9 @@ function kopierTekst(t, knap) {
|
||||
};
|
||||
if (navigator.clipboard && navigator.clipboard.writeText) navigator.clipboard.writeText(t).then(ok, fallback); else fallback();
|
||||
}
|
||||
document.querySelectorAll('[data-ts]').forEach(function (s) {
|
||||
s.textContent = new Date(parseInt(s.dataset.ts, 10) * 1000).toLocaleDateString('da-DK', { dateStyle: 'long' });
|
||||
});
|
||||
document.querySelectorAll('[data-kopier-tekst]').forEach(function (b) {
|
||||
b.addEventListener('click', function () { kopierTekst(b.dataset.kopierTekst, b); });
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user