Version static URLs by mtime; flatter tabs
The stylesheet and bundle were served with Last-Modified only, so a browser could pair new JavaScript with a stale app.css and render the tab strip and thumbnails unstyled. Their URLs now carry the file's mtime. Tabs are flat on the chrome with the open one underlined; the close button shows on hover. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
parent
f590ff19cf
commit
270c5a4369
3 changed files with 48 additions and 15 deletions
|
|
@ -20,12 +20,12 @@ and PUTs with ordinary CSRF protection — no endpoint in this app is exempt.
|
|||
<meta charset="utf-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||
<title>arthur</title>
|
||||
<link rel="stylesheet" href="{% static 'arthur/app.css' %}">
|
||||
<link rel="stylesheet" href="{% static 'arthur/app.css' %}?v={{ css_version }}">
|
||||
</head>
|
||||
<body>
|
||||
{% csrf_token %}
|
||||
<div id="app"></div>
|
||||
<script src="{% static 'mediapipe/vision_bundle.js' %}"></script>
|
||||
<script src="{% static 'arthur/js/main.js' %}"></script>
|
||||
<script src="{% static 'arthur/js/main.js' %}?v={{ js_version }}"></script>
|
||||
</body>
|
||||
</html>
|
||||
|
|
|
|||
|
|
@ -119,10 +119,27 @@ def _crop_blob(chunks):
|
|||
# the page
|
||||
|
||||
|
||||
def _asset_version(relative):
|
||||
"""A static file's modification time, for its URL.
|
||||
|
||||
The stylesheet and the bundle are served with `Last-Modified` and nothing
|
||||
else, so a browser is free to keep a stale copy on heuristic freshness — and
|
||||
new JavaScript over an old stylesheet renders a pane the stylesheet has never
|
||||
heard of as bare elements. A version in the URL makes each edit a new URL."""
|
||||
for root in settings.STATICFILES_DIRS:
|
||||
path = Path(root) / relative
|
||||
if path.exists():
|
||||
return str(int(path.stat().st_mtime))
|
||||
return "0"
|
||||
|
||||
|
||||
def page(request):
|
||||
"""The host page. This replaced `frontend/public/index.html` at step 9, and
|
||||
`:dev-http` in shadow-cljs.edn went away with it."""
|
||||
return render(request, "clips/index.html")
|
||||
return render(request, "clips/index.html", {
|
||||
"css_version": _asset_version("arthur/app.css"),
|
||||
"js_version": _asset_version("arthur/js/main.js"),
|
||||
})
|
||||
|
||||
|
||||
# ---------------------------------------------------------------------------
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue