From c70cb6d12dfe56c9354aa3380dfb74b9df6d7488 Mon Sep 17 00:00:00 2001 From: Murphy Date: Sat, 2 Dec 2023 14:23:57 +0100 Subject: [PATCH] adds template file and override files setting --- docs/assets/tempalte-settings.png | Bin 21558 -> 0 bytes docs/assets/template-settings.png | Bin 0 -> 32852 bytes docs/assets/templater-setting.png | Bin 0 -> 36865 bytes docs/changelog.md | 9 +- docs/help.md | 1 + docs/settings.md | 27 ++- mkdocs.yml | 1 + src/commands/createArticleNotes.ts | 31 ++- src/commands/linkArticles.ts | 16 +- src/main.ts | 2 +- src/settings.ts | 316 ++++++++++++++++------------ src/utils/createNote.ts | 35 +-- src/utils/suggesters/fileSuggest.ts | 30 +++ src/utils/templateModal.ts | 42 +++- src/utils/wikipediaAPI.ts | 2 +- 15 files changed, 314 insertions(+), 198 deletions(-) delete mode 100644 docs/assets/tempalte-settings.png create mode 100644 docs/assets/template-settings.png create mode 100644 docs/assets/templater-setting.png create mode 100644 docs/help.md create mode 100644 src/utils/suggesters/fileSuggest.ts diff --git a/docs/assets/tempalte-settings.png b/docs/assets/tempalte-settings.png deleted file mode 100644 index 36e9e6e9952cbabdcf858f0f55a24d3dc5de0867..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 21558 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 literal 0 HcmV?d00001 diff --git a/docs/assets/templater-setting.png b/docs/assets/templater-setting.png new file mode 100644 index 0000000000000000000000000000000000000000..a92d37fa8db1520164cb77c0048d50b2950dde2e GIT binary patch literal 36865 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 c#`S+5l$kaXVKe=ky4*&oF literal 0 HcmV?d00001 diff --git a/docs/changelog.md b/docs/changelog.md index e98c85e..dcb5bb8 100644 --- a/docs/changelog.md +++ b/docs/changelog.md @@ -1,8 +1,13 @@ # Changelog +## [2.3.3](https://github.com/StrangeGirlMurph/obsidian-wikipedia-search/releases/tag/2.3.3) (02.12.2023) +- Adds the template file option. +- Adds the `Override files` setting +- Fixes some bugs. + ## [2.3.2](https://github.com/StrangeGirlMurph/obsidian-wikipedia-search/releases/tag/2.3.2) (27.11.2023) -- Adds the `Create article note` command -- Adds the `Open created article notes` setting +- Adds the `Create article note` command. +- Adds the `Open created article notes` setting. ## [2.3.1](https://github.com/StrangeGirlMurph/obsidian-wikipedia-search/releases/tag/2.3.1) (18.11.2023) - Introduces the new documentation and links it from the settings page. diff --git a/docs/help.md b/docs/help.md new file mode 100644 index 0000000..8653eca --- /dev/null +++ b/docs/help.md @@ -0,0 +1 @@ +If you tried finding an answer to your question in this documentation but still need help with something feel free to ask the community and me for help in the [Q&A in the GitHub Discussions Tab](https://github.com/StrangeGirlMurph/obsidian-wikipedia-search/discussions/categories/q-a). \ No newline at end of file diff --git a/docs/settings.md b/docs/settings.md index 85d697c..0aaea41 100644 --- a/docs/settings.md +++ b/docs/settings.md @@ -28,30 +28,30 @@ The default vault folder where articles notes should be created. This only gets Default: `/` (the root folder) ## Template settings -Each user has a list of templates for the inserts that this plugin creates when linking articles. "Linking" in this context might be a bit misdirecting though given the fact that this plugin can do more than just link the article with a url. The templates can be separated into one default template and multiple additional templates. Templates can be deleted with the `-` button at the end. The default template can't be deleted. +Each user has a list of templates for the inserts that this plugin creates when [linking articles](commands.md#link-article) or [creating article notes](commands.md#create-article-note). The templates can be separated into one default template and multiple additional templates. Templates can be deleted with the `-` button at the end. The default template can't be deleted. You can create new templates with the `+` button at the bottom right. The settings for a template can be separated into the following three parts: -*Note: You can only have up to 20 templates. It's a limitation that isn't really justified. I just thought adding this would be a good idea for your own good. If you need more than 20 leave a message.* - ??? info "Screenshot" - ![template settings screenshot](assets/tempalte-settings.png) + ![template settings screenshot](assets/template-settings.png) ### Template name -The first field of each template sets the name of the template.The name of the default template can't be changed (that's why that field is disabled) while the additional templates can have any name. +The first field of each template sets the name of the template. The name of the default template can't be changed (that's why that field is disabled) while the additional templates can have any name. Default: `Additional Template` ### Creates note & Custom note path -The middle part of a templates settings is all about note creation. It consist of a toggle and a text field that appears when the toggle in the "on" state. The toggle controls whether or not the template should create a new note with the articles title as its name, paste the insert in there and link the newly created note instead of directly pasting the insert into the current note. This allows for creating notes for wikipedia articles. We call templates that create new notes "note templates" and templates that doesn't "inline templates". +The middle part of a templates settings is all about note creation. It consist of a toggle and a text field that appears when the "creates a note" toggle is in the "on" state. The toggle controls whether or not the template should create a new note with the articles title as its name, paste the insert in there and link the newly created note instead of directly pasting the insert into the current note. This allows for creating notes for wikipedia articles. We call templates that create new notes "note templates" and templates that doesn't "inline templates". By default all the notes will be created at the [default note path](#default-note-path). The appearing text field lets you customize the location for any given template. Leave it empty to use the default note path. -Default: `false` for the toggle (inline) and `‎` (empty) for the custom note path +Default: `false` as in "inline" for the toggle and `‎` (empty) for the custom note path ### Template string -The last and most important part of any template is its template string. You can edit it over the big text field at the end. The template string is the blueprint for the insert. It can be any kind of string containing line breaks. The plugin recognizes the following character sequences and replaces all occurrences with the following: +The last and most important part of any template is its template string. The template string is the blueprint for the insert. This last section consists of a toggle and an input field which is either a big text or a file search field. The toggle sets whether or not the template string is declared directly in the settings tab in the big text field or separately in a file which the file search field references instead. Template files are only supported for note templates. That's why the toggle disappears and the input automatically switches to the text field once you switch to an inline template. + +The template string can be any kind of string containing line breaks and whatever you can think of. The plugin recognizes the following character sequences and replaces all occurrences with the corresponding data: - `{title}` The articles title or current selection (based on [this setting](#use-article-title-instead-of-selection)). - `{description}` The articles description if available. If not all occurrences will be removed with a notice. @@ -63,6 +63,12 @@ The last and most important part of any template is its template string. You can Default: `[{title}]({url})` for inline templates and `{thumbnail}\n[{title}]({url}): {intro}` for note templates +??? tip + + You can also use [Templater](https://github.com/SilentVoid13/Templater) Syntax in the template string of note templates to make the article notes even better! Just [install](obsidian://show-plugin?id=templater) and enable the Templater Plugin and enable its "Trigger Templater on new file creation" setting: + + ![Templater Setting](assets/templater-setting.png) + ## Workflow optimization settings ??? info "Screenshot" @@ -118,4 +124,9 @@ Default: `false` ### Open created article notes Whether or not to open the newly created article notes directly after creating them. Follows the [article tab placement setting](#article-tab-placement). +Default: `false` + +### Override files +Whether or not to override existing files when creating article notes. + Default: `false` \ No newline at end of file diff --git a/mkdocs.yml b/mkdocs.yml index 3a9f499..f737865 100644 --- a/mkdocs.yml +++ b/mkdocs.yml @@ -65,6 +65,7 @@ nav: - "installation.md" - "settings.md" - "commands.md" + - "help.md" - "roadmap.md" - "changelog.md" - "support.md" diff --git a/src/commands/createArticleNotes.ts b/src/commands/createArticleNotes.ts index f34adcf..40a71a5 100644 --- a/src/commands/createArticleNotes.ts +++ b/src/commands/createArticleNotes.ts @@ -1,4 +1,4 @@ -import { App, TFile } from "obsidian"; +import { App, Notice, TFile } from "obsidian"; import { Template, WikipediaSearchSettings } from "../settings"; import { Article } from "src/utils/searchModal"; import { SearchModal } from "src/utils/searchModal"; @@ -10,7 +10,7 @@ export class CreateArticleNoteModal extends SearchModal { async onChooseSuggestion(article: Article) { const templates = this.settings.templates.filter((template) => template.createNote); if (templates.length > 1) { - new CreateArticleNoteTemplateModal(this.app, this.settings, this.editor!, article).open(); + new CreateArticleNoteTemplateModal(this.app, this.settings, this.editor!, article, true).open(); } else { createArticleNote(this.app, this.settings, article, templates[0]); } @@ -18,19 +18,6 @@ export class CreateArticleNoteModal extends SearchModal { } class CreateArticleNoteTemplateModal extends TemplateModal { - renderSuggestion(template: Template, el: HTMLElement) { - el.createEl("div", { text: `${template.name}` }); - el.createEl("small", { - text: template.templateString.replaceAll("\n", "\\n"), - }); - } - - async getSuggestions(query: string): Promise { - return this.settings.templates - .filter((template) => template.createNote) - .filter((template) => template.name.toLowerCase().includes(query.toLowerCase())); - } - async onChooseSuggestion(template: Template) { createArticleNote(this.app, this.settings, this.article, template); } @@ -42,12 +29,22 @@ async function createArticleNote( article: Article, template: Template ) { - const insert = await generateInsert(settings, article, template.templateString, ""); + let templateString = template.templateString; + if (template.useTemplateFile) { + const templateFile = app.vault.getAbstractFileByPath(template.templateFilePath); + if (!templateFile || !(templateFile instanceof TFile)) { + new Notice(`Aborting! Template file '${template.templateFilePath}' not found!`); + return; + } + templateString = await app.vault.read(templateFile); + } + const insert = await generateInsert(settings, article, templateString, ""); const path = await createNoteInFolder( app, article.title, insert, - template.customPath || settings.defaultNotePath + template.customPath || settings.defaultNotePath, + settings.overrideFiles ); if (!path) return; if (settings.openCreatedNotes) { diff --git a/src/commands/linkArticles.ts b/src/commands/linkArticles.ts index eeae854..a5cd89a 100644 --- a/src/commands/linkArticles.ts +++ b/src/commands/linkArticles.ts @@ -17,19 +17,6 @@ export class LinkArticleModal extends SearchModal { } class LinkArticleTemplateModal extends TemplateModal { - renderSuggestion(template: Template, el: HTMLElement) { - el.createEl("div", { text: `${template.name} ${template.createNote ? "(note)" : "(inplace)"}` }); - el.createEl("small", { - text: template.templateString.replaceAll("\n", "\\n"), - }); - } - - async getSuggestions(query: string): Promise { - return this.settings.templates.filter((template) => - template.name.toLowerCase().includes(query.toLowerCase()) - ); - } - async onChooseSuggestion(template: Template) { insertLink(app, this.editor, this.settings, this.article, template); } @@ -49,7 +36,8 @@ async function insertLink( app, article.title, insert, - template.customPath === "" ? settings.defaultNotePath : template.customPath + template.customPath === "" ? settings.defaultNotePath : template.customPath, + settings.overrideFiles ); if (path == null) return; diff --git a/src/main.ts b/src/main.ts index 44a364b..d69255c 100644 --- a/src/main.ts +++ b/src/main.ts @@ -37,7 +37,7 @@ export default class WikipediaSearchPlugin extends Plugin { name: "Create Article Note", callback: () => { if (this.settings.templates.filter((template) => template.createNote).length === 0) { - new Notice("You have to create a note template first! (see the docs)"); + new Notice("To use this command you have to create a note template first!"); return; } new CreateArticleNoteModal(this.app, this.settings).open(); diff --git a/src/settings.ts b/src/settings.ts index f18e5d5..8366e0d 100644 --- a/src/settings.ts +++ b/src/settings.ts @@ -1,13 +1,16 @@ -import { App, Modal, Notice, PluginSettingTab, SearchComponent, Setting } from "obsidian"; +import { App, Notice, PluginSettingTab, SearchComponent, Setting } from "obsidian"; import { languages } from "./utils/languages"; import WikipediaSearchPlugin from "./main"; import { FolderSuggest } from "./utils/suggesters/folderSuggest"; +import { FileSuggest } from "./utils/suggesters/fileSuggest"; export interface Template { name: string; templateString: string; createNote: boolean; - customPath: string; // use the default if empty + customPath: string; // use the default if empty string + useTemplateFile: boolean; + templateFilePath: string; } const DEFAULT_TEMPLATE_STRING_INLINE = "[{title}]({url})"; @@ -18,6 +21,8 @@ export const DEFAULT_TEMPLATE: Template = { templateString: DEFAULT_TEMPLATE_STRING_INLINE, createNote: false, customPath: "", + useTemplateFile: false, + templateFilePath: "", }; export interface WikipediaSearchSettings { @@ -33,6 +38,7 @@ export interface WikipediaSearchSettings { openArticleInFullscreen: boolean; openArticlesInBrowser: boolean; openCreatedNotes: boolean; + overrideFiles: boolean; showedSurfingMessage: boolean; } @@ -49,6 +55,7 @@ export const DEFAULT_SETTINGS: WikipediaSearchSettings = { openArticleInFullscreen: false, openArticlesInBrowser: false, openCreatedNotes: false, + overrideFiles: false, showedSurfingMessage: false, }; @@ -62,24 +69,6 @@ export class WikipediaSearchSettingTab extends PluginSettingTab { this.settings = plugin.settings; } - addNotePathSearch(item: Template, setting: Setting): Setting { - if (!item.createNote) return setting; - - setting.addSearch((search: SearchComponent) => { - new FolderSuggest(app, search.inputEl); - search - .setPlaceholder("custom note path") - .setValue(item.customPath) - .onChange(async (newFolder: string) => { - item.customPath = newFolder; - await this.plugin.saveSettings(); - }); - }); - - setting.controlEl.children[2].setAttr("style", "flex-grow:1;width:170px;"); - return setting; - } - display(): void { const { containerEl } = this; @@ -116,7 +105,7 @@ export class WikipediaSearchSettingTab extends PluginSettingTab { .setDesc("Maximum number of search results to show. (Between 1 and 500)") .addText((text) => text - .setPlaceholder("Limit") + .setPlaceholder("limit") .setValue(this.settings.searchLimit ? this.settings.searchLimit.toString() : "") .onChange(async (value) => { const parsed = parseInt(value); @@ -131,7 +120,7 @@ export class WikipediaSearchSettingTab extends PluginSettingTab { .setDesc("The width of the thumbnails in pixels. (Leave empty to use the original size.)") .addText((text) => text - .setPlaceholder("Width") + .setPlaceholder("width") .setValue(this.settings.thumbnailWidth ? this.settings.thumbnailWidth.toString() : "") .onChange(async (value) => { const parsed = parseInt(value); @@ -160,120 +149,12 @@ export class WikipediaSearchSettingTab extends PluginSettingTab { }); }); - new Setting(containerEl) - .setName("Template guide") - .setDesc("Get an explanation on how to configure templates.") - .addButton((button) => - button.setButtonText("Guide").onClick(async () => { - const modal = new Modal(app); - modal.titleEl.setText("Template guide"); - modal.contentEl.innerHTML = - "1. Start by giving your template a name in the text field at the left.

