Source: lobby/LobbyPage/Chat/ChatMessagesPanel.js

/**
 * This class stores and displays the chat history since the login and
 * displays timestamps if enabled.
 */
class ChatMessagesPanel
{
	constructor(xmppMessages)
	{
		this.xmppMessages = xmppMessages;

		this.chatText = Engine.GetGUIObjectByName("chatText");
		this.chatHistory = "";

		if (Engine.ConfigDB_GetValue("user", "chat.timestamp") == "true")
			this.timestampWrapper = new TimestampWrapper();

		this.hasUpdate = false;
		this.flushEvent = this.flushMessages.bind(this);
	}

	addText(timestamp, text)
	{
		if (this.timestampWrapper)
			text = this.timestampWrapper.format(timestamp, text);

		this.chatHistory += this.chatHistory ? "\n" + text : text;
		this.chatText.addItem(text);

		if (!this.hasUpdate)
		{
			this.hasUpdate = true;
			// Most xmpp messages are not chat messages, hence
			// only subscribe the event handler when relevant to improve performance.
			this.xmppMessages.registerMessageBatchProcessedHandler(this.flushEvent);
		}
	}

	flushMessages()
	{
		if (this.hasUpdate)
		{
			this.hasUpdate = false;
			this.xmppMessages.unregisterMessageBatchProcessedHandler(this.flushEvent);
		}
	}

	clearChatMessages()
	{
		this.chatHistory = "";
		this.chatText.list = [];
	}
}