88 lines
2.1 KiB
TypeScript
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");
|
|
}
|
|
}
|