language-manager.js
1 import attachLanguageEventListenersDefault from '../utils/event/attach-language-event-listeners.js'; 2 import bindEventHandlersDefault from '../utils/event/bind-event-handlers.js'; 3 import detachLanguageEventListenersDefault from '../utils/event/detach-language-event-listeners.js'; 4 export class LanguageManager { 5 constructor(uiManager) { 6 this.uiManager = uiManager; 7 8 this.languageSelector = this.uiManager.get('languageSelector'); 9 10 this._initialize(); 11 } 12 13 async _initialize() { 14 await this._initializeLanguageButtons().catch(error => { 15 console.error('Failed to initialize language buttons:', error); 16 }); 17 18 await this._attachEventListeners().catch(error => { 19 console.error('Failed to attach language event listeners:', error); 20 }); 21 } 22 23 async _initializeLanguageButtons() { 24 try { 25 const buttons = queryLanguageButtonsDefault(this.uiManager, this.languageSelector); 26 this.japaneseButton = buttons.japaneseButton; 27 this.chineseButton = buttons.chineseButton; 28 29 const handlers = { 30 handleChineseClick: () => this.handleLanguageSelection('zh'), 31 handleJapaneseClick: () => this.handleLanguageSelection('ja'), 32 }; 33 34 this.eventHandlers = bindEventHandlersDefault(this, handlers); 35 } catch (error) { 36 console.error('Failed to initialize language buttons:', error); 37 } 38 } 39 40 async _attachEventListeners() { 41 try { 42 if (!this.eventHandlers) { 43 console.warn('Event handlers not initialized, cannot attach language event listeners'); 44 return; 45 } 46 47 if (!this.japaneseButton && !this.chineseButton) { 48 console.warn('Language buttons not initialized, cannot attach language event listeners'); 49 return; 50 } 51 52 attachLanguageEventListenersDefault( 53 this.japaneseButton, 54 this.chineseButton, 55 this.eventHandlers, 56 ); 57 } catch (error) { 58 console.error('Failed to attach language event listeners:', error); 59 } 60 } 61 62 async _detachEventListeners() { 63 try { 64 if (!this.eventHandlers) { 65 console.warn('Event handlers not initialized, cannot detach language event listeners'); 66 return; 67 } 68 69 if (!this.japaneseButton && !this.chineseButton) { 70 console.warn('Language buttons not initialized, cannot detach language event listeners'); 71 return; 72 } 73 74 detachLanguageEventListenersDefault( 75 this.japaneseButton, 76 this.chineseButton, 77 this.eventHandlers, 78 ); 79 } catch (error) { 80 console.error('Failed to detach language event listeners:', error); 81 } 82 } 83 84 async handleLanguageSelection(language) { 85 try { 86 handleLanguageSelectionDefault(this.uiManager, language); 87 } catch (error) { 88 console.error(`Failed to handle ${language} language selection:`, error); 89 } 90 } 91 92 cleanup() { 93 this._detachEventListeners().catch(error => { 94 console.error('Error during language manager cleanup:', error); 95 }); 96 } 97 }