feat: introduce Vue Bootstrap interface and scoped router network status

This commit is contained in:
Codex
2026-10-05 20:23:05 +08:00
parent cf895110ee
commit 04d56d5aa2
48 changed files with 4096 additions and 145 deletions
+2 -2
View File
@@ -11,7 +11,7 @@ test('browser hashes in 4 MiB slices rather than loading the entire video',async
await assert.rejects(hash.blocks(file,()=>{},()=>false),/取消/);
});
test('journals default to private and encode content before rendering',()=>{
const html=fs.readFileSync('web/index.html','utf8'),js=fs.readFileSync('web/journal.js','utf8');
const html=require('./test-support/ui-source')(),js=fs.readFileSync('web/journal.js','utf8');
assert.match(html,/<select name="visibility"><option value="private">/);assert.match(js,/esc\(e.text\)/);assert.match(js,/esc\(c.text\)/);
assert.doesNotMatch(js,/localStorage|indexedDB|caches\.open|access_token|secretKey.*localStorage/);
});
@@ -35,7 +35,7 @@ test('successful save clears draft attachment ids, stops recorder, and reloads f
assert.match(js,/available.filter\(m=>journalDraftMedia.has\(m.id\)\)/);
});
test('attachment preview uses a closable dialog and deletion has a restore path',()=>{
const js=fs.readFileSync('web/journal.js','utf8'),html=fs.readFileSync('web/index.html','utf8');
const js=fs.readFileSync('web/journal.js','utf8'),html=require('./test-support/ui-source')();
assert.match(html,/<dialog id="journal-preview"/);assert.match(js,/addEventListener\('close'/);assert.match(js,/\/api\/journal\/restore-upload/);
assert.match(js,/journal-library-list/);assert.match(js,/if\(other!==media\)other.pause\(\)/);
});