X-Git-Url: http://source.bookstackapp.com/bookstack/blobdiff_plain/ec3713bc743d56d2aeea5fe6890f8843dce63127..refs/pull/4815/head:/resources/js/markdown/settings.js diff --git a/resources/js/markdown/settings.js b/resources/js/markdown/settings.js index 6dd142210..b843aaa8a 100644 --- a/resources/js/markdown/settings.js +++ b/resources/js/markdown/settings.js @@ -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 +}