diff --git a/src/main.ts b/src/main.ts index 6dcc154..cd210f9 100644 --- a/src/main.ts +++ b/src/main.ts @@ -1,7 +1,7 @@ import { Plugin } from "obsidian"; -import { ObsidianNode, NodeFactorSettings, DEFAULT_SETTINGS } from "./types"; -import NodeFactorSettingTab from "./settings"; +import { ObsidianNode, NodeFactorSettings, DEFAULT_SETTINGS } from "types"; +import NodeFactorSettingTab from "settings"; export default class NodeFactor extends Plugin { settings: NodeFactorSettings; diff --git a/src/settings.ts b/src/settings.ts deleted file mode 100644 index 8353120..0000000 --- a/src/settings.ts +++ /dev/null @@ -1,165 +0,0 @@ -import { - App, - ButtonComponent, - Notice, - PluginSettingTab, - SearchComponent, - Setting, - SliderComponent, -} from "obsidian"; - -import NodeFactor from "./main"; -import FileSuggest from "./file-suggest"; -import { FileData } from "./types"; - -export default class NodeFactorSettingTab extends PluginSettingTab { - plugin: NodeFactor; - - constructor(app: App, plugin: NodeFactor) { - super(app, plugin); - this.plugin = plugin; - } - - display(): void { - const { containerEl } = this; - containerEl.empty(); - - new Setting(containerEl) - .setName("Programatically set size") - .setHeading(); - - new Setting(containerEl) - .setName("Forward link weight multiplier") - .setDesc("Multiplier for forward links weight (0 to disable).") - .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(); - this.plugin.recalculateSize(); - }); - }); - - new Setting(containerEl) - .setName("Travel forward tree") - .setDesc( - "Travel forward and add all other nodes to determine final node size.", - ) - .addToggle((toggle) => { - toggle - .setValue(this.plugin.settings.fwdTree) - .onChange(async (value) => { - this.plugin.settings.fwdTree = value; - await this.plugin.saveSettings(); - this.plugin.recalculateSize(); - }); - }); - - new Setting(containerEl) - .setName("Backward link weight multiplier") - .setDesc("Multiplier for backward links weight (0 to disable).") - .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(); - this.plugin.recalculateSize(); - }); - }); - - 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(); - this.plugin.recalculateSize(); - }); - }); - - new Setting(containerEl).setName("Manually set size").setHeading(); - - let selectedWeight: SliderComponent; - let selectedFile: SearchComponent; - let submitButton: ButtonComponent; - new Setting(containerEl) - .setName("Add new weight") - .setDesc("Weight added here overrides everything else.") - .addSearch((search) => { - new FileSuggest(this.app, search.inputEl); - selectedFile = search; - search - .setPlaceholder("Enter file name") - .onChange(async (value) => { - submitButton.setDisabled(value.length === 0); - }); - }) - .addSlider((slider) => { - selectedWeight = slider; - slider.setLimits(0, 100, 5).setDynamicTooltip().setValue(0); - }) - .addButton((button) => { - submitButton = button; - button - .setDisabled(true) - .setButtonText("Add") - .setTooltip("Click to add") - .onClick(async () => { - const enteredFileData: FileData = { - id: selectedFile.getValue(), - weight: selectedWeight.getValue(), - }; - selectedWeight.setValue(0); - selectedFile.setValue(""); - - const fileExists = this.plugin.settings.manual.find( - (foundFile) => foundFile.id == enteredFileData.id, - ); - - if (!fileExists) { - new Notice(`That file's size has already been entered, - remove it first to change weight.`); - return; - } - - this.plugin.settings.manual.push(enteredFileData); - await this.plugin.saveSettings(); - new Notice("Manual size added"); - - // Rerender display - this.display(); - this.plugin.recalculateSize(); - }); - }); - - // Display all manually added weights - this.plugin.settings.manual.forEach((value: FileData) => { - new Setting(containerEl) - .setName(value.id) - .setDesc(`Weight: ${String(value.weight)}`) - .addButton((button) => { - button - .setIcon("trash") - .setTooltip("Remove manually added size") - .onClick(async () => { - this.plugin.settings.manual.remove(value); - await this.plugin.saveSettings(); - this.display(); - }); - }); - }); - } -} diff --git a/src/file-suggest.ts b/src/settings/file-suggest.ts similarity index 100% rename from src/file-suggest.ts rename to src/settings/file-suggest.ts diff --git a/src/settings/index.ts b/src/settings/index.ts new file mode 100644 index 0000000..e23efaa --- /dev/null +++ b/src/settings/index.ts @@ -0,0 +1,26 @@ +import { App, PluginSettingTab } from "obsidian"; + +import NodeFactor from "main"; + +import ManualSetting from "./manual"; +import ProgrameticalSetting from "./programetical"; + +export default class NodeFactorSettingTab extends PluginSettingTab { + private plugin: NodeFactor; + + constructor(app: App, plugin: NodeFactor) { + super(app, plugin); + this.plugin = plugin; + } + + display(): void { + const { plugin, containerEl, app } = this; + containerEl.empty(); + + new ProgrameticalSetting(plugin, containerEl).display(); + + new ManualSetting(app, plugin, containerEl, () => + this.display(), + ).display(); + } +} diff --git a/src/settings/manual.ts b/src/settings/manual.ts new file mode 100644 index 0000000..4471b25 --- /dev/null +++ b/src/settings/manual.ts @@ -0,0 +1,111 @@ +import { + App, + ButtonComponent, + Notice, + SearchComponent, + Setting, + SliderComponent, +} from "obsidian"; + +import NodeFactor from "main"; +import { FileData } from "types"; + +import FileSuggest from "./file-suggest"; + +export default class ManualSetting { + private app: App; + private plugin: NodeFactor; + private containerEl: HTMLElement; + private refreshDisplay: () => void; + + constructor( + app: App, + plugin: NodeFactor, + containerEl: HTMLElement, + refreshDisplay: () => void, + ) { + this.app = app; + this.plugin = plugin; + this.containerEl = containerEl; + this.refreshDisplay = refreshDisplay; + } + + display(): void { + new Setting(this.containerEl).setName("Manually set size").setHeading(); + + let selectedWeight: SliderComponent; + let selectedFile: SearchComponent; + let submitButton: ButtonComponent; + + const addWt = new Setting(this.containerEl) + .setName("Add new weight") + .setDesc("Weight added here overrides everything else."); + + addWt.addSearch((search) => { + new FileSuggest(this.app, search.inputEl); + selectedFile = search; + search.setPlaceholder("Enter file name"); + search.onChange(async (value) => { + submitButton.setDisabled(value.length === 0); + }); + }); + + addWt.addSlider((slider) => { + selectedWeight = slider; + slider.setLimits(0, 100, 5); + slider.setDynamicTooltip(); + slider.setValue(0); + }); + + addWt.addButton((button) => { + submitButton = button; + button.setDisabled(true); + button.setButtonText("Add"); + button.setTooltip("Click to add new manual size"); + + button.onClick(async () => { + const enteredFileData: FileData = { + id: selectedFile.getValue(), + weight: selectedWeight.getValue(), + }; + selectedWeight.setValue(0); + selectedFile.setValue(""); + + const fileExists = this.plugin.settings.manual.find( + (foundFile) => foundFile.id == enteredFileData.id, + ); + + if (!fileExists) { + new Notice(`That file's size has already been entered, + remove it first to change weight.`); + return; + } + + this.plugin.settings.manual.push(enteredFileData); + await this.plugin.saveSettings(); + new Notice("New size added manually"); + + this.refreshDisplay(); + this.plugin.recalculateSize(); + }); + }); + + // Display all manually added weights & option to remove them + this.plugin.settings.manual.forEach((value: FileData) => { + const manualDisplay = new Setting(this.containerEl) + .setName(value.id) + .setDesc(`Weight: ${String(value.weight)}`); + + manualDisplay.addButton((button) => { + button.setIcon("trash"); + button.setTooltip("Remove manually added size"); + + button.onClick(async () => { + this.plugin.settings.manual.remove(value); + await this.plugin.saveSettings(); + this.refreshDisplay(); + }); + }); + }); + } +} diff --git a/src/settings/programetical.ts b/src/settings/programetical.ts new file mode 100644 index 0000000..2c0ffd2 --- /dev/null +++ b/src/settings/programetical.ts @@ -0,0 +1,85 @@ +import { Setting } from "obsidian"; + +import NodeFactor from "main"; + +export default class ProgrameticalSetting { + private plugin: NodeFactor; + private containerEl: HTMLElement; + + constructor(plugin: NodeFactor, containerEl: HTMLElement) { + this.plugin = plugin; + this.containerEl = containerEl; + } + + display(): void { + new Setting(this.containerEl) + .setName("Programatically set size") + .setHeading(); + + const fwdLinkWt = new Setting(this.containerEl) + .setName("Forward link weight multiplier") + .setDesc("Multiplier for forward links weight (0 to disable)."); + + fwdLinkWt.addSlider((slider) => { + slider.setLimits(0, 20, 1); + slider.setDynamicTooltip(); + slider.setValue(this.plugin.settings.fwdMultiplier); + + slider.onChange(async (value) => { + this.plugin.settings.fwdMultiplier = value; + await this.plugin.saveSettings(); + this.plugin.recalculateSize(); + }); + }); + + const travelFwdTree = new Setting(this.containerEl) + .setName("Travel forward tree") + .setDesc( + "Travel forward and add all other nodes to determine final node size.", + ); + + travelFwdTree.addToggle((toggle) => { + toggle.setValue(this.plugin.settings.fwdTree); + + toggle.onChange(async (value) => { + this.plugin.settings.fwdTree = value; + await this.plugin.saveSettings(); + this.plugin.recalculateSize(); + }); + }); + + const bwdLinkWt = new Setting(this.containerEl) + .setName("Backward link weight multiplier") + .setDesc("Multiplier for backward links weight (0 to disable)."); + + bwdLinkWt.addSlider((slider) => { + slider.setLimits(0, 20, 1); + slider.setDynamicTooltip(); + slider.setValue(this.plugin.settings.bwdMultiplier); + + slider.onChange(async (value) => { + this.plugin.settings.bwdMultiplier = value; + await this.plugin.saveSettings(); + this.plugin.recalculateSize(); + }); + }); + + const charWt = new Setting(this.containerEl) + .setName("Character per weight") + .setDesc( + "Add 1 weight to node size per no of given character (0 to disable).", + ); + + charWt.addSlider((slider) => { + slider.setLimits(0, 5000, 100); + slider.setDynamicTooltip(); + slider.setValue(this.plugin.settings.lettersPerWt); + + slider.onChange(async (value) => { + this.plugin.settings.lettersPerWt = value; + await this.plugin.saveSettings(); + this.plugin.recalculateSize(); + }); + }); + } +}