| |
|
|
| import { StateManager } from '../services/state-manager.js'; |
| import { TranslationService } from '../services/translation-service.js'; |
|
|
| export const SettingsComponent = { |
| elements: { |
| settingsBtn: null, |
| settingsModal: null, |
| doneSettingsBtn: null, |
| closeSettingsBtn: null, |
| frRadioBtnSettings: null, |
| enRadioBtnSettings: null, |
| increaseFontSizeBtn: null, |
| decreaseFontSizeBtn: null, |
| resetFontSizeBtn: null |
| }, |
|
|
| constants: { |
| MIN_FONT_SIZE: 0.75, |
| MAX_FONT_SIZE: 1.25, |
| FONT_SIZE_STEP: 0.125 |
| }, |
|
|
| |
| |
| |
| init() { |
| this.elements.settingsBtn = document.getElementById('settings-btn'); |
| this.elements.settingsModal = document.getElementById('settings-modal'); |
| this.elements.doneSettingsBtn = document.getElementById('done-settings'); |
| this.elements.closeSettingsBtn = document.getElementById('close-settings-btn'); |
| this.elements.frRadioBtnSettings = document.getElementById('lang-fr-settings'); |
| this.elements.enRadioBtnSettings = document.getElementById('lang-en-settings'); |
| this.elements.increaseFontSizeBtn = document.getElementById('increase-font-size-btn'); |
| this.elements.decreaseFontSizeBtn = document.getElementById('decrease-font-size-btn'); |
| this.elements.resetFontSizeBtn = document.getElementById('reset-font-size-btn'); |
|
|
| this.attachOutsideClickListener(); |
| this.attachEventListeners(); |
| this.updateLanguageRadioButtons(); |
| }, |
|
|
| attachOutsideClickListener() { |
| this.elements.settingsModal.addEventListener('click', (e) => { |
| |
| if (e.target === this.elements.settingsModal) { |
| this.closeModal(); |
| } |
| }); |
| }, |
|
|
| |
| |
| |
| attachEventListeners() { |
| this.elements.settingsBtn.addEventListener('click', (e) => this.openModal(e)); |
| this.elements.closeSettingsBtn.addEventListener('click', () => this.closeModal()); |
| this.elements.doneSettingsBtn.addEventListener('click', () => this.closeModal()); |
|
|
| |
| this.elements.frRadioBtnSettings.addEventListener('change', () => { |
| TranslationService.setLanguage(this.elements.frRadioBtnSettings.value); |
| this.updateLanguageRadioButtons(); |
| }); |
| this.elements.enRadioBtnSettings.addEventListener('change', () => { |
| TranslationService.setLanguage(this.elements.enRadioBtnSettings.value); |
| this.updateLanguageRadioButtons(); |
| }); |
|
|
| |
| this.elements.increaseFontSizeBtn.addEventListener('click', () => { |
| this.updateFontSize(StateManager.fontSize + this.constants.FONT_SIZE_STEP); |
| }); |
| this.elements.decreaseFontSizeBtn.addEventListener('click', () => { |
| this.updateFontSize(StateManager.fontSize - this.constants.FONT_SIZE_STEP); |
| }); |
| this.elements.resetFontSizeBtn.addEventListener('click', () => { |
| this.updateFontSize(1); |
| }); |
| }, |
|
|
| |
| |
| |
| openModal(e) { |
| e.preventDefault(); |
| this.elements.settingsModal.style.display = ''; |
| }, |
|
|
| |
| |
| |
| closeModal() { |
| this.elements.settingsModal.style.display = 'none'; |
| }, |
|
|
| |
| |
| |
| |
| updateFontSize(newSize) { |
| const clampedSize = Math.min( |
| this.constants.MAX_FONT_SIZE, |
| Math.max(this.constants.MIN_FONT_SIZE, newSize) |
| ); |
| StateManager.setFontSize(clampedSize); |
| document.documentElement.style.fontSize = clampedSize + 'rem'; |
| }, |
|
|
| |
| |
| |
| updateLanguageRadioButtons() { |
| this.elements.frRadioBtnSettings.checked = StateManager.currentLang === 'fr'; |
| this.elements.enRadioBtnSettings.checked = StateManager.currentLang === 'en'; |
| } |
| }; |