018122648f
Browsers were serving stale frontend assets after rebuilds, which hid the new world/local headline desks: the OLD app.js's refreshCounts() only counted .item children (not .headline), so the new headline desks came up with visibleItems=0 and got the .is-empty class which is display:none. Hard refresh fixed it but only for the user who knew to do that. Append ?v=<generated_at strftime> to both link/script tags in digest.html.j2 and archive.html.j2 so every digest run produces a new asset URL. Works with the existing entrypoint.sh static-asset sync — no other infra needed.
85 lines
2.9 KiB
Django/Jinja
85 lines
2.9 KiB
Django/Jinja
<!doctype html>
|
||
<html lang="en">
|
||
<head>
|
||
<meta charset="utf-8" />
|
||
<meta name="viewport" content="width=device-width,initial-scale=1" />
|
||
<title>Daily Digest · Archive</title>
|
||
<link rel="icon" type="image/svg+xml" href="favicon.svg" />
|
||
<link rel="stylesheet" href="style.css?v={{ generated_at.strftime('%Y%m%d%H%M%S') }}" />
|
||
</head>
|
||
<body>
|
||
<header class="masthead" role="banner">
|
||
<div class="masthead-inner">
|
||
<a class="masthead-brand" href="index.html" title="Latest edition">
|
||
<span class="brand-glyph" aria-hidden="true">◢</span>
|
||
<span class="brand-mark">DAILY DIGEST</span>
|
||
</a>
|
||
<div class="masthead-edition">
|
||
<span class="edition-stamp">ARCHIVE</span>
|
||
<a class="archive-link" href="index.html">← LATEST</a>
|
||
</div>
|
||
<div class="masthead-meta">
|
||
<div class="meta-row">
|
||
<span class="meta-label">EDITIONS ON FILE</span>
|
||
<span class="meta-value">{{ total }}</span>
|
||
</div>
|
||
<div class="meta-row">
|
||
<span class="meta-label">CADENCE</span>
|
||
<span class="meta-value">2× DAILY · 0800 / 2000</span>
|
||
</div>
|
||
<div class="meta-row">
|
||
<span class="meta-label">RETENTION</span>
|
||
<span class="meta-value">UNLIMITED</span>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
<div class="aurora-rule" aria-hidden="true"></div>
|
||
</header>
|
||
|
||
<main class="brief">
|
||
<section class="desk">
|
||
<header class="desk-head">
|
||
<span class="desk-num">∞</span>
|
||
<h2 class="desk-title">All Editions</h2>
|
||
<span class="desk-sub">newest first</span>
|
||
</header>
|
||
|
||
{% if editions %}
|
||
<ol class="archive-list">
|
||
{% for e in editions %}
|
||
<li class="archive-item">
|
||
<a class="archive-row" href="{{ e.filename }}">
|
||
<span class="archive-date">{{ e.date_long }}</span>
|
||
<span class="archive-edition archive-edition-{{ e.edition_short|lower }}">
|
||
{{ e.edition_short }}
|
||
</span>
|
||
<span class="archive-arrow">→</span>
|
||
</a>
|
||
</li>
|
||
{% endfor %}
|
||
</ol>
|
||
{% else %}
|
||
<p class="empty-msg">No editions on file yet. Cron fires twice daily at 0800 / 2000.</p>
|
||
{% endif %}
|
||
</section>
|
||
</main>
|
||
|
||
<footer class="colophon">
|
||
<div class="colophon-inner">
|
||
<div class="colophon-block">
|
||
<span class="meta-label">INDEXED</span>
|
||
<span class="meta-value">{{ generated_at.isoformat(timespec="seconds") }}</span>
|
||
</div>
|
||
<div class="colophon-block">
|
||
<span class="meta-label">STORE</span>
|
||
<span class="meta-value">/opt/docker/data/news-digest</span>
|
||
</div>
|
||
<div class="colophon-block">
|
||
<span class="meta-label">FORMAT</span>
|
||
<span class="meta-value">edition-YYYY-MM-DD-{am,pm}.html</span>
|
||
</div>
|
||
</div>
|
||
</footer>
|
||
</body>
|
||
</html>
|