diff --git a/addons/mail/models/mail_message.py b/addons/mail/models/mail_message.py
index beb041d2e7a..1dff03cc902 100644
--- a/addons/mail/models/mail_message.py
+++ b/addons/mail/models/mail_message.py
@@ -177,6 +177,13 @@ class Message(models.Model):
self = self.sudo()
return self.write({'needaction_partner_ids': [(3, pid) for pid in partner_ids]})
+ @api.model
+ def unstar_all(self):
+ partner_id = self.env.user.partner_id.id
+
+ starred_messages = self.search([('starred_partner_ids', 'in', partner_id)])
+ starred_messages.write({'starred_partner_ids': [(3, partner_id)]})
+
@api.multi
def set_message_starred(self, starred):
""" Set messages as (un)starred. Technically, the notifications related
diff --git a/addons/mail/static/src/js/chat_manager.js b/addons/mail/static/src/js/chat_manager.js
index 325357a650e..8225459e9b3 100644
--- a/addons/mail/static/src/js/chat_manager.js
+++ b/addons/mail/static/src/js/chat_manager.js
@@ -213,9 +213,6 @@ function make_channel (data, options) {
channel.name = data.direct_partner[0].name;
channel.status = data.direct_partner[0].im_status;
}
- if ((channel.type === 'public') || (channel.type === 'private')) {
- channel.name = '#' + channel.name;
- }
return channel;
}
@@ -368,6 +365,15 @@ var chat_manager = {
});
},
+ unstar_all: function () {
+ MessageModel.call('unstar_all', [[]], {}).then(function (ids) {
+ _.each(messages, function (msg) {
+ remove_message_from_channel("channel_starred", msg);
+ chat_manager.bus.trigger('update_message', msg);
+ });
+ });
+ },
+
get_channels: function () {
return _.clone(channels);
},
diff --git a/addons/mail/static/src/js/client_action.js b/addons/mail/static/src/js/client_action.js
index 251f6e3b772..6c5b4ecba5b 100644
--- a/addons/mail/static/src/js/client_action.js
+++ b/addons/mail/static/src/js/client_action.js
@@ -168,6 +168,7 @@ var ChatAction = Widget.extend(ControlPanelMixin, {
self.$('.o_mail_chat_sidebar').slideToggle(200);
});
this.$buttons.on('click', '.o_mail_chat_button_mark_read', chat_manager.mark_all_as_read);
+ this.$buttons.on('click', '.o_mail_chat_button_unstar_all', chat_manager.unstar_all);
this.thread.on('redirect', this, this.on_redirect);
@@ -319,6 +320,10 @@ var ChatAction = Widget.extend(ControlPanelMixin, {
.find('.o_mail_chat_button_mark_read')
.toggle(channel.id === "channel_inbox");
+ this.$buttons
+ .find('.o_mail_chat_button_unstar_all')
+ .toggle(channel.id === "channel_starred");
+
this.update_cp();
this.action.context.active_id = channel.id;
@@ -367,6 +372,7 @@ var ChatAction = Widget.extend(ControlPanelMixin, {
display_load_more: !chat_manager.all_history_loaded(this.channel, this.domain),
display_needactions: this.channel.display_needactions,
channel_id: this.channel.id,
+ squash_close_messages: this.channel.type !== 'static',
};
},
@@ -374,9 +380,23 @@ var ChatAction = Widget.extend(ControlPanelMixin, {
var self = this;
return chat_manager.get_messages({channel_id: this.channel.id, domain: this.domain}).then(function(result) {
self.thread.render(result, self.get_thread_rendering_options());
+ self.update_button_status(result.length === 0);
});
},
+ update_button_status: function (disabled) {
+ if (this.channel.id === "channel_inbox") {
+ this.$buttons
+ .find('.o_mail_chat_button_mark_read')
+ .toggleClass('disabled', disabled);
+ }
+ if (this.channel.id === "channel_starred") {
+ this.$buttons
+ .find('.o_mail_chat_button_unstar_all')
+ .toggleClass('disabled', disabled);
+ }
+ },
+
load_more_messages: function () {
var self = this;
var oldest_msg_id = this.$('.o_thread_message').first().data('messageId');
@@ -493,7 +513,9 @@ var ChatAction = Widget.extend(ControlPanelMixin, {
(current_channel_id === "channel_inbox" && !message.is_needaction)) {
chat_manager.get_messages({channel_id: this.channel.id, domain: this.domain}).then(function (messages) {
var options = self.get_thread_rendering_options();
- self.thread.remove_message_and_render(message.id, messages, options);
+ self.thread.remove_message_and_render(message.id, messages, options).then(function () {
+ self.update_button_status(messages.length === 0);
+ });
});
} else if (_.contains(message.channel_ids, current_channel_id)) {
this.fetch_and_render_thread();
diff --git a/addons/mail/static/src/js/thread.js b/addons/mail/static/src/js/thread.js
index 6667a635d65..60fa5fd63f5 100644
--- a/addons/mail/static/src/js/thread.js
+++ b/addons/mail/static/src/js/thread.js
@@ -46,6 +46,7 @@ var Thread = Widget.extend({
default_username: _t('Anonymous'),
display_document_link: true,
display_avatar: true,
+ squash_close_messages: true,
});
},
@@ -54,6 +55,7 @@ var Thread = Widget.extend({
if (this.options.display_order === ORDER.DESC) {
msgs.reverse();
}
+ options = _.extend({}, this.options, options);
// Hide avatar and info of a message if that message and the previous
// one are both comments wrote by the same author at the same minute
@@ -63,6 +65,8 @@ var Thread = Widget.extend({
prev_msg.message_type !== 'comment' || msg.message_type !== 'comment' ||
(prev_msg.author_id[0] !== msg.author_id[0])) {
msg.display_author = true;
+ } else {
+ msg.display_author = !options.squash_close_messages;
}
prev_msg = msg;
});
@@ -131,10 +135,12 @@ var Thread = Widget.extend({
*/
remove_message_and_render: function (message_id, messages, options) {
var self = this;
+ var done = $.Deferred();
this.$('.o_thread_message[data-message-id=' + message_id + ']').fadeOut({
- done: function () { self.render(messages, options); },
+ done: function () { self.render(messages, options); done.resolve();},
duration: 200,
});
+ return done;
},
/**
diff --git a/addons/mail/static/src/less/client_action.less b/addons/mail/static/src/less/client_action.less
index dbb6b89c1d5..9f8d501c3a2 100644
--- a/addons/mail/static/src/less/client_action.less
+++ b/addons/mail/static/src/less/client_action.less
@@ -27,11 +27,12 @@
.o_mail_sidebar_title {
.o-flex-display();
- padding: 5px 8px 5px @odoo-horizontal-padding;
+ padding: 12px 8px 5px @odoo-horizontal-padding;
align-items: center;
justify-content: space-between;
h4 {
text-transform: uppercase;
+ margin-bottom: 5px;
}
.o_add {
padding: 6px;
@@ -39,7 +40,7 @@
}
.o_mail_chat_channel_item {
width: 100%;
- padding: 5px 8px 5px 1.5*@odoo-horizontal-padding; // larger padding-left than titles
+ padding: 2px 8px 2px 1.5*@odoo-horizontal-padding; // larger padding-left than titles
> .badge {
margin: 0;
}
@@ -110,6 +111,7 @@
.o_mail_chat_sidebar {
background-color: darken(@gray, 8%);
color: lighten(@gray, 50%);
+ opacity: 0.9;
.o_mail_chat_channel_item {
overflow: hidden;
@@ -125,6 +127,11 @@
&.o_active {
background-color: darken(@gray, 15%);
}
+
+ .o_mail_hash {
+ opacity: 0.6
+ }
+
.o_mail_partner_unpin {
opacity: 0;
&:hover {
diff --git a/addons/mail/static/src/less/thread.less b/addons/mail/static/src/less/thread.less
index 7f27ab228cc..bcb73d4dd7c 100644
--- a/addons/mail/static/src/less/thread.less
+++ b/addons/mail/static/src/less/thread.less
@@ -29,19 +29,50 @@
.o_thread_message_sidebar {
.o-flex(0, 0, @mail-thread-avatar-size);
margin-right: 10px;
+ margin-top: 2px;
text-align: center;
+ font-size: smaller;
+
+ @media (max-width: @screen-xs-max) {
+ margin-top: 4px;
+ font-size: x-small;
+ }
.o_thread_message_avatar {
max-width: @mail-thread-avatar-size;
}
+ .o_thread_message_side_date {
+ margin-left: -5px;
+ }
+ .o_thread_message_star {
+ margin-right: -5px;
+ }
.o_thread_message_side_date {
- font-size: smaller;
opacity: 0;
}
}
- &:hover .o_thread_message_side_date {
- opacity: @mail-thread-side-date-opacity;
+
+ i.o_thread_message_star, i.o_thread_message_needaction {
+ cursor: pointer;
+ opacity: 0;
+ &.fa-star {
+ opacity: @mail-thread-icon-opacity;
+ color: gold;
+ }
+ }
+
+ &:hover, &.o_thread_selected_message {
+ .o_thread_message_side_date {
+ opacity: @mail-thread-side-date-opacity;
+ }
+
+ i.o_thread_message_star, i.o_thread_message_needaction {
+ opacity: @mail-thread-icon-opacity;
+ &:hover {
+ opacity: 1;
+ }
+ }
}
.o_mail_redirect {
@@ -76,32 +107,7 @@
}
.o_thread_message_star, .o_thread_message_needaction {
- cursor: pointer;
- opacity: 0;
padding: 4px;
- &.fa-star {
- opacity: @mail-thread-icon-opacity;
- color: gold;
- }
- }
- }
-
- &:hover .o_thread_message_core {
- .o_thread_message_star, .o_thread_message_needaction {
- opacity: @mail-thread-icon-opacity;
- &:hover {
- opacity: 1;
- }
- }
- }
-
- &.o_thread_selected_message {
- .o_thread_message_side_date {
- opacity: @mail-thread-side-date-opacity;
- }
-
- .o_thread_message_star, .o_thread_message_needaction {
- opacity: @mail-thread-icon-opacity;
}
}
}
diff --git a/addons/mail/static/src/xml/client_action.xml b/addons/mail/static/src/xml/client_action.xml
index a4b5b8bca41..aa6a9bad802 100644
--- a/addons/mail/static/src/xml/client_action.xml
+++ b/addons/mail/static/src/xml/client_action.xml
@@ -73,7 +73,7 @@