lazyflat/web/templates/base.html
EiSiMo dc5f850d3a chore(web): cache-bust own static assets with build SHA
Append ?v=<git_commit_short> to /static/app.css, /static/app.js,
/static/map.js. Each deploy ⇒ new SHA ⇒ new URL ⇒ browsers re-fetch
on any reload, no Ctrl+Shift+R required. Symptom that prompted this:
fresh JS shipped to prod but the user kept running the cached one
because plain Ctrl+R can serve from disk cache when responses lack
explicit Cache-Control. Login page (which doesn't pass
git_commit_short) falls back to 'dev'.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-23 12:59:20 +02:00

40 lines
2.4 KiB
HTML

<!doctype html>
<html lang="de">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta name="robots" content="noindex, nofollow">
<link rel="icon" type="image/webp" href="/static/didi.webp">
<title>{% block title %}lazyflat{% endblock %}</title>
<script src="https://cdn.tailwindcss.com"></script>
<script src="https://unpkg.com/htmx.org@2.0.3"></script>
<link rel="stylesheet" href="https://unpkg.com/leaflet@1.9.4/dist/leaflet.css"
integrity="sha256-p4NxAoJBhIIN+hmNHrzRCf9tD/miZyoHS5obTRR9BMY=" crossorigin="">
<script src="https://unpkg.com/leaflet@1.9.4/dist/leaflet.js"
integrity="sha256-20nQCchB9co0qIjJZRGuk2/Z9VM+kNiyxNV1lvTlZBo=" crossorigin=""></script>
{# Cache-bust own static assets per deploy: SHA changes ⇒ URL changes ⇒
browsers always pull fresh JS/CSS without a Ctrl+Shift+R. #}
{% set _v = git_commit_short or 'dev' %}
<link rel="stylesheet" href="/static/app.css?v={{ _v }}">
<script src="/static/app.js?v={{ _v }}" defer></script>
<script src="/static/map.js?v={{ _v }}" defer></script>
</head>
<body class="min-h-screen">
{% block body %}{% endblock %}
{# Image lightbox — global so any flat-gallery on any page reuses the same modal. #}
<div id="lazyflat-lightbox" class="lightbox" style="display:none" aria-hidden="true" role="dialog" aria-label="Bildansicht">
<button class="lightbox-close" type="button" aria-label="Schließen" data-lightbox-close>
<svg viewBox="0 0 24 24" width="22" height="22" fill="none" stroke="currentColor" stroke-width="2.4" stroke-linecap="round" stroke-linejoin="round"><line x1="6" y1="6" x2="18" y2="18"/><line x1="18" y1="6" x2="6" y2="18"/></svg>
</button>
<button class="lightbox-prev" type="button" aria-label="Vorheriges Bild" data-lightbox-prev>
<svg viewBox="0 0 24 24" width="28" height="28" fill="none" stroke="currentColor" stroke-width="2.4" stroke-linecap="round" stroke-linejoin="round"><polyline points="15 18 9 12 15 6"/></svg>
</button>
<button class="lightbox-next" type="button" aria-label="Nächstes Bild" data-lightbox-next>
<svg viewBox="0 0 24 24" width="28" height="28" fill="none" stroke="currentColor" stroke-width="2.4" stroke-linecap="round" stroke-linejoin="round"><polyline points="9 18 15 12 9 6"/></svg>
</button>
<img class="lightbox-image" alt="">
<div class="lightbox-counter"></div>
</div>
</body>
</html>