workadventure/front/src/Administration/TypeMessage.ts

94 lines
3.1 KiB
TypeScript
Raw Normal View History

import {TypeMessageInterface} from "./UserMessageManager";
import {HtmlUtils} from "../WebRtc/HtmlUtils";
2020-10-20 11:25:17 +02:00
let modalTimeOut : NodeJS.Timeout;
2020-10-20 08:20:21 +02:00
export class TypeMessageExt implements TypeMessageInterface{
protected nbSecond = 0;
protected maxNbSecond = 10;
protected titleMessage = 'IMPORTANT !';
2020-10-20 11:25:17 +02:00
showMessage(message: string, canDeleteMessage: boolean = true): void {
//delete previous modal
try{
if(modalTimeOut){
clearTimeout(modalTimeOut);
}
const modal = HtmlUtils.getElementByIdOrFail('report-message-user');
modal.remove();
2020-10-20 11:27:11 +02:00
}catch (err){
console.error(err);
}
2020-10-20 11:25:17 +02:00
//create new modal
2020-10-19 21:04:16 +02:00
const div : HTMLDivElement = document.createElement('div');
div.classList.add('modal-report-user');
div.id = 'report-message-user';
div.style.backgroundColor = '#000000e0';
2020-10-19 21:04:16 +02:00
const img : HTMLImageElement = document.createElement('img');
img.src = 'resources/logos/report.svg';
div.appendChild(img);
2020-10-19 21:04:16 +02:00
const title : HTMLParagraphElement = document.createElement('p');
title.id = 'title-report-user';
title.innerText = `${this.titleMessage} (${this.maxNbSecond})`;
div.appendChild(title);
2020-10-19 21:04:16 +02:00
const p : HTMLParagraphElement = document.createElement('p');
p.id = 'body-report-user'
p.innerHTML = message;
div.appendChild(p);
const mainSectionDiv = HtmlUtils.getElementByIdOrFail<HTMLDivElement>('main-container');
mainSectionDiv.appendChild(div);
const reportMessageAudio = HtmlUtils.getElementByIdOrFail<HTMLAudioElement>('report-message');
reportMessageAudio.play();
this.nbSecond = this.maxNbSecond;
setTimeout((c) => {
2020-10-20 11:25:17 +02:00
this.forMessage(title, canDeleteMessage);
}, 1000);
}
2020-10-20 11:25:17 +02:00
forMessage(title: HTMLParagraphElement, canDeleteMessage: boolean = true){
this.nbSecond -= 1;
title.innerText = `${this.titleMessage} (${this.nbSecond})`;
if(this.nbSecond > 0){
2020-10-20 11:25:17 +02:00
modalTimeOut = setTimeout(() => {
this.forMessage(title, canDeleteMessage);
}, 1000);
2020-10-20 11:25:17 +02:00
}else {
title.innerText = this.titleMessage;
2020-10-20 11:25:17 +02:00
if (!canDeleteMessage) {
return;
}
const imgCancel: HTMLImageElement = document.createElement('img');
imgCancel.id = 'cancel-report-user';
imgCancel.src = 'resources/logos/close.svg';
const div = HtmlUtils.getElementByIdOrFail<HTMLDivElement>('report-message-user');
div.appendChild(imgCancel);
imgCancel.addEventListener('click', () => {
div.remove();
});
}
}
2020-10-20 08:20:21 +02:00
}
export class Ban extends TypeMessageExt {
}
export class Banned extends TypeMessageExt {
2020-10-20 11:25:17 +02:00
showMessage(message: string){
super.showMessage(message, false);
}
}
export class RoomFull extends TypeMessageExt {
showMessage(message: string){
this.maxNbSecond = 30;
super.showMessage(message);
}
}