diff options
Diffstat (limited to 'src/engine/utils/Modal.ts')
-rw-r--r-- | src/engine/utils/Modal.ts | 45 |
1 files changed, 45 insertions, 0 deletions
diff --git a/src/engine/utils/Modal.ts b/src/engine/utils/Modal.ts new file mode 100644 index 0000000..d46cade --- /dev/null +++ b/src/engine/utils/Modal.ts @@ -0,0 +1,45 @@ +import { Miscellaneous } from "../config"; + +export class ModalInstance { + private modalOpen: boolean = false; + private elementId: string = Miscellaneous.MODAL_ID; + private contentId: string = Miscellaneous.MODAL_CONTENT_ID; + + public open(content: string) { + const modal = document.getElementById(this.elementId); + const modalContent = document.getElementById(this.contentId); + if (!modal || this.modalOpen) { + return; + } + + this.modalOpen = true; + modal.style.display = "flex"; + modal.style.animation = "fadeIn 0.25s"; + + modalContent!.innerHTML = content; + modalContent!.style.animation = "scaleUp 0.25s"; + } + + public vanish(): Promise<void> { + const modal = document.getElementById(this.elementId); + const modalContent = document.getElementById(this.contentId); + return new Promise((res, _rej) => { + if (!(modal && this.modalOpen && modalContent)) { + res(); + return; + } + modal.style.animation = "fadeOut 0.25s"; + modalContent.style.animation = "scaleDown 0.25s"; + + setTimeout(() => { + modalContent.innerHTML = ""; + modal.style.display = "none"; + + this.modalOpen = false; + res(); + }, 200); + }); + } +} + +export const ModalSingleton = new ModalInstance();
\ No newline at end of file |