Index: ps/trunk/binaries/data/mods/public/gui/session/chat/ChatMessageHandler.js =================================================================== --- ps/trunk/binaries/data/mods/public/gui/session/chat/ChatMessageHandler.js (revision 24670) +++ ps/trunk/binaries/data/mods/public/gui/session/chat/ChatMessageHandler.js (revision 24671) @@ -1,86 +1,86 @@ /** * The purpose of this class is to run a given chat message through parsers until * one of them succeeds and then call all callback handlers on the result. */ class ChatMessageHandler { constructor() { /** * Each property is an array of messageformat class instances. * The classes must have a parse function that receives a * msg object and translates into a string. */ this.messageFormats = {}; /** * Functions that are called each time a message was parsed. */ this.messageHandlers = []; this.registerMessageFormat("system", new ChatMessageHandler.System()); } /** * @param type - a string denoting the messagetype used by addChatMessage calls. * @param handler - a class instance with a parse function. */ registerMessageFormat(type, handler) { if (!this.messageFormats[type]) this.messageFormats[type] = []; this.messageFormats[type].push(handler); } /** * Receives a class where each enumerable owned property is a chat format * class identified by the property name. */ registerMessageFormatClass(formatClass) { for (let type in formatClass) this.registerMessageFormat(type, new formatClass[type]()); } registerMessageHandler(handler) { this.messageHandlers.push(handler); } handleMessage(msg) { let formatted = this.parseMessage(msg); if (!formatted) return; for (let handler of this.messageHandlers) handler(msg, formatted); } parseMessage(msg) { if (!this.messageFormats[msg.type]) { error("Unknown chat message type: " + uneval(msg)); return undefined; } for (let messageFormat of this.messageFormats[msg.type]) { let formatted = messageFormat.parse(msg); - if (formatted) + if (formatted && formatted.text) return formatted; } return undefined; } } ChatMessageHandler.System = class { parse(msg) { return msg.txt; } };