2019-12-06 14:21:07 +00:00
|
|
|
import { Observer } from "../observe/Observer";
|
|
|
|
import { Model } from "../model/AbstractModel";
|
|
|
|
import { Subject } from "../observe/Observable";
|
|
|
|
import { View } from "./AbstractView";
|
|
|
|
import { Controller } from "../controller/AbstractController";
|
|
|
|
import { TemplateFactory } from "../template/TemplateFactory";
|
|
|
|
import { ActiveUserViewModel } from "../viewmodel/ActiveUserViewModel";
|
|
|
|
import { ChatModel } from "../model/ChatModel";
|
|
|
|
import { ChatMessageViewModel } from "../viewmodel/ChatMessageViewModel";
|
|
|
|
import * as log from 'loglevel';
|
2019-12-07 06:00:51 +00:00
|
|
|
import * as DOMPurify from 'dompurify';
|
|
|
|
import markdownit = require('markdown-it');
|
|
|
|
var md = new markdownit();
|
2019-12-06 14:21:07 +00:00
|
|
|
|
|
|
|
export class ChatView implements Observer {
|
|
|
|
private readonly _model: ChatModel;
|
|
|
|
private readonly _element: HTMLElement;
|
|
|
|
private readonly _messageSendTemplate = TemplateFactory.getTemplate('msg_container_send_template');
|
|
|
|
|
|
|
|
|
|
|
|
constructor(model: ChatModel, element: HTMLElement) {
|
|
|
|
this._model = model;
|
|
|
|
this._element = element;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
update(data: ChatMessageViewModel[]): void {
|
2019-12-07 06:00:51 +00:00
|
|
|
log.info('ChatView: updating view');
|
2019-12-06 14:21:07 +00:00
|
|
|
let html: string = "";
|
|
|
|
data.forEach((vm: ChatMessageViewModel) => {
|
2019-12-07 08:04:54 +00:00
|
|
|
const vmTemp = vm;
|
|
|
|
vmTemp.message = md.render(vm.message);
|
|
|
|
$(this._element).append(DOMPurify.sanitize(this._messageSendTemplate(vmTemp)));
|
|
|
|
// html += this._messageSendTemplate(vm);
|
2019-12-06 14:21:07 +00:00
|
|
|
});
|
2019-12-07 06:00:51 +00:00
|
|
|
|
|
|
|
/** Very Important!!!
|
|
|
|
* Sanitizing HTML before displaying on webpage to prevent XSS attacks!!
|
|
|
|
*/
|
2019-12-07 08:04:54 +00:00
|
|
|
// html = DOMPurify.sanitize(md.render(html));
|
|
|
|
// this._element.innerHTML = html;
|
|
|
|
// log.debug(this._element.innerHTML);
|
2019-12-06 14:21:07 +00:00
|
|
|
}
|
|
|
|
}
|