mirror of
				https://github.com/BookStackApp/BookStack.git
				synced 2025-10-31 03:50:27 +03:00 
			
		
		
		
	
		
			
				
	
	
		
			62 lines
		
	
	
		
			1.7 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			62 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', event => {
 | |
|                 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;
 | |
|     }
 | |
| } |