diff options
| author | Denis Ledoux <dle@odoo.com> | 2015-12-23 16:28:45 +0100 |
|---|---|---|
| committer | Denis Ledoux <dle@odoo.com> | 2015-12-23 16:28:45 +0100 |
| commit | aa5a7c2ee7280a654390d59ffbc9fc425c39d3b6 (patch) | |
| tree | bdf379aaace598a1365edacaa8319907a5a0f3d4 /addons/mail/static/src | |
| parent | 34348ebf8d99bf455e7ad6478a2403880d665a0e (diff) | |
| parent | 24eee9d7ba9a6084d78c942428b679ec782fc94d (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.js | 3 | ||||
| -rw-r--r-- | addons/mail/static/src/js/chatter.js | 4 | ||||
| -rw-r--r-- | addons/mail/static/src/js/client_action.js | 28 | ||||
| -rw-r--r-- | addons/mail/static/src/js/composer.js | 42 | ||||
| -rw-r--r-- | addons/mail/static/src/less/composer.less | 16 | ||||
| -rw-r--r-- | addons/mail/static/src/xml/composer.xml | 35 |
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"> |
