From 209160efec46235f8317a9f0c8e7a241a4a5261d Mon Sep 17 00:00:00 2001 From: Luke Hamburg <1992842+luckman212@users.noreply.github.com> Date: Wed, 24 Jan 2024 05:21:31 -0500 Subject: [PATCH] feat: add toggle to exclude vault param, and specify name or vault ID (#153) * add toggle to NOT include vault name in copied URI (squashed commit) - ensure vault param always comes first - add missing type definition - add toggle to select whether to use Vault Name or ID in URI * update * style: format --------- Co-authored-by: Vinzent --- src/constants.ts | 2 ++ src/settings.ts | 30 ++++++++++++++++++++++++++++++ src/tools.ts | 22 +++++++++++++--------- src/types.ts | 5 ++++- 4 files changed, 49 insertions(+), 10 deletions(-) diff --git a/src/constants.ts b/src/constants.ts index d7d2019..19d7674 100644 --- a/src/constants.ts +++ b/src/constants.ts @@ -9,4 +9,6 @@ export const DEFAULT_SETTINGS: AdvancedURISettings = { useUID: false, addFilepathWhenUsingUID: false, allowEval: false, + includeVaultName: true, + vaultParam: "name", }; diff --git a/src/settings.ts b/src/settings.ts index c1d44d1..a0ff435 100644 --- a/src/settings.ts +++ b/src/settings.ts @@ -69,6 +69,36 @@ export class SettingsTab extends PluginSettingTab { }) ); + new Setting(containerEl) + .setName("Include vault name/ID parameter") + .addToggle((cb) => + cb + .setValue(this.plugin.settings.includeVaultName) + .onChange((value) => { + this.plugin.settings.includeVaultName = value; + this.plugin.saveSettings(); + this.display(); + }) + ); + + if (this.plugin.settings.includeVaultName) { + new Setting(containerEl) + .setName("Vault identifying parameter") + .setDesc( + "Choose whether to use the vault Name or its internal ID as the identifying parameter." + ) + .addDropdown((cb) => + cb + .addOption("name", "Name") + .addOption("id", "ID") + .setValue(this.plugin.settings.vaultParam) + .onChange((value) => { + this.plugin.settings.vaultParam = value; + this.plugin.saveSettings(); + }) + ); + } + if (this.plugin.settings.useUID) { new Setting(containerEl) .setName("Add filepath parameter") diff --git a/src/tools.ts b/src/tools.ts index 828b088..d2885f5 100644 --- a/src/tools.ts +++ b/src/tools.ts @@ -74,12 +74,17 @@ export default class Tools { } async generateURI(parameters: Parameters, doubleEncode: boolean) { - const prefix = `obsidian://advanced-uri?vault=${encodeURIComponent( - app.vault.getName() - )}`; + const prefix = "obsidian://advanced-uri"; let suffix = ""; const file = app.vault.getAbstractFileByPath(parameters.filepath); - + if (this.settings.includeVaultName) { + suffix += "?vault="; + if (this.settings.vaultParam == "id" && app.appId) { + suffix += app.appId; + } else { + suffix += app.vault.getName(); + } + } if ( this.settings.useUID && file instanceof TFile && @@ -91,11 +96,10 @@ export default class Tools { } for (const parameter in parameters) { if ((parameters as any)[parameter] != undefined) { - suffix = - suffix + - `&${parameter}=${encodeURIComponent( - (parameters as any)[parameter] - )}`; + suffix += suffix ? "&" : "?"; + suffix += `${parameter}=${encodeURIComponent( + (parameters as any)[parameter] + )}`; } } if (doubleEncode) { diff --git a/src/types.ts b/src/types.ts index 46f9ca3..5078058 100644 --- a/src/types.ts +++ b/src/types.ts @@ -1,4 +1,4 @@ -import { PaneType, Plugin } from "obsidian"; +import { PaneType } from "obsidian"; declare module "obsidian" { interface App { @@ -18,6 +18,7 @@ declare module "obsidian" { activeTab: SettingTab; open(): void; }; + appId: string; commands: { executeCommandById(id: string): void; commands: { @@ -97,6 +98,8 @@ export interface AdvancedURISettings { useUID: boolean; addFilepathWhenUsingUID: boolean; allowEval: boolean; + includeVaultName: boolean; + vaultParam: "id" | "name"; } export interface Parameters {