This commit is contained in:
Andrew Pimenov 2026-09-04 10:06:36 +03:00 • committed by GitHub
commit 08a9bf84fd
No known key found for this signature in database
GPG key ID: B5690EEEBB952194

View file

@ -382,64 +382,75 @@ function applySettings(): void {
); );
} }
function bindFormattingSettings(): void { function getFormattingElements() {
const themeSel = $<HTMLSelectElement>("#set-theme"); return {
const precision = $<HTMLInputElement>("#set-precision"); themeSel: $<HTMLSelectElement>("#set-theme"),
const groupSep = $<HTMLSelectElement>("#set-groupsep"); precision: $<HTMLInputElement>("#set-precision"),
const decimalSep = $<HTMLSelectElement>("#set-decimalsep"); groupSep: $<HTMLSelectElement>("#set-groupsep"),
const dateFmt = $<HTMLSelectElement>("#set-dateformat"); decimalSep: $<HTMLSelectElement>("#set-decimalsep"),
const langSel = $<HTMLSelectElement>("#set-lang"); dateFmt: $<HTMLSelectElement>("#set-dateformat"),
const fontSize = $<HTMLInputElement>("#set-fontsize"); langSel: $<HTMLSelectElement>("#set-lang"),
const resultsWidth = $<HTMLInputElement>("#set-resultswidth"); fontSize: $<HTMLInputElement>("#set-fontsize"),
resultsWidth: $<HTMLInputElement>("#set-resultswidth"),
themeSel.value = settings.theme;
precision.value = String(settings.precision);
groupSep.value = settings.groupSeparator;
decimalSep.value = settings.decimalSeparator;
dateFmt.value = settings.dateFormat;
langSel.value = settings.language;
fontSize.value = String(settings.fontSize);
resultsWidth.value = String(settings.resultsWidth);
const save = () => {
settings.theme = themeSel.value as SettingsData["theme"];
settings.precision = Math.max(
0,
Math.min(15, Number(precision.value) || 2),
);
settings.groupSeparator = groupSep.value;
settings.decimalSeparator = decimalSep.value;
// "1,234,56" is unreadable — a comma decimal forces a space group separator
if (settings.decimalSeparator === settings.groupSeparator) {
settings.groupSeparator = settings.decimalSeparator === "," ? " " : ",";
groupSep.value = settings.groupSeparator;
}
settings.dateFormat = dateFmt.value as SettingsData["dateFormat"];
settings.language = langSel.value;
settings.fontSize = Math.max(
10,
Math.min(32, Number(fontSize.value) || 15),
);
settings.resultsWidth = Math.max(
20,
Math.min(60, Number(resultsWidth.value) || 42),
);
applySettings();
void saveSettings(settings);
}; };
}
function populateFormattingSettings(): void {
const els = getFormattingElements();
els.themeSel.value = settings.theme;
els.precision.value = String(settings.precision);
els.groupSep.value = settings.groupSeparator;
els.decimalSep.value = settings.decimalSeparator;
els.dateFmt.value = settings.dateFormat;
els.langSel.value = settings.language;
els.fontSize.value = String(settings.fontSize);
els.resultsWidth.value = String(settings.resultsWidth);
}
function saveFormattingSettings(): void {
const els = getFormattingElements();
settings.theme = els.themeSel.value as SettingsData["theme"];
settings.precision = Math.max(
0,
Math.min(15, Number(els.precision.value) || 2),
);
settings.groupSeparator = els.groupSep.value;
settings.decimalSeparator = els.decimalSep.value;
// "1,234,56" is unreadable — a comma decimal forces a space group separator
if (settings.decimalSeparator === settings.groupSeparator) {
settings.groupSeparator = settings.decimalSeparator === "," ? " " : ",";
els.groupSep.value = settings.groupSeparator;
}
settings.dateFormat = els.dateFmt.value as SettingsData["dateFormat"];
settings.language = els.langSel.value;
settings.fontSize = Math.max(
10,
Math.min(32, Number(els.fontSize.value) || 15),
);
settings.resultsWidth = Math.max(
20,
Math.min(60, Number(els.resultsWidth.value) || 42),
);
applySettings();
void saveSettings(settings);
}
function bindFormattingSettings(): void {
populateFormattingSettings();
const els = getFormattingElements();
for (const el of [ for (const el of [
themeSel, els.themeSel,
precision, els.precision,
groupSep, els.groupSep,
decimalSep, els.decimalSep,
dateFmt, els.dateFmt,
langSel, els.langSel,
fontSize, els.fontSize,
]) { ]) {
el.addEventListener("change", save); el.addEventListener("change", saveFormattingSettings);
} }
resultsWidth.addEventListener("input", save); // live while sliding els.resultsWidth.addEventListener("input", saveFormattingSettings); // live while sliding
matchMedia("(prefers-color-scheme: dark)").addEventListener("change", () => { matchMedia("(prefers-color-scheme: dark)").addEventListener("change", () => {
if (settings.theme === "system") applySettings(); if (settings.theme === "system") applySettings();