1
0
Fork 0
VaultUI/src/settings/Settings.ts
2022-01-19 13:54:13 +00:00

88 lines
2.1 KiB
TypeScript

import { StorageType } from "./storage/StorageType";
import { default_theme } from "../ThemeLoader";
type OnChangeListener = (key: string) => void;
export class Settings {
constructor() {
this.storage = localStorage;
this.listeners = [];
}
private storage: StorageType;
private listeners: OnChangeListener[];
registerListener(listener: OnChangeListener) {
this.listeners.push(listener);
}
alertChange(key: string) {
for (const listener of this.listeners) {
listener(key);
}
}
get apiURL(): string | null {
const apiurl = this.storage.getItem("apiURL") || "";
return apiurl;
}
set apiURL(value: string) {
this.storage.setItem("apiURL", value);
this.alertChange("apiURL");
}
get token(): string | null {
const tok = this.storage.getItem("token") || "";
return tok.length > 0 ? tok : null;
}
set token(value: string) {
this.storage.setItem("token", value);
this.alertChange("token");
}
get pageDirection(): string {
return this.storage.getItem("pageDirection") || "ltr";
}
set pageDirection(value: string) {
this.storage.setItem("pageDirection", value);
this.alertChange("pageDirection");
}
get language(): string {
return this.storage.getItem("language") || "";
}
set language(value: string) {
this.storage.setItem("language", value);
this.alertChange("language");
}
get theme(): string {
return this.storage.getItem("theme") || default_theme;
}
set theme(value: string) {
this.storage.setItem("theme", value);
this.alertChange("theme");
}
get kvEditorDefaultLanguage(): string {
return this.storage.getItem("kvEditorDefaultLanguage") || "yaml";
}
set kvEditorDefaultLanguage(value: string) {
this.storage.setItem("kvEditorDefaultLanguage", value);
this.alertChange("kvEditorDefaultLanguage");
}
get kvEditorIndent(): number {
const value = this.storage.getItem("kvEditorIndent");
if (value) return parseInt(value);
return 2;
}
set kvEditorIndent(value: number) {
this.storage.setItem("kvEditorIndent", String(value));
this.alertChange("kvEditorIndent");
}
}