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>
31 lines
1.3 KiB
HTML
31 lines
1.3 KiB
HTML
{% load static %}<!doctype html>
|
|
{% comment %}
|
|
The host page, served by Django since port-plan step 9.
|
|
|
|
It carries no styles of its own any more. They are `static/arthur/app.css`, which
|
|
staticfiles serves from the same tree as the bundle — the page grew a five-pane
|
|
application chrome and "the styles" stopped being a thing you read in passing on
|
|
the way to the markup.
|
|
|
|
The bundle is unchanged: shadow-cljs writes it into `static/arthur/js` and
|
|
staticfiles serves it from there, so `manage.py runserver` and `shadow-cljs watch
|
|
app` are the whole dev loop with nothing copying files between them.
|
|
|
|
The CSRF token is rendered so that Django sets its cookie, which is what
|
|
`arthur.fx.http` reads to write the `X-CSRFToken` header. Saves are ordinary POSTs
|
|
and PUTs with ordinary CSRF protection — no endpoint in this app is exempt.
|
|
{% endcomment %}
|
|
<html lang="en">
|
|
<head>
|
|
<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' %}?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' %}?v={{ js_version }}"></script>
|
|
</body>
|
|
</html>
|