The page's script is TypeScript in web/src, built and minified with swc
- web/src/*.ts: the script that was inline in index.html and login.html, split along its existing sections. Still one scope, concatenated in order, not modules. - web/build.mjs strips the types, puts the script in the page and minifies it with swc; build.rs runs it into OUT_DIR and web.rs include_str!s the result. 137 KB -> 106 KB. - npx tsc -p . type-checks web/src, loosely; the handful of annotations it needed change no behaviour. - The Docker build installs node and swc (npm ci --omit=dev). - Two list requests racing no longer let the older one win, and switching tabs clears the selection it closes, which made a browser test flaky. Closes #23, #24. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
@@ -76,20 +76,4 @@ button:focus-visible{outline:2px solid var(--accent);outline-offset:2px}
|
||||
<p class="msg" id="msg"></p>
|
||||
</form>
|
||||
|
||||
<script>
|
||||
document.getElementById('f').onsubmit = async e => {
|
||||
e.preventDefault();
|
||||
const msg = document.getElementById('msg');
|
||||
msg.textContent = '';
|
||||
const r = await fetch('/api/login', {
|
||||
method: 'POST',
|
||||
headers: { 'Content-Type': 'application/json' },
|
||||
body: JSON.stringify({
|
||||
name: document.getElementById('name').value,
|
||||
password: document.getElementById('pw').value,
|
||||
}),
|
||||
});
|
||||
if (r.ok) location.href = '/';
|
||||
else msg.textContent = await r.text() || 'Sign in failed';
|
||||
};
|
||||
</script>
|
||||
<script data-src="web/src"></script>
|
||||
|
||||
Reference in New Issue
Block a user