2. Next you can use the toggle to make the template create a new note with it's content being the inserted template when linking an article instead of inserting directly in the current file.

3. If that toggle is on, a search field appears which allows you to set a custom path for the new note. You can leave it empty if that template should just use the default note path.

4. Lastly you can set the actual template for the insert. All occurrences of '{title}', '{url}', '{language}', '{languageCode}', '{description}', '{intro}' and '{thumbnail}' will be replaced with the articles title (or the selection), url, language, language code, description (if available), intro (the articles first section) and thumbnail embed (if available) respectively.

Note: You can't rename nor delete the default template."; - modal.open(); - }) - ); - - new Setting(containerEl).setName("Templates").setHeading(); - - for (const [i, template] of this.settings.templates.entries()) { - const isDefaultTemplate = i == 0; - - let setting = new Setting(containerEl); - setting.settingEl.removeChild(setting.infoEl); - setting.controlEl.style.flexWrap = "wrap"; - setting.controlEl.style.justifyContent = "center"; + const templateSettings = new DocumentFragment(); + templateSettings.createEl("span").innerHTML = + "Templates (Guide)"; + new Setting(containerEl).setName(templateSettings).setHeading(); - setting.addText((text) => { - if (isDefaultTemplate) text.setDisabled(true); - return text - .setValue(isDefaultTemplate ? "Default Tempalte" : template.name) - .setPlaceholder("Name") - .onChange(async (value) => { - template.name = value; - await this.plugin.saveSettings(); - }); - }); - setting.controlEl.children[0].setAttr("style", "width: 160px;"); - - setting.addToggle((toggle) => - toggle - .setTooltip("creates note") - .setValue(template.createNote) - .onChange(async (value) => { - template.createNote = value; - if ( - template.createNote && - (template.templateString == DEFAULT_TEMPLATE_STRING_INLINE || template.templateString === "") - ) { - template.templateString = DEFAULT_TEMPLATE_STRING_NOTE; - } else if ( - !template.createNote && - (template.templateString == DEFAULT_TEMPLATE_STRING_NOTE || template.templateString === "") - ) { - template.templateString = DEFAULT_TEMPLATE_STRING_INLINE; - } - await this.plugin.saveSettings(); - this.display(); - }) - ); - - setting = this.addNotePathSearch(template, setting); - - setting.addTextArea((text) => { - text.inputEl.setAttr( - "style", - "white-space:pre;overflow-wrap:normal;overflow:hidden;resize:none;flex-grow:1;" - ); - text.inputEl.setAttr("rows", "2"); - - return text - .setPlaceholder("Template") - .setValue(template.templateString) - .onChange(async (value) => { - template.templateString = value; - await this.plugin.saveSettings(); - }); - }); - - setting.addExtraButton((button) => { - if (isDefaultTemplate) button.setDisabled(true); - button.extraSettingsEl.style.height = "min-content"; - return button - .setTooltip("delete template") - .setIcon("minus") - .onClick(async () => { - this.settings.templates.splice(i, 1); - await this.plugin.saveSettings(); - this.display(); - }); - }); - - const div = setting.controlEl.createDiv(); - div.setAttr("style", "display:flex;flex-grow:1;gap:var(--size-4-2);align-items:center;"); - - div.appendChild(setting.controlEl.children[setting.controlEl.children.length - 3]); - div.appendChild(setting.controlEl.children[setting.controlEl.children.length - 2]); - } - - new Setting(containerEl).addExtraButton((button) => - button - .setTooltip("create new template") - .setIcon("plus") - .onClick(async () => { - if (this.settings.templates.length == 21) - return new Notice( - "Easy buddy... I need to stop you right there. You can only have up to 20 templates. It's for your own good! (I think) If you really need more come and talk to me on GitHub. If you convince me I'll let you have more.", - 15000 - ); - - this.settings.templates.push({ - ...DEFAULT_TEMPLATE, - name: `Additional Template`, - }); - await this.plugin.saveSettings(); - this.display(); - }) - ); + this.addTemplateSettings(containerEl); new Setting(containerEl).setName("Workflow optimizations").setHeading(); @@ -355,10 +236,175 @@ export class WikipediaSearchSettingTab extends PluginSettingTab { }) ); + new Setting(containerEl) + .setName("Override files") + .setDesc("Whether or not to override existing files when creating article notes.") + .addToggle((toggle) => + toggle.setValue(this.settings.overrideFiles).onChange(async (value) => { + this.settings.overrideFiles = value; + await this.plugin.saveSettings(); + }) + ); + new Setting(containerEl).setName("Feedback, bug reports and feature requests 🌿").setHeading(); const appendix = `

