Przeglądaj źródła

'修复子路径文档渲染问题;侧边栏目录只保存文档名'

admincjy 1 miesiąc temu
rodzic
commit
4924c52512
2 zmienionych plików z 20 dodań i 5 usunięć
  1. 19 3
      public/js/reader.js
  2. 1 2
      server.js

+ 19 - 3
public/js/reader.js

@@ -67,6 +67,17 @@ function getQueryParams() {
     };
 }
 
+// 根据文档路径获取展示名称(仅保留最后一段)
+function getDocDisplayName(docName) {
+    if (!docName || typeof docName !== 'string') {
+        return '';
+    }
+
+    const segments = docName.split(/[\\\/]/);
+    const name = segments.pop();
+    return name || docName;
+}
+
 // 加载文档列表
 async function loadDocList() {
     const { category } = getQueryParams();
@@ -86,7 +97,10 @@ async function loadDocList() {
         if (!response.ok) throw new Error('获取文档列表失败');
 
         const categoryData = await response.json();
-        docList = categoryData.docs;
+        docList = categoryData.docs.map(doc => ({
+            ...doc,
+            displayName: getDocDisplayName(doc.name)
+        }));
 
         renderDocNav(docList);
 
@@ -119,7 +133,8 @@ function renderDocNav(docs) {
         const link = document.createElement('a');
         link.href = '#';
         link.className = 'nav-link';
-        link.textContent = doc.name;
+        link.textContent = doc.displayName || getDocDisplayName(doc.name);
+        link.title = doc.name;
 
         item.appendChild(link);
         nav.appendChild(item);
@@ -400,7 +415,8 @@ function updateDocNavigation() {
     const setupNavButton = (button, doc) => {
         if (doc) {
             button.style.display = 'flex';
-            button.querySelector('.nav-doc-name').textContent = doc.name;
+            const displayName = doc.displayName || getDocDisplayName(doc.name);
+            button.querySelector('.nav-doc-name').textContent = displayName;
             button.onclick = () => {
                 loadDocument(doc.name);
                 updateURL(currentCategory, doc.name);

+ 1 - 2
server.js

@@ -23,8 +23,7 @@ function sanitizePath(input) {
     // 3. 对于单个路径段,不应包含路径分隔符
     return input
         .replace(/\.\./g, '')           // 移除 ..
-        .replace(/^[\/\\]+/, '')        // 移除开头的 / 和 \
-        .replace(/[\/\\]/g, '');        // 移除路径分隔符(适用于单个段)
+        .replace(/^[\/\\]+/, '');        // 移除开头的 / 和 \
 }
 
 // 验证路径是否在允许的目录内