summaryrefslogtreecommitdiff
path: root/addons/mail/static/src
diff options
context:
space:
mode:
authorDenis Ledoux <dle@odoo.com>2015-12-23 16:28:45 +0100
committerDenis Ledoux <dle@odoo.com>2015-12-23 16:28:45 +0100
commitaa5a7c2ee7280a654390d59ffbc9fc425c39d3b6 (patch)
treebdf379aaace598a1365edacaa8319907a5a0f3d4 /addons/mail/static/src
parent34348ebf8d99bf455e7ad6478a2403880d665a0e (diff)
parent24eee9d7ba9a6084d78c942428b679ec782fc94d (diff)
[MERGE] forward port of branch 9.0 up to 24eee9d
Diffstat (limited to 'addons/mail/static/src')
-rw-r--r--addons/mail/static/src/js/chat_manager.js3
-rw-r--r--addons/mail/static/src/js/chatter.js4
-rw-r--r--addons/mail/static/src/js/client_action.js28
-rw-r--r--addons/mail/static/src/js/composer.js42
-rw-r--r--addons/mail/static/src/less/composer.less16
-rw-r--r--addons/mail/static/src/xml/composer.xml35
6 files changed, 98 insertions, 30 deletions
diff --git a/addons/mail/static/src/js/chat_manager.js b/addons/mail/static/src/js/chat_manager.js
index cd758790d64..aa72ff3da1b 100644
--- a/addons/mail/static/src/js/chat_manager.js
+++ b/addons/mail/static/src/js/chat_manager.js
@@ -552,6 +552,9 @@ var chat_manager = {
body: _.str.trim(data.content),
attachment_ids: data.attachment_ids,
};
+ if ('subject' in data) {
+ msg.subject = data.subject;
+ }
if ('channel_id' in options) {
// post a message in a channel
return ChannelModel.call('message_post', [options.channel_id], _.extend(msg, {
diff --git a/addons/mail/static/src/js/chatter.js b/addons/mail/static/src/js/chatter.js
index d025d0af326..5f4ef8a3060 100644
--- a/addons/mail/static/src/js/chatter.js
+++ b/addons/mail/static/src/js/chatter.js
@@ -2,7 +2,7 @@ odoo.define('mail.Chatter', function (require) {
"use strict";
var chat_manager = require('mail.chat_manager');
-var ChatComposer = require('mail.ChatComposer');
+var composer = require('mail.composer');
var ChatThread = require('mail.ChatThread');
var ajax = require('web.ajax');
@@ -432,7 +432,7 @@ var Followers = form_common.AbstractField.extend({
// popup when suggested partner is selected without email, or other
// informations), and the button to open the full composer wizard.
// -----------------------------------------------------------------------------
-var ChatterComposer = ChatComposer.extend({
+var ChatterComposer = composer.BasicComposer.extend({
template: 'mail.chatter.ChatComposer',
init: function (parent, dataset, options) {
diff --git a/addons/mail/static/src/js/client_action.js b/addons/mail/static/src/js/client_action.js
index 3d97a35af0e..1e868c08942 100644
--- a/addons/mail/static/src/js/client_action.js
+++ b/addons/mail/static/src/js/client_action.js
@@ -2,7 +2,7 @@ odoo.define('mail.chat_client_action', function (require) {
"use strict";
var chat_manager = require('mail.chat_manager');
-var ChatComposer = require('mail.ChatComposer');
+var composer = require('mail.composer');
var ChatThread = require('mail.ChatThread');
var config = require('web.config');
@@ -15,7 +15,6 @@ var Model = require('web.Model');
var pyeval = require('web.pyeval');
var SearchView = require('web.SearchView');
-var session = require('web.session');
var Widget = require('web.Widget');
var QWeb = core.qweb;
@@ -163,7 +162,8 @@ var ChatAction = Widget.extend(ControlPanelMixin, {
this.searchview = new SearchView(this, dataset, view_id, {}, options);
this.searchview.on('search_data', this, this.on_search);
- this.composer = new ChatComposer(this);
+ this.basic_composer = new composer.BasicComposer(this);
+ this.extended_composer = new composer.ExtendedComposer(this);
this.thread = new ChatThread(this, {
display_help: true,
shorten_messages: false,
@@ -196,16 +196,19 @@ var ChatAction = Widget.extend(ControlPanelMixin, {
this.thread.on('toggle_star_status', this, function (message_id) {
chat_manager.toggle_star_status(message_id);
});
- this.composer.on('post_message', this, this.on_post_message);
- this.composer.on('input_focused', this, this.on_composer_input_focused);
+ this.basic_composer.on('post_message', this, this.on_post_message);
+ this.basic_composer.on('input_focused', this, this.on_composer_input_focused);
+ this.extended_composer.on('post_message', this, this.on_post_message);
+ this.extended_composer.on('input_focused', this, this.on_composer_input_focused);
var def1 = this.thread.prependTo(this.$('.o_mail_chat_content'));
- var def2 = this.composer.appendTo(this.$('.o_mail_chat_content'));
- var def3 = this.searchview.appendTo($("<div>"));
+ var def2 = this.basic_composer.appendTo(this.$('.o_mail_chat_content'));
+ var def3 = this.extended_composer.appendTo(this.$('.o_mail_chat_content'));
+ var def4 = this.searchview.appendTo($("<div>"));
this.render_sidebar();
- return $.when(def1, def2, def3)
+ return $.when(def1, def2, def3, def4)
.then(this.set_channel.bind(this, default_channel))
.then(function () {
chat_manager.bus.on('new_message', self, self.on_new_message);
@@ -369,7 +372,8 @@ var ChatAction = Widget.extend(ControlPanelMixin, {
.find('.o_mail_chat_button_unstar_all')
.toggle(channel.id === "channel_starred");
- self.$('.o_chat_composer').toggle(channel.type !== 'static');
+ self.basic_composer.toggle(channel.type !== 'static' && !channel.mass_mailing);
+ self.extended_composer.toggle(channel.type !== 'static' && channel.mass_mailing);
self.$('.o_mail_chat_channel_item')
.removeClass('o_active')
@@ -387,7 +391,8 @@ var ChatAction = Widget.extend(ControlPanelMixin, {
// Update control panel before focusing the composer, otherwise focus is on the searchview
self.update_cp();
if (!config.device.touch) {
- self.composer.focus();
+ var composer = channel.mass_mailing ? self.extended_composer : self.basic_composer;
+ composer.focus();
}
if (config.device.size_class === config.device.SIZES.XS) {
self.$('.o_mail_chat_sidebar').hide();
@@ -553,7 +558,8 @@ var ChatAction = Widget.extend(ControlPanelMixin, {
},
on_composer_input_focused: function () {
var suggestions = chat_manager.get_mention_partner_suggestions(this.channel);
- this.composer.mention_set_prefetched_partners(suggestions);
+ var composer = channel.mass_mailing ? self.extended_composer : self.basic_composer;
+ composer.mention_set_prefetched_partners(suggestions);
},
on_click_button_invite: function () {
diff --git a/addons/mail/static/src/js/composer.js b/addons/mail/static/src/js/composer.js
index 2965ccf9298..751b4c2ccc7 100644
--- a/addons/mail/static/src/js/composer.js
+++ b/addons/mail/static/src/js/composer.js
@@ -1,4 +1,4 @@
-odoo.define('mail.ChatComposer', function (require) {
+odoo.define('mail.composer', function (require) {
"use strict";
var chat_manager = require('mail.chat_manager');
@@ -310,7 +310,7 @@ var MentionManager = Widget.extend({
});
-var Composer = Widget.extend({
+var BasicComposer = Widget.extend({
template: "mail.ChatComposer",
events: {
@@ -395,6 +395,10 @@ var Composer = Widget.extend({
return this._super();
},
+ toggle: function(state) {
+ this.$el.toggle(state);
+ },
+
preprocess_message: function () {
// Return a deferred as this function is extended with asynchronous
// behavior for the chatter composer
@@ -655,6 +659,38 @@ var Composer = Widget.extend({
},
});
-return Composer;
+var ExtendedComposer = BasicComposer.extend({
+ init: function (parent, options) {
+ options = _.defaults(options || {}, {
+ input_min_height: 120,
+ });
+ this.extended = true;
+ return this._super(parent, options);
+ },
+
+ start: function () {
+ this.$subject_input = this.$(".o_composer_subject input");
+ return this._super.apply(this, arguments);
+ },
+
+ preprocess_message: function () {
+ var self = this;
+ return this._super().then(function (message) {
+ var subject = self.$subject_input.val();
+ self.$subject_input.val("");
+ message.subject = subject;
+ return message;
+ });
+ },
+
+ prevent_send: function () {
+ return true;
+ },
+});
+
+return {
+ BasicComposer: BasicComposer,
+ ExtendedComposer: ExtendedComposer,
+};
});
diff --git a/addons/mail/static/src/less/composer.less b/addons/mail/static/src/less/composer.less
index 37e3b7d0e97..3a0881d5da9 100644
--- a/addons/mail/static/src/less/composer.less
+++ b/addons/mail/static/src/less/composer.less
@@ -1,5 +1,17 @@
-.o_composer .o_composer_input {
- resize: none;
+.o_composer_subject {
+ .o-flex-display();
+ padding-bottom: 5px;
+
+ > input {
+ .o-flex(1, 1, auto);
+ margin-right: 30px;
+ }
+}
+
+.o_composer {
+ .o_composer_input {
+ resize: none;
+ }
}
.o_composer_attachments_list {
diff --git a/addons/mail/static/src/xml/composer.xml b/addons/mail/static/src/xml/composer.xml
index 71afe4d1695..4e1a9295e3b 100644
--- a/addons/mail/static/src/xml/composer.xml
+++ b/addons/mail/static/src/xml/composer.xml
@@ -2,17 +2,21 @@
<templates xml:space="preserve">
<div t-name="mail.ChatComposer" class="o_chat_composer">
- <div class="o_composer_attachments_list"/>
- <div class="o_composer">
- <textarea class="o_composer_input" placeholder="Write something..."/>
- <div class="btn-group o_composer_buttons">
- <button class="btn btn-sm btn-primary o_composer_button_send" type="button"><t t-esc="widget.options.send_text"/></button>
- <button class="btn btn-sm btn-icon fa fa-smile-o o_composer_button_emoji" type="button" data-toggle="popover"/>
- <button class="btn btn-sm btn-icon fa fa-paperclip o_composer_button_add_attachment" type="button"/>
- </div>
- </div>
+ <div class="o_composer_attachments_list"/>
+ <t t-if="widget.extended">
+ <div class="o_composer_subject">
+ <input placeholder="Subject"></input>
+ <t t-call="mail.ChatComposer.Buttons"></t>
+ </div>
+ </t>
+ <div class="o_composer">
+ <textarea class="o_composer_input" placeholder="Write something..."/>
+ <t t-if="!widget.extended">
+ <t t-call="mail.ChatComposer.Buttons"></t>
+ </t>
+ </div>
- <span class="hide">
+ <span class="hide">
<t t-call="HiddenInputFile">
<t t-set="fileupload_id" t-value="widget.fileupload_id"/>
<t t-set="fileupload_action" t-translation="off">/web/binary/upload_attachment</t>
@@ -20,10 +24,17 @@
<input type="hidden" name="id" value="0"/>
<input type="hidden" name="session_id" t-att-value="widget.session.session_id"/>
</t>
- </span>
- <span class="o_composer_emoji"></span>
+ </span>
+ <span class="o_composer_emoji"></span>
</div>
+ <t t-name="mail.ChatComposer.Buttons">
+ <div class="btn-group o_composer_buttons">
+ <button class="btn btn-sm btn-primary o_composer_button_send" type="button"><t t-esc="widget.options.send_text"/></button>
+ <button class="btn btn-sm btn-icon fa fa-smile-o o_composer_button_emoji" type="button" data-toggle="popover"/>
+ <button class="btn btn-sm btn-icon fa fa-paperclip o_composer_button_add_attachment" type="button"/>
+ </div>
+ </t>
<t t-name="mail.ChatComposer.emojis">
<t t-foreach="emojis" t-as="emoji">
<span t-att-data-emoji="emoji.source" class="o_mail_emoji" t-att-title="emoji.description">