From 0e7e84a8fc82408cddc0848531d76aeb36f6503e Mon Sep 17 00:00:00 2001 From: Devon22 Date: Sun, 17 May 2026 11:45:29 +0800 Subject: [PATCH] 3.2.3 --- esbuild.config.mjs | 2 +- manifest.json | 2 +- package-lock.json | 18 ++---------------- package.json | 3 +-- src/GridView.ts | 31 +++++++++++++++++++++---------- src/settings.ts | 15 +++++++++++++++ src/translations/en.ts | 2 ++ src/translations/ja.ts | 2 ++ src/translations/ko.ts | 2 ++ src/translations/ru.ts | 2 ++ src/translations/uk.ts | 2 ++ src/translations/zh-TW.ts | 2 ++ src/translations/zh.ts | 2 ++ 13 files changed, 55 insertions(+), 30 deletions(-) diff --git a/esbuild.config.mjs b/esbuild.config.mjs index 4b6ad4b..ac67f3f 100644 --- a/esbuild.config.mjs +++ b/esbuild.config.mjs @@ -1,6 +1,6 @@ import esbuild from "esbuild"; import process from "process"; -import builtins from "builtin-modules"; +import { builtinModules as builtins } from "module"; const banner = `/* diff --git a/manifest.json b/manifest.json index 9ee9731..4a9e4a6 100644 --- a/manifest.json +++ b/manifest.json @@ -1,7 +1,7 @@ { "id": "gridexplorer", "name": "GridExplorer", - "version": "3.2.2", + "version": "3.2.3", "minAppVersion": "1.8.7", "description": "Browse note files in a grid view.", "author": "Devon22", diff --git a/package-lock.json b/package-lock.json index a4e7464..08066b7 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,18 +1,17 @@ { "name": "gridexplorer", - "version": "3.2.2", + "version": "3.2.3", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "gridexplorer", - "version": "3.2.2", + "version": "3.2.3", "license": "MIT", "devDependencies": { "@types/node": "^16.11.6", "@typescript-eslint/eslint-plugin": "^8.59.3", "@typescript-eslint/parser": "^8.59.3", - "builtin-modules": "3.3.0", "esbuild": "0.17.3", "eslint": "^10.3.0", "eslint-plugin-obsidianmd": "^0.3.0", @@ -1253,19 +1252,6 @@ "concat-map": "0.0.1" } }, - "node_modules/builtin-modules": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-3.3.0.tgz", - "integrity": "sha512-zhaCDicdLuWN5UbN5IMnFqNMhNfo919sH85y2/ea+5Yg9TsTkeZxpL+JLbp6cgYFS4sRLp3YV4S6yDuqVWHYOw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/call-bind": { "version": "1.0.9", "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.9.tgz", diff --git a/package.json b/package.json index 650b41b..2db2967 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "gridexplorer", - "version": "3.2.2", + "version": "3.2.3", "description": "Browse note files in a grid view.", "main": "main.js", "scripts": { @@ -15,7 +15,6 @@ "@types/node": "^16.11.6", "@typescript-eslint/eslint-plugin": "^8.59.3", "@typescript-eslint/parser": "^8.59.3", - "builtin-modules": "3.3.0", "esbuild": "0.17.3", "eslint": "^10.3.0", "eslint-plugin-obsidianmd": "^0.3.0", diff --git a/src/GridView.ts b/src/GridView.ts index 9aa3a04..bde6969 100644 --- a/src/GridView.ts +++ b/src/GridView.ts @@ -621,7 +621,7 @@ export class GridView extends ItemView { if (filterRenderTimer !== null) { window.clearTimeout(filterRenderTimer); } - filterRenderTimer = window.setTimeout(renderFilteredFiles, 250); + filterRenderTimer = window.setTimeout(() => { void renderFilteredFiles(); }, 250); }; let isComposingFilterText = false; @@ -981,7 +981,6 @@ export class GridView extends ItemView { let outputValue: unknown = value; if (calcExpr) { try { - // eslint-disable-next-line @typescript-eslint/no-implied-eval const fn = new Function('value', 'metadata', 'app', 'dv', `return (${calcExpr});`) as (value: string, metadata: FrontMatterCache | undefined, app: typeof this.app, dv: unknown) => unknown; // 獲取 Dataview API @@ -1030,16 +1029,19 @@ export class GridView extends ItemView { .replace(/```[\s\S]*?```\n/g, '') .replace(/```[\s\S]*$/, ''); } - // 刪除註解及連結 contentWithoutMediaLinks = contentWithoutMediaLinks .replace(//g, '') - .replace(/!?\[([^\]]*)\]\([^)]+\)|!?\[\[([^\]]+)\]\]/g, (_match: string, p1?: string, p2?: string) => { - const linkText = p1 || p2 || ''; - if (!linkText) return ''; + .replace(/!?\[([^\]]*)\]\([^)]+\)|!?\[\[([^\]]+)\]\]/g, (_match: string, p1?: string, p2?: string) => { + const rawLinkText = p1 || p2 || ''; + if (!rawLinkText) return ''; + + const wikiLinkParts = p2 ? rawLinkText.split('|') : []; + const linkTarget = p2 ? wikiLinkParts[0] : rawLinkText; + const linkText = p2 && wikiLinkParts.length > 1 ? wikiLinkParts.slice(1).join('|') : rawLinkText; // 獲取副檔名並檢查是否為圖片或影片 - const extension = linkText.split('.').pop()?.toLowerCase() || ''; + const extension = linkTarget.split('.').pop()?.toLowerCase() || ''; return (IMAGE_EXTENSIONS.has(extension) || VIDEO_EXTENSIONS.has(extension)) ? '' : linkText; }); @@ -1807,15 +1809,15 @@ export class GridView extends ItemView { if (idx !== -1) { lineNumber = content.substring(0, idx).split('\n').length - 1; - await leaf.openFile(file, { eState: { line: lineNumber } }); + await this.openNoteFile(leaf, file, { eState: { line: lineNumber } }); (this.app as AppWithCommands).commands?.executeCommandById?.('editor:focus'); return; } // 若都找不到關鍵字,直接開檔 - await leaf.openFile(file); + await this.openNoteFile(leaf, file); })(); } else { - void leaf.openFile(file); + void this.openNoteFile(leaf, file); } } } @@ -2171,6 +2173,15 @@ export class GridView extends ItemView { }); } + // 開啟筆記檔案,必要時關閉目前的網格視圖 + private async openNoteFile(leaf: WorkspaceLeaf, file: TFile, openState?: Parameters[1]): Promise { + await leaf.openFile(file, openState); + + if (this.plugin.settings.closeGridViewOnOpenNote && leaf !== this.leaf) { + this.leaf.detach(); + } + } + // 根據 openNoteLayout 設定獲取對應的 leaf getLeafByMode(file?: TFile): WorkspaceLeaf { const mode = this.plugin.settings.openNoteLayout; diff --git a/src/settings.ts b/src/settings.ts index 9902361..1e0f081 100644 --- a/src/settings.ts +++ b/src/settings.ts @@ -88,6 +88,7 @@ export interface GallerySettings { quickAccessModeType: string; // View types used by "Open quick access view" command useQuickAccessAsNewTabMode: 'default' | 'folder' | 'mode'; // Use quick access (folder or mode) as a new tab view showNoteInGrid: boolean; // 是否預設在 grid container 中顯示筆記(不需要按 Alt 鍵) + closeGridViewOnOpenNote: boolean; // 當開啟筆記檔案時,關閉目前的網格視圖 openNoteLayout: 'default' | 'newTab' | 'split' | 'newWindow'; // 開啟筆記的方式 searchCurrentLocationOnly: boolean; // 是否只搜尋當前位置 searchFilesNameOnly: boolean; // 是否只搜尋筆記名稱 @@ -155,6 +156,7 @@ export const DEFAULT_SETTINGS: GallerySettings = { useQuickAccessAsNewTabMode: 'default', quickAccessModeType: 'all-files', // Default quick access view type showNoteInGrid: false, // 預設不在 grid container 中顯示筆記 + closeGridViewOnOpenNote: false, // 預設開啟筆記檔案時不關閉目前的網格視圖 openNoteLayout: 'default', // 預設開啟筆記的方式 searchCurrentLocationOnly: false, // 預設搜尋所有筆記 searchFilesNameOnly: false, // 預設不只搜尋筆記名稱 @@ -779,6 +781,19 @@ export class GridExplorerSettingTab extends PluginSettingTab { }); }); + // 開啟筆記檔案時關閉目前的網格視圖 + new Setting(sectionEl) + .setName(t('close_grid_view_on_open_note')) + .setDesc(t('close_grid_view_on_open_note_desc')) + .addToggle(toggle => { + toggle + .setValue(this.plugin.settings.closeGridViewOnOpenNote) + .onChange(async (value) => { + this.plugin.settings.closeGridViewOnOpenNote = value; + await this.plugin.saveSettings(); + }); + }); + // 設定開啟筆記的方式 new Setting(sectionEl) .setName(t('open_note_layout')) diff --git a/src/translations/en.ts b/src/translations/en.ts index 30111ec..0d17f5e 100644 --- a/src/translations/en.ts +++ b/src/translations/en.ts @@ -76,6 +76,8 @@ export default { 'show_video_thumbnails_desc': 'Display thumbnails for videos in the grid view, shows a play icon when disabled.', 'show_note_in_grid': 'Show note in grid', 'show_note_in_grid_desc': 'Display note in grid container when clicked. If disabled, use right-click menu to open.', + 'close_grid_view_on_open_note': 'Close current grid view when opening a note file', + 'close_grid_view_on_open_note_desc': 'When enabled, opening a note file from the grid view closes the current grid view.', 'open_note_layout': 'Open note layout', 'open_note_layout_desc': 'Set how notes are opened in the grid view', 'open_note_layout_default': 'Default', diff --git a/src/translations/ja.ts b/src/translations/ja.ts index 8773d45..4d2d2a2 100644 --- a/src/translations/ja.ts +++ b/src/translations/ja.ts @@ -75,6 +75,8 @@ export default { 'show_video_thumbnails_desc': 'グリッドビューで動画のサムネイルを表示する、無効の場合は再生アイコンを表示', 'show_note_in_grid': 'グリッドビューでノートを表示', 'show_note_in_grid_desc': 'グリッドビューでノートを表示する、無効の場合は右鍵メニューを使用して開く', + 'close_grid_view_on_open_note': 'ノートファイルを開くときに現在のグリッドビューを閉じる', + 'close_grid_view_on_open_note_desc': '有効にすると、グリッドビューからノートファイルを開いたときに現在のグリッドビューを閉じます', 'open_note_layout': 'ノートを開く', 'open_note_layout_desc': 'グリッドビューでノートを開く方法を設定します', 'open_note_layout_default': 'デフォルト', diff --git a/src/translations/ko.ts b/src/translations/ko.ts index d08e0f1..ed0353e 100644 --- a/src/translations/ko.ts +++ b/src/translations/ko.ts @@ -76,6 +76,8 @@ export default { 'show_video_thumbnails_desc': '그리드 뷰에서 비디오 썸네일 표시, 비활성화 시 재생 아이콘 표시', 'show_note_in_grid': '그리드에 노트 표시', 'show_note_in_grid_desc': '클릭 시 그리드 컨테이너에 노트 표시. 비활성화 시 우클릭 메뉴로 열기', + 'close_grid_view_on_open_note': '노트 파일을 열 때 현재 그리드 뷰 닫기', + 'close_grid_view_on_open_note_desc': '활성화하면 그리드 뷰에서 노트 파일을 열 때 현재 그리드 뷰를 닫습니다', 'open_note_layout': '노트 열기 레이아웃', 'open_note_layout_desc': '그리드 뷰에서 노트를 여는 방법 설정', 'open_note_layout_default': '기본값', diff --git a/src/translations/ru.ts b/src/translations/ru.ts index f7668a7..c2a651d 100644 --- a/src/translations/ru.ts +++ b/src/translations/ru.ts @@ -75,6 +75,8 @@ export default { 'show_video_thumbnails_desc': 'Отображать миниатюры для видео в сеточном виде, показывает значок воспроизведения, если отключено', 'show_note_in_grid': 'Показывать заметки в сеточном виде', 'show_note_in_grid_desc': 'Показывать заметки в сеточном виде при нажатии. Если отключено, нужно открывать через контекстное меню', + 'close_grid_view_on_open_note': 'Закрывать текущий сеточный вид при открытии файла заметки', + 'close_grid_view_on_open_note_desc': 'Если включено, при открытии файла заметки из сеточного вида текущий сеточный вид будет закрыт', 'open_note_layout': 'Открыть заметку', 'open_note_layout_desc': 'Установите способ открытия заметок в виде сетки', 'open_note_layout_default': 'По умолчанию', diff --git a/src/translations/uk.ts b/src/translations/uk.ts index f2bdd19..a3f4b65 100644 --- a/src/translations/uk.ts +++ b/src/translations/uk.ts @@ -75,6 +75,8 @@ export default { 'show_video_thumbnails_desc': 'Відображати мініатюри для відео в сітковому вигляді, показує іконку відтворення, якщо вимкнено', 'show_note_in_grid': 'Показувати нотатки в сітці', 'show_note_in_grid_desc': 'Відображати нотатки в сітковому контейнері при натисканні. Якщо вимкнено, використовуйте контекстне меню для відкриття', + 'close_grid_view_on_open_note': 'Закривати поточний сітковий вигляд під час відкриття файла нотатки', + 'close_grid_view_on_open_note_desc': 'Якщо увімкнено, відкриття файла нотатки з сіткового вигляду закриє поточний сітковий вигляд', 'open_note_layout': 'Відкрити нотатку', 'open_note_layout_desc': 'Встановіть, як відкриваються нотатки в сітковому вигляді', 'open_note_layout_default': 'За замовчуванням', diff --git a/src/translations/zh-TW.ts b/src/translations/zh-TW.ts index a3c50ea..fd3fcfe 100644 --- a/src/translations/zh-TW.ts +++ b/src/translations/zh-TW.ts @@ -76,6 +76,8 @@ export default { 'show_video_thumbnails_desc': '在網格視圖中顯示影片的縮圖,關閉時將顯示播放圖示', 'show_note_in_grid': '在網格視圖中顯示筆記', 'show_note_in_grid_desc': '啟用後,點擊筆記會直接在網格中顯示內容,不啟用則需要使用右鍵選單打開', + 'close_grid_view_on_open_note': '當開啟筆記檔案時,關閉目前的網格視圖', + 'close_grid_view_on_open_note_desc': '啟用後,從網格視圖開啟筆記檔案時會關閉目前的網格視圖', 'open_note_layout': '開啟筆記的方式', 'open_note_layout_desc': '設定開啟筆記的方式', 'open_note_layout_default': '預設', diff --git a/src/translations/zh.ts b/src/translations/zh.ts index 614a5c3..aff5a56 100644 --- a/src/translations/zh.ts +++ b/src/translations/zh.ts @@ -75,6 +75,8 @@ export default { 'show_video_thumbnails_desc': '在网格视图中显示视频的缩略图,关闭时将显示播放图标', 'show_note_in_grid': '在网格视图中显示笔记', 'show_note_in_grid_desc': '在网格视图中显示笔记,关闭时使用右键菜单打开', + 'close_grid_view_on_open_note': '打开笔记文件时关闭当前网格视图', + 'close_grid_view_on_open_note_desc': '启用后,从网格视图打开笔记文件时会关闭当前网格视图', 'open_note_layout': '打开笔记布局', 'open_note_layout_desc': '设置在网格视图中打开笔记的方式', 'open_note_layout_default': '默认',