mirror of
https://github.com/shanshuimei/obsidian-generate-timeline.git
synced 2026-07-22 05:37:40 +00:00
feat(timeline): Improve file link functionality
- Enhance the timeline generation from file links to automatically use the currently active file
This commit is contained in:
parent
274f95dbce
commit
843b14f48b
7 changed files with 76 additions and 51 deletions
|
|
@ -1,7 +1,7 @@
|
|||
{
|
||||
"id": "generate-timeline",
|
||||
"name": "Generate Timeline",
|
||||
"version": "1.2.5",
|
||||
"version": "1.2.6",
|
||||
"minAppVersion": "0.15.0",
|
||||
"description": "Generate timelines from tag folder file or metadata automatically by any time properties.",
|
||||
"author": "Shanshuimei",
|
||||
|
|
|
|||
2
package-lock.json
generated
2
package-lock.json
generated
|
|
@ -1,6 +1,6 @@
|
|||
{
|
||||
"name": "obsidian-timeline-plugin",
|
||||
"version": "1.2.4",
|
||||
"version": "1.2.6",
|
||||
"lockfileVersion": 3,
|
||||
"requires": true,
|
||||
"packages": {
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
{
|
||||
"name": "generate-timeline",
|
||||
"version": "1.2.5",
|
||||
"version": "1.2.6",
|
||||
"description": "Generate timelines from tag, folder, file or metadata automatically by any time properties.",
|
||||
"main": "main.js",
|
||||
"type": "module",
|
||||
|
|
|
|||
|
|
@ -8,13 +8,20 @@ export class FileSuggestModal extends FuzzySuggestModal<TFile> {
|
|||
this.setPlaceholder(this.settings.language === 'zh-CN' ? "选择一个Markdown文件" : "Select a Markdown file");
|
||||
}
|
||||
|
||||
getItems(): TFile[] {
|
||||
// 过滤掉timelines文件夹中的Markdown文件
|
||||
return this.app.vault.getMarkdownFiles().filter(file => {
|
||||
return !file.path.startsWith('timelines/') && file.path !== 'timelines';
|
||||
async openAndGetValue(): Promise<TFile | null> {
|
||||
return new Promise<TFile | null>((resolve) => {
|
||||
this.resolve = resolve;
|
||||
this.open();
|
||||
});
|
||||
}
|
||||
|
||||
getItems(): TFile[] {
|
||||
// 返回所有Markdown文件,但过滤掉timelines文件夹中的文件
|
||||
return this.app.vault.getMarkdownFiles().filter(file =>
|
||||
!file.path.startsWith('timelines/') && file.path !== 'timelines'
|
||||
);
|
||||
}
|
||||
|
||||
getItemText(file: TFile): string {
|
||||
return file.path;
|
||||
}
|
||||
|
|
@ -23,11 +30,4 @@ export class FileSuggestModal extends FuzzySuggestModal<TFile> {
|
|||
this.resolve(file);
|
||||
this.close();
|
||||
}
|
||||
|
||||
async openAndGetValue(): Promise<TFile | null> {
|
||||
return new Promise<TFile | null>((resolve) => {
|
||||
this.resolve = resolve;
|
||||
this.open();
|
||||
});
|
||||
}
|
||||
}
|
||||
|
|
@ -123,8 +123,8 @@ export const zhCN: I18nStrings = {
|
|||
generateFileFromFolder: '从文件夹生成时间轴文件',
|
||||
generateFromTag: '从标签生成时间轴视图',
|
||||
generateFileFromTag: '从标签生成时间轴文件',
|
||||
generateFromFileLinks: '从文件链接生成时间轴视图',
|
||||
generateFileFromFileLinks: '从文件链接生成时间轴文件',
|
||||
generateFromFileLinks: '从当前文件链接生成时间轴视图',
|
||||
generateFileFromFileLinks: '从当前文件链接生成时间轴文件',
|
||||
generateFromMetadata: '从元数据生成时间轴视图',
|
||||
generateFileFromMetadata: '从元数据生成时间轴文件'
|
||||
},
|
||||
|
|
@ -199,8 +199,8 @@ export const enUS: I18nStrings = {
|
|||
generateFileFromFolder: 'Generate Timeline File from any Folder',
|
||||
generateFromTag: 'Generate Timeline View from any Tag',
|
||||
generateFileFromTag: 'Generate Timeline File from any Tag',
|
||||
generateFromFileLinks: 'Generate Timeline View from File Links',
|
||||
generateFileFromFileLinks: 'Generate Timeline File from File Links',
|
||||
generateFromFileLinks: 'Generate Timeline View from Current File Links',
|
||||
generateFileFromFileLinks: 'Generate Timeline File from Current File Links',
|
||||
generateFromMetadata: 'Generate Timeline View from any Metadata',
|
||||
generateFileFromMetadata: 'Generate Timeline File from any Metadata'
|
||||
},
|
||||
|
|
|
|||
88
src/main.ts
88
src/main.ts
|
|
@ -180,20 +180,32 @@ export default class TimelinePlugin extends Plugin {
|
|||
name: this.i18n.commands.generateFromFileLinks,
|
||||
callback: async () => {
|
||||
try {
|
||||
const file = await this.selectFile();
|
||||
if (file) {
|
||||
await this.activateView(this.settings.defaultPosition);
|
||||
const view = this.getTimelineView();
|
||||
if (view) {
|
||||
const timeline = new Timeline(this.app, this.settings);
|
||||
const items = await timeline.generateFromFileLinks(file);
|
||||
view.items = items;
|
||||
view.currentTitle = `🔗 ${file.basename} `;
|
||||
await view.render();
|
||||
}
|
||||
// 获取当前活动文件
|
||||
const file = this.app.workspace.getActiveFile();
|
||||
if (!file || !(file instanceof TFile) || file.extension !== 'md') {
|
||||
new Notice(this.i18n.errors.generateFileFailed);
|
||||
return;
|
||||
}
|
||||
|
||||
// 检查文件是否包含链接
|
||||
const cache = this.app.metadataCache.getFileCache(file);
|
||||
if (!cache || !cache.links || cache.links.length === 0) {
|
||||
new Notice(this.i18n.errors.noFileLinks.replace('{filename}', file.basename));
|
||||
return;
|
||||
}
|
||||
|
||||
await this.activateView(this.settings.defaultPosition);
|
||||
const view = this.getTimelineView();
|
||||
if (view) {
|
||||
const timeline = new Timeline(this.app, this.settings);
|
||||
const items = await timeline.generateFromFileLinks(file);
|
||||
view.items = items;
|
||||
view.currentTitle = `🔗 ${file.basename} `;
|
||||
await view.render();
|
||||
}
|
||||
} catch (error) {
|
||||
console.error('从文件链接生成时间轴视图时出错:', error);
|
||||
new Notice(this.i18n.errors.generateFileFailed);
|
||||
}
|
||||
}
|
||||
});
|
||||
|
|
@ -204,30 +216,42 @@ export default class TimelinePlugin extends Plugin {
|
|||
name: this.i18n.commands.generateFileFromFileLinks,
|
||||
callback: async () => {
|
||||
try {
|
||||
const file = await this.selectFile();
|
||||
if (file) {
|
||||
const timeline = new Timeline(this.app, this.settings);
|
||||
const items = await timeline.generateFromFileLinks(file);
|
||||
const content = await timeline.generateTimelineMarkdown(
|
||||
items,
|
||||
`Timeline - Links in ${file.basename}`,
|
||||
{ type: 'file', value: file.path }
|
||||
);
|
||||
|
||||
const { folderPath } = await this.createNestedFolders('linked-files');
|
||||
const finalFileName = this.generateFileName(file.basename);
|
||||
const filePath = `${folderPath}/${finalFileName}.md`;
|
||||
|
||||
const existingFile = this.app.vault.getAbstractFileByPath(filePath);
|
||||
if (existingFile) {
|
||||
await this.app.vault.delete(existingFile);
|
||||
}
|
||||
|
||||
const newFile = await this.app.vault.create(filePath, content);
|
||||
await this.app.workspace.getLeaf().openFile(newFile);
|
||||
// 获取当前活动文件
|
||||
const file = this.app.workspace.getActiveFile();
|
||||
if (!file || !(file instanceof TFile) || file.extension !== 'md') {
|
||||
new Notice(this.i18n.errors.generateFileFailed);
|
||||
return;
|
||||
}
|
||||
|
||||
// 检查文件是否包含链接
|
||||
const cache = this.app.metadataCache.getFileCache(file);
|
||||
if (!cache || !cache.links || cache.links.length === 0) {
|
||||
new Notice(this.i18n.errors.noFileLinks.replace('{filename}', file.basename));
|
||||
return;
|
||||
}
|
||||
|
||||
const timeline = new Timeline(this.app, this.settings);
|
||||
const items = await timeline.generateFromFileLinks(file);
|
||||
const content = await timeline.generateTimelineMarkdown(
|
||||
items,
|
||||
`Timeline - Links in ${file.basename}`,
|
||||
{ type: 'file', value: file.path }
|
||||
);
|
||||
|
||||
const { folderPath } = await this.createNestedFolders('linked-files');
|
||||
const finalFileName = this.generateFileName(file.basename);
|
||||
const filePath = `${folderPath}/${finalFileName}.md`;
|
||||
|
||||
const existingFile = this.app.vault.getAbstractFileByPath(filePath);
|
||||
if (existingFile) {
|
||||
await this.app.vault.delete(existingFile);
|
||||
}
|
||||
|
||||
const newFile = await this.app.vault.create(filePath, content);
|
||||
await this.app.workspace.getLeaf().openFile(newFile);
|
||||
} catch (error) {
|
||||
console.error('从文件链接生成时间轴文件时出错:', error);
|
||||
new Notice(this.i18n.errors.generateFileFailed);
|
||||
}
|
||||
}
|
||||
});
|
||||
|
|
|
|||
|
|
@ -1,4 +1,5 @@
|
|||
{
|
||||
"1.2.4": "0.15.0",
|
||||
"1.2.5": "0.15.0"
|
||||
"1.2.5": "0.15.0",
|
||||
"1.2.6": "0.15.0"
|
||||
}
|
||||
Loading…
Reference in a new issue