完成当前主线 checklist 阶段收口
This commit is contained in:
@@ -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"));
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user