mirror of
https://github.com/calfmoon/node-factor.git
synced 2026-07-22 05:42:24 +00:00
feat(ui): add option to manually add weight
This commit is contained in:
parent
783607292d
commit
fd824ea406
3 changed files with 119 additions and 16 deletions
32
src/file-suggest.ts
Normal file
32
src/file-suggest.ts
Normal file
|
|
@ -0,0 +1,32 @@
|
|||
import { App, AbstractInputSuggest } from "obsidian";
|
||||
|
||||
export default class FileSuggest extends AbstractInputSuggest<string> {
|
||||
private files: Array<string>;
|
||||
private inputEl: HTMLInputElement;
|
||||
|
||||
constructor(app: App, inputEl: HTMLInputElement) {
|
||||
super(app, inputEl);
|
||||
|
||||
this.inputEl = inputEl;
|
||||
this.files = this.app.vault.getFiles().map((file) => file.path);
|
||||
}
|
||||
|
||||
getSuggestions(inputStr: string): string[] {
|
||||
const inputLower = inputStr.toLowerCase();
|
||||
|
||||
return this.files.filter((file) =>
|
||||
file.toLowerCase().includes(inputLower),
|
||||
);
|
||||
}
|
||||
|
||||
renderSuggestion(folder: string, el: HTMLElement): void {
|
||||
el.setText(folder);
|
||||
}
|
||||
|
||||
selectSuggestion(folder: string): void {
|
||||
this.inputEl.value = folder;
|
||||
const event = new Event("input");
|
||||
this.inputEl.dispatchEvent(event);
|
||||
this.close();
|
||||
}
|
||||
}
|
||||
|
|
@ -1,6 +1,15 @@
|
|||
import { App, PluginSettingTab, Setting } from "obsidian";
|
||||
import {
|
||||
App,
|
||||
ButtonComponent,
|
||||
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;
|
||||
|
|
@ -14,57 +23,61 @@ export default class NodeFactorSettingTab extends PluginSettingTab {
|
|||
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) =>
|
||||
.addSlider((slider) => {
|
||||
slider
|
||||
.setLimits(0, 20, 1)
|
||||
.setDynamicTooltip()
|
||||
.setValue(this.plugin.settings.fwdMultiplier)
|
||||
.onChange(async (value) => {
|
||||
this.plugin.recalculateSize();
|
||||
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) =>
|
||||
.addToggle((toggle) => {
|
||||
toggle
|
||||
.setValue(this.plugin.settings.fwdTree)
|
||||
.onChange(async (value) => {
|
||||
this.plugin.recalculateSize();
|
||||
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) =>
|
||||
.addSlider((slider) => {
|
||||
slider
|
||||
.setLimits(0, 20, 1)
|
||||
.setDynamicTooltip()
|
||||
.setValue(this.plugin.settings.bwdMultiplier)
|
||||
.onChange(async (value) => {
|
||||
this.plugin.recalculateSize();
|
||||
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) =>
|
||||
.addSlider((slider) => {
|
||||
slider
|
||||
.setLimits(0, 5000, 100)
|
||||
.setDynamicTooltip()
|
||||
|
|
@ -72,7 +85,56 @@ export default class NodeFactorSettingTab extends PluginSettingTab {
|
|||
.onChange(async (value) => {
|
||||
this.plugin.settings.lettersPerWt = value;
|
||||
await this.plugin.saveSettings();
|
||||
}),
|
||||
);
|
||||
this.plugin.recalculateSize();
|
||||
});
|
||||
});
|
||||
|
||||
new Setting(containerEl).setName("Manually Set Weight").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) => {
|
||||
// fileName = value;
|
||||
if (value != "") submitButton.setDisabled(false);
|
||||
});
|
||||
})
|
||||
.addSlider((slider) => {
|
||||
selectedWeight = slider;
|
||||
slider
|
||||
.setLimits(0, 100, 5)
|
||||
.setDynamicTooltip()
|
||||
.setValue(0)
|
||||
.onChange(async (value) => {
|
||||
// fileNodeSize = value;
|
||||
});
|
||||
})
|
||||
.addButton((button) => {
|
||||
submitButton = button;
|
||||
button
|
||||
.setDisabled(true)
|
||||
.setButtonText("Add")
|
||||
.setTooltip("Click to add")
|
||||
.onClick(async () => {
|
||||
let enteredFileData: FileData = {
|
||||
id: selectedFile.getValue(),
|
||||
weight: selectedWeight.getValue(),
|
||||
};
|
||||
this.plugin.settings.manual.push(enteredFileData);
|
||||
|
||||
selectedWeight.setValue(0);
|
||||
selectedFile.setValue("");
|
||||
await this.plugin.saveSettings();
|
||||
this.plugin.recalculateSize();
|
||||
});
|
||||
});
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -12,6 +12,13 @@ export interface NodeFactorSettings {
|
|||
bwdMultiplier: number;
|
||||
|
||||
lettersPerWt: number;
|
||||
|
||||
manual: Array<FileData>;
|
||||
}
|
||||
|
||||
export interface FileData {
|
||||
id: string;
|
||||
weight: number;
|
||||
}
|
||||
|
||||
export const DEFAULT_SETTINGS: NodeFactorSettings = {
|
||||
|
|
@ -21,4 +28,6 @@ export const DEFAULT_SETTINGS: NodeFactorSettings = {
|
|||
bwdMultiplier: 1,
|
||||
|
||||
lettersPerWt: 0,
|
||||
|
||||
manual: new Array<FileData>(),
|
||||
};
|
||||
|
|
|
|||
Loading…
Reference in a new issue