mail messages

pull/1733/head
Marcelo Schmidt 10 years ago
parent 2797531040
commit d694b010a7
  1. 1
      .meteor/packages
  2. 1
      .meteor/versions
  3. 3
      packages/rocketchat-channel-settings-mail-messages/client/lib/ChannelSettings.coffee
  4. 12
      packages/rocketchat-channel-settings-mail-messages/client/lib/RocketChatChannelSettingsMailMessages.coffee
  5. 10
      packages/rocketchat-channel-settings-mail-messages/client/views/channelSettingsMailMessages.coffee
  6. 8
      packages/rocketchat-channel-settings-mail-messages/client/views/channelSettingsMailMessages.html
  7. 13
      packages/rocketchat-channel-settings-mail-messages/client/views/mailMessagesInstructions.coffee
  8. 14
      packages/rocketchat-channel-settings-mail-messages/client/views/mailMessagesInstructions.html
  9. 7
      packages/rocketchat-channel-settings-mail-messages/i18n/en.i18n.json
  10. 44
      packages/rocketchat-channel-settings-mail-messages/package.js
  11. 29
      packages/rocketchat-channel-settings/client/lib/ChannelSettings.coffee
  12. 2
      packages/rocketchat-channel-settings/client/views/channelSettings.coffee
  13. 3
      packages/rocketchat-channel-settings/client/views/channelSettings.html
  14. 3
      packages/rocketchat-channel-settings/package.js
  15. 6
      packages/rocketchat-theme/assets/stylesheets/base.less
  16. 81
      packages/rocketchat-ui/views/app/room.coffee
  17. 2
      packages/rocketchat-ui/views/app/room.html

@ -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

@ -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

@ -0,0 +1,3 @@
RocketChat.ChannelSettings.addOption
id: 'mail-messages'
template: 'channelSettingsMailMessages'

@ -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

@ -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)

@ -0,0 +1,8 @@
<template name="channelSettingsMailMessages">
<div class="input-line double-col">
<label>{{_ "Mail_Messages"}}</label>
<div>
<button type="button" class="button primary mail-messages">{{_ "Choose_messages"}}</button>
</div>
</div>
</template>

@ -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')

@ -0,0 +1,14 @@
<template name="mailMessagesInstructions">
<div class="content">
<div class="list-view">
<div class="status">
<h2>{{_ "Mail_Messages"}}</h2>
</div>
<p>{{_ "Mail_Messages_Instructions"}}</p>
<p style="margin-top: 30px">
<button type="button" class="button secondary cancel">{{_ "Cancel"}}</button>
<button type="button" class="button primary send">{{_ "Send"}}</button>
</p>
</div>
</div>
</template>

@ -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"
}

@ -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) {
});

@ -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

@ -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) ->

@ -16,6 +16,9 @@
</div>
</div>
{{/if}}
{{#each channelSettings}}
{{> Template.dynamic template=template data=data}}
{{/each}}
</fieldset>
<div class="submit">
<button class="button save"><i class="icon-send"></i><span>{{_ "Save_changes"}}</span></button>

@ -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',

@ -2471,6 +2471,12 @@ a.github-fork {
border-radius: 4px;
}
}
&.selectable .message {
cursor: pointer;
&.selected {
background-color: #FFD;
}
}
}
.ticks-bar {

@ -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 ->

@ -50,7 +50,7 @@
{{/if}}
{{/if}}
</div>
<div class="messages-box {{compactView}}">
<div class="messages-box {{#if selectable}}selectable{{/if}} {{compactView}}">
<div class="ticks-bar"></div>
<div class="wrapper {{#if hasMoreNext}}has-more-next{{/if}}">
<ul aria-live="polite">

Loading…
Cancel
Save