]> BookStack Code Mirror - bookstack/blobdiff - resources/js/markdown/settings.js
Opensearch: Fixed XML declaration when php short tags enabled
[bookstack] / resources / js / markdown / settings.js
index 6dd1422108a0e30e81fcf132f33ab2766dbafa59..b843aaa8a2b2bed55133a17c075473285db5c595 100644 (file)
@@ -1,40 +1,63 @@
-import {kebabToCamel} from "../services/text";
-
-
 export class Settings {
 
-    constructor(initialSettings) {
-        this.settingMap = {};
+    constructor(settingInputs) {
+        this.settingMap = {
+            scrollSync: true,
+            showPreview: true,
+            editorWidth: 50,
+        };
         this.changeListeners = {};
-        this.merge(initialSettings);
+        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) {
-        key = this.normaliseKey(key);
         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[this.normaliseKey(key)] || null;
-    }
-
-    merge(settings) {
-        for (const [key, value] of Object.entries(settings)) {
-            this.set(key, value);
-        }
+        return this.settingMap[key] || null;
     }
 
     onChange(key, callback) {
-        key = this.normaliseKey(key);
-        const listeners = this.changeListeners[this.normaliseKey(key)] || [];
+        const listeners = this.changeListeners[key] || [];
         listeners.push(callback);
-        this.changeListeners[this.normaliseKey(key)] = listeners;
+        this.changeListeners[key] = listeners;
     }
 
-    normaliseKey(key) {
-        return kebabToCamel(key.replace('md-', ''));
-    }
-}
\ No newline at end of file
+}