diff --git a/main.ts b/main.ts index df5cbf1..de60e6a 100644 --- a/main.ts +++ b/main.ts @@ -13,6 +13,7 @@ export interface AgileTaskNotesSettings { teamLeaderMode: boolean; azureDevopsSettings: AzureDevopsSettings; jiraSettings: JiraSettings; + TaskTitleSeparator: string; } const DEFAULT_SETTINGS: AgileTaskNotesSettings = { @@ -26,6 +27,7 @@ const DEFAULT_SETTINGS: AgileTaskNotesSettings = { teamLeaderMode: false, azureDevopsSettings: AZURE_DEVOPS_DEFAULT_SETTINGS, jiraSettings: JIRA_DEFAULT_SETTINGS, + TaskTitleSeparator: '-', }; export default class AgileTaskNotesPlugin extends Plugin { @@ -156,7 +158,7 @@ export class AgileTaskNotesPluginSettingTab extends PluginSettingTab { new Setting(containerEl) .setName('Note Name') .setDesc( - 'Set the format of the file name for each task note. Available variables: {{TASK_ID}}, {{TASK_TYPE}}, {{TASK_STATE}}, {{TASK_ASSIGNEDTO}}' + 'Set the format of the file name for each task note. Available variables: {{TASK_ID}}, {{TASK_TYPE}}, {{TASK_STATE}}, {{TASK_ASSIGNEDTO}}, {{TASK_TITLE}}, {{TASK_TITLEPART_0}}, {{TASK_TITLEPART_1}}, {{TASK_TITLEPART_2}}\n Note: Titleparts that are empty will default to the whole title' ) .addText((text) => text @@ -168,6 +170,21 @@ export class AgileTaskNotesPluginSettingTab extends PluginSettingTab { }) ); + new Setting(containerEl) + .setName('TaskTitle Separator') + .setDesc( + 'Seperator that seperates the title parts in {{TASK_TITLEPART_0}}, {{TASK_TITLEPART_1}}, {{TASK_TITLEPART_2}}/n' + ) + .addText((text) => + text + .setPlaceholder('-') + .setValue(plugin.settings.TaskTitleSeparator) + .onChange(async (value) => { + plugin.settings.TaskTitleSeparator = value; + await plugin.saveSettings(); + }) + ); + new Setting(containerEl) .setName('Update interval') .setDesc( diff --git a/src/VaultHelper.ts b/src/VaultHelper.ts index 6117484..b1f8ad5 100644 --- a/src/VaultHelper.ts +++ b/src/VaultHelper.ts @@ -1,5 +1,6 @@ import { App, Notice, TFile } from 'obsidian'; import { Task } from './Task'; +import { AgileTaskNotesSettings } from 'main'; export class VaultHelper { private static BOARD_TEMPLATE_START: string = '---\n\nkanban-plugin: basic\n\n---\n\n'; @@ -128,17 +129,31 @@ export class VaultHelper { } private static async createTaskNote( + settings: AgileTaskNotesSettings, path: string, task: Task, template: string, notename: string, app: App ): Promise { + + let taskTitleArray = task.title.split(settings.TaskTitleSeparator); + let taskTitlePart0 = taskTitleArray[0] ?? task.title; + let taskTitlePart1 = taskTitleArray[1] ?? task.title; + let taskTitlePart2 = taskTitleArray[2] ?? task.title; + let filename = notename .replace(/{{TASK_ID}}/g, task.id) .replace(/{{TASK_STATE}}/g, task.state) .replace(/{{TASK_TYPE}}/g, task.type.replace(/ /g, '')) - .replace(/{{TASK_ASSIGNEDTO}}/g, task.assignedTo); + .replace(/{{TASK_ASSIGNEDTO}}/g, task.assignedTo) + .replace(/{{TASK_TITLE}}/g, task.title) + .replace(/{{TASK_TITLEPART_0}}/g, taskTitlePart0) + .replace(/{{TASK_TITLEPART_1}}/g, taskTitlePart1) + .replace(/{{TASK_TITLEPART_2}}/g, taskTitlePart2); + + //remove illegal filename characters from filename + filename = filename.replace(/[<>:"/\\|?*]/g, ""); const filepath = path + `/${filename}.md`;