From a3ea777cf1b295225fb1e1c5a4feaa364a04f440 Mon Sep 17 00:00:00 2001 From: Marcelo Schmidt Date: Fri, 13 Nov 2015 10:15:43 -0200 Subject: [PATCH] Created RocketChat.MessageTypes class to hold message type rendering rules --- client/views/app/message.coffee | 43 ++++++------ .../rocketchat-lib/client/MessageTypes.coffee | 70 +++++++++++++++++++ packages/rocketchat-lib/package.js | 1 + 3 files changed, 94 insertions(+), 20 deletions(-) create mode 100644 packages/rocketchat-lib/client/MessageTypes.coffee 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');