From 622bd038e4123f6006a2c6f9e44fc4bdfc436231 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?G=C3=A9ry=20Debongnie?= Date: Fri, 6 Nov 2015 10:05:25 +0100 Subject: [PATCH] [FIX] mail: various ui improvements - display star/mark as read icon next to the message title instead on the far right - display unstar all message in channel starred - enable/disable the 'unstar all' and 'mark read' buttons depending on the number of messages in the corresponding channels - display star on the left sidebar in 'squashed messages' - tweaks to padding in client action - display hash in channel name in lighter tone - light opacity in sidebar - star icon in message sidebar is clickable + small less refactoring - message sidebar is aligned with the message now - messages are not squashed in inbox/starred --- addons/mail/models/mail_message.py | 7 +++ addons/mail/static/src/js/chat_manager.js | 12 +++- addons/mail/static/src/js/client_action.js | 24 ++++++- addons/mail/static/src/js/thread.js | 8 ++- .../mail/static/src/less/client_action.less | 11 +++- addons/mail/static/src/less/thread.less | 62 ++++++++++--------- addons/mail/static/src/xml/client_action.xml | 3 +- addons/mail/static/src/xml/thread.xml | 19 +++--- 8 files changed, 102 insertions(+), 44 deletions(-) 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 @@
- + #
@@ -90,6 +90,7 @@ + diff --git a/addons/mail/static/src/xml/thread.xml b/addons/mail/static/src/xml/thread.xml index d10318c5a17..94719437441 100644 --- a/addons/mail/static/src/xml/thread.xml +++ b/addons/mail/static/src/xml/thread.xml @@ -48,16 +48,11 @@ +
- - - -

Note by @@ -86,6 +81,14 @@ (from ) + + + +