diff --git a/client/views/app/message.coffee b/client/views/app/message.coffee
index 590a796fe6a..a04193e9b74 100644
--- a/client/views/app/message.coffee
+++ b/client/views/app/message.coffee
@@ -20,31 +20,34 @@ Template.message.helpers
return
body: ->
- switch this.t
- when 'r' then t('Room_name_changed', { room_name: this.msg, user_by: this.u.username })
- when 'au' then t('User_added_by', { user_added: this.msg, user_by: this.u.username })
- when 'ru' then t('User_removed_by', { user_removed: this.msg, user_by: this.u.username })
- when 'ul' then t('User_left', { user_left: this.u.username })
- when 'uj' then t('User_joined_channel', { user: this.u.username })
- when 'wm' then t('Welcome', { user: this.u.username })
- when 'rm' then t('Message_removed', { user: this.u.username })
- when 'rtc' then RocketChat.callbacks.run 'renderRtcMessage', this
+ messageType = RocketChat.MessageTypes.getType(this)
+ if messageType?.render?
+ return messageType.render(message)
+ else if messageType?.template?
+ # render template
+ else if messageType?.message?
+ if messageType.data?(this)?
+ return TAPi18n.__(messageType.message, messageType.data(this))
else
- if this.u?.username is RocketChat.settings.get('Chatops_Username')
- this.html = this.msg
- message = RocketChat.callbacks.run 'renderMentions', this
- # console.log JSON.stringify message
- return this.html
+ return TAPi18n.__(messageType.message)
+ else
+ if this.u?.username is RocketChat.settings.get('Chatops_Username')
this.html = this.msg
- if _.trim(this.html) isnt ''
- this.html = _.escapeHTML this.html
- message = RocketChat.callbacks.run 'renderMessage', this
+ message = RocketChat.callbacks.run 'renderMentions', this
# console.log JSON.stringify message
- this.html = message.html.replace /\n/gm, '
'
return this.html
+ this.html = this.msg
+ if _.trim(this.html) isnt ''
+ this.html = _.escapeHTML this.html
+ message = RocketChat.callbacks.run 'renderMessage', this
+ # console.log JSON.stringify message
+ this.html = message.html.replace /\n/gm, '
'
+ return this.html
system: ->
- return 'system' if this.t in ['s', 'p', 'f', 'r', 'au', 'ru', 'ul', 'wm', 'uj', 'rm']
+ if RocketChat.MessageTypes.isSystemMessage(this)
+ return 'system'
+
edited: -> Template.instance().wasEdited?(@)
editTime: ->
return "" unless Template.instance().wasEdited?(@)
@@ -91,7 +94,7 @@ Template.message.helpers
Template.message.onCreated ->
@wasEdited = (msg) ->
- msg.editedAt? and msg.t not in ['s', 'p', 'f', 'r', 'au', 'ru', 'ul', 'wm', 'uj', 'rm']
+ msg.editedAt? and not RocketChat.MessageTypes.isSystemMessage(this)
Template.message.onViewRendered = (context) ->
view = this
diff --git a/packages/rocketchat-lib/client/MessageTypes.coffee b/packages/rocketchat-lib/client/MessageTypes.coffee
new file mode 100644
index 00000000000..3e374f4d7ca
--- /dev/null
+++ b/packages/rocketchat-lib/client/MessageTypes.coffee
@@ -0,0 +1,70 @@
+RocketChat.MessageTypes = new class
+ types = {}
+
+ registerType = (options) ->
+ types[options.id] = options
+
+ getType = (message) ->
+ return types[message?.t]
+
+ isSystemMessage = (message) ->
+ return types[message?.t]?.system
+
+ registerType: registerType
+ getType: getType
+ isSystemMessage: isSystemMessage
+
+Meteor.startup ->
+ RocketChat.MessageTypes.registerType
+ id: 'r'
+ system: true
+ message: 'Room_name_changed'
+ data: (message) ->
+ return { room_name: message.msg, user_by: message.u.username }
+
+ RocketChat.MessageTypes.registerType
+ id: 'au'
+ system: true
+ message: 'User_added_by'
+ data: (message) ->
+ return { user_added: message.msg, user_by: message.u.username }
+
+ RocketChat.MessageTypes.registerType
+ id: 'ru'
+ system: true
+ message: 'User_removed_by'
+ data: (message) ->
+ return { user_removed: message.msg, user_by: message.u.username }
+
+ RocketChat.MessageTypes.registerType
+ id: 'ul'
+ system: true
+ message: 'User_left'
+ data: (message) ->
+ return { user_left: message.u.username }
+
+ RocketChat.MessageTypes.registerType
+ id: 'uj'
+ system: true
+ message: 'User_joined_channel'
+ data: (message) ->
+ return { user: message.u.username }
+
+ RocketChat.MessageTypes.registerType
+ id: 'wm'
+ system: true
+ message: 'Welcome'
+ data: (message) ->
+ return { user: message.u.username }
+
+ RocketChat.MessageTypes.registerType
+ id: 'rm'
+ system: true
+ message: 'Message_removed'
+ data: (message) ->
+ return { user: message.u.username }
+
+ RocketChat.MessageTypes.registerType
+ id: 'rtc'
+ render: (message) ->
+ RocketChat.callbacks.run 'renderRtcMessage', message
diff --git a/packages/rocketchat-lib/package.js b/packages/rocketchat-lib/package.js
index 668e157f2ef..fde76ff1f86 100644
--- a/packages/rocketchat-lib/package.js
+++ b/packages/rocketchat-lib/package.js
@@ -56,6 +56,7 @@ Package.onUse(function(api) {
api.addFiles('client/Notifications.coffee', 'client');
api.addFiles('client/TabBar.coffee', 'client');
api.addFiles('client/MessageAction.coffee', 'client');
+ api.addFiles('client/MessageTypes.coffee', 'client');
api.addFiles('settings/client/rocketchat.coffee', 'client');