mirror of
https://github.com/calfmoon/node-factor.git
synced 2026-07-22 05:42:24 +00:00
refactor: modularize settings file
This commit is contained in:
parent
9d2b9769c4
commit
cd5f4c97c9
6 changed files with 224 additions and 167 deletions
|
|
@ -1,7 +1,7 @@
|
||||||
import { Plugin } from "obsidian";
|
import { Plugin } from "obsidian";
|
||||||
|
|
||||||
import { ObsidianNode, NodeFactorSettings, DEFAULT_SETTINGS } from "./types";
|
import { ObsidianNode, NodeFactorSettings, DEFAULT_SETTINGS } from "types";
|
||||||
import NodeFactorSettingTab from "./settings";
|
import NodeFactorSettingTab from "settings";
|
||||||
|
|
||||||
export default class NodeFactor extends Plugin {
|
export default class NodeFactor extends Plugin {
|
||||||
settings: NodeFactorSettings;
|
settings: NodeFactorSettings;
|
||||||
|
|
|
||||||
165
src/settings.ts
165
src/settings.ts
|
|
@ -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();
|
|
||||||
});
|
|
||||||
});
|
|
||||||
});
|
|
||||||
}
|
|
||||||
}
|
|
||||||
26
src/settings/index.ts
Normal file
26
src/settings/index.ts
Normal file
|
|
@ -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();
|
||||||
|
}
|
||||||
|
}
|
||||||
111
src/settings/manual.ts
Normal file
111
src/settings/manual.ts
Normal file
|
|
@ -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();
|
||||||
|
});
|
||||||
|
});
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
85
src/settings/programetical.ts
Normal file
85
src/settings/programetical.ts
Normal file
|
|
@ -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();
|
||||||
|
});
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
Loading…
Reference in a new issue