From 1e619647700a41dabf28b423d3401fe0bae3085e Mon Sep 17 00:00:00 2001 From: Marcelo Schmidt Date: Tue, 1 Sep 2015 20:26:38 -0300 Subject: [PATCH] Closes #636; Allows a user to disable emojis completely or disable converting ascii to emoji --- client/routes/router.coffee | 2 +- .../views/account/accountPreferences.coffee | 24 +++++++++++++++++-- client/views/account/accountPreferences.html | 23 ++++++++++++++++-- i18n/en.i18n.json | 2 ++ lib/emojione.ascii.coffee | 2 -- packages/rocketchat-emojione/emojione.coffee | 10 +++++++- .../rocketchat-emojione/rocketchat.coffee | 8 +++++++ packages/rocketchat-lib/lib/callbacks.coffee | 6 +++++ server/methods/saveUserPreferences.coffee | 6 +++++ 9 files changed, 75 insertions(+), 8 deletions(-) delete mode 100644 lib/emojione.ascii.coffee diff --git a/client/routes/router.coffee b/client/routes/router.coffee index c4b81d04b06..c1fd9e68bdb 100644 --- a/client/routes/router.coffee +++ b/client/routes/router.coffee @@ -74,7 +74,7 @@ FlowRouter.route '/account/:group?', action: (params) -> unless params.group - params.group = 'Profile' + params.group = 'Preferences' params.group = _.capitalize params.group, true BlazeLayout.render 'main', { center: "account#{params.group}" } diff --git a/client/views/account/accountPreferences.coffee b/client/views/account/accountPreferences.coffee index 81b403d776f..55d6b82009c 100644 --- a/client/views/account/accountPreferences.coffee +++ b/client/views/account/accountPreferences.coffee @@ -1,6 +1,10 @@ Template.accountPreferences.helpers - checked: (property, value) -> - currentValue = !!Meteor.user()?.settings?.preferences?[property] + checked: (property, value, defaultValue) -> + if not Meteor.user()?.settings?.preferences?[property]? and defaultValue is true + currentValue = value + else if Meteor.user()?.settings?.preferences?[property]? + currentValue = !!Meteor.user()?.settings?.preferences?[property] + return currentValue is value Template.accountPreferences.onCreated -> @@ -8,6 +12,16 @@ Template.accountPreferences.onCreated -> settingsTemplate.child ?= [] settingsTemplate.child.push this + @useEmojis = new ReactiveVar not Meteor.user()?.settings?.preferences?.useEmojis? or Meteor.user().settings.preferences.useEmojis + instance = @ + @autorun -> + if instance.useEmojis.get() + Tracker.afterFlush -> + $('#convertAsciiEmoji').show() + else + Tracker.afterFlush -> + $('#convertAsciiEmoji').hide() + @clearForm = -> @save = -> @@ -16,6 +30,9 @@ Template.accountPreferences.onCreated -> data.disableNewRoomNotification = $('input[name=disableNewRoomNotification]:checked').val() data.disableNewMessageNotification = $('input[name=disableNewMessageNotification]:checked').val() + data.useEmojis = $('input[name=useEmojis]:checked').val() + data.convertAsciiEmoji = $('input[name=convertAsciiEmoji]:checked').val() + Meteor.call 'saveUserPreferences', data, (error, results) -> if results toastr.success t('Preferences_saved') @@ -32,3 +49,6 @@ Template.accountPreferences.onRendered -> Template.accountPreferences.events 'click .submit button': (e, t) -> t.save() + + 'change input[name=useEmojis]': (e, t) -> + t.useEmojis.set $(e.currentTarget).val() is '1' diff --git a/client/views/account/accountPreferences.html b/client/views/account/accountPreferences.html index 851673ce948..5d645715a8b 100644 --- a/client/views/account/accountPreferences.html +++ b/client/views/account/accountPreferences.html @@ -9,6 +9,25 @@
+
+

{{_ "Messages"}}

+
+
+ +
+ + +
+
+
+ +
+ + +
+
+
+

{{_ "Sound"}}

