declare var window: Window; export class Modal implements Modal { modal: HTMLElement; closeButton: HTMLSpanElement; constructor(modal: HTMLElement, important: boolean = false) { this.modal = modal; const closeButton = this.modal.querySelector('span.modal-close') if (closeButton !== null) { this.closeButton = closeButton as HTMLSpanElement; this.closeButton.onclick = this.close; } if (!important) { window.addEventListener('click', (event: Event) => { if (event.target == this.modal) { this.close(); } }); } } close = (event?: Event) => { if (event) { event.preventDefault(); } this.modal.classList.add('modal-hiding'); const modal = this.modal; const listenerFunc = function () { modal.classList.remove('modal-shown'); modal.classList.remove('modal-hiding'); modal.removeEventListener(window.animationEvent, listenerFunc); }; this.modal.addEventListener(window.animationEvent, listenerFunc, false); } show = () => { this.modal.classList.add('modal-shown'); } toggle = () => { if (this.modal.classList.contains('modal-shown')) { this.close(); } else { this.show(); } } }