visibility checkboxes

This commit is contained in:
celeste 2023-11-20 21:15:55 -06:00
parent 7b04c99072
commit e685ede86e
6 changed files with 107 additions and 18 deletions

View file

@ -27,6 +27,7 @@ export interface LoomSettings {
modelPresets: ModelPreset<Provider>[];
modelPreset: number;
visibility: Record<string, boolean>;
maxTokens: number;
temperature: number;
topP: number;

23
main.ts
View file

@ -54,6 +54,18 @@ const DEFAULT_SETTINGS: LoomSettings = {
modelPresets: [],
modelPreset: -1,
visibility: {
"visibility": true,
"modelPreset": true,
"maxTokens": true,
"n": true,
"bestOf": false,
"temperature": true,
"topP": false,
"frequencyPenalty": false,
"presencePenalty": false,
"prepend": false,
},
maxTokens: 60,
temperature: 1,
topP: 1,
@ -979,6 +991,17 @@ export default class LoomPlugin extends Plugin {
)
);
this.registerEvent(
this.app.workspace.on(
// @ts-expect-error
"loom:set-visibility-setting",
(setting: string, value: boolean) => {
this.settings.visibility[setting] = value;
this.saveAndRender();
}
)
);
this.registerEvent(
// @ts-expect-error
this.app.workspace.on("loom:search", (term: string) => this.withFile((file) => {

View file

@ -1,7 +1,7 @@
{
"id": "loom",
"name": "Loom",
"version": "1.19.4",
"version": "1.20.0",
"minAppVersion": "0.15.0",
"description": "Loom in Obsidian",
"author": "celeste",

View file

@ -1,6 +1,6 @@
{
"name": "obsidian-loom",
"version": "1.19.4",
"version": "1.20.0",
"description": "Loom in Obsidian",
"main": "main.js",
"scripts": {

View file

@ -82,6 +82,26 @@ body {
margin-bottom: 0.3em;
}
.loom__visibility {
margin-bottom: 0.7em;
}
.loom__visibility-item {
display: inline-flex;
align-items: center;
margin-right: 0.7em;
}
.loom__visibility-item-label {
font-size: var(--font-ui-small);
}
.loom__no-metavisibility {
color: var(--text-faint);
font-size: var(--font-ui-small);
margin: 0 0 0.5em 0.5em;
}
.loom__setting {
display: flex;
flex-direction: column;

View file

@ -269,26 +269,69 @@ export class LoomView extends ItemView {
renderSettings(container: HTMLElement, settings: LoomSettings) {
const settingsContainer = container.createDiv({ cls: "loom__settings" });
// visibility checkboxes
const visibilityContainer = settingsContainer.createDiv({ cls: "loom__visibility" });
const createCheckbox = (id: string, label: string, ellipsis: boolean = false) => {
const checkboxContainer = visibilityContainer.createSpan({ cls: "loom__visibility-item" });
const checkbox = checkboxContainer.createEl("input", {
attr: {
id: `loom__${id}-checkbox`,
checked: settings.visibility[id] ? "checked" : null
},
type: "checkbox",
});
checkbox.addEventListener("change", () =>
this.app.workspace.trigger("loom:set-visibility-setting", id, checkbox.checked)
);
const checkboxLabel = checkboxContainer.createEl("label", {
attr: { for: `loom__${id}-checkbox` },
cls: "loom__visibility-item-label",
text: label,
});
if (ellipsis && !settings.visibility.visibility) checkboxLabel.createSpan({
cls: "loom__no-metavisibility",
text: "...",
});
};
createCheckbox("visibility", "These checkboxes", true);
if (settings.visibility["visibility"]) {
createCheckbox("modelPreset", "Model preset");
createCheckbox("maxTokens", "Length");
createCheckbox("n", "Number of completions");
createCheckbox("bestOf", "Best of");
createCheckbox("temperature", "Temperature");
createCheckbox("topP", "Top p");
createCheckbox("frequencyPenalty", "Frequency penalty");
createCheckbox("presencePenalty", "Presence penalty");
createCheckbox("prepend", "Prepend sequence");
}
// preset dropdown
const presetContainer = settingsContainer.createDiv({ cls: "loom__setting" });
presetContainer.createEl("label", { text: "Model preset" });
const presetDropdown = presetContainer.createEl("select");
if (settings.visibility["modelPreset"]) {
const presetContainer = settingsContainer.createDiv({ cls: "loom__setting" });
presetContainer.createEl("label", { text: "Model preset" });
const presetDropdown = presetContainer.createEl("select");
if (settings.modelPresets.length === 0)
presetDropdown.createEl("option").createEl("i", { text: "[You have no presets. Go to Settings → Loom.]" });
else {
for (const i in settings.modelPresets) {
const preset = settings.modelPresets[i];
presetDropdown.createEl("option", {
text: preset.name,
attr: { selected: settings.modelPreset === parseInt(i), value: i },
});
if (settings.modelPresets.length === 0)
presetDropdown.createEl("option").createEl("i", { text: "[You have no presets. Go to Settings → Loom.]" });
else {
for (const i in settings.modelPresets) {
const preset = settings.modelPresets[i];
presetDropdown.createEl("option", {
text: preset.name,
attr: { selected: settings.modelPreset === parseInt(i), value: i },
});
}
presetDropdown.addEventListener("change", () =>
this.app.workspace.trigger("loom:set-setting", "modelPreset", presetDropdown.value)
);
}
presetDropdown.addEventListener("change", () =>
this.app.workspace.trigger("loom:set-setting", "modelPreset", presetDropdown.value)
);
}
// other settings
@ -299,6 +342,8 @@ export class LoomView extends ItemView {
value: string,
type: "string" | "int" | "float"
) => {
if (!settings.visibility[setting]) return;
const parsers = {
"string": (value: string) => value,
"int": (value: string) => parseInt(value),