@@ -16,14 +35,14 @@
- +
- +
diff --git a/i18n/en.i18n.json b/i18n/en.i18n.json index eccae062fd2..c82524773ca 100644 --- a/i18n/en.i18n.json +++ b/i18n/en.i18n.json @@ -68,6 +68,7 @@ "Confirm_password" : "Confirm your password", "Contact" : "Contact", "Conversation" : "Conversation", + "Convert_Ascii_Emojis" : "Convert ASCII to Emoji", "Create_new" : "Create new", "Create_new_direct_message_room" : "Create a new direct message room", "Create_new_private_group" : "Create a new private group", @@ -278,6 +279,7 @@ "True" : "True", "Unnamed" : "Unnamed", "Upload_file_question" : "Upload file?", + "Use_Emojis" : "Use Emojis", "Use_initials_avatar" : "Use your username initials", "use_menu" : "Use the side menu to access your rooms and chats", "Use_service_avatar" : "Use %s avatar", diff --git a/lib/emojione.ascii.coffee b/lib/emojione.ascii.coffee deleted file mode 100644 index 4791224e03f..00000000000 --- a/lib/emojione.ascii.coffee +++ /dev/null @@ -1,2 +0,0 @@ -# Add ascii support to emojione -emojione?.ascii = true \ No newline at end of file diff --git a/packages/rocketchat-emojione/emojione.coffee b/packages/rocketchat-emojione/emojione.coffee index 492dc943e8a..4c3fb9c25a8 100644 --- a/packages/rocketchat-emojione/emojione.coffee +++ b/packages/rocketchat-emojione/emojione.coffee @@ -10,4 +10,12 @@ class Emojione return message -RocketChat.callbacks.add 'renderMessage', Emojione, RocketChat.callbacks.priority.LOW \ No newline at end of file +RocketChat.callbacks.add 'renderMessage', Emojione, RocketChat.callbacks.priority.LOW + +if Meteor.isClient + Meteor.startup -> + Tracker.autorun -> + if Meteor.user()?.settings?.preferences?.useEmojis or not Meteor.user()?.settings?.preferences?.useEmojis? + RocketChat.callbacks.add 'renderMessage', Emojione, RocketChat.callbacks.priority.LOW + else + RocketChat.callbacks.remove 'renderMessage', 'Emojione' \ No newline at end of file diff --git a/packages/rocketchat-emojione/rocketchat.coffee b/packages/rocketchat-emojione/rocketchat.coffee index 0b4e3938a69..59fda3225f4 100644 --- a/packages/rocketchat-emojione/rocketchat.coffee +++ b/packages/rocketchat-emojione/rocketchat.coffee @@ -3,3 +3,11 @@ RocketChat.emoji = emojione # RocketChat.emoji.list is the collection of emojis RocketChat.emoji.list = emojione.emojioneList + +# RocketChat.emoji.class is the name of the registered class for emojis +RocketChat.emoji.class = 'Emojione' + +# Additional settings -- ascii emojis +Meteor.startup -> + Tracker.autorun -> + emojione?.ascii = if Meteor.user()?.settings?.preferences?.convertAsciiEmoji? then Meteor.user().settings.preferences.convertAsciiEmoji else true \ No newline at end of file diff --git a/packages/rocketchat-lib/lib/callbacks.coffee b/packages/rocketchat-lib/lib/callbacks.coffee index dc5b127eccd..23ff0b10939 100644 --- a/packages/rocketchat-lib/lib/callbacks.coffee +++ b/packages/rocketchat-lib/lib/callbacks.coffee @@ -27,6 +27,12 @@ RocketChat.callbacks.add = (hook, callback, priority) -> priority = RocketChat.callbacks.priority.MEDIUM callback.priority = priority RocketChat.callbacks[hook] ?= [] + + # Avoid adding the same callback twice + for cb in RocketChat.callbacks[hook] + if cb.name is callback.name + return + RocketChat.callbacks[hook].push callback return diff --git a/server/methods/saveUserPreferences.coffee b/server/methods/saveUserPreferences.coffee index 45e7e21e166..a5523a364b8 100644 --- a/server/methods/saveUserPreferences.coffee +++ b/server/methods/saveUserPreferences.coffee @@ -10,6 +10,12 @@ Meteor.methods if settings.disableNewMessageNotification? preferences.disableNewMessageNotification = if settings.disableNewMessageNotification is "1" then true else false + + if settings.useEmojis? + preferences.useEmojis = if settings.useEmojis is "1" then true else false + + if settings.convertAsciiEmoji? + preferences.convertAsciiEmoji = if settings.convertAsciiEmoji is "1" then true else false Meteor.users.update Meteor.userId(), { $set: { "settings.preferences": preferences } }