Split settings into multiple files

This commit is contained in:
Simon Cambier
2025-02-15 18:15:43 +01:00
parent 230df3f4b4
commit d495f49a35
11 changed files with 977 additions and 912 deletions
+107
View File
@@ -0,0 +1,107 @@
import { Setting, SliderComponent } from 'obsidian'
import {
getDefaultSettings,
} from 'src/settings'
import type { OmnisearchSettings } from './utils'
import { saveSettings } from './utils'
import type { WeightingSettings } from './utils'
import type OmnisearchPlugin from 'src/main'
export function injectSettingsWeighting(
plugin: OmnisearchPlugin,
settings: OmnisearchSettings,
containerEl: HTMLElement,
refreshDisplay: () => void
) {
function weightSlider(
cb: SliderComponent,
key: keyof WeightingSettings
): void {
cb.setLimits(1, 10, 0.5)
.setValue(settings[key])
.setDynamicTooltip()
.onChange(async v => {
settings[key] = v
await saveSettings(plugin)
})
}
const defaultSettings = getDefaultSettings(plugin.app)
new Setting(containerEl).setName('Results weighting').setHeading()
new Setting(containerEl)
.setName(
`File name & declared aliases (default: ${defaultSettings.weightBasename})`
)
.addSlider(cb => weightSlider(cb, 'weightBasename'))
new Setting(containerEl)
.setName(`File directory (default: ${defaultSettings.weightDirectory})`)
.addSlider(cb => weightSlider(cb, 'weightDirectory'))
new Setting(containerEl)
.setName(`Headings level 1 (default: ${defaultSettings.weightH1})`)
.addSlider(cb => weightSlider(cb, 'weightH1'))
new Setting(containerEl)
.setName(`Headings level 2 (default: ${defaultSettings.weightH2})`)
.addSlider(cb => weightSlider(cb, 'weightH2'))
new Setting(containerEl)
.setName(`Headings level 3 (default: ${defaultSettings.weightH3})`)
.addSlider(cb => weightSlider(cb, 'weightH3'))
new Setting(containerEl)
.setName(`Tags (default: ${defaultSettings.weightUnmarkedTags})`)
.addSlider(cb => weightSlider(cb, 'weightUnmarkedTags'))
new Setting(containerEl)
.setName('Header properties fields')
.setDesc(
'You can set custom weights for values of header properties (e.g. "keywords"). Weights under 1.0 will downrank the results.'
)
for (let i = 0; i < settings.weightCustomProperties.length; i++) {
const item = settings.weightCustomProperties[i]
new Setting(containerEl)
.setName((i + 1).toString() + '.')
// TODO: add autocompletion from app.metadataCache.getAllPropertyInfos()
.addText(text => {
text
.setPlaceholder('Property name')
.setValue(item.name)
.onChange(async v => {
item.name = v
await saveSettings(plugin)
})
})
.addSlider(cb => {
cb.setLimits(0.1, 5, 0.1)
.setValue(item.weight)
.setDynamicTooltip()
.onChange(async v => {
item.weight = v
await saveSettings(plugin)
})
})
// Remove the tag
.addButton(btn => {
btn.setButtonText('Remove')
btn.onClick(async () => {
settings.weightCustomProperties.splice(i, 1)
await saveSettings(plugin)
refreshDisplay()
})
})
}
// Add a new custom tag
new Setting(containerEl).addButton(btn => {
btn.setButtonText('Add a new property')
btn.onClick(_cb => {
settings.weightCustomProperties.push({ name: '', weight: 1 })
refreshDisplay()
})
})
}