mirror of
https://github.com/devon22/obsidian-gridexplorer.git
synced 2026-07-22 12:00:25 +00:00
2.2.0
This commit is contained in:
parent
9b9cf99c5d
commit
c3c5209aa6
10 changed files with 250 additions and 94 deletions
|
|
@ -1,7 +1,7 @@
|
|||
{
|
||||
"id": "gridexplorer",
|
||||
"name": "GridExplorer",
|
||||
"version": "2.1.1",
|
||||
"version": "2.2.0",
|
||||
"minAppVersion": "1.1.0",
|
||||
"description": "Browse note files in a grid view.",
|
||||
"author": "Devon22",
|
||||
|
|
|
|||
4
package-lock.json
generated
4
package-lock.json
generated
|
|
@ -1,12 +1,12 @@
|
|||
{
|
||||
"name": "gridexplorer",
|
||||
"version": "2.1.1",
|
||||
"version": "2.2.0",
|
||||
"lockfileVersion": 3,
|
||||
"requires": true,
|
||||
"packages": {
|
||||
"": {
|
||||
"name": "gridexplorer",
|
||||
"version": "2.1.1",
|
||||
"version": "2.2.0",
|
||||
"license": "MIT",
|
||||
"devDependencies": {
|
||||
"@types/node": "^16.11.6",
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
{
|
||||
"name": "gridexplorer",
|
||||
"version": "2.1.1",
|
||||
"version": "2.2.0",
|
||||
"description": "Browse note files in a grid view.",
|
||||
"main": "main.js",
|
||||
"scripts": {
|
||||
|
|
|
|||
|
|
@ -92,15 +92,16 @@ export class FolderNoteSettingsModal extends Modal {
|
|||
});
|
||||
|
||||
// 圖示選項
|
||||
const customFolderIcon = this.plugin.settings.customFolderIcon;
|
||||
new Setting(contentEl)
|
||||
.setName(t('folder_icon'))
|
||||
.setDesc(t('folder_icon_desc'))
|
||||
.addText(text => {
|
||||
text
|
||||
.setPlaceholder('📁')
|
||||
.setValue(this.settings.icon || '📁')
|
||||
.setPlaceholder(customFolderIcon)
|
||||
.setValue(this.settings.icon || customFolderIcon)
|
||||
.onChange(value => {
|
||||
this.settings.icon = value || '📁';
|
||||
this.settings.icon = value || customFolderIcon;
|
||||
});
|
||||
});
|
||||
|
||||
|
|
|
|||
191
src/GridView.ts
191
src/GridView.ts
|
|
@ -1,4 +1,4 @@
|
|||
import { WorkspaceLeaf, ItemView, TFolder, TFile, Menu, Notice, Platform, setIcon, getFrontMatterInfo } from 'obsidian';
|
||||
import { WorkspaceLeaf, ItemView, TFolder, TFile, Menu, Notice, Platform, setIcon, getFrontMatterInfo, FrontMatterCache } from 'obsidian';
|
||||
import { showFolderSelectionModal } from './FolderSelectionModal';
|
||||
import { findFirstImageInNote } from './mediaUtils';
|
||||
import { MediaModal } from './MediaModal';
|
||||
|
|
@ -30,6 +30,7 @@ export class GridView extends ItemView {
|
|||
fileWatcher: FileWatcher;
|
||||
recentSources: string[] = []; // 歷史記錄
|
||||
minMode: boolean = false; // 最小模式
|
||||
showIgnoredFolders: boolean = false; // 顯示忽略資料夾
|
||||
pinnedList: string[] = []; // 置頂清單
|
||||
|
||||
constructor(leaf: WorkspaceLeaf, plugin: GridExplorerPlugin) {
|
||||
|
|
@ -236,6 +237,7 @@ export class GridView extends ItemView {
|
|||
});
|
||||
}
|
||||
}
|
||||
// 最小化模式選項
|
||||
menu.addItem((item) => {
|
||||
item
|
||||
.setTitle(t(this.minMode ? 'close_min_mode' : 'min_mode'))
|
||||
|
|
@ -250,6 +252,21 @@ export class GridView extends ItemView {
|
|||
this.render();
|
||||
});
|
||||
});
|
||||
// 顯示忽略資料夾選項
|
||||
menu.addItem((item) => {
|
||||
item
|
||||
.setTitle(this.showIgnoredFolders ? t('hide_ignored_folders') : t('show_ignored_folders'))
|
||||
.setIcon('folder')
|
||||
.onClick(() => {
|
||||
this.showIgnoredFolders = !this.showIgnoredFolders;
|
||||
const titleElement = this.containerEl.querySelector('.ge-header-buttons')?.querySelector('.ge-title');
|
||||
if (titleElement) {
|
||||
titleElement.textContent = this.showIgnoredFolders ? t('hide_ignored_folders') : t('show_ignored_folders');
|
||||
}
|
||||
this.app.workspace.requestSaveLayout();
|
||||
this.render();
|
||||
});
|
||||
});
|
||||
menu.addItem((item) => {
|
||||
item
|
||||
.setTitle(t('open_settings'))
|
||||
|
|
@ -757,7 +774,8 @@ export class GridView extends ItemView {
|
|||
|
||||
const contentArea = parentFolderEl.createDiv('ge-content-area');
|
||||
const titleContainer = contentArea.createDiv('ge-title-container');
|
||||
titleContainer.createEl('span', { cls: 'ge-title', text: `📁 ..` });
|
||||
const customFolderIcon = this.plugin.settings.customFolderIcon;
|
||||
titleContainer.createEl('span', { cls: 'ge-title', text: `${customFolderIcon} ..`.trim() });
|
||||
|
||||
// 回上層資料夾事件
|
||||
parentFolderEl.addEventListener('click', () => {
|
||||
|
|
@ -772,16 +790,18 @@ export class GridView extends ItemView {
|
|||
if (currentFolder instanceof TFolder) {
|
||||
const subfolders = currentFolder.children
|
||||
.filter(child => {
|
||||
// 如果不是資料夾,則不顯示
|
||||
if (!(child instanceof TFolder)) return false;
|
||||
|
||||
// 如果開啟顯示忽略資料夾模式,則顯示所有資料夾
|
||||
if (this.showIgnoredFolders) return true;
|
||||
|
||||
// 檢查資料夾是否在忽略清單中
|
||||
const isInIgnoredFolders = this.plugin.settings.ignoredFolders.some(folder =>
|
||||
child.path === folder || child.path.startsWith(folder + '/')
|
||||
);
|
||||
|
||||
if (isInIgnoredFolders) {
|
||||
return false;
|
||||
}
|
||||
if (isInIgnoredFolders) return false;
|
||||
|
||||
// 檢查資料夾是否符合忽略的模式
|
||||
if (this.plugin.settings.ignoredFolderPatterns && this.plugin.settings.ignoredFolderPatterns.length > 0) {
|
||||
|
|
@ -802,9 +822,7 @@ export class GridView extends ItemView {
|
|||
}
|
||||
});
|
||||
|
||||
if (matchesIgnoredPattern) {
|
||||
return false;
|
||||
}
|
||||
if (matchesIgnoredPattern) return false;
|
||||
}
|
||||
|
||||
return true;
|
||||
|
|
@ -819,7 +837,8 @@ export class GridView extends ItemView {
|
|||
|
||||
const contentArea = folderEl.createDiv('ge-content-area');
|
||||
const titleContainer = contentArea.createDiv('ge-title-container');
|
||||
titleContainer.createEl('span', { cls: 'ge-title', text: `📁 ${folder.name}` });
|
||||
const customFolderIcon = this.plugin.settings.customFolderIcon;
|
||||
titleContainer.createEl('span', { cls: 'ge-title', text: `${customFolderIcon} ${folder.name}`.trim() });
|
||||
titleContainer.setAttribute('title', folder.name);
|
||||
|
||||
// 檢查同名筆記是否存在
|
||||
|
|
@ -919,16 +938,29 @@ export class GridView extends ItemView {
|
|||
});
|
||||
});
|
||||
}
|
||||
//加入"忽略此資料夾"選項
|
||||
menu.addItem((item) => {
|
||||
item
|
||||
.setTitle(t('ignore_folder'))
|
||||
.setIcon('x')
|
||||
.onClick(() => {
|
||||
this.plugin.settings.ignoredFolders.push(folder.path);
|
||||
this.plugin.saveSettings();
|
||||
});
|
||||
});
|
||||
if (!this.plugin.settings.ignoredFolders.includes(folder.path)) {
|
||||
//加入"忽略此資料夾"選項
|
||||
menu.addItem((item) => {
|
||||
item
|
||||
.setTitle(t('ignore_folder'))
|
||||
.setIcon('folder-x')
|
||||
.onClick(() => {
|
||||
this.plugin.settings.ignoredFolders.push(folder.path);
|
||||
this.plugin.saveSettings();
|
||||
});
|
||||
});
|
||||
} else {
|
||||
//加入"取消忽略此資料夾"選項
|
||||
menu.addItem((item) => {
|
||||
item
|
||||
.setTitle(t('unignore_folder'))
|
||||
.setIcon('folder-up')
|
||||
.onClick(() => {
|
||||
this.plugin.settings.ignoredFolders = this.plugin.settings.ignoredFolders.filter((path) => path !== folder.path);
|
||||
this.plugin.saveSettings();
|
||||
});
|
||||
});
|
||||
}
|
||||
// 重新命名資料夾
|
||||
menu.addItem((item) => {
|
||||
item
|
||||
|
|
@ -1122,59 +1154,67 @@ export class GridView extends ItemView {
|
|||
// Markdown 檔案顯示內容預覽
|
||||
const content = await this.app.vault.cachedRead(file);
|
||||
const frontMatterInfo = getFrontMatterInfo(content);
|
||||
|
||||
let metadata: FrontMatterCache | undefined = undefined;
|
||||
if (frontMatterInfo.exists) {
|
||||
metadata = this.app.metadataCache.getFileCache(file)?.frontmatter;
|
||||
}
|
||||
|
||||
let pEl: HTMLElement | null = null;
|
||||
if (!this.minMode) {
|
||||
|
||||
let contentWithoutFrontmatter = '';
|
||||
if (summaryLength < 500) {
|
||||
contentWithoutFrontmatter = content.substring(frontMatterInfo.contentStart).slice(0, 500);
|
||||
const summaryField = this.plugin.settings.noteSummaryField || 'summary';
|
||||
const summaryValue = metadata?.[summaryField];
|
||||
if (summaryValue) {
|
||||
pEl = contentArea.createEl('p', { text: summaryValue.trim() });
|
||||
} else {
|
||||
contentWithoutFrontmatter = content.substring(frontMatterInfo.contentStart).slice(0, summaryLength + summaryLength);
|
||||
let contentWithoutFrontmatter = '';
|
||||
if (summaryLength < 500) {
|
||||
contentWithoutFrontmatter = content.substring(frontMatterInfo.contentStart).slice(0, 500);
|
||||
} else {
|
||||
contentWithoutFrontmatter = content.substring(frontMatterInfo.contentStart).slice(0, summaryLength + summaryLength);
|
||||
}
|
||||
|
||||
let contentWithoutMediaLinks = '';
|
||||
|
||||
if (this.plugin.settings.showCodeBlocksInSummary) {
|
||||
contentWithoutMediaLinks = contentWithoutFrontmatter;
|
||||
} else {
|
||||
// 刪除 code block
|
||||
contentWithoutMediaLinks = contentWithoutFrontmatter
|
||||
.replace(/```[\s\S]*?```\n/g, '')
|
||||
.replace(/```[\s\S]*$/,'');
|
||||
}
|
||||
|
||||
// 刪除註解及連結
|
||||
contentWithoutMediaLinks = contentWithoutMediaLinks
|
||||
.replace(/<!--[\s\S]*?-->/g, '')
|
||||
.replace(/!?\[([^\]]*)\]\([^)]+\)|!?\[\[([^\]]+)\]\]/g, (match, p1, p2) => {
|
||||
const linkText = p1 || p2 || '';
|
||||
if (!linkText) return '';
|
||||
|
||||
// 獲取副檔名並檢查是否為圖片或影片
|
||||
const extension = linkText.split('.').pop()?.toLowerCase() || '';
|
||||
return (IMAGE_EXTENSIONS.has(extension) || VIDEO_EXTENSIONS.has(extension)) ? '' : linkText;
|
||||
});
|
||||
|
||||
//把開頭的標題整行刪除
|
||||
if (contentWithoutMediaLinks.startsWith('# ') || contentWithoutMediaLinks.startsWith('## ') || contentWithoutMediaLinks.startsWith('### ')) {
|
||||
contentWithoutMediaLinks = contentWithoutMediaLinks.split('\n').slice(1).join('\n');
|
||||
}
|
||||
|
||||
if (!this.plugin.settings.showCodeBlocksInSummary) {
|
||||
// 不刪除code block的情況下,包含這些特殊符號
|
||||
contentWithoutMediaLinks = contentWithoutMediaLinks.replace(/[>|\-#*]/g,'').trim();
|
||||
}
|
||||
|
||||
// 只取前 summaryLength 個字符作為預覽
|
||||
const preview = contentWithoutMediaLinks.slice(0, summaryLength) + (contentWithoutMediaLinks.length > summaryLength ? '...' : '');
|
||||
|
||||
// 創建預覽內容
|
||||
pEl = contentArea.createEl('p', { text: preview.trim() });
|
||||
}
|
||||
|
||||
let contentWithoutMediaLinks = '';
|
||||
|
||||
if (this.plugin.settings.showCodeBlocksInSummary) {
|
||||
contentWithoutMediaLinks = contentWithoutFrontmatter;
|
||||
} else {
|
||||
// 刪除 code block
|
||||
contentWithoutMediaLinks = contentWithoutFrontmatter
|
||||
.replace(/```[\s\S]*?```\n/g, '')
|
||||
.replace(/```[\s\S]*$/,'');
|
||||
}
|
||||
|
||||
// 刪除註解及連結
|
||||
contentWithoutMediaLinks = contentWithoutMediaLinks
|
||||
.replace(/<!--[\s\S]*?-->/g, '')
|
||||
.replace(/!?\[([^\]]*)\]\([^)]+\)|!?\[\[([^\]]+)\]\]/g, (match, p1, p2) => {
|
||||
const linkText = p1 || p2 || '';
|
||||
if (!linkText) return '';
|
||||
|
||||
// 獲取副檔名並檢查是否為圖片或影片
|
||||
const extension = linkText.split('.').pop()?.toLowerCase() || '';
|
||||
return (IMAGE_EXTENSIONS.has(extension) || VIDEO_EXTENSIONS.has(extension)) ? '' : linkText;
|
||||
});
|
||||
|
||||
//把開頭的標題整行刪除
|
||||
if (contentWithoutMediaLinks.startsWith('# ') || contentWithoutMediaLinks.startsWith('## ') || contentWithoutMediaLinks.startsWith('### ')) {
|
||||
contentWithoutMediaLinks = contentWithoutMediaLinks.split('\n').slice(1).join('\n');
|
||||
}
|
||||
|
||||
if (!this.plugin.settings.showCodeBlocksInSummary) {
|
||||
// 不刪除code block的情況下,包含這些特殊符號
|
||||
contentWithoutMediaLinks = contentWithoutMediaLinks.replace(/[>|\-#*]/g,'').trim();
|
||||
}
|
||||
|
||||
// 只取前 summaryLength 個字符作為預覽
|
||||
const preview = contentWithoutMediaLinks.slice(0, summaryLength) + (contentWithoutMediaLinks.length > summaryLength ? '...' : '');
|
||||
|
||||
// 創建預覽內容
|
||||
pEl = contentArea.createEl('p', { text: preview.trim() });
|
||||
}
|
||||
|
||||
if (frontMatterInfo.exists) {
|
||||
const metadata = this.app.metadataCache.getFileCache(file)?.frontmatter;
|
||||
const colorValue = metadata?.color;
|
||||
if (colorValue) {
|
||||
// 設置背景色、框線色和文字顏色
|
||||
|
|
@ -1187,18 +1227,15 @@ export class GridView extends ItemView {
|
|||
pEl.style.color = `rgba(var(--color-${colorValue}-rgb), 0.7)`;
|
||||
}
|
||||
}
|
||||
const hasTitleField = !!this.plugin.settings.noteTitleField;
|
||||
if (hasTitleField) {
|
||||
const titleField = this.plugin.settings.noteTitleField;
|
||||
const titleValue = metadata?.[titleField];
|
||||
if (titleValue) {
|
||||
// 將標題文字設為 frontmatter 的 title
|
||||
const titleEl = fileEl.querySelector('.ge-title');
|
||||
if (titleEl) {
|
||||
titleEl.textContent = titleValue;
|
||||
}
|
||||
const titleField = this.plugin.settings.noteTitleField || 'title';
|
||||
const titleValue = metadata?.[titleField];
|
||||
if (titleValue) {
|
||||
// 將標題文字設為 frontmatter 的 title
|
||||
const titleEl = fileEl.querySelector('.ge-title');
|
||||
if (titleEl) {
|
||||
titleEl.textContent = titleValue;
|
||||
}
|
||||
}
|
||||
}
|
||||
const displayValue = metadata?.display;
|
||||
if (displayValue === 'minimized') {
|
||||
// 移除已建立的預覽段落
|
||||
|
|
@ -2130,6 +2167,7 @@ export class GridView extends ItemView {
|
|||
searchMediaFiles: this.searchMediaFiles,
|
||||
randomNoteIncludeMedia: this.randomNoteIncludeMedia,
|
||||
minMode: this.minMode,
|
||||
showIgnoredFolders: this.showIgnoredFolders,
|
||||
}
|
||||
};
|
||||
}
|
||||
|
|
@ -2146,6 +2184,7 @@ export class GridView extends ItemView {
|
|||
this.searchMediaFiles = state.state.searchMediaFiles ?? false;
|
||||
this.randomNoteIncludeMedia = state.state.randomNoteIncludeMedia ?? false;
|
||||
this.minMode = state.state.minMode ?? false;
|
||||
this.showIgnoredFolders = state.state.showIgnoredFolders ?? false;
|
||||
this.render();
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -5,6 +5,7 @@ import { GridView } from './GridView';
|
|||
|
||||
export interface NoteSettings {
|
||||
title: string;
|
||||
summary: string;
|
||||
color: string;
|
||||
isPinned: boolean;
|
||||
isMinimized: boolean;
|
||||
|
|
@ -19,6 +20,7 @@ export class NoteSettingsModal extends Modal {
|
|||
files: TFile[];
|
||||
settings: NoteSettings = {
|
||||
title: '',
|
||||
summary: '',
|
||||
color: '',
|
||||
isPinned: false,
|
||||
isMinimized: false,
|
||||
|
|
@ -35,7 +37,7 @@ export class NoteSettingsModal extends Modal {
|
|||
contentEl.empty();
|
||||
|
||||
// 讀取現有設定
|
||||
await this.loadExistingSettings();
|
||||
await this.loadAttributes();
|
||||
|
||||
// 標題
|
||||
if (this.files.length > 1) {
|
||||
|
|
@ -55,6 +57,16 @@ export class NoteSettingsModal extends Modal {
|
|||
this.settings.title = value;
|
||||
});
|
||||
});
|
||||
// 自訂筆記摘要
|
||||
new Setting(contentEl)
|
||||
.setName(t('note_summary'))
|
||||
.setDesc(t('note_summary_desc'))
|
||||
.addText(text => {
|
||||
text.setValue(this.settings.summary);
|
||||
text.onChange(value => {
|
||||
this.settings.summary = value;
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
// 顏色選項
|
||||
|
|
@ -115,24 +127,28 @@ export class NoteSettingsModal extends Modal {
|
|||
.setButtonText(t('confirm'))
|
||||
.setCta() // 設置為主要按鈕樣式
|
||||
.onClick(() => {
|
||||
this.saveNoteColor();
|
||||
this.saveAttributes();
|
||||
this.close();
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
// 讀取現有筆記的設定
|
||||
async loadExistingSettings() {
|
||||
async loadAttributes() {
|
||||
try {
|
||||
|
||||
// 讀取自訂標題設定
|
||||
if (this.files.length === 1) {
|
||||
const fileCache = this.app.metadataCache.getFileCache(this.files[0]);
|
||||
if (fileCache && fileCache.frontmatter) {
|
||||
const titleField = this.plugin.settings.noteTitleField || 'title';
|
||||
if ('title' in fileCache.frontmatter) {
|
||||
this.settings.title = fileCache.frontmatter.title || '';
|
||||
this.settings.title = fileCache.frontmatter[titleField] || '';
|
||||
}
|
||||
}
|
||||
const summaryField = this.plugin.settings.noteSummaryField || 'summary';
|
||||
if ('summary' in fileCache.frontmatter) {
|
||||
this.settings.summary = fileCache.frontmatter[summaryField] || '';
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// 如果有多個檔案,只讀取第一個檔案的設定作為預設值
|
||||
|
|
@ -167,16 +183,23 @@ export class NoteSettingsModal extends Modal {
|
|||
}
|
||||
}
|
||||
|
||||
// 儲存筆記顏色設定
|
||||
async saveNoteColor() {
|
||||
// 儲存筆記屬性設定
|
||||
async saveAttributes() {
|
||||
try {
|
||||
if (this.files.length === 1 && this.files[0].extension === "md") {
|
||||
// 使用 fileManager.processFrontMatter 更新 frontmatter
|
||||
await this.app.fileManager.processFrontMatter(this.files[0], (frontmatter) => {
|
||||
const titleField = this.plugin.settings.noteTitleField || 'title';
|
||||
if (this.settings.title) {
|
||||
frontmatter['title'] = this.settings.title;
|
||||
frontmatter[titleField] = this.settings.title;
|
||||
} else {
|
||||
delete frontmatter['title'];
|
||||
delete frontmatter[titleField];
|
||||
}
|
||||
const summaryField = this.plugin.settings.noteSummaryField || 'summary';
|
||||
if (this.settings.summary) {
|
||||
frontmatter[summaryField] = this.settings.summary;
|
||||
} else {
|
||||
delete frontmatter[summaryField];
|
||||
}
|
||||
if (this.settings.color) {
|
||||
frontmatter['color'] = this.settings.color;
|
||||
|
|
|
|||
|
|
@ -143,6 +143,10 @@ export function sortFiles(files: TFile[], gridView: GridView): TFile[] {
|
|||
export function ignoredFiles(files: TFile[], gridView: GridView): TFile[] {
|
||||
const settings = gridView.plugin.settings;
|
||||
return files.filter(file => {
|
||||
|
||||
// 如果開啟顯示忽略資料夾模式,則顯示所有檔案
|
||||
if (gridView.showIgnoredFolders) return true;
|
||||
|
||||
// 檢查是否在忽略的資料夾中
|
||||
const isInIgnoredFolder = settings.ignoredFolders.some(folder =>
|
||||
file.path.startsWith(`${folder}/`)
|
||||
|
|
|
|||
|
|
@ -25,9 +25,11 @@ export interface GallerySettings {
|
|||
showAllFilesMode: boolean; // 是否顯示所有檔案模式
|
||||
showRandomNoteMode: boolean; // 是否顯示隨機筆記模式
|
||||
showRecentFilesMode: boolean; // 是否顯示最近筆記模式
|
||||
customFolderIcon: string; // 自訂資料夾圖示
|
||||
customDocumentExtensions: string; // 自訂文件副檔名(用逗號分隔)
|
||||
recentSources: string[]; // 最近的瀏覽記錄
|
||||
noteTitleField: string; // 筆記標題的欄位名稱
|
||||
noteSummaryField: string; // 筆記摘要的欄位名稱
|
||||
modifiedDateField: string; // 修改時間的欄位名稱
|
||||
createdDateField: string; // 建立時間的欄位名稱
|
||||
recentFilesCount: number; // 最近筆記模式顯示的筆數
|
||||
|
|
@ -63,9 +65,11 @@ export const DEFAULT_SETTINGS: GallerySettings = {
|
|||
showRecentFilesMode: true, // 預設顯示最近筆記模式
|
||||
recentFilesCount: 30, // 預設最近筆記模式顯示的筆數
|
||||
randomNoteCount: 10, // 預設隨機筆記模式顯示的筆數
|
||||
customFolderIcon: '📁', // 自訂資料夾圖示
|
||||
customDocumentExtensions: '', // 自訂文件副檔名(用逗號分隔)
|
||||
recentSources: [], // 預設最近的瀏覽記錄
|
||||
noteTitleField: 'title', // 筆記標題的欄位名稱
|
||||
noteSummaryField: 'summary', // 筆記摘要的欄位名稱
|
||||
modifiedDateField: '', // 修改時間的欄位名稱
|
||||
createdDateField: '', // 建立時間的欄位名稱
|
||||
showNoteTags: false, // 預設不顯示筆記標籤
|
||||
|
|
@ -302,6 +306,18 @@ export class GridExplorerSettingTab extends PluginSettingTab {
|
|||
await this.plugin.saveSettings(false);
|
||||
}));
|
||||
|
||||
// 筆記摘要欄位名稱設定
|
||||
new Setting(containerEl)
|
||||
.setName(t('note_summary_field'))
|
||||
.setDesc(t('note_summary_field_desc'))
|
||||
.addText(text => text
|
||||
.setPlaceholder('summary')
|
||||
.setValue(this.plugin.settings.noteSummaryField)
|
||||
.onChange(async (value) => {
|
||||
this.plugin.settings.noteSummaryField = value;
|
||||
await this.plugin.saveSettings(false);
|
||||
}));
|
||||
|
||||
// 修改時間欄位名稱設定
|
||||
new Setting(containerEl)
|
||||
.setName(t('modified_date_field'))
|
||||
|
|
@ -370,6 +386,19 @@ export class GridExplorerSettingTab extends PluginSettingTab {
|
|||
});
|
||||
});
|
||||
|
||||
// 自訂資料夾圖示
|
||||
new Setting(containerEl)
|
||||
.setName(t('custom_folder_icon'))
|
||||
.setDesc(t('custom_folder_icon_desc'))
|
||||
.addText(text => {
|
||||
text
|
||||
.setValue(this.plugin.settings.customFolderIcon)
|
||||
.onChange(async (value) => {
|
||||
this.plugin.settings.customFolderIcon = value;
|
||||
await this.plugin.saveSettings();
|
||||
});
|
||||
});
|
||||
|
||||
// 顯示"回上層資料夾"選項設定
|
||||
new Setting(containerEl)
|
||||
.setName(t('show_parent_folder_item'))
|
||||
|
|
|
|||
|
|
@ -86,6 +86,8 @@ export const TRANSLATIONS: Translations = {
|
|||
'default_sort_type_desc': '設定開啟網格視圖時的預設排序模式',
|
||||
'note_title_field': '筆記標題欄位名稱',
|
||||
'note_title_field_desc': '指定 frontmatter 中用於筆記標題的欄位名稱',
|
||||
'note_summary_field': '筆記摘要欄位名稱',
|
||||
'note_summary_field_desc': '指定 frontmatter 中用於筆記摘要的欄位名稱',
|
||||
'modified_date_field': '"修改時間"欄位名稱',
|
||||
'modified_date_field_desc': '指定 frontmatter 中用於筆記修改時間的欄位名稱',
|
||||
'created_date_field': '"建立時間"欄位名稱',
|
||||
|
|
@ -141,6 +143,9 @@ export const TRANSLATIONS: Translations = {
|
|||
'custom_document_extensions_desc': '額外的文件副檔名(用逗號分隔,不含點號)',
|
||||
'custom_document_extensions_placeholder': '例如:txt,doc,docx',
|
||||
|
||||
'custom_folder_icon': '自訂資料夾圖示',
|
||||
'custom_folder_icon_desc': '自訂資料夾圖示(使用Emoji)',
|
||||
|
||||
// 選擇資料夾對話框
|
||||
'select_folders': '選擇資料夾',
|
||||
'open_grid_view': '開啟網格視圖',
|
||||
|
|
@ -153,12 +158,15 @@ export const TRANSLATIONS: Translations = {
|
|||
'open_new_grid_view': '開啟新網格視圖',
|
||||
'min_mode': '最小化模式',
|
||||
'close_min_mode': '關閉最小化模式',
|
||||
'show_ignored_folders': '顯示忽略的資料夾',
|
||||
'hide_ignored_folders': '隱藏忽略的資料夾',
|
||||
'delete_note': '刪除檔案',
|
||||
'open_folder_note': '開啟資料夾筆記',
|
||||
'create_folder_note': '建立資料夾筆記',
|
||||
'delete_folder_note': '刪除資料夾筆記',
|
||||
'edit_folder_note_settings': '編輯資料夾筆記設定',
|
||||
'ignore_folder': '忽略此資料夾',
|
||||
'unignore_folder': '取消忽略此資料夾',
|
||||
'searching': '搜尋中...',
|
||||
'no_files': '沒有找到任何檔案',
|
||||
'filter_folders': '篩選資料夾...',
|
||||
|
|
@ -185,6 +193,8 @@ export const TRANSLATIONS: Translations = {
|
|||
'note_attribute_settings': '筆記屬性設定',
|
||||
'note_title': '筆記標題',
|
||||
'note_title_desc': '設定此筆記的顯示標題',
|
||||
'note_summary': '筆記摘要',
|
||||
'note_summary_desc': '設定此筆記的摘要',
|
||||
'note_color': '筆記顏色',
|
||||
'note_color_desc': '設定此筆記的顯示顏色',
|
||||
'set_note_attribute': '設定筆記屬性',
|
||||
|
|
@ -270,6 +280,8 @@ export const TRANSLATIONS: Translations = {
|
|||
'default_sort_type_desc': 'Set the default sorting method when opening Grid View',
|
||||
'note_title_field': 'Note title field name',
|
||||
'note_title_field_desc': 'Set the field name in frontmatter to use for the note title',
|
||||
'note_summary_field': 'Note summary field name',
|
||||
'note_summary_field_desc': 'Set the field name in frontmatter to use for the note summary',
|
||||
'modified_date_field': '"Modified date" field name',
|
||||
'modified_date_field_desc': 'Set the field name in frontmatter to use for the modified date',
|
||||
'created_date_field': '"Created date" field name',
|
||||
|
|
@ -325,6 +337,9 @@ export const TRANSLATIONS: Translations = {
|
|||
'custom_document_extensions_desc': 'Additional document extensions (comma-separated, without dots)',
|
||||
'custom_document_extensions_placeholder': 'e.g., txt,doc,docx',
|
||||
|
||||
'custom_folder_icon': 'Custom Folder Icon',
|
||||
'custom_folder_icon_desc': 'Custom folder icon (use emoji)',
|
||||
|
||||
// Select Folder Dialog
|
||||
'select_folders': 'Select folder',
|
||||
'open_grid_view': 'Open grid view',
|
||||
|
|
@ -337,12 +352,15 @@ export const TRANSLATIONS: Translations = {
|
|||
'open_new_grid_view': 'Open new grid view',
|
||||
'min_mode': 'Minimize mode',
|
||||
'close_min_mode': 'Close minimize mode',
|
||||
'show_ignored_folders': 'Show ignored folders',
|
||||
'hide_ignored_folders': 'Hide ignored folders',
|
||||
'delete_note': 'Delete file',
|
||||
'open_folder_note': 'Open folder note',
|
||||
'create_folder_note': 'Create folder note',
|
||||
'delete_folder_note': 'Delete folder note',
|
||||
'edit_folder_note_settings': 'Edit folder note settings',
|
||||
'ignore_folder': 'Ignore this folder',
|
||||
'unignore_folder': 'Unignore this folder',
|
||||
'searching': 'Searching...',
|
||||
'no_files': 'No files found',
|
||||
'filter_folders': 'Filter folders...',
|
||||
|
|
@ -369,6 +387,8 @@ export const TRANSLATIONS: Translations = {
|
|||
'note_attribute_settings': 'Note attribute settings',
|
||||
'note_title': 'Note title',
|
||||
'note_title_desc': 'Set the display title for this note',
|
||||
'note_summary': 'Note summary',
|
||||
'note_summary_desc': 'Set the display summary for this note',
|
||||
'note_color': 'Note color',
|
||||
'note_color_desc': 'Set the display color for this note',
|
||||
'set_note_attribute': 'Set note attribute',
|
||||
|
|
@ -454,6 +474,8 @@ export const TRANSLATIONS: Translations = {
|
|||
'default_sort_type_desc': '设置打开网格视图时的默认排序模式',
|
||||
'note_title_field': '笔记标题字段名称',
|
||||
'note_title_field_desc': '设置 frontmatter 中用于笔记标题的字段名称',
|
||||
'note_summary_field': '笔记摘要字段名称',
|
||||
'note_summary_field_desc': '设置 frontmatter 中用于笔记摘要的字段名称',
|
||||
'modified_date_field': '"修改时间"字段名称',
|
||||
'modified_date_field_desc': '设置 frontmatter 中用于笔记修改时间的字段名称',
|
||||
'created_date_field': '"创建时间"字段名称',
|
||||
|
|
@ -509,6 +531,9 @@ export const TRANSLATIONS: Translations = {
|
|||
'custom_document_extensions_desc': '额外的文件扩展名(用逗号分隔,不含点号)',
|
||||
'custom_document_extensions_placeholder': '例如:txt,doc,docx',
|
||||
|
||||
'custom_folder_icon': '自定义文件夹图标',
|
||||
'custom_folder_icon_desc': '自定义文件夹图标(使用Emoji)',
|
||||
|
||||
// 选择文件夹对话框
|
||||
'select_folders': '选择文件夹',
|
||||
'open_grid_view': '打开网格视图',
|
||||
|
|
@ -521,12 +546,15 @@ export const TRANSLATIONS: Translations = {
|
|||
'open_new_grid_view': '打开新网格视图',
|
||||
'min_mode': '最小化模式',
|
||||
'close_min_mode': '关闭最小化模式',
|
||||
'show_ignored_folders': '显示忽略的文件夹',
|
||||
'hide_ignored_folders': '隐藏忽略的文件夹',
|
||||
'delete_note': '删除文件',
|
||||
'open_folder_note': '打开文件夹笔记',
|
||||
'create_folder_note': '创建文件夹笔记',
|
||||
'delete_folder_note': '删除文件夹笔记',
|
||||
'edit_folder_note_settings': '编辑文件夹笔记设置',
|
||||
'ignore_folder': '忽略此文件夹',
|
||||
'unignore_folder': '取消忽略此文件夹',
|
||||
'searching': '搜索中...',
|
||||
'no_files': '没有找到任何文件',
|
||||
'filter_folders': '筛选文件夹...',
|
||||
|
|
@ -553,6 +581,8 @@ export const TRANSLATIONS: Translations = {
|
|||
'note_attribute_settings': '笔记属性设置',
|
||||
'note_title': '笔记标题',
|
||||
'note_title_desc': '设置此笔记的显示标题',
|
||||
'note_summary': '笔记摘要',
|
||||
'note_summary_desc': '设置此笔记的显示摘要',
|
||||
'note_color': '笔记颜色',
|
||||
'note_color_desc': '设置此笔记的显示颜色',
|
||||
'set_note_attribute': '设置笔记属性',
|
||||
|
|
@ -638,6 +668,8 @@ export const TRANSLATIONS: Translations = {
|
|||
'default_sort_type_desc': 'グリッドビューを開いたときのデフォルトの並び替え方法を設定',
|
||||
'note_title_field': 'ノートタイトルフィールド名',
|
||||
'note_title_field_desc': 'frontmatterでノートタイトルとして使用するフィールド名を設定',
|
||||
'note_summary_field': 'ノート要約フィールド名',
|
||||
'note_summary_field_desc': 'frontmatterでノート要約として使用するフィールド名を設定',
|
||||
'modified_date_field': '"更新日"フィールド名',
|
||||
'modified_date_field_desc': 'frontmatterで更新日として使用するフィールド名を設定',
|
||||
'created_date_field': '"作成日"フィールド名',
|
||||
|
|
@ -693,6 +725,9 @@ export const TRANSLATIONS: Translations = {
|
|||
'custom_document_extensions_desc': '追加の文書拡張子(カンマ区切り、ドット無し)',
|
||||
'custom_document_extensions_placeholder': '例:txt,doc,docx',
|
||||
|
||||
'custom_folder_icon': 'カスタムフォルダーアイコン',
|
||||
'custom_folder_icon_desc': 'カスタムフォルダーアイコン(Emojiを使用)',
|
||||
|
||||
// フォルダ選択ダイアログ
|
||||
'select_folders': 'フォルダを選択',
|
||||
'open_grid_view': 'グリッドビューを開く',
|
||||
|
|
@ -705,12 +740,15 @@ export const TRANSLATIONS: Translations = {
|
|||
'open_new_grid_view': '新しいグリッドビューを開く',
|
||||
'min_mode': '最小化モード',
|
||||
'close_min_mode': '最小化モードを閉じる',
|
||||
'show_ignored_folders': '無視するフォルダーを表示',
|
||||
'hide_ignored_folders': '無視するフォルダーを非表示',
|
||||
'delete_note': 'ファイルを削除',
|
||||
'open_folder_note': 'フォルダーノートを開く',
|
||||
'create_folder_note': 'フォルダーノートを作成',
|
||||
'delete_folder_note': 'フォルダーノートを削除',
|
||||
'edit_folder_note_settings': 'フォルダーノート設定を編集',
|
||||
'ignore_folder': 'このフォルダーを無視',
|
||||
'unignore_folder': 'このフォルダーを無視解除',
|
||||
'searching': '検索中...',
|
||||
'no_files': 'ファイルが見つかりません',
|
||||
'filter_folders': 'フォルダをフィルタリング...',
|
||||
|
|
@ -737,6 +775,8 @@ export const TRANSLATIONS: Translations = {
|
|||
'note_attribute_settings': 'ノート属性設定',
|
||||
'note_title': 'ノートタイトル',
|
||||
'note_title_desc': 'このノートの表示タイトルを設定',
|
||||
'note_summary': 'ノート要約',
|
||||
'note_summary_desc': 'このノートの表示要約を設定',
|
||||
'note_color': 'ノート色',
|
||||
'note_color_desc': 'このノートの表示色を設定',
|
||||
'set_note_attribute': 'ノート属性設定',
|
||||
|
|
@ -822,6 +862,8 @@ export const TRANSLATIONS: Translations = {
|
|||
'default_sort_type_desc': 'Установите метод сортировки по умолчанию при открытии сеточного вида',
|
||||
'note_title_field': 'Имя поля "Название заметки"',
|
||||
'note_title_field_desc': 'Укажите имя поля в метаданных для использования в качестве названия заметки',
|
||||
'note_summary_field': 'Имя поля "Краткое описание"',
|
||||
'note_summary_field_desc': 'Укажите имя поля в метаданных для использования в качестве краткого описания',
|
||||
'modified_date_field': 'Имя поля "Дата изменения"',
|
||||
'modified_date_field_desc': 'Укажите имя поля в метаданных для использования в качестве даты изменения',
|
||||
'created_date_field': 'Имя поля "Дата создания"',
|
||||
|
|
@ -877,6 +919,9 @@ export const TRANSLATIONS: Translations = {
|
|||
'custom_document_extensions_desc': 'Дополнительные расширения документов (через запятую, без точек)',
|
||||
'custom_document_extensions_placeholder': 'например, txt,doc,docx',
|
||||
|
||||
'custom_folder_icon': 'Пользовательский иконка папки',
|
||||
'custom_folder_icon_desc': 'Пользовательская иконка папки (используйте Emoji)',
|
||||
|
||||
// Select Folder Dialog
|
||||
'select_folders': 'Выбрать папку',
|
||||
'open_grid_view': 'Открыть сеточный вид',
|
||||
|
|
@ -889,12 +934,15 @@ export const TRANSLATIONS: Translations = {
|
|||
'open_new_grid_view': 'Открыть новый сеточный вид',
|
||||
'min_mode': 'Минимизировать вид',
|
||||
'close_min_mode': 'Закрыть минимизированный вид',
|
||||
'show_ignored_folders': 'Показать игнорируемые папки',
|
||||
'hide_ignored_folders': 'Скрыть игнорируемые папки',
|
||||
'delete_note': 'Удалить файл',
|
||||
'open_folder_note': 'Открыть заметку папки',
|
||||
'create_folder_note': 'Создать заметку папки',
|
||||
'delete_folder_note': 'Удалить заметку папки',
|
||||
'edit_folder_note_settings': 'Редактировать настройки заметки папки',
|
||||
'ignore_folder': 'Игнорировать эту папку',
|
||||
'unignore_folder': 'Отменить игнорирование этой папки',
|
||||
'searching': 'Поиск...',
|
||||
'no_files': 'Файлы не найдены',
|
||||
'filter_folders': 'Фильтровать папки...',
|
||||
|
|
@ -921,6 +969,8 @@ export const TRANSLATIONS: Translations = {
|
|||
'note_attribute_settings': 'Настройки атрибутов заметки',
|
||||
'note_title': 'Название заметки',
|
||||
'note_title_desc': 'Установите отображаемое название для этой заметки',
|
||||
'note_summary': 'Краткий описатель',
|
||||
'note_summary_desc': 'Установите отображаемое краткий описатель для этой заметки',
|
||||
'note_color': 'Цвет заметки',
|
||||
'note_color_desc': 'Установите цвет отображения для этой заметки',
|
||||
'set_note_attribute': 'Установить атрибуты заметки',
|
||||
|
|
@ -1006,6 +1056,8 @@ export const TRANSLATIONS: Translations = {
|
|||
'default_sort_type_desc': 'Встановіть метод сортування за замовчуванням при відкритті сіткового вигляду',
|
||||
'note_title_field': 'Назва поля "Назва нотатки"',
|
||||
'note_title_field_desc': 'Вкажіть назву поля в метаданих для використання як назви нотатки',
|
||||
'note_summary_field': 'Назва поля "Краткий опис"',
|
||||
'note_summary_field_desc': 'Вкажіть назву поля в метаданих для використання як краткого опису',
|
||||
'modified_date_field': 'Назва поля "Дата зміни"',
|
||||
'modified_date_field_desc': 'Вкажіть назву поля в метаданих для використання як дати зміни',
|
||||
'created_date_field': 'Назва поля "Дата створення"',
|
||||
|
|
@ -1061,6 +1113,9 @@ export const TRANSLATIONS: Translations = {
|
|||
'custom_document_extensions_desc': 'Додаткові розширення документів (через кому, без крапок)',
|
||||
'custom_document_extensions_placeholder': 'наприклад, txt,doc,docx',
|
||||
|
||||
'custom_folder_icon': 'Користувацька іконка папки',
|
||||
'custom_folder_icon_desc': 'Користувацька іконка папки (використовуйте Emoji)',
|
||||
|
||||
// Select Folder Dialog
|
||||
'select_folders': 'Вибрати папку',
|
||||
'open_grid_view': 'Відкрити сітковий вигляд',
|
||||
|
|
@ -1073,12 +1128,15 @@ export const TRANSLATIONS: Translations = {
|
|||
'open_new_grid_view': 'Відкрити новий сітковий вигляд',
|
||||
'min_mode': 'Мінімізувати вигляд',
|
||||
'close_min_mode': 'Закрити мінімізоване вигляд',
|
||||
'show_ignored_folders': 'Показати ігноровані папки',
|
||||
'hide_ignored_folders': 'Сховати ігноровані папки',
|
||||
'delete_note': 'Видалити файл',
|
||||
'open_folder_note': 'Відкрити нотатку папки',
|
||||
'create_folder_note': 'Створити нотатку папки',
|
||||
'delete_folder_note': 'Видалити нотатку папки',
|
||||
'edit_folder_note_settings': 'Редагувати налаштування нотатки папки',
|
||||
'ignore_folder': 'Ігнорувати цю папку',
|
||||
'unignore_folder': 'Відмінити ігнорування цієї папки',
|
||||
'searching': 'Пошук...',
|
||||
'no_files': 'Файли не знайдено',
|
||||
'filter_folders': 'Фільтрувати папки...',
|
||||
|
|
@ -1105,6 +1163,8 @@ export const TRANSLATIONS: Translations = {
|
|||
'note_attribute_settings': 'Налаштування атрибутів нотатки',
|
||||
'note_title': 'Назва нотатки',
|
||||
'note_title_desc': 'Встановіть назву відображення для цієї нотатки',
|
||||
'note_summary': 'Краткий опис',
|
||||
'note_summary_desc': 'Встановіть краткий опис для цієї нотатки',
|
||||
'note_color': 'Колір нотатки',
|
||||
'note_color_desc': 'Встановіть колір відображення для цієї нотатки',
|
||||
'set_note_attribute': 'Встановити атрибути нотатки',
|
||||
|
|
|
|||
|
|
@ -1,3 +1,3 @@
|
|||
{
|
||||
"2.1.1": "1.1.0"
|
||||
"2.2.0": "1.1.0"
|
||||
}
|
||||
Loading…
Reference in a new issue