mirror of
https://github.com/BookStackApp/BookStack.git
synced 2024-11-25 17:57:28 +08:00
64 lines
1.7 KiB
JavaScript
64 lines
1.7 KiB
JavaScript
export class Settings {
|
|
|
|
constructor(settingInputs) {
|
|
this.settingMap = {
|
|
scrollSync: true,
|
|
showPreview: true,
|
|
editorWidth: 50,
|
|
};
|
|
this.changeListeners = {};
|
|
this.loadFromLocalStorage();
|
|
this.applyToInputs(settingInputs);
|
|
this.listenToInputChanges(settingInputs);
|
|
}
|
|
|
|
applyToInputs(inputs) {
|
|
for (const input of inputs) {
|
|
const name = input.getAttribute('name').replace('md-', '');
|
|
input.checked = this.settingMap[name];
|
|
}
|
|
}
|
|
|
|
listenToInputChanges(inputs) {
|
|
for (const input of inputs) {
|
|
input.addEventListener('change', () => {
|
|
const name = input.getAttribute('name').replace('md-', '');
|
|
this.set(name, input.checked);
|
|
});
|
|
}
|
|
}
|
|
|
|
loadFromLocalStorage() {
|
|
const lsValString = window.localStorage.getItem('md-editor-settings');
|
|
if (!lsValString) {
|
|
return;
|
|
}
|
|
|
|
const lsVals = JSON.parse(lsValString);
|
|
for (const [key, value] of Object.entries(lsVals)) {
|
|
if (value !== null && this.settingMap[key] !== undefined) {
|
|
this.settingMap[key] = value;
|
|
}
|
|
}
|
|
}
|
|
|
|
set(key, value) {
|
|
this.settingMap[key] = value;
|
|
window.localStorage.setItem('md-editor-settings', JSON.stringify(this.settingMap));
|
|
for (const listener of (this.changeListeners[key] || [])) {
|
|
listener(value);
|
|
}
|
|
}
|
|
|
|
get(key) {
|
|
return this.settingMap[key] || null;
|
|
}
|
|
|
|
onChange(key, callback) {
|
|
const listeners = this.changeListeners[key] || [];
|
|
listeners.push(callback);
|
|
this.changeListeners[key] = listeners;
|
|
}
|
|
|
|
}
|