完成当前主线 checklist 阶段收口

This commit is contained in:
lix-2026
2026-05-19 12:35:53 +08:00
parent 16f00a5e82
commit ab3f06f4c4
4 changed files with 149 additions and 73 deletions
+37 -8
View File
@@ -1865,16 +1865,37 @@ const SIDEBAR_TREE_JS: &str = r##"
}
async function refreshLocalFolderSidebarSnapshot() {
var response = await fetch(window.location.href, { headers: { accept: 'text/html' } });
if (!response.ok) return false;
var html = await response.text();
var nextDocument = new DOMParser().parseFromString(html, 'text/html');
var renderedPage = replaceSidebarTreeFromDocument(nextDocument, 'sidebar-tree-root');
var renderedFile = replaceSidebarTreeFromDocument(nextDocument, 'sidebar-file-tree-root');
var params = new URLSearchParams(window.location.search);
var workspaceId = currentWorkspaceId();
var rootUri = (params.get('rootUri') || '').trim();
var currentId = currentDocumentId();
if (!workspaceId || !rootUri) return false;
var sidebarUrl = new URL('/api/tree/projections/sidebar', window.location.origin);
sidebarUrl.searchParams.set('workspaceId', workspaceId);
sidebarUrl.searchParams.set('sourceKind', 'local_folder');
sidebarUrl.searchParams.set('rootUri', rootUri);
if (currentId) sidebarUrl.searchParams.set('rootNodeId', currentId);
var fileUrl = new URL('/api/tree/projections/file', window.location.origin);
fileUrl.searchParams.set('workspaceId', workspaceId);
fileUrl.searchParams.set('sourceKind', 'local_folder');
fileUrl.searchParams.set('rootUri', rootUri);
if (currentId) fileUrl.searchParams.set('rootNodeId', currentId);
var responses = await Promise.all([
fetch(sidebarUrl.toString(), { headers: { accept: 'application/json' } }),
fetch(fileUrl.toString(), { headers: { accept: 'application/json' } })
]);
if (!responses[0].ok && !responses[1].ok) return false;
var sidebarPayload = responses[0].ok ? await responses[0].json().catch(function() { return null; }) : null;
var filePayload = responses[1].ok ? await responses[1].json().catch(function() { return null; }) : null;
var renderedPage = sidebarPayload ? renderSidebarSnapshot(sidebarPayload.result || sidebarPayload) : false;
var renderedFile = filePayload ? renderFileProjection(filePayload.result || filePayload) : false;
if (!renderedPage && !renderedFile) return false;
syncSidebarFileTreeSelection();
restoreSidebarTreeTab();
document.documentElement.setAttribute('data-mnote-local-folder-watch-applied', 'snapshot');
document.documentElement.setAttribute('data-mnote-local-folder-watch-applied', 'projection');
return true;
}
@@ -8585,8 +8606,16 @@ mod tests {
assert!(SIDEBAR_TREE_JS.contains("startLocalFolderSidebarWatch"));
assert!(SIDEBAR_TREE_JS.contains("refreshLocalFolderSidebarSnapshot"));
assert!(SIDEBAR_TREE_JS.contains("/api/tree/local-folder-watch"));
assert!(SIDEBAR_TREE_JS.contains("replaceSidebarTreeFromDocument"));
assert!(SIDEBAR_TREE_JS.contains("/api/tree/projections/sidebar"));
assert!(SIDEBAR_TREE_JS.contains("/api/tree/projections/file"));
assert!(SIDEBAR_TREE_JS
.contains("renderSidebarSnapshot(sidebarPayload.result || sidebarPayload)"));
assert!(SIDEBAR_TREE_JS.contains("renderFileProjection(filePayload.result || filePayload)"));
assert!(SIDEBAR_TREE_JS.contains("data-mnote-local-folder-watch-applied"));
assert!(!SIDEBAR_TREE_JS
.contains("fetch(window.location.href, { headers: { accept: 'text/html' } })"));
assert!(!SIDEBAR_TREE_JS
.contains("replaceSidebarTreeFromDocument(nextDocument, 'sidebar-tree-root')"));
assert!(!SIDEBAR_TREE_JS.contains("window.location.reload"));
}