diff --git a/addons/mail/static/src/js/chatter.js b/addons/mail/static/src/js/chatter.js
index 56e5c2e7ff9..a4899696747 100644
--- a/addons/mail/static/src/js/chatter.js
+++ b/addons/mail/static/src/js/chatter.js
@@ -6,6 +6,7 @@ var ChatComposer = require('mail.ChatComposer');
var ChatThread = require('mail.ChatThread');
var ajax = require('web.ajax');
+var config = require('web.config');
var core = require('web.core');
var data = require('web.data');
var Dialog = require('web.Dialog');
@@ -469,13 +470,6 @@ var ChatterComposer = ChatComposer.extend({
return $.when(this._super.apply(this, arguments), this.message_get_suggested_recipients());
},
- start: function () {
- var self = this;
- return this._super.apply(this, arguments).then(function () {
- autosize(self.$input);
- });
- },
-
preprocess_message: function () {
var self = this;
var def = $.Deferred();
@@ -519,13 +513,10 @@ var ChatterComposer = ChatComposer.extend({
},
/**
- * Override keydown event handler to go to next line on ENTER and send message on CTRL+ENTER
- */
- on_keydown: function (event) {
- if (!event.ctrlKey && (event.keyCode === $.ui.keyCode.ENTER) && !this.get('mention_partners').length) {
- return;
- }
- this._super(event);
+ * Send the message on SHIFT+ENTER, but go to new line on ENTER
+ */
+ prevent_send: function (event) {
+ return !event.shiftKey;
},
message_get_suggested_recipients: function () {
@@ -844,9 +835,12 @@ var Chatter = form_common.AbstractField.extend({
var old_composer = this.composer;
// create the new composer
this.composer = new ChatterComposer(this, this.thread_dataset, {
+ context: this.context,
+ input_min_height: 50,
+ input_max_height: Number.MAX_VALUE, // no max_height limit for the chatter
+ input_baseline: 14,
internal_subtypes: this.options.internal_subtypes,
is_log: options && options.is_log,
- context: this.context,
record_name: this.record_name,
});
this.composer.insertBefore(this.$('.o_mail_thread')).then(function () {
@@ -854,6 +848,9 @@ var Chatter = form_common.AbstractField.extend({
if (old_composer) {
old_composer.destroy();
}
+ if (!config.device.touch) {
+ self.composer.focus();
+ }
self.composer.on('post_message', self, self.on_post_message);
self.composer.on('need_refresh', self, self.refresh_followers);
});
diff --git a/addons/mail/static/src/js/composer.js b/addons/mail/static/src/js/composer.js
index dc2b47bf582..1d5b75bbbab 100644
--- a/addons/mail/static/src/js/composer.js
+++ b/addons/mail/static/src/js/composer.js
@@ -30,6 +30,9 @@ var Composer = Widget.extend({
this._super.apply(this, arguments);
this.options = _.defaults(options || {}, {
context: {},
+ input_baseline: 18,
+ input_max_height: 150,
+ input_min_height: 28,
mention_delimiter: '@',
mention_min_length: 2,
mention_typing_speed: 400,
@@ -56,7 +59,7 @@ var Composer = Widget.extend({
this.$mention_partner_tags = this.$('.o_composer_mentioned_partners');
this.$mention_dropdown = this.$('.o_composer_mention_dropdown');
this.$input = this.$('.o_composer_input');
- this.$input.focus();
+ this.resize_input();
// Attachments
$(window).on(this.fileupload_id, this.on_attachment_loaded);
@@ -107,6 +110,7 @@ var Composer = Widget.extend({
// Empty input, selected partners and attachments
self.$input.val('');
+ self.resize_input();
self.set('mention_selected_partners', []);
self.set('attachment_ids', []);
@@ -114,6 +118,19 @@ var Composer = Widget.extend({
});
},
+ /**
+ * Resizes the textarea according to its scrollHeight
+ * @param {Boolean} [force_resize] if not true, only reset the size if empty
+ */
+ resize_input: function (force_resize) {
+ if (this.$input.val() === '') {
+ this.$input.css('height', this.options.input_min_height);
+ } else if (force_resize) {
+ var height = this.$input.prop('scrollHeight') + this.options.input_baseline;
+ this.$input.css('height', Math.min(this.options.input_max_height, height));
+ }
+ },
+
// Events
on_click_add_attachment: function () {
this.$('input.o_form_input_file').click();
@@ -125,6 +142,13 @@ var Composer = Widget.extend({
this.$input.focus();
},
+ /**
+ * Send the message on ENTER, but go to new line on SHIFT+ENTER
+ */
+ prevent_send: function (event) {
+ return event.shiftKey;
+ },
+
on_keydown: function (event) {
switch(event.which) {
// UP, DOWN: prevent moving cursor if navigation in mention propositions
@@ -141,9 +165,13 @@ var Composer = Widget.extend({
break;
// ENTER: submit the message only if the dropdown mention proposition is not displayed
case $.ui.keyCode.ENTER:
- event.preventDefault();
- if (!this.get('mention_partners').length) {
+ if (this.get('mention_partners').length) {
+ event.preventDefault();
+ } else if (!this.prevent_send(event)) {
+ event.preventDefault();
this.send_message();
+ } else {
+ this.resize_input(true);
}
break;
}
@@ -174,6 +202,7 @@ var Composer = Widget.extend({
} else {
this.set('mention_partners', []); // close the dropdown
}
+ this.resize_input();
}
},
diff --git a/addons/mail/static/src/less/chatter.less b/addons/mail/static/src/less/chatter.less
index 143bcbcfcbb..b0eda543c85 100644
--- a/addons/mail/static/src/less/chatter.less
+++ b/addons/mail/static/src/less/chatter.less
@@ -29,6 +29,8 @@
.o_composer_input {
width: 100%;
+ .box-sizing(content-box);
+ resize: vertical;
margin-bottom: 5px;
}
}
diff --git a/addons/mail/static/src/less/composer.less b/addons/mail/static/src/less/composer.less
index a53ffd34f70..f44d8b381d4 100644
--- a/addons/mail/static/src/less/composer.less
+++ b/addons/mail/static/src/less/composer.less
@@ -1,3 +1,7 @@
+.o_composer .o_composer_input {
+ resize: none;
+}
+
.o_composer_mentioned_partners, .o_composer_attachments_list {
margin-top: 5px;
text-align: justify;
diff --git a/addons/mail/static/src/xml/chatter.xml b/addons/mail/static/src/xml/chatter.xml
index 72a1c7aaeae..17f4c51749f 100644
--- a/addons/mail/static/src/xml/chatter.xml
+++ b/addons/mail/static/src/xml/chatter.xml
@@ -52,11 +52,6 @@
-
-
-
-
-
diff --git a/addons/mail/static/src/xml/composer.xml b/addons/mail/static/src/xml/composer.xml
index 39e0b5afdc2..4d37474ba32 100644
--- a/addons/mail/static/src/xml/composer.xml
+++ b/addons/mail/static/src/xml/composer.xml
@@ -4,7 +4,7 @@