From 8f06207d8a2fb147a074c2b9faa5ae9d391c65f3 Mon Sep 17 00:00:00 2001 From: "Kritagya Bhattarai (CalfMoon)" Date: Sat, 8 Mar 2025 14:34:34 +0545 Subject: [PATCH] feat(display): add settings menu --- package.json | 2 +- src/main.ts | 19 +++++++++++++ src/settings.ts | 75 +++++++++++++++++++++++++++++++++++++++++++++++++ src/types.ts | 17 +++++++++++ 4 files changed, 112 insertions(+), 1 deletion(-) create mode 100644 src/settings.ts create mode 100644 src/types.ts diff --git a/package.json b/package.json index 8a6adc3..5f3cd78 100644 --- a/package.json +++ b/package.json @@ -1,5 +1,5 @@ { - "name": "obsidian-sample-plugin", + "name": "obsidian-node-factor", "version": "1.0.0", "description": "Customize factors effecting node size in graph.", "main": "main.js", diff --git a/src/main.ts b/src/main.ts index 7a1a43e..50d397b 100644 --- a/src/main.ts +++ b/src/main.ts @@ -1,7 +1,26 @@ import { Plugin } from "obsidian"; +import { NodeFactorSettings, DEFAULT_SETTINGS } from "./types"; +import SampleSettingTab from "./settings"; + export default class NodeFactor extends Plugin { + settings: NodeFactorSettings; + async onload() { + await this.loadSettings(); + this.addSettingTab(new SampleSettingTab(this.app, this)); this.registerEvent(this.app.workspace.on("layout-change", () => {})); } + + async loadSettings() { + this.settings = Object.assign( + {}, + DEFAULT_SETTINGS, + await this.loadData(), + ); + } + + async saveSettings() { + await this.saveData(this.settings); + } } diff --git a/src/settings.ts b/src/settings.ts new file mode 100644 index 0000000..dd7fae3 --- /dev/null +++ b/src/settings.ts @@ -0,0 +1,75 @@ +import { App, PluginSettingTab, Setting } from "obsidian"; + +import NodeFactor from "./main"; + +export default class SampleSettingTab extends PluginSettingTab { + plugin: NodeFactor; + + constructor(app: App, plugin: NodeFactor) { + super(app, plugin); + this.plugin = plugin; + } + + display(): void { + const { containerEl } = this; + containerEl.empty(); + + containerEl.createEl("h1", { text: "Node Factor Settings" }); + + new Setting(containerEl) + .setName("Forward link weight multiplier") + .setDesc("Multiplier for forward links weight (0 to diable).") + .addSlider((slider) => + slider + .setLimits(0, 20, 1) + .setDynamicTooltip() + .setValue(this.plugin.settings.fwdMultiplier) + .onChange(async (value) => { + this.plugin.settings.fwdMultiplier = value; + await this.plugin.saveSettings(); + }), + ); + + new Setting(containerEl) + .setName("Travel forward tree") + .setDesc("Travel forward tree to calcuate node size.") + .addToggle((toggle) => + toggle + .setValue(this.plugin.settings.fwdTree) + .onChange(async (value) => { + this.plugin.settings.fwdTree = value; + await this.plugin.saveSettings(); + }), + ); + + new Setting(containerEl) + .setName("Backward link weight multiplier") + .setDesc("Multiplier for backward links weight (0 to diable).") + .addSlider((slider) => + slider + .setLimits(0, 20, 1) + .setDynamicTooltip() + .setValue(this.plugin.settings.bwdMultiplier) + .onChange(async (value) => { + this.plugin.settings.bwdMultiplier = value; + await this.plugin.saveSettings(); + }), + ); + + new Setting(containerEl) + .setName("Character per weight") + .setDesc( + "Add 1 weight to node size per no of given Character (0 to disable).", + ) + .addSlider((slider) => + slider + .setLimits(0, 5000, 100) + .setDynamicTooltip() + .setValue(this.plugin.settings.lettersPerWt) + .onChange(async (value) => { + this.plugin.settings.lettersPerWt = value; + await this.plugin.saveSettings(); + }), + ); + } +} diff --git a/src/types.ts b/src/types.ts new file mode 100644 index 0000000..f854f7c --- /dev/null +++ b/src/types.ts @@ -0,0 +1,17 @@ +export interface NodeFactorSettings { + fwdMultiplier: number; + fwdTree: boolean; + + bwdMultiplier: number; + + lettersPerWt: number; +} + +export const DEFAULT_SETTINGS: NodeFactorSettings = { + fwdMultiplier: 1, + fwdTree: false, + + bwdMultiplier: 1, + + lettersPerWt: 0, +};