class HomeworkSession extends HomeworkElement { constructor() { super() this.addEventListener('texts-loaded', this.updateTexts.bind(this)) } connectedCallback() { let top = new HomeworkLayout() this.append(top) console.log("Session added to DOM") } static get observedAttributes () { return [ 'language' ] } attributeChangedCallback(name, oldValue, newValue) { if(name == 'language') { if(oldValue === null) { console.log("Language initiated to " + newValue) } else { console.log("Language changed to " + newValue + " from " + oldValue) } this.changeLanguage(newValue) } else { console.log("Unknown property", name) } } get language() { let languageCode = this.getAttribute("language") return languageCode } set language(languageCode) { this.setAttribute("language", languageCode) } async changeLanguage(languageCode) { let languageFile = "/resources/" + languageCode + ".json" let response = await fetch(languageFile) HomeworkSession.texts = await response.json() this.dispatchEvent(new CustomEvent('texts-loaded', { bubbles: true })) } updateTexts() { HomeworkElement.updateTexts(this) } /* homeworkTypeChanged(event) { let homeworkType = event.target.value console.log("Changed homework type to " + homeworkType ) let pages = this.querySelectorAll('.page') pages.forEach((page) => { page.classList.remove('active') }) let page = null switch(homeworkType) { case 'math': page = this.querySelector('homework-page-math') page.classList.add('active') break case 'englishVocabulary': page = this.querySelector('homework-page-english-vocabulary') page.classList.add('active') break default: console.warn("Unknown type " + homeworkType) break } } */ } HomeworkSession.texts = { } customElements.define('homework-session', HomeworkSession)