From d694b010a7db8cf63b36a000d943c1aaf37df3c5 Mon Sep 17 00:00:00 2001 From: Marcelo Schmidt Date: Mon, 21 Dec 2015 19:03:38 -0200 Subject: [PATCH 1/9] mail messages --- .meteor/packages | 1 + .meteor/versions | 1 + .../client/lib/ChannelSettings.coffee | 3 + ...cketChatChannelSettingsMailMessages.coffee | 12 +++ .../views/channelSettingsMailMessages.coffee | 10 +++ .../views/channelSettingsMailMessages.html | 8 ++ .../views/mailMessagesInstructions.coffee | 13 +++ .../views/mailMessagesInstructions.html | 14 ++++ .../i18n/en.i18n.json | 7 ++ .../package.js | 44 ++++++++++ .../client/lib/ChannelSettings.coffee | 29 +++++++ .../client/views/channelSettings.coffee | 2 + .../client/views/channelSettings.html | 3 + .../rocketchat-channel-settings/package.js | 3 + .../assets/stylesheets/base.less | 6 ++ packages/rocketchat-ui/views/app/room.coffee | 81 ++++++++++++++++++- packages/rocketchat-ui/views/app/room.html | 2 +- 17 files changed, 235 insertions(+), 4 deletions(-) create mode 100644 packages/rocketchat-channel-settings-mail-messages/client/lib/ChannelSettings.coffee create mode 100644 packages/rocketchat-channel-settings-mail-messages/client/lib/RocketChatChannelSettingsMailMessages.coffee create mode 100644 packages/rocketchat-channel-settings-mail-messages/client/views/channelSettingsMailMessages.coffee create mode 100644 packages/rocketchat-channel-settings-mail-messages/client/views/channelSettingsMailMessages.html create mode 100644 packages/rocketchat-channel-settings-mail-messages/client/views/mailMessagesInstructions.coffee create mode 100644 packages/rocketchat-channel-settings-mail-messages/client/views/mailMessagesInstructions.html create mode 100644 packages/rocketchat-channel-settings-mail-messages/i18n/en.i18n.json create mode 100644 packages/rocketchat-channel-settings-mail-messages/package.js create mode 100644 packages/rocketchat-channel-settings/client/lib/ChannelSettings.coffee diff --git a/.meteor/packages b/.meteor/packages index 16ac606c7c0b..2e0df8c465da 100644 --- a/.meteor/packages +++ b/.meteor/packages @@ -41,6 +41,7 @@ rocketchat:lib rocketchat:authorization rocketchat:autolinker rocketchat:channel-settings +rocketchat:channel-settings-mail-messages rocketchat:colors rocketchat:custom-oauth rocketchat:emojione diff --git a/.meteor/versions b/.meteor/versions index 179bf18b1d60..eef1815c7a41 100644 --- a/.meteor/versions +++ b/.meteor/versions @@ -125,6 +125,7 @@ rocketchat:assets@0.0.1 rocketchat:authorization@0.0.1 rocketchat:autolinker@0.0.1 rocketchat:channel-settings@0.0.1 +rocketchat:channel-settings-mail-messages@0.0.1 rocketchat:colors@0.0.1 rocketchat:cors@0.0.1 rocketchat:custom-oauth@1.0.0 diff --git a/packages/rocketchat-channel-settings-mail-messages/client/lib/ChannelSettings.coffee b/packages/rocketchat-channel-settings-mail-messages/client/lib/ChannelSettings.coffee new file mode 100644 index 000000000000..9c4e420f5e99 --- /dev/null +++ b/packages/rocketchat-channel-settings-mail-messages/client/lib/ChannelSettings.coffee @@ -0,0 +1,3 @@ +RocketChat.ChannelSettings.addOption + id: 'mail-messages' + template: 'channelSettingsMailMessages' diff --git a/packages/rocketchat-channel-settings-mail-messages/client/lib/RocketChatChannelSettingsMailMessages.coffee b/packages/rocketchat-channel-settings-mail-messages/client/lib/RocketChatChannelSettingsMailMessages.coffee new file mode 100644 index 000000000000..af7b8284173f --- /dev/null +++ b/packages/rocketchat-channel-settings-mail-messages/client/lib/RocketChatChannelSettingsMailMessages.coffee @@ -0,0 +1,12 @@ +RocketChat.ChannelSettingsMailMessages = new class + addCheckboxes = -> + $('.messages-box .wrapper .message').each (index, item) -> + $item = $(item) + unless $item.find('input[type=checkbox]').length + $item.prepend(HTML.toHTML(HTML.INPUT({type: 'checkbox', class: 'send-message', style: 'position: absolute; left: 0' }))); + + removeCheckboxes = -> + $('.messages-box .wrapper .message input[type=checkbox].send-message').remove() + + addCheckboxes: addCheckboxes + removeCheckboxes: removeCheckboxes diff --git a/packages/rocketchat-channel-settings-mail-messages/client/views/channelSettingsMailMessages.coffee b/packages/rocketchat-channel-settings-mail-messages/client/views/channelSettingsMailMessages.coffee new file mode 100644 index 000000000000..6fdfa79e6ad9 --- /dev/null +++ b/packages/rocketchat-channel-settings-mail-messages/client/views/channelSettingsMailMessages.coffee @@ -0,0 +1,10 @@ +Template.channelSettingsMailMessages.events + 'click button.mail-messages': (e, t) -> + Session.set 'channelSettingsMailMessages', Session.get('openedRoom') + RocketChat.TabBar.setTemplate('mailMessagesInstructions') + view = Blaze.getView($('.messages-box')[0]) + view?.templateInstance?().resetSelection(true) + +Template.channelSettingsMailMessages.onCreated -> + view = Blaze.getView($('.messages-box')[0]) + view?.templateInstance?().resetSelection(false) diff --git a/packages/rocketchat-channel-settings-mail-messages/client/views/channelSettingsMailMessages.html b/packages/rocketchat-channel-settings-mail-messages/client/views/channelSettingsMailMessages.html new file mode 100644 index 000000000000..ff680914b122 --- /dev/null +++ b/packages/rocketchat-channel-settings-mail-messages/client/views/channelSettingsMailMessages.html @@ -0,0 +1,8 @@ + diff --git a/packages/rocketchat-channel-settings-mail-messages/client/views/mailMessagesInstructions.coffee b/packages/rocketchat-channel-settings-mail-messages/client/views/mailMessagesInstructions.coffee new file mode 100644 index 000000000000..a70d7e925b83 --- /dev/null +++ b/packages/rocketchat-channel-settings-mail-messages/client/views/mailMessagesInstructions.coffee @@ -0,0 +1,13 @@ +Template.mailMessagesInstructions.events + 'click .cancel': (e, t) -> + RocketChat.TabBar.setTemplate('channelSettings') + view = Blaze.getView($('.messages-box')[0]) + view?.templateInstance?().resetSelection(false) + + 'click .send': (e, t) -> + console.log 'sending' + +Template.mailMessagesInstructions.onCreated -> + @autorun => + if Session.get('channelSettingsMailMessages') isnt Session.get('openedRoom') + RocketChat.TabBar.setTemplate('channelSettings') diff --git a/packages/rocketchat-channel-settings-mail-messages/client/views/mailMessagesInstructions.html b/packages/rocketchat-channel-settings-mail-messages/client/views/mailMessagesInstructions.html new file mode 100644 index 000000000000..0e344c76b311 --- /dev/null +++ b/packages/rocketchat-channel-settings-mail-messages/client/views/mailMessagesInstructions.html @@ -0,0 +1,14 @@ + diff --git a/packages/rocketchat-channel-settings-mail-messages/i18n/en.i18n.json b/packages/rocketchat-channel-settings-mail-messages/i18n/en.i18n.json new file mode 100644 index 000000000000..0e441d185b79 --- /dev/null +++ b/packages/rocketchat-channel-settings-mail-messages/i18n/en.i18n.json @@ -0,0 +1,7 @@ +{ + "Cancel" : "Cancel", + "Choose_messages" : "Choose messages", + "Mail_Messages" : "Mail Messages", + "Mail_Messages_Instructions" : "Choose which messages you want to send via e-mail by clicking the messages", + "Send" : "Send" +} diff --git a/packages/rocketchat-channel-settings-mail-messages/package.js b/packages/rocketchat-channel-settings-mail-messages/package.js new file mode 100644 index 000000000000..b66d7d514153 --- /dev/null +++ b/packages/rocketchat-channel-settings-mail-messages/package.js @@ -0,0 +1,44 @@ +Package.describe({ + name: 'rocketchat:channel-settings-mail-messages', + version: '0.0.1', + summary: 'Channel Settings - Mail Messages', + git: '' +}); + +Package.onUse(function(api) { + api.versionsFrom('1.0'); + + api.use([ + 'coffeescript', + 'templating', + 'reactive-var', + 'less@2.5.0', + 'rocketchat:lib@0.0.1', + 'rocketchat:channel-settings' + ]); + + api.addFiles([ + 'client/lib/ChannelSettings.coffee', + 'client/lib/RocketChatChannelSettingsMailMessages.coffee', + 'client/views/channelSettingsMailMessages.html', + 'client/views/channelSettingsMailMessages.coffee', + 'client/views/mailMessagesInstructions.html', + 'client/views/mailMessagesInstructions.coffee' + ], 'client'); + + // TAPi18n + var _ = Npm.require('underscore'); + var fs = Npm.require('fs'); + tapi18nFiles = _.compact(_.map(fs.readdirSync('packages/rocketchat-channel-settings-mail-messages/i18n'), function(filename) { + if (fs.statSync('packages/rocketchat-channel-settings-mail-messages/i18n/' + filename).size > 16) { + return 'i18n/' + filename; + } + })); + api.use('tap:i18n@1.6.1'); + api.imply('tap:i18n'); + api.addFiles(tapi18nFiles); +}); + +Package.onTest(function(api) { + +}); diff --git a/packages/rocketchat-channel-settings/client/lib/ChannelSettings.coffee b/packages/rocketchat-channel-settings/client/lib/ChannelSettings.coffee new file mode 100644 index 000000000000..f9322fbb446e --- /dev/null +++ b/packages/rocketchat-channel-settings/client/lib/ChannelSettings.coffee @@ -0,0 +1,29 @@ +RocketChat.ChannelSettings = new class + options = new ReactiveVar {} + + ### + # Adds an option in Channel Settings + # @config (object) + # id: option id (required) + # template (string): template name to render (required) + # validation (function): if option should be displayed + ### + addOption = (config) -> + unless config?.id + throw new Meteor.Error "ChannelSettings-addOption-error", "Option id was not informed." + + Tracker.nonreactive -> + opts = options.get() + opts[config.id] = config + options.set opts + + getOptions = -> + allOptions = _.toArray options.get() + allowedOptions = _.compact _.map allOptions, (option) -> + if not option.validation? or option.validation() + return option + + return _.sortBy allowedOptions, 'order' + + addOption: addOption + getOptions: getOptions diff --git a/packages/rocketchat-channel-settings/client/views/channelSettings.coffee b/packages/rocketchat-channel-settings/client/views/channelSettings.coffee index 4f9f5d344c5d..2ef4d2850efb 100644 --- a/packages/rocketchat-channel-settings/client/views/channelSettings.coffee +++ b/packages/rocketchat-channel-settings/client/views/channelSettings.coffee @@ -3,6 +3,8 @@ Template.channelSettings.helpers return ChatRoom.findOne(@rid)?.t isnt 'd' roomType: -> return ChatRoom.findOne(@rid)?.t + channelSettings: -> + return RocketChat.ChannelSettings.getOptions() Template.channelSettings.events 'click .save': (e, t) -> diff --git a/packages/rocketchat-channel-settings/client/views/channelSettings.html b/packages/rocketchat-channel-settings/client/views/channelSettings.html index c72ecae4ad66..1fb7bbef4fc0 100644 --- a/packages/rocketchat-channel-settings/client/views/channelSettings.html +++ b/packages/rocketchat-channel-settings/client/views/channelSettings.html @@ -16,6 +16,9 @@

{{_ "Room_Settings"}}

{{/if}} + {{#each channelSettings}} + {{> Template.dynamic template=template data=data}} + {{/each}}
diff --git a/packages/rocketchat-channel-settings/package.js b/packages/rocketchat-channel-settings/package.js index 06b8f3fe128a..e03b0f68e102 100644 --- a/packages/rocketchat-channel-settings/package.js +++ b/packages/rocketchat-channel-settings/package.js @@ -10,12 +10,15 @@ Package.onUse(function(api) { api.use([ 'coffeescript', + 'reactive-var', + 'tracker', 'templating', 'less@2.5.0', 'rocketchat:lib@0.0.1' ]); api.addFiles([ + 'client/lib/ChannelSettings.coffee', 'client/startup/messageTypes.coffee', 'client/startup/tabBar.coffee', 'client/startup/trackSettingsChange.coffee', diff --git a/packages/rocketchat-theme/assets/stylesheets/base.less b/packages/rocketchat-theme/assets/stylesheets/base.less index 4ba647bb96d7..a9f1b74fbd58 100644 --- a/packages/rocketchat-theme/assets/stylesheets/base.less +++ b/packages/rocketchat-theme/assets/stylesheets/base.less @@ -2471,6 +2471,12 @@ a.github-fork { border-radius: 4px; } } + &.selectable .message { + cursor: pointer; + &.selected { + background-color: #FFD; + } + } } .ticks-bar { diff --git a/packages/rocketchat-ui/views/app/room.coffee b/packages/rocketchat-ui/views/app/room.coffee index f7ea605894a1..7917001e6883 100644 --- a/packages/rocketchat-ui/views/app/room.coffee +++ b/packages/rocketchat-ui/views/app/room.coffee @@ -213,6 +213,8 @@ Template.room.helpers compactView: -> return 'compact' if Meteor.user()?.settings?.preferences?.compactView + selectable: -> + return Template.instance().selectable.get() Template.room.events "click, touchend": (e, t) -> @@ -432,17 +434,90 @@ Template.room.events template.atBottom = true RoomHistoryManager.clear(template?.data?._id) + 'click .message': (e, template) -> + e.preventDefault() + e.stopPropagation() + if template.selectable.get() + data = Blaze.getData(e.currentTarget) + _id = data?._arguments?[1]?._id + + if !template.selectablePointer or !e.shiftKey + template.selectablePointer = _id + template.selectableShiftPointer = null + + document.selection?.empty() or window.getSelection?().removeAllRanges() + template.selectMessages _id + Template.room.onCreated -> # this.scrollOnBottom = true # this.typing = new msgTyping this.data._id this.showUsersOffline = new ReactiveVar false this.atBottom = true this.unreadCount = new ReactiveVar 0 + this.selectable = new ReactiveVar false + this.selectedMessages = new ReactiveVar [] + this.selectablePointer = null + this.selectableShiftPointer = null + + this.resetSelection = (enabled) => + this.selectable.set(enabled) + $('.messages-box .message.selected').removeClass 'selected' + this.selectedMessages.set [] + this.selectablePointer = null + this.selectableShiftPointer = null + + this.selectMessages = (to) => + messages = this.selectedMessages.get() + if this.selectablePointer is to + this.selectablePointer = this.selectableShiftPointer or this.selectablePointer + if messages.indexOf(to) is -1 + messages.push to + $(".messages-box ##{to}").addClass 'selected' + else + messages = _.without messages, to + $(".messages-box ##{to}").removeClass 'selected' + else + includeFrom = true + addItems = messages.indexOf(to) is -1 + if addItems + fromMessage = ChatMessage.findOne this.selectablePointer + toMessage = ChatMessage.findOne to + # this.selectablePointer = this.selectableShiftPointer or this.selectablePointer + this.selectableShiftPointer = to + else + if this.selectableShiftPointer? + fromMessage = ChatMessage.findOne this.selectableShiftPointer + else + console.log 'set includeFrom = false' + includeFrom = false + fromMessage = ChatMessage.findOne this.selectablePointer + toMessage = ChatMessage.findOne to + this.selectableShiftPointer = null + + if fromMessage.ts <= toMessage.ts + if includeFrom + query = { rid: fromMessage.rid, ts: { $gte: fromMessage.ts, $lte: toMessage.ts } } + else + query = { rid: fromMessage.rid, ts: { $gt: fromMessage.ts, $lte: toMessage.ts } } + else + if includeFrom + query = { rid: fromMessage.rid, ts: { $lte: fromMessage.ts, $gte: toMessage.ts } } + else + query = { rid: fromMessage.rid, ts: { $lt: fromMessage.ts, $gte: toMessage.ts } } + + ChatMessage.find(query).forEach (message) -> + if addItems + messages.push message._id + $(".messages-box ##{message._id}").addClass 'selected' + else + messages = _.without messages, message._id + $(".messages-box ##{message._id}").removeClass 'selected' - self = @ + console.log addItems, this.selectablePointer, this.selectableShiftPointer + this.selectedMessages.set messages - @autorun -> - self.subscribe 'fullUserData', Session.get('showUserInfo'), 1 + @autorun => + @subscribe 'fullUserData', Session.get('showUserInfo'), 1 Template.room.onDestroyed -> diff --git a/packages/rocketchat-ui/views/app/room.html b/packages/rocketchat-ui/views/app/room.html index d63dcc7dd97e..a8f9e0d6c4e4 100644 --- a/packages/rocketchat-ui/views/app/room.html +++ b/packages/rocketchat-ui/views/app/room.html @@ -50,7 +50,7 @@

{{/if}} {{/if}}

-
+
    From 7f40155da5eb2dc315ecae1df9535e4a17b88946 Mon Sep 17 00:00:00 2001 From: Marcelo Schmidt Date: Mon, 21 Dec 2015 23:54:06 -0200 Subject: [PATCH 2/9] select messages to send e-mail --- .../views/channelSettingsMailMessages.coffee | 4 +- .../views/mailMessagesInstructions.coffee | 2 +- packages/rocketchat-ui/views/app/room.coffee | 95 +++++++++---------- 3 files changed, 46 insertions(+), 55 deletions(-) diff --git a/packages/rocketchat-channel-settings-mail-messages/client/views/channelSettingsMailMessages.coffee b/packages/rocketchat-channel-settings-mail-messages/client/views/channelSettingsMailMessages.coffee index 6fdfa79e6ad9..855a105f0f4c 100644 --- a/packages/rocketchat-channel-settings-mail-messages/client/views/channelSettingsMailMessages.coffee +++ b/packages/rocketchat-channel-settings-mail-messages/client/views/channelSettingsMailMessages.coffee @@ -3,8 +3,8 @@ Template.channelSettingsMailMessages.events Session.set 'channelSettingsMailMessages', Session.get('openedRoom') RocketChat.TabBar.setTemplate('mailMessagesInstructions') view = Blaze.getView($('.messages-box')[0]) - view?.templateInstance?().resetSelection(true) + view?.templateInstance?().resetSelection?(true) Template.channelSettingsMailMessages.onCreated -> view = Blaze.getView($('.messages-box')[0]) - view?.templateInstance?().resetSelection(false) + view?.templateInstance?().resetSelection?(false) diff --git a/packages/rocketchat-channel-settings-mail-messages/client/views/mailMessagesInstructions.coffee b/packages/rocketchat-channel-settings-mail-messages/client/views/mailMessagesInstructions.coffee index a70d7e925b83..a3c717f806d4 100644 --- a/packages/rocketchat-channel-settings-mail-messages/client/views/mailMessagesInstructions.coffee +++ b/packages/rocketchat-channel-settings-mail-messages/client/views/mailMessagesInstructions.coffee @@ -2,7 +2,7 @@ Template.mailMessagesInstructions.events 'click .cancel': (e, t) -> RocketChat.TabBar.setTemplate('channelSettings') view = Blaze.getView($('.messages-box')[0]) - view?.templateInstance?().resetSelection(false) + view?.templateInstance?().resetSelection?(false) 'click .send': (e, t) -> console.log 'sending' diff --git a/packages/rocketchat-ui/views/app/room.coffee b/packages/rocketchat-ui/views/app/room.coffee index 7917001e6883..a8ebd7c1b4b7 100644 --- a/packages/rocketchat-ui/views/app/room.coffee +++ b/packages/rocketchat-ui/views/app/room.coffee @@ -438,83 +438,74 @@ Template.room.events e.preventDefault() e.stopPropagation() if template.selectable.get() + document.selection?.empty() or window.getSelection?().removeAllRanges() data = Blaze.getData(e.currentTarget) _id = data?._arguments?[1]?._id - if !template.selectablePointer or !e.shiftKey + if !template.selectablePointer + template.selectablePointer = _id + + if !e.shiftKey + template.selectedMessages = template.getSelectedMessages() + template.selectedRange = [] template.selectablePointer = _id - template.selectableShiftPointer = null - document.selection?.empty() or window.getSelection?().removeAllRanges() template.selectMessages _id + selectedMessages = $('.messages-box .message.selected').map((i, message) -> message.id) + removeClass = _.difference selectedMessages, template.getSelectedMessages() + addClass = _.difference template.getSelectedMessages(), selectedMessages + for message in removeClass + $(".messages-box ##{message}").removeClass('selected') + for message in addClass + $(".messages-box ##{message}").addClass('selected') + + Template.room.onCreated -> # this.scrollOnBottom = true # this.typing = new msgTyping this.data._id this.showUsersOffline = new ReactiveVar false this.atBottom = true this.unreadCount = new ReactiveVar 0 + this.selectable = new ReactiveVar false - this.selectedMessages = new ReactiveVar [] + this.selectedMessages = [] + this.selectedRange = [] this.selectablePointer = null - this.selectableShiftPointer = null this.resetSelection = (enabled) => this.selectable.set(enabled) $('.messages-box .message.selected').removeClass 'selected' - this.selectedMessages.set [] + this.selectedMessages = [] + this.selectedRange = [] this.selectablePointer = null - this.selectableShiftPointer = null this.selectMessages = (to) => - messages = this.selectedMessages.get() - if this.selectablePointer is to - this.selectablePointer = this.selectableShiftPointer or this.selectablePointer - if messages.indexOf(to) is -1 - messages.push to - $(".messages-box ##{to}").addClass 'selected' - else - messages = _.without messages, to - $(".messages-box ##{to}").removeClass 'selected' + if this.selectablePointer is to and this.selectedRange.length > 0 + this.selectedRange = [] else - includeFrom = true - addItems = messages.indexOf(to) is -1 - if addItems - fromMessage = ChatMessage.findOne this.selectablePointer - toMessage = ChatMessage.findOne to - # this.selectablePointer = this.selectableShiftPointer or this.selectablePointer - this.selectableShiftPointer = to - else - if this.selectableShiftPointer? - fromMessage = ChatMessage.findOne this.selectableShiftPointer - else - console.log 'set includeFrom = false' - includeFrom = false - fromMessage = ChatMessage.findOne this.selectablePointer - toMessage = ChatMessage.findOne to - this.selectableShiftPointer = null - - if fromMessage.ts <= toMessage.ts - if includeFrom - query = { rid: fromMessage.rid, ts: { $gte: fromMessage.ts, $lte: toMessage.ts } } - else - query = { rid: fromMessage.rid, ts: { $gt: fromMessage.ts, $lte: toMessage.ts } } - else - if includeFrom - query = { rid: fromMessage.rid, ts: { $lte: fromMessage.ts, $gte: toMessage.ts } } - else - query = { rid: fromMessage.rid, ts: { $lt: fromMessage.ts, $gte: toMessage.ts } } + message1 = ChatMessage.findOne this.selectablePointer + message2 = ChatMessage.findOne to - ChatMessage.find(query).forEach (message) -> - if addItems - messages.push message._id - $(".messages-box ##{message._id}").addClass 'selected' - else - messages = _.without messages, message._id - $(".messages-box ##{message._id}").removeClass 'selected' + minTs = _.min([message1.ts, message2.ts]) + maxTs = _.max([message1.ts, message2.ts]) + + this.selectedRange = _.pluck(ChatMessage.find({ rid: message1.rid, ts: { $gte: minTs, $lte: maxTs } }).fetch(), '_id') + + this.getSelectedMessages = => + messages = this.selectedMessages + addMessages = false + for message in this.selectedRange + if messages.indexOf(message) is -1 + addMessages = true + break + + if addMessages + previewMessages = _.compact(_.uniq(this.selectedMessages.concat(this.selectedRange))) + else + previewMessages = _.compact(_.difference(this.selectedMessages, this.selectedRange)) - console.log addItems, this.selectablePointer, this.selectableShiftPointer - this.selectedMessages.set messages + return previewMessages @autorun => @subscribe 'fullUserData', Session.get('showUserInfo'), 1 From a3d6215dd3d02ea15a3a8cf542157874cb43430c Mon Sep 17 00:00:00 2001 From: Marcelo Schmidt Date: Tue, 22 Dec 2015 00:09:10 -0200 Subject: [PATCH 3/9] Added fields for sending mail --- .../views/mailMessagesInstructions.coffee | 4 +++ .../views/mailMessagesInstructions.html | 28 +++++++++++++++++++ .../i18n/en.i18n.json | 6 +++- 3 files changed, 37 insertions(+), 1 deletion(-) diff --git a/packages/rocketchat-channel-settings-mail-messages/client/views/mailMessagesInstructions.coffee b/packages/rocketchat-channel-settings-mail-messages/client/views/mailMessagesInstructions.coffee index a3c717f806d4..d8672a24efb4 100644 --- a/packages/rocketchat-channel-settings-mail-messages/client/views/mailMessagesInstructions.coffee +++ b/packages/rocketchat-channel-settings-mail-messages/client/views/mailMessagesInstructions.coffee @@ -1,3 +1,7 @@ +Template.mailMessagesInstructions.helpers + body: -> + return '' + Template.mailMessagesInstructions.events 'click .cancel': (e, t) -> RocketChat.TabBar.setTemplate('channelSettings') diff --git a/packages/rocketchat-channel-settings-mail-messages/client/views/mailMessagesInstructions.html b/packages/rocketchat-channel-settings-mail-messages/client/views/mailMessagesInstructions.html index 0e344c76b311..79d62505d1aa 100644 --- a/packages/rocketchat-channel-settings-mail-messages/client/views/mailMessagesInstructions.html +++ b/packages/rocketchat-channel-settings-mail-messages/client/views/mailMessagesInstructions.html @@ -5,6 +5,34 @@

    {{_ "Mail_Messages"}}

{{_ "Mail_Messages_Instructions"}}

+
+
+
+ +
+ +
+
+
+ +
+ +
+
+
+ +
+ +
+
+
+ +
+ {{body}} +
+
+
+

diff --git a/packages/rocketchat-channel-settings-mail-messages/i18n/en.i18n.json b/packages/rocketchat-channel-settings-mail-messages/i18n/en.i18n.json index 0e441d185b79..64e39f5943c5 100644 --- a/packages/rocketchat-channel-settings-mail-messages/i18n/en.i18n.json +++ b/packages/rocketchat-channel-settings-mail-messages/i18n/en.i18n.json @@ -1,7 +1,11 @@ { + "Body" : "Body", "Cancel" : "Cancel", "Choose_messages" : "Choose messages", + "From" : "From", "Mail_Messages" : "Mail Messages", "Mail_Messages_Instructions" : "Choose which messages you want to send via e-mail by clicking the messages", - "Send" : "Send" + "Send" : "Send", + "Subject" : "Subject", + "To" : "To" } From 6ad7f4454a23d3398eafb6a67d397ff095ac7f59 Mon Sep 17 00:00:00 2001 From: Marcelo Schmidt Date: Tue, 22 Dec 2015 14:35:06 -0200 Subject: [PATCH 4/9] Email selected messages --- ...cketChatChannelSettingsMailMessages.coffee | 12 --- .../client/stylesheets/mail-messages.less | 24 ++++++ .../views/channelSettingsMailMessages.html | 4 +- .../views/mailMessagesInstructions.coffee | 74 +++++++++++++++++-- .../views/mailMessagesInstructions.html | 24 +++--- .../i18n/en.i18n.json | 8 +- .../package.js | 10 ++- .../server/methods/mailMessages.coffee | 40 ++++++++++ .../client/stylesheets/channel-settings.less | 30 ++++---- .../client/views/channelSettings.html | 62 ++++++++-------- packages/rocketchat-lib/lib/Message.coffee | 26 +++++++ .../{client => lib}/MessageTypes.coffee | 0 packages/rocketchat-lib/package.js | 3 +- .../server/models/Messages.coffee | 9 ++- 14 files changed, 243 insertions(+), 83 deletions(-) delete mode 100644 packages/rocketchat-channel-settings-mail-messages/client/lib/RocketChatChannelSettingsMailMessages.coffee create mode 100644 packages/rocketchat-channel-settings-mail-messages/client/stylesheets/mail-messages.less create mode 100644 packages/rocketchat-channel-settings-mail-messages/server/methods/mailMessages.coffee create mode 100644 packages/rocketchat-lib/lib/Message.coffee rename packages/rocketchat-lib/{client => lib}/MessageTypes.coffee (100%) diff --git a/packages/rocketchat-channel-settings-mail-messages/client/lib/RocketChatChannelSettingsMailMessages.coffee b/packages/rocketchat-channel-settings-mail-messages/client/lib/RocketChatChannelSettingsMailMessages.coffee deleted file mode 100644 index af7b8284173f..000000000000 --- a/packages/rocketchat-channel-settings-mail-messages/client/lib/RocketChatChannelSettingsMailMessages.coffee +++ /dev/null @@ -1,12 +0,0 @@ -RocketChat.ChannelSettingsMailMessages = new class - addCheckboxes = -> - $('.messages-box .wrapper .message').each (index, item) -> - $item = $(item) - unless $item.find('input[type=checkbox]').length - $item.prepend(HTML.toHTML(HTML.INPUT({type: 'checkbox', class: 'send-message', style: 'position: absolute; left: 0' }))); - - removeCheckboxes = -> - $('.messages-box .wrapper .message input[type=checkbox].send-message').remove() - - addCheckboxes: addCheckboxes - removeCheckboxes: removeCheckboxes diff --git a/packages/rocketchat-channel-settings-mail-messages/client/stylesheets/mail-messages.less b/packages/rocketchat-channel-settings-mail-messages/client/stylesheets/mail-messages.less new file mode 100644 index 000000000000..6b5e9dd4a5b6 --- /dev/null +++ b/packages/rocketchat-channel-settings-mail-messages/client/stylesheets/mail-messages.less @@ -0,0 +1,24 @@ +.flex-tab { + .mail-message { + form { + margin-top: 20px; + + .input-line.double-col { + margin-bottom: 20px; + + label { + line-height: 15px; + } + + div { + line-height: 15px; + i.octicon { + font-size: 13px; + opacity: 0.4; + vertical-align: top; + } + } + } + } + } +} diff --git a/packages/rocketchat-channel-settings-mail-messages/client/views/channelSettingsMailMessages.html b/packages/rocketchat-channel-settings-mail-messages/client/views/channelSettingsMailMessages.html index ff680914b122..10b1cce82fe7 100644 --- a/packages/rocketchat-channel-settings-mail-messages/client/views/channelSettingsMailMessages.html +++ b/packages/rocketchat-channel-settings-mail-messages/client/views/channelSettingsMailMessages.html @@ -1,8 +1,8 @@ diff --git a/packages/rocketchat-channel-settings-mail-messages/client/views/mailMessagesInstructions.coffee b/packages/rocketchat-channel-settings-mail-messages/client/views/mailMessagesInstructions.coffee index d8672a24efb4..f95e8f0aba5d 100644 --- a/packages/rocketchat-channel-settings-mail-messages/client/views/mailMessagesInstructions.coffee +++ b/packages/rocketchat-channel-settings-mail-messages/client/views/mailMessagesInstructions.coffee @@ -1,17 +1,79 @@ Template.mailMessagesInstructions.helpers - body: -> - return '' + name: -> + return Meteor.user().name + email: -> + return Meteor.user().emails?[0]?.address + roomName: -> + return ChatRoom.findOne(Session.get('openedRoom'))?.name + erroredEmails: -> + return Template.instance()?.erroredEmails.get().join(', ') Template.mailMessagesInstructions.events 'click .cancel': (e, t) -> - RocketChat.TabBar.setTemplate('channelSettings') - view = Blaze.getView($('.messages-box')[0]) - view?.templateInstance?().resetSelection?(false) + t.reset() 'click .send': (e, t) -> - console.log 'sending' + t.$('.error').hide() + $btn = t.$('button.send') + oldBtnValue = $btn.html() + $btn.html(TAPi18n.__('Sending')) + + selectedMessages = $('.messages-box .message.selected') + + error = false + if selectedMessages.length is 0 + t.$('.error-select').show() + error = true + + if t.$('input[name=to]').val().trim() + rfcMailPatternWithName = /^(?:.*<)?([a-zA-Z0-9.!#$%&'*+\/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*)(?:>?)$/ + emails = t.$('input[name=to]').val().trim().split(',') + erroredEmails = [] + for email in emails + unless rfcMailPatternWithName.test email.trim() + erroredEmails.push email.trim() + + t.erroredEmails.set erroredEmails + if erroredEmails.length > 0 + t.$('.error-invalid-emails').show() + error = true + else + t.$('.error-missing-to').show() + error = true + + if error + $btn.html(oldBtnValue) + else + data = + rid: Session.get('openedRoom') + to: t.$('input[name=to]').val().trim() + subject: t.$('input[name=subject]').val().trim() + messages: selectedMessages.map((i, message) -> return message.id).toArray() + language: localStorage.getItem('userLanguage') + + Meteor.call 'mailMessages', data, (err, result) -> + $btn.html(oldBtnValue) + if err? + return toastr.error(err.reason or err.message) + + toastr.success(TAPi18n.__('Your_email_has_been_queued_for_sending')) + t.reset() + + 'click .select-all': (e, t) -> + t.$('.error-select').hide() + + view = Blaze.getView($('.messages-box')[0]) + view?.templateInstance?().selectedMessages = _.pluck(ChatMessage.find({rid: Session.get('openedRoom')})?.fetch(), '_id') + $(".messages-box .message").addClass('selected') Template.mailMessagesInstructions.onCreated -> + @erroredEmails = new ReactiveVar [] + + @reset = -> + RocketChat.TabBar.setTemplate('channelSettings') + view = Blaze.getView($('.messages-box')[0]) + view?.templateInstance?().resetSelection?(false) + @autorun => if Session.get('channelSettingsMailMessages') isnt Session.get('openedRoom') RocketChat.TabBar.setTemplate('channelSettings') diff --git a/packages/rocketchat-channel-settings-mail-messages/client/views/mailMessagesInstructions.html b/packages/rocketchat-channel-settings-mail-messages/client/views/mailMessagesInstructions.html index 79d62505d1aa..c8c27429f6d9 100644 --- a/packages/rocketchat-channel-settings-mail-messages/client/views/mailMessagesInstructions.html +++ b/packages/rocketchat-channel-settings-mail-messages/client/views/mailMessagesInstructions.html @@ -1,6 +1,6 @@