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"); } }