UNPKG

reldens

Version:
133 lines (123 loc) 4.63 kB
/** * * Reldens - ChatTabs * */ const { ChatConst } = require('../constants'); const { Logger, sc } = require('@reldens/utils'); class ChatTabs { constructor(gameManager, uiScene) { this.gameManager = gameManager; this.uiScene = uiScene; this.showTabs = this.gameManager.config.get('client/ui/chat/showTabs'); this.containerTemplate = false; this.headerTemplate = false; this.contentTemplate = false; this.createTabs(); this.activateTabs(); } createTabs() { if(!this.isReady()){ return false; } let chatTypes = sc.get(this.gameManager.initialGameData, 'chatTypes', []); if(0 === chatTypes.length){ Logger.info('Chat types empty.'); return false; } let chatContentsElement = this.gameManager.gameDom.getElement(ChatConst.SELECTORS.CONTENTS); if(!chatContentsElement){ Logger.info('Chat contents element not found.'); return false; } if(!this.fetchTemplates()){ return false; } let tabsHeaders = ''; let tabsContents = ''; let i = 0; for(let chatType of chatTypes){ if(!chatType.show_tab){ continue; } let tabKey = chatType.key; let tabId = chatType.id; let headerClone = Object.assign({}, {headerTemplate: this.headerTemplate}); tabsHeaders += this.gameManager.gameEngine.parseTemplate( headerClone.headerTemplate, { tabId, tabLabel: this.gameManager.services.translator.t( ChatConst.SNIPPETS.PREFIX+ChatConst.SNIPPETS.TAB_PREFIX+tabKey ), className: 0 === i ? ' active' : '' } ); let contentClone = Object.assign({}, {contentTemplate: this.contentTemplate}); tabsContents += this.gameManager.gameEngine.parseTemplate( contentClone.contentTemplate, { tabId, tabKey, className: 0 === i ? ' active' : '' } ); i++; } let tabs = this.gameManager.gameEngine.parseTemplate(this.containerTemplate, {tabsHeaders, tabsContents}); this.gameManager.gameDom.updateContent(ChatConst.SELECTORS.CONTENTS, tabs); } fetchTemplates() { this.containerTemplate = this.uiScene.cache.html.get('chatTabsContainer'); if(!this.containerTemplate){ Logger.info('Chat containerTemplate not found.'); return false; } this.headerTemplate = this.uiScene.cache.html.get('chatTabLabel'); if(!this.headerTemplate){ Logger.info('Chat headerTemplate not found.'); return false; } this.contentTemplate = this.uiScene.cache.html.get('chatTabContent'); if(!this.contentTemplate){ Logger.info('Chat contentTemplate not found.'); return false; } return true; } isReady() { if(!this.gameManager){ Logger.error('ChatTabs, missing game manager.'); } if(!this.uiScene){ Logger.error('ChatTabs, missing UI Scene.'); } return !(!this.showTabs || !this.gameManager || !this.uiScene); } activateTabs() { let labels = this.gameManager.gameDom.getElements('.tab-label'); for(let label of labels){ label.addEventListener('click', (event) => { let previousLabel = this.gameManager.gameDom.getElement('.tab-label.active'); previousLabel?.classList.remove('active'); event.target.classList.add('active'); let previousContent = this.gameManager.gameDom.getElement('.tab-content.active'); previousContent?.classList.remove('active'); let activate = this.gameManager.gameDom.getElement('.tab-content-'+event.target.dataset.tabId); if(!activate){ Logger.warning('Tab content was not found.', event); return false; } activate.classList.add('active'); activate.parentNode.scrollTop = activate.scrollHeight; }); } } } module.exports.ChatTabs = ChatTabs;