import { byId, htmlHeader } from "./system"; class MessageBox { private popup: HTMLDivElement; private showOnInit: boolean = false; private welcomeMessage: string = "This application was created on visual-ts n\ Example: Real time multiplayer `Platformer` zlatnaspirala@gmail.com"; private messageBox: HTMLElement | null = byId("message-box"); private messageBoxContent: HTMLElement; private messageBoxContentFlag: string = ""; private asynContentFlag: boolean = false; constructor() { this.popup = byId("message-box") as HTMLDivElement; this.init(); console.info("MessageBox is constructed."); } public show (content: string) { try { this.messageBoxContentFlag = content; this.messageBox.classList.remove("message-box-hide-animation"); this.messageBox.classList.add("message-box-show-animation"); this.messageBoxContent = byId("message-box-content") as HTMLElement; this.messageBoxContent.innerText = content; // Must be sync with css duration value this.messageBox.style.display = "block"; } catch (err) { this.asynContentFlag = true; // console.warn("Initialisation depens on async call. If you wanna startup message box \ // setup showOnInit = true.", error); } } private hide (e) { const messageBox = e.currentTarget.parentElement.parentElement; messageBox.classList.remove("message-box-show-animation"); messageBox.classList.add("message-box-hide-animation"); // Must be sync with css duration value setTimeout(function () { messageBox.style.display = "none"; }, 1000); } private init = () => { const myInstance = this; fetch("./templates/message-box.html", { headers: htmlHeader, }). then(function (res) { return res.text(); }).then(function (html) { myInstance.popup.innerHTML = html; if (myInstance.showOnInit) { myInstance.popup.style.display = "block"; } else { myInstance.popup.style.display = "none"; } myInstance.popup.classList.add("message-box-show-animation"); myInstance.messageBox.classList.remove("message-box-hide-animation"); myInstance.messageBoxContent = byId("message-box-content") as HTMLElement; myInstance.messageBoxContent.innerHTML = myInstance.welcomeMessage; if (byId("message-box-btn")) { (byId("message-box-btn") as HTMLDivElement).addEventListener("click", myInstance.hide, false); } if (myInstance.asynContentFlag) { myInstance.asynContentFlag = false; myInstance.messageBoxContent.innerHTML = myInstance.messageBoxContentFlag; myInstance.popup.style.display = "block"; } }); } } export default MessageBox;