diff --git a/main.ts b/main.ts index b5d8a4d..25d608c 100644 --- a/main.ts +++ b/main.ts @@ -1,4 +1,4 @@ -import {App, Editor, MarkdownView, Modal, Notice, Plugin, PluginSettingTab, Setting} from 'obsidian'; +import {App, Editor, MarkdownView, Modal, Notice, Plugin} from 'obsidian'; import {PrioPluginSettings} from "./utils/Settings"; import {SettingTab} from "./utils/SettingTab"; import {decreasePrio, increasePrio, removePrio, setPrio} from "./utils/Priority"; @@ -6,28 +6,28 @@ import {decreasePrio, increasePrio, removePrio, setPrio} from "./utils/Priority" const DEFAULT_SETTINGS: PrioPluginSettings = { selectedPreset: 'default', - levels: ['1', '2', '3', '4', '5', '6'], - levelAliases: { - '1': 'Major', - '2': 'Minor', - '3': 'Trivial', - '4': 'Cosmetic', - '5': 'Enhancement', - '6': 'Bug' - }, + levels: 6, + levelAliases: [ + 'Major', + 'Minor', + 'Trivial', + 'Cosmetic', + 'Enhancement', + 'Bug' + ], presets: [{ id: 'default', name: 'Default', settings: { - levels: ['1', '2', '3', '4', '5', '6'], - levelAliases: { - '1': 'Major', - '2': 'Minor', - '3': 'Trivial', - '4': 'Cosmetic', - '5': 'Enhancement', - '6': 'Bug' - }, + levels: 6, + levelAliases: [ + 'Major', + 'Minor', + 'Trivial', + 'Cosmetic', + 'Enhancement', + 'Bug' + ], } }] } diff --git a/utils/Priority.ts b/utils/Priority.ts index c26d016..1751378 100644 --- a/utils/Priority.ts +++ b/utils/Priority.ts @@ -7,9 +7,8 @@ export const setPrio = (editor: Editor, view: MarkdownView, settings: PrioPlugin } const cursor = editor.getCursor(); const line = editor.getLine(cursor.line); - const levels = settings.levels; const levelAliases = settings.levelAliases; - const level = levels[Math.round((levels.length - 1) / 2)]; + const level = Math.round(settings.levels/2); const levelAlias = levelAliases[level]; const newLine = `${line} #${levelAlias}`; editor.replaceRange(newLine, {line: cursor.line, ch: 0}, {line: cursor.line, ch: line.length}); @@ -22,7 +21,7 @@ export const increasePrio = (editor: Editor, view: MarkdownView, settings: PrioP setPrio(editor, view, settings); return; } - const currentLevelIndex = getLevelIndex(editor, view, settings, currentPrio); + const currentLevelIndex = settings.levelAliases.indexOf(currentPrio); replacePrio(editor, view, settings, currentLevelIndex - 1 < 0 ? 0 : currentLevelIndex - 1); } @@ -33,9 +32,8 @@ export const decreasePrio = (editor: Editor, view: MarkdownView, settings: PrioP setPrio(editor, view, settings); return; } - const currentLevelIndex = getLevelIndex(editor, view, settings, currentPrio); - const levels = settings.levels; - replacePrio(editor, view, settings, currentLevelIndex + 1 > levels.length - 1 ? levels.length - 1 : currentLevelIndex + 1); + const currentLevelIndex = settings.levelAliases.indexOf(currentPrio); + replacePrio(editor, view, settings, currentLevelIndex + 1 > settings.levels - 1 ? settings.levels - 1 : currentLevelIndex + 1); } export const removePrio = (editor: Editor, view: MarkdownView, settings: PrioPluginSettings) => { @@ -46,19 +44,10 @@ export const removePrio = (editor: Editor, view: MarkdownView, settings: PrioPlu view.editor.focus(); } -export const getLevelIndex = (editor: Editor, view: MarkdownView, settings: PrioPluginSettings, prio: string) => { - const levels = settings.levels; - const levelAliases = settings.levelAliases; - const currentLevel = levels.find(level => levelAliases[level] === prio); - return levels.indexOf(currentLevel as string); -} - -export const replacePrio = (editor: Editor, view: MarkdownView, settings: PrioPluginSettings, levelIndex: number) => { +export const replacePrio = (editor: Editor, view: MarkdownView, settings: PrioPluginSettings, level: number) => { const cursor = editor.getCursor(); const line = editor.getLine(cursor.line); - const levels = settings.levels; const levelAliases = settings.levelAliases; - const level = levels[levelIndex]; const levelAlias = levelAliases[level]; const newLine = line.replace(`#${getPrio(editor, view, settings)}`, `#${levelAlias}`); editor.replaceRange(newLine, {line: cursor.line, ch: 0}, {line: cursor.line, ch: line.length}); diff --git a/utils/SettingTab.ts b/utils/SettingTab.ts index 7d63125..4294ef4 100644 --- a/utils/SettingTab.ts +++ b/utils/SettingTab.ts @@ -33,6 +33,18 @@ export class SettingTab extends PluginSettingTab { }); }); } + new Setting(containerEl) + .setName('Levels') + .setDesc('Set the priority levels to use.') + .addSlider((slider) => { + slider + .setLimits(1, 10, 1) + .setValue(this.plugin.settings.levels) + .onChange(async (value) => { + this.plugin.settings.levels = value; + }); + }); + const presetList = createEl('ol', { cls: 'preset-list', parent: containerEl diff --git a/utils/Settings.ts b/utils/Settings.ts index 2f7626e..ca350a0 100644 --- a/utils/Settings.ts +++ b/utils/Settings.ts @@ -2,7 +2,7 @@ import {Preset} from "./Presets"; export interface PrioPluginSettings { selectedPreset?: string; - levels: string[]; - levelAliases: Record; + levels: number; + levelAliases: string[]; presets?: Preset[]; }