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 NodeFactor from "./main";
|
||||||
|
import FileSuggest from "./file-suggest";
|
||||||
|
import { FileData } from "./types";
|
||||||
|
|
||||||
export default class NodeFactorSettingTab extends PluginSettingTab {
|
export default class NodeFactorSettingTab extends PluginSettingTab {
|
||||||
plugin: NodeFactor;
|
plugin: NodeFactor;
|
||||||
|
|
@ -14,57 +23,61 @@ export default class NodeFactorSettingTab extends PluginSettingTab {
|
||||||
const { containerEl } = this;
|
const { containerEl } = this;
|
||||||
containerEl.empty();
|
containerEl.empty();
|
||||||
|
|
||||||
|
new Setting(containerEl)
|
||||||
|
.setName("Programatically Set Size")
|
||||||
|
.setHeading();
|
||||||
|
|
||||||
new Setting(containerEl)
|
new Setting(containerEl)
|
||||||
.setName("Forward link weight multiplier")
|
.setName("Forward link weight multiplier")
|
||||||
.setDesc("Multiplier for forward links weight (0 to disable).")
|
.setDesc("Multiplier for forward links weight (0 to disable).")
|
||||||
.addSlider((slider) =>
|
.addSlider((slider) => {
|
||||||
slider
|
slider
|
||||||
.setLimits(0, 20, 1)
|
.setLimits(0, 20, 1)
|
||||||
.setDynamicTooltip()
|
.setDynamicTooltip()
|
||||||
.setValue(this.plugin.settings.fwdMultiplier)
|
.setValue(this.plugin.settings.fwdMultiplier)
|
||||||
.onChange(async (value) => {
|
.onChange(async (value) => {
|
||||||
this.plugin.recalculateSize();
|
|
||||||
this.plugin.settings.fwdMultiplier = value;
|
this.plugin.settings.fwdMultiplier = value;
|
||||||
await this.plugin.saveSettings();
|
await this.plugin.saveSettings();
|
||||||
}),
|
this.plugin.recalculateSize();
|
||||||
);
|
});
|
||||||
|
});
|
||||||
|
|
||||||
new Setting(containerEl)
|
new Setting(containerEl)
|
||||||
.setName("Travel forward tree")
|
.setName("Travel forward tree")
|
||||||
.setDesc(
|
.setDesc(
|
||||||
"Travel forward and add all other nodes to determine final node size.",
|
"Travel forward and add all other nodes to determine final node size.",
|
||||||
)
|
)
|
||||||
.addToggle((toggle) =>
|
.addToggle((toggle) => {
|
||||||
toggle
|
toggle
|
||||||
.setValue(this.plugin.settings.fwdTree)
|
.setValue(this.plugin.settings.fwdTree)
|
||||||
.onChange(async (value) => {
|
.onChange(async (value) => {
|
||||||
this.plugin.recalculateSize();
|
|
||||||
this.plugin.settings.fwdTree = value;
|
this.plugin.settings.fwdTree = value;
|
||||||
await this.plugin.saveSettings();
|
await this.plugin.saveSettings();
|
||||||
}),
|
this.plugin.recalculateSize();
|
||||||
);
|
});
|
||||||
|
});
|
||||||
|
|
||||||
new Setting(containerEl)
|
new Setting(containerEl)
|
||||||
.setName("Backward link weight multiplier")
|
.setName("Backward link weight multiplier")
|
||||||
.setDesc("Multiplier for backward links weight (0 to disable).")
|
.setDesc("Multiplier for backward links weight (0 to disable).")
|
||||||
.addSlider((slider) =>
|
.addSlider((slider) => {
|
||||||
slider
|
slider
|
||||||
.setLimits(0, 20, 1)
|
.setLimits(0, 20, 1)
|
||||||
.setDynamicTooltip()
|
.setDynamicTooltip()
|
||||||
.setValue(this.plugin.settings.bwdMultiplier)
|
.setValue(this.plugin.settings.bwdMultiplier)
|
||||||
.onChange(async (value) => {
|
.onChange(async (value) => {
|
||||||
this.plugin.recalculateSize();
|
|
||||||
this.plugin.settings.bwdMultiplier = value;
|
this.plugin.settings.bwdMultiplier = value;
|
||||||
await this.plugin.saveSettings();
|
await this.plugin.saveSettings();
|
||||||
}),
|
this.plugin.recalculateSize();
|
||||||
);
|
});
|
||||||
|
});
|
||||||
|
|
||||||
new Setting(containerEl)
|
new Setting(containerEl)
|
||||||
.setName("Character per weight")
|
.setName("Character per weight")
|
||||||
.setDesc(
|
.setDesc(
|
||||||
"Add 1 weight to node size per no of given Character (0 to disable).",
|
"Add 1 weight to node size per no of given Character (0 to disable).",
|
||||||
)
|
)
|
||||||
.addSlider((slider) =>
|
.addSlider((slider) => {
|
||||||
slider
|
slider
|
||||||
.setLimits(0, 5000, 100)
|
.setLimits(0, 5000, 100)
|
||||||
.setDynamicTooltip()
|
.setDynamicTooltip()
|
||||||
|
|
@ -72,7 +85,56 @@ export default class NodeFactorSettingTab extends PluginSettingTab {
|
||||||
.onChange(async (value) => {
|
.onChange(async (value) => {
|
||||||
this.plugin.settings.lettersPerWt = value;
|
this.plugin.settings.lettersPerWt = value;
|
||||||
await this.plugin.saveSettings();
|
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;
|
bwdMultiplier: number;
|
||||||
|
|
||||||
lettersPerWt: number;
|
lettersPerWt: number;
|
||||||
|
|
||||||
|
manual: Array<FileData>;
|
||||||
|
}
|
||||||
|
|
||||||
|
export interface FileData {
|
||||||
|
id: string;
|
||||||
|
weight: number;
|
||||||
}
|
}
|
||||||
|
|
||||||
export const DEFAULT_SETTINGS: NodeFactorSettings = {
|
export const DEFAULT_SETTINGS: NodeFactorSettings = {
|
||||||
|
|
@ -21,4 +28,6 @@ export const DEFAULT_SETTINGS: NodeFactorSettings = {
|
||||||
bwdMultiplier: 1,
|
bwdMultiplier: 1,
|
||||||
|
|
||||||
lettersPerWt: 0,
|
lettersPerWt: 0,
|
||||||
|
|
||||||
|
manual: new Array<FileData>(),
|
||||||
};
|
};
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue