Promote legacy notes UI to native notes.html route
This commit is contained in:
+3407
File diff suppressed because it is too large
Load Diff
@@ -24,10 +24,6 @@ const ONENOTE_TARGET = {
|
||||
notebookName: 'Billing Notes',
|
||||
};
|
||||
|
||||
const WORKSPACE_ROOT = new URL('./', import.meta.url).pathname;
|
||||
const LEGACY_NOTES_COMMIT = '4c6058c';
|
||||
let legacyNotesHtmlCache: string | null = null;
|
||||
|
||||
// ---------------------------------------------------------------------------
|
||||
// App
|
||||
// ---------------------------------------------------------------------------
|
||||
@@ -62,42 +58,6 @@ function getBearerToken(header: string | undefined | null): string | null {
|
||||
return m?.[1] || null;
|
||||
}
|
||||
|
||||
function decorateLegacyNotesHtml(html: string): string {
|
||||
const nav = `
|
||||
<div style="position:fixed;top:12px;left:12px;z-index:100000;display:flex;flex-wrap:wrap;gap:8px;align-items:center;max-width:min(90vw,960px);">
|
||||
<a href="/" style="display:inline-flex;align-items:center;padding:8px 12px;border-radius:999px;background:#0f172a;color:#e2e8f0;text-decoration:none;font:600 13px/1.2 ui-sans-serif,system-ui,sans-serif;border:1px solid #334155;box-shadow:0 8px 20px rgba(15,23,42,.28);">Testing Harness</a>
|
||||
<a href="/tasks" style="display:inline-flex;align-items:center;padding:8px 12px;border-radius:999px;background:#0f172a;color:#e2e8f0;text-decoration:none;font:600 13px/1.2 ui-sans-serif,system-ui,sans-serif;border:1px solid #334155;box-shadow:0 8px 20px rgba(15,23,42,.28);">Tasks</a>
|
||||
<span style="display:inline-flex;align-items:center;padding:8px 12px;border-radius:999px;background:rgba(15,23,42,.92);color:#67e8f9;font:600 12px/1.2 ui-sans-serif,system-ui,sans-serif;border:1px solid rgba(103,232,249,.35);box-shadow:0 8px 20px rgba(15,23,42,.28);">Legacy Notes UI · restored from ${LEGACY_NOTES_COMMIT}</span>
|
||||
</div>`;
|
||||
|
||||
return html
|
||||
.replace('<title>Prism Notes</title>', '<title>Prism Notes Legacy</title>')
|
||||
.replace(/<body([^>]*)>/i, `<body$1>${nav}`);
|
||||
}
|
||||
|
||||
async function loadLegacyNotesHtml(): Promise<string> {
|
||||
if (legacyNotesHtmlCache) return legacyNotesHtmlCache;
|
||||
|
||||
const proc = Bun.spawn(['git', '--no-pager', 'show', `${LEGACY_NOTES_COMMIT}:index.html`], {
|
||||
cwd: WORKSPACE_ROOT,
|
||||
stdout: 'pipe',
|
||||
stderr: 'pipe',
|
||||
});
|
||||
|
||||
const [stdout, stderr, exitCode] = await Promise.all([
|
||||
new Response(proc.stdout).text(),
|
||||
new Response(proc.stderr).text(),
|
||||
proc.exited,
|
||||
]);
|
||||
|
||||
if (exitCode !== 0) {
|
||||
throw new Error(stderr || `git show failed for ${LEGACY_NOTES_COMMIT}:index.html`);
|
||||
}
|
||||
|
||||
legacyNotesHtmlCache = decorateLegacyNotesHtml(stdout);
|
||||
return legacyNotesHtmlCache;
|
||||
}
|
||||
|
||||
function escapeHtml(s: string): string {
|
||||
return s
|
||||
.replace(/&/g, '&')
|
||||
@@ -1126,35 +1086,8 @@ app.get('/', async (c) => {
|
||||
});
|
||||
|
||||
app.get('/notes', async (c) => {
|
||||
try {
|
||||
const html = await loadLegacyNotesHtml();
|
||||
const html = await Bun.file(new URL('./notes.html', import.meta.url)).text();
|
||||
return c.html(html);
|
||||
} catch (error) {
|
||||
console.error('Failed to load legacy notes UI', error);
|
||||
return c.html(`<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="UTF-8" />
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
||||
<title>Prism Notes Legacy</title>
|
||||
<script src="https://cdn.tailwindcss.com"></script>
|
||||
</head>
|
||||
<body class="min-h-screen bg-slate-950 text-slate-100">
|
||||
<main class="mx-auto max-w-3xl px-6 py-16">
|
||||
<div class="rounded-2xl border border-slate-800 bg-slate-900/80 p-6 shadow-2xl">
|
||||
<p class="text-xs uppercase tracking-[0.3em] text-cyan-400">Prism Notes</p>
|
||||
<h1 class="mt-2 text-3xl font-semibold tracking-tight">Legacy notes UI unavailable</h1>
|
||||
<p class="mt-4 text-sm text-slate-300">The current server could not load the historical notes interface from git commit <strong>${LEGACY_NOTES_COMMIT}</strong>.</p>
|
||||
<pre class="mt-4 overflow-x-auto rounded-xl border border-slate-800 bg-slate-950 p-4 text-xs text-rose-200">${escapeHtml(String(error instanceof Error ? error.message : error || 'Unknown error'))}</pre>
|
||||
<div class="mt-6 flex flex-wrap gap-3">
|
||||
<a href="/" class="rounded-xl border border-slate-700 bg-slate-900 px-4 py-2 text-sm font-semibold text-slate-100">Back to Testing Harness</a>
|
||||
<a href="/tasks" class="rounded-xl border border-slate-700 bg-slate-900 px-4 py-2 text-sm font-semibold text-slate-100">Open Tasks View</a>
|
||||
</div>
|
||||
</div>
|
||||
</main>
|
||||
</body>
|
||||
</html>`, 500);
|
||||
}
|
||||
});
|
||||
|
||||
app.get('/tasks', async (c) => {
|
||||
|
||||
Reference in New Issue
Block a user