If you have any kind of feedback, please let me know! No matter how small! I also obsess a lot about small details. I want to make this plugin as useful as possible for everyone. I love to hear about your ideas for new features, all the bugs you found and everything that annoys you. Don't be shy! Just create an issue on GitHub and I'll get back to you ASAP. ~ Murphy :)

PS: Wikipedia also has a dark mode for everyone with an account.

`; const div = containerEl.createEl("div"); div.innerHTML = appendix; } + + addTemplateSettings(containerEl: HTMLElement) { + for (const [i, template] of this.settings.templates.entries()) { + const isDefaultTemplate = i == 0; + + let setting = new Setting(containerEl); + setting.settingEl.removeChild(setting.infoEl); + setting.controlEl.style.flexWrap = "wrap"; + setting.controlEl.style.justifyContent = "center"; + + setting.addText((text) => { + if (isDefaultTemplate) text.setDisabled(true); + return text + .setValue(isDefaultTemplate ? "Default Template" : template.name) + .setPlaceholder("Name") + .onChange(async (value) => { + template.name = value; + await this.plugin.saveSettings(); + }); + }); + setting.controlEl.children[setting.controlEl.children.length - 1].setAttr("style", "width: 140px;"); + + setting.addToggle((toggle) => + toggle + .setTooltip("creates a note") + .setValue(template.createNote) + .onChange(async (value) => { + template.createNote = value; + if ( + template.createNote && + (template.templateString == DEFAULT_TEMPLATE_STRING_INLINE || template.templateString === "") + ) { + template.templateString = DEFAULT_TEMPLATE_STRING_NOTE; + } else if ( + !template.createNote && + (template.templateString == DEFAULT_TEMPLATE_STRING_NOTE || template.templateString === "") + ) { + template.templateString = DEFAULT_TEMPLATE_STRING_INLINE; + } + await this.plugin.saveSettings(); + this.display(); + }) + ); + + const firstGroup = setting.controlEl.createDiv(); + firstGroup.setAttr("style", "display:flex;gap:var(--size-4-2);align-items:center;"); + firstGroup.appendChild(setting.controlEl.children[0]); + firstGroup.appendChild(setting.controlEl.children[0]); + + if (template.createNote) { + setting.addSearch((search: SearchComponent) => { + new FolderSuggest(app, search.inputEl); + search + .setPlaceholder("custom note path") + .setValue(template.customPath) + .onChange(async (newFolder: string) => { + template.customPath = newFolder; + await this.plugin.saveSettings(); + }); + }); + + setting.controlEl.children[setting.controlEl.children.length - 1].setAttr( + "style", + "flex-grow:1;width:170px;" + ); + + setting.addToggle((toggle) => + toggle + .setTooltip("uses a template file") + .setValue(template.useTemplateFile) + .onChange(async (value) => { + template.useTemplateFile = value; + await this.plugin.saveSettings(); + this.display(); + }) + ); + + const secondGroup = setting.controlEl.createDiv(); + secondGroup.setAttr("style", "display:flex;flex-grow:1;gap:var(--size-4-2);align-items:center;"); + secondGroup.appendChild(setting.controlEl.children[1]); + secondGroup.appendChild(setting.controlEl.children[1]); + } + + if (template.useTemplateFile && template.createNote) { + setting.addSearch((search: SearchComponent) => { + new FileSuggest(app, search.inputEl); + search + .setPlaceholder("template file path") + .setValue(template.templateFilePath) + .onChange(async (newFolder: string) => { + template.templateFilePath = newFolder; + await this.plugin.saveSettings(); + }); + }); + setting.controlEl.children[setting.controlEl.children.length - 1].setAttr( + "style", + "flex-grow:1;width:170px;" + ); + } else { + setting.addTextArea((text) => { + text.inputEl.setAttr( + "style", + "white-space:pre;overflow-wrap:normal;overflow:hidden;resize:none;flex-grow:1;width:220px;" + ); + text.inputEl.setAttr("rows", "2"); + + return text + .setPlaceholder("template string") + .setValue(template.templateString) + .onChange(async (value) => { + template.templateString = value; + await this.plugin.saveSettings(); + }); + }); + } + + setting.addExtraButton((button) => { + if (isDefaultTemplate) button.setDisabled(true); + button.extraSettingsEl.style.height = "min-content"; + return button + .setTooltip("delete template") + .setIcon("minus") + .onClick(async () => { + this.settings.templates.splice(i, 1); + await this.plugin.saveSettings(); + this.display(); + }); + }); + + const thirdGroup = setting.controlEl.createDiv(); + thirdGroup.setAttr("style", "display:flex;flex-grow:1;gap:var(--size-4-2);align-items:center;"); + thirdGroup.appendChild(setting.controlEl.children[setting.controlEl.children.length - 3]); + thirdGroup.appendChild(setting.controlEl.children[setting.controlEl.children.length - 2]); + } + + new Setting(containerEl).addExtraButton((button) => + button + .setTooltip("add template") + .setIcon("plus") + .onClick(async () => { + if (this.settings.templates.length == 21) + return new Notice( + "Easy buddy... I need to stop you right there. You can only have up to 20 templates. It's for your own good! (I think) If you really need more come and talk to me on GitHub. If you convince me I'll let you have more.", + 15000 + ); + + this.settings.templates.push({ + ...DEFAULT_TEMPLATE, + name: `Additional Template`, + }); + await this.plugin.saveSettings(); + this.display(); + }) + ); + } } diff --git a/src/utils/createNote.ts b/src/utils/createNote.ts index 9a2ab0f..e8e1472 100644 --- a/src/utils/createNote.ts +++ b/src/utils/createNote.ts @@ -1,33 +1,36 @@ -import { App, normalizePath, Notice } from "obsidian"; +import { App, normalizePath, Notice, TFile } from "obsidian"; export async function createNoteInFolder( app: App, title: string, content: string, - path: string + folderPath: string, + overrideExisting: boolean ): Promise { - if (!(await app.vault.adapter.exists(path))) { + if ( + !(await app.vault.adapter.exists(folderPath)) || + app.vault.getAbstractFileByPath(folderPath) instanceof TFile + ) { new Notice( "Aborted! The folder you specified in the settings to create this new note in does not exist. Please visit the plugin settings and change the path!", 15000 ); return null; } - path = normalizePath(`${path}/${title}.md`); - const file = app.vault.getAbstractFileByPath(path); - if (file) { - new Notice(`Aborted! '${path}' already exists.`); - return null; - } + const filePath = normalizePath(`${folderPath}/${title}.md`); + const file = app.vault.getAbstractFileByPath(filePath); - try { - await app.vault.create(path, content); - new Notice("New note created successfully."); - return path; - } catch (err) { - new Notice("Error creating new note... Please check the console logs for more information."); - console.error("Error creating new note:", err); + if (file && !overrideExisting) { + new Notice(`Aborted! '${filePath}' already exists.`); return null; + } else if (file && overrideExisting) { + await app.vault.modify(file as TFile, content); + new Notice(`Note successfully overwritten.`); + return filePath; + } else { + await app.vault.create(filePath, content); + new Notice("New note created successfully."); + return filePath; } } diff --git a/src/utils/suggesters/fileSuggest.ts b/src/utils/suggesters/fileSuggest.ts new file mode 100644 index 0000000..0776fa2 --- /dev/null +++ b/src/utils/suggesters/fileSuggest.ts @@ -0,0 +1,30 @@ +// Credits go to Liam's Periodic Notes Plugin: https://github.com/liamcain/obsidian-periodic-notes + +import { TAbstractFile, TFile } from "obsidian"; +import { TextInputSuggest } from "./suggest"; + +export class FileSuggest extends TextInputSuggest { + getSuggestions(inputStr: string): TFile[] { + const abstractFiles = this.app.vault.getAllLoadedFiles(); + const files: TFile[] = []; + const lowerCaseInputStr = inputStr.toLowerCase(); + + abstractFiles.forEach((file: TAbstractFile) => { + if (file instanceof TFile && file.path.toLowerCase().contains(lowerCaseInputStr)) { + files.push(file); + } + }); + + return files; + } + + renderSuggestion(file: TFile, el: HTMLElement): void { + el.setText(file.path); + } + + selectSuggestion(file: TFile): void { + this.inputEl.value = file.path; + this.inputEl.trigger("input"); + this.close(); + } +} diff --git a/src/utils/templateModal.ts b/src/utils/templateModal.ts index aa4382c..1641697 100644 --- a/src/utils/templateModal.ts +++ b/src/utils/templateModal.ts @@ -1,4 +1,4 @@ -import { SuggestModal, Editor, App } from "obsidian"; +import { SuggestModal, Editor, App, TFile } from "obsidian"; import { Template, WikipediaSearchSettings } from "src/settings"; import { Article } from "./searchModal"; @@ -6,18 +6,52 @@ export abstract class TemplateModal extends SuggestModal