| class SettingsView { | |
| constructor(section) { | |
| this.section = section; | |
| this.themeToggle = section.querySelector('[data-theme-toggle]'); | |
| this.marketIntervalInput = section.querySelector('[data-market-interval]'); | |
| this.newsIntervalInput = section.querySelector('[data-news-interval]'); | |
| this.layoutToggle = section.querySelector('[data-layout-toggle]'); | |
| } | |
| init() { | |
| this.loadPreferences(); | |
| this.bindEvents(); | |
| } | |
| loadPreferences() { | |
| const theme = localStorage.getItem('dashboard-theme') || 'dark'; | |
| document.body.dataset.theme = theme; | |
| if (this.themeToggle) { | |
| this.themeToggle.checked = theme === 'light'; | |
| } | |
| const marketInterval = localStorage.getItem('market-interval') || 60; | |
| const newsInterval = localStorage.getItem('news-interval') || 120; | |
| if (this.marketIntervalInput) this.marketIntervalInput.value = marketInterval; | |
| if (this.newsIntervalInput) this.newsIntervalInput.value = newsInterval; | |
| const layout = localStorage.getItem('layout-density') || 'spacious'; | |
| document.body.dataset.layout = layout; | |
| if (this.layoutToggle) { | |
| this.layoutToggle.checked = layout === 'compact'; | |
| } | |
| } | |
| bindEvents() { | |
| if (this.themeToggle) { | |
| this.themeToggle.addEventListener('change', () => { | |
| const theme = this.themeToggle.checked ? 'light' : 'dark'; | |
| document.body.dataset.theme = theme; | |
| localStorage.setItem('dashboard-theme', theme); | |
| }); | |
| } | |
| if (this.marketIntervalInput) { | |
| this.marketIntervalInput.addEventListener('change', () => { | |
| localStorage.setItem('market-interval', this.marketIntervalInput.value); | |
| }); | |
| } | |
| if (this.newsIntervalInput) { | |
| this.newsIntervalInput.addEventListener('change', () => { | |
| localStorage.setItem('news-interval', this.newsIntervalInput.value); | |
| }); | |
| } | |
| if (this.layoutToggle) { | |
| this.layoutToggle.addEventListener('change', () => { | |
| const layout = this.layoutToggle.checked ? 'compact' : 'spacious'; | |
| document.body.dataset.layout = layout; | |
| localStorage.setItem('layout-density', layout); | |
| }); | |
| } | |
| } | |
| } | |
| export default SettingsView; | |