From d6353c2da11de1a3e10e2184cfeca97d3381b7a3 Mon Sep 17 00:00:00 2001 From: dzf Date: Mon, 8 Jun 2026 15:04:54 +0800 Subject: [PATCH] fix(file-tree): handle submodule links and missing view container Prevent tree view navigation from intercepting submodule entries so the browser can follow external repository links normally. Also guard against a missing `.repo-view-content` container before updating partial page content to avoid runtime errors. --- web_src/js/components/ViewFileTreeItem.vue | 2 ++ web_src/js/components/ViewFileTreeStore.ts | 3 ++- 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/web_src/js/components/ViewFileTreeItem.vue b/web_src/js/components/ViewFileTreeItem.vue index c898b1df60..1e7a378a34 100644 --- a/web_src/js/components/ViewFileTreeItem.vue +++ b/web_src/js/components/ViewFileTreeItem.vue @@ -32,6 +32,8 @@ const onItemClick = (e: MouseEvent) => { // - the user didn't press any special key like "Ctrl+Click" (which may have custom browser behavior) // - the editor/commit form isn't dirty (a full page reload shows a confirmation dialog if the form contains unsaved changes) if (!isPlainClick(e) || shouldTriggerAreYouSure()) return; + // submodules (commit entry mode) point to external repos, let the browser handle navigation normally + if (props.item.entryMode === 'commit') return; e.preventDefault(); if (props.item.entryMode === 'tree') doLoadChildren(); store.navigateTreeView(props.item.fullPath); diff --git a/web_src/js/components/ViewFileTreeStore.ts b/web_src/js/components/ViewFileTreeStore.ts index 4237f7e323..1da732a4b8 100644 --- a/web_src/js/components/ViewFileTreeStore.ts +++ b/web_src/js/components/ViewFileTreeStore.ts @@ -41,7 +41,8 @@ export function createViewFileTreeStore(props: {repoLink: string, treePath: stri const u = new URL(url, window.origin); u.searchParams.set('only_content', 'true'); const response = await GET(u.href); - const elViewContent = document.querySelector('.repo-view-content')!; + const elViewContent = document.querySelector('.repo-view-content'); + if (!elViewContent) return; elViewContent.innerHTML = await response.text(); const elViewContentData = elViewContent.querySelector('.repo-view-content-data'); if (!elViewContentData) return; // if error occurs, there is no such element