diff options
| author | Martin Trigaux <mat@odoo.com> | 2015-12-21 11:37:53 +0100 |
|---|---|---|
| committer | Martin Trigaux <mat@odoo.com> | 2015-12-21 11:37:53 +0100 |
| commit | e4bf03aeaf2c8200164c27f0d93994e2c173bded (patch) | |
| tree | abce75b917f931d042dba1e34060efd625f90ed7 /addons/mail/static/src | |
| parent | 82a495eed52a9f42e5b88caa52c20a85f8d81ce3 (diff) | |
| parent | c298cf3250fcfa351775dc57c3b913169e30e418 (diff) | |
[MERGE] Forward port of branch saas-7 up to c298cf3
Diffstat (limited to 'addons/mail/static/src')
| -rw-r--r-- | addons/mail/static/src/js/chat_manager.js | 42 | ||||
| -rw-r--r-- | addons/mail/static/src/js/chat_window.js | 17 | ||||
| -rw-r--r-- | addons/mail/static/src/js/chatter.js | 3 | ||||
| -rw-r--r-- | addons/mail/static/src/js/client_action.js | 40 | ||||
| -rw-r--r-- | addons/mail/static/src/js/composer.js | 3 | ||||
| -rw-r--r-- | addons/mail/static/src/js/systray.js | 5 | ||||
| -rw-r--r-- | addons/mail/static/src/js/thread.js | 23 | ||||
| -rw-r--r-- | addons/mail/static/src/js/window_manager.js | 3 | ||||
| -rw-r--r-- | addons/mail/static/src/less/chat_window.less | 28 | ||||
| -rw-r--r-- | addons/mail/static/src/less/client_action.less | 22 | ||||
| -rw-r--r-- | addons/mail/static/src/less/thread.less | 5 | ||||
| -rw-r--r-- | addons/mail/static/src/xml/client_action.xml | 2 | ||||
| -rw-r--r-- | addons/mail/static/src/xml/composer.xml | 2 | ||||
| -rw-r--r-- | addons/mail/static/src/xml/thread.xml | 24 |
14 files changed, 151 insertions, 68 deletions
diff --git a/addons/mail/static/src/js/chat_manager.js b/addons/mail/static/src/js/chat_manager.js index 2261b961410..cd758790d64 100644 --- a/addons/mail/static/src/js/chat_manager.js +++ b/addons/mail/static/src/js/chat_manager.js @@ -98,7 +98,7 @@ function add_message (data, options) { if (!query.is_displayed) { var title = _t('New message'); if (msg.author_id[1]) { - title += _t(' from ') + msg.author_id[1]; + title += _t(' from ') + _.escape(msg.author_id[1]); } var trunc_text = function (t, limit) { return (t.length > limit) ? t.substr(0, limit-1)+'…' : t; @@ -137,6 +137,7 @@ function make_message (data) { channel_ids: data.channel_ids, model: data.model, res_id: data.res_id, + url: session.url("/mail/view?message_id=" + data.id), }; _.each(_.keys(emoji_substitutions), function (key) { @@ -271,6 +272,7 @@ function make_channel (data, options) { if ('direct_partner' in data) { channel.type = "dm"; channel.name = data.direct_partner[0].name; + channel.direct_partner_id = data.direct_partner[0].id; channel.status = data.direct_partner[0].im_status; } return channel; @@ -398,6 +400,9 @@ function on_notification (notification) { } else if (model === 'res.partner') { // channel joined/left, message marked as read/(un)starred, chat open/closed on_partner_notification(notification[1]); + } else if (model === 'bus.presence') { + // update presence of users + on_presence_notification(notification[1]); } } @@ -450,6 +455,10 @@ function on_toggle_star_notification (data) { message.is_starred = data.starred; if (!message.is_starred) { remove_message_from_channel("channel_starred", message); + } else { + add_to_cache(message, []); + var channel_starred = chat_manager.get_channel('channel_starred'); + channel_starred.cache = _.pick(channel_starred.cache, "[]"); } chat_manager.bus.trigger('update_message', message); } @@ -487,8 +496,12 @@ function on_mark_as_unread_notification (data) { if (message) { invalidate_caches(message.channel_ids); add_channel_to_message(message, 'channel_inbox'); + add_to_cache(message, []); } }); + var channel_inbox = chat_manager.get_channel('channel_inbox'); + channel_inbox.cache = _.pick(channel_inbox.cache, "[]"); + _.each(data.channel_ids, function (channel_id) { var channel = chat_manager.get_channel(channel_id); if (channel) { @@ -500,6 +513,7 @@ function on_mark_as_unread_notification (data) { } function on_chat_session_notification (chat_session) { + var channel; if ((chat_session.channel_type === "channel") && (chat_session.state === "open")) { add_channel(chat_session, {autoswitch: false}); if (!chat_session.is_minimized && chat_session.info !== 'creation') { @@ -508,11 +522,23 @@ function on_chat_session_notification (chat_session) { } // partner specific change (open a detached window for example) if ((chat_session.state === "open") || (chat_session.state === "folded")) { - if (chat_session.is_minimized && chat_manager.get_channel(chat_session.id)) { - chat_manager.bus.trigger("open_chat", chat_session); + channel = chat_session.is_minimized && chat_manager.get_channel(chat_session.id); + if (channel) { + chat_manager.bus.trigger("open_chat", channel); } } else if (chat_session.state === "closed") { - chat_manager.bus.trigger("close_chat", chat_session); + channel = chat_manager.get_channel(chat_session.id); + if (channel) { + chat_manager.bus.trigger("close_chat", channel); + } + } +} + +function on_presence_notification (data) { + var dm = _.findWhere(channels, {direct_partner_id: data.id}); + if (dm) { + dm.status = data.im_status; + chat_manager.bus.trigger('update_dm_presence', dm); } } @@ -738,13 +764,13 @@ var chat_manager = { */ redirect: function (res_model, res_id, dm_redirection_callback) { var self = this; - var redirect_to_document = function (res_model, res_id) { + var redirect_to_document = function (res_model, res_id, view_id) { web_client.do_action({ type:'ir.actions.act_window', view_type: 'form', view_mode: 'form', res_model: res_model, - views: [[false, 'form']], + views: [[view_id || false, 'form']], res_id: res_id, }); }; @@ -758,7 +784,9 @@ var chat_manager = { } }); } else { - redirect_to_document(res_model, res_id); + new Model(res_model).call('get_formview_id', [res_id, session.context]).then(function (view_id) { + redirect_to_document(res_model, res_id, view_id); + }); } }, }; diff --git a/addons/mail/static/src/js/chat_window.js b/addons/mail/static/src/js/chat_window.js index e9fcaa9fe09..ca36b430791 100644 --- a/addons/mail/static/src/js/chat_window.js +++ b/addons/mail/static/src/js/chat_window.js @@ -8,6 +8,9 @@ var Widget = require('web.Widget'); var _t = core._t; +var HEIGHT_OPEN = '400px'; +var HEIGHT_FOLDED = '28px'; + return Widget.extend({ template: "mail.ChatWindow", events: { @@ -33,7 +36,6 @@ return Widget.extend({ this.thread = new ChatThread(this, { channel_id: this.channel_id, - display_avatar: false, display_needactions: false, display_stars: this.options.display_stars, }); @@ -41,7 +43,9 @@ return Widget.extend({ this.thread.on('redirect_to_channel', null, this.trigger.bind(this, 'redirect_to_channel')); this.thread.on('redirect', null, this.trigger.bind(this, 'redirect')); - this.fold(); + if (this.folded) { + this.$el.css('height', HEIGHT_FOLDED); + } var def = this.thread.appendTo(this.$content); return $.when(this._super(), def); }, @@ -64,7 +68,7 @@ return Widget.extend({ fold: function () { this.update_header(); this.$el.animate({ - height: this.folded ? "28px" : "333px" + height: this.folded ? HEIGHT_FOLDED : HEIGHT_OPEN }); }, toggle_fold: function (fold) { @@ -78,13 +82,16 @@ return Widget.extend({ on_keydown: function (event) { // ENTER key (avoid requiring jquery ui for external livechat) if (event.which === 13) { + var content = _.str.trim(this.$input.val()); var message = { - content: this.$input.val(), + content: content, attachment_ids: [], partner_ids: [], }; this.$input.val(''); - this.trigger('post_message', message, this.channel_id); + if (content) { + this.trigger('post_message', message, this.channel_id); + } } }, on_click_close: function (event) { diff --git a/addons/mail/static/src/js/chatter.js b/addons/mail/static/src/js/chatter.js index c99e958929e..94f3773258b 100644 --- a/addons/mail/static/src/js/chatter.js +++ b/addons/mail/static/src/js/chatter.js @@ -445,6 +445,9 @@ var ChatterComposer = ChatComposer.extend({ is_log: false, internal_subtypes: [], }); + if (this.options.is_log) { + this.options.send_text = _('Log'); + } this.events = _.extend(this.events, { 'click .o_composer_button_full_composer': 'on_open_full_composer', }); diff --git a/addons/mail/static/src/js/client_action.js b/addons/mail/static/src/js/client_action.js index ae032b4ece1..7dffad8c8f4 100644 --- a/addons/mail/static/src/js/client_action.js +++ b/addons/mail/static/src/js/client_action.js @@ -52,8 +52,8 @@ var PartnerInviteDialog = Dialog.extend({ width: '100%', allowClear: true, multiple: true, - formatResult: function(item){ - var css_class = "fa-circle" + (item.im_status === 'online' ? "" : "-o"); + formatResult: function(item) { + var css_class = (item.im_status === 'away' ? "fa-clock-o" : "fa-circle" + (item.im_status === 'online' ? "" : "-o")); return $('<span class="fa">').addClass(css_class).text(item.text); }, query: function (query) { @@ -76,7 +76,7 @@ var PartnerInviteDialog = Dialog.extend({ var ChannelModel = new Model('mail.channel'); return ChannelModel.call('channel_invite', [], {ids : [this.channel_id], partner_ids: _.pluck(data, 'id')}) .then(function(){ - var names = _.pluck(data, 'text').join(', '); + var names = _.escape(_.pluck(data, 'text').join(', ')); var notification = _.str.sprintf(_t('You added <b>%s</b> to the conversation.'), names); self.do_notify(_t('New people'), notification); }); @@ -131,7 +131,9 @@ var ChatAction = Widget.extend(ControlPanelMixin, { }, on_attach_callback: function () { - this.thread.scroll_to({offset: this.channels_scrolltop[this.channel.id]}); + if (this.channel) { + this.thread.scroll_to({offset: this.channels_scrolltop[this.channel.id]}); + } }, on_detach_callback: function () { this.channels_scrolltop[this.channel.id] = this.thread.get_scrolltop(); @@ -144,6 +146,7 @@ var ChatAction = Widget.extend(ControlPanelMixin, { this.action = action; this.options = options || {}; this.channels_scrolltop = {}; + this.throttled_render_sidebar = _.throttle(this.render_sidebar.bind(this), 100, { leading: false }); }, willStart: function () { @@ -173,7 +176,8 @@ var ChatAction = Widget.extend(ControlPanelMixin, { this.composer = new ChatComposer(this); this.thread = new ChatThread(this, { - display_help: true + display_help: true, + shorten_messages: false, }); this.$buttons = $(QWeb.render("mail.chat.ControlButtons", {})); @@ -221,9 +225,10 @@ var ChatAction = Widget.extend(ControlPanelMixin, { chat_manager.bus.on('anyone_listening', self, function (channel, query) { query.is_displayed = query.is_displayed || channel.id === self.channel.id; }); - chat_manager.bus.on('update_needaction', self, self.render_sidebar); chat_manager.bus.on('unsubscribe_from_channel', self, self.render_sidebar); - chat_manager.bus.on('update_channel_unread_counter', self, self.render_sidebar); + chat_manager.bus.on('update_needaction', self, self.throttled_render_sidebar); + chat_manager.bus.on('update_channel_unread_counter', self, self.throttled_render_sidebar); + chat_manager.bus.on('update_dm_presence', self, self.throttled_render_sidebar); }); }, @@ -302,9 +307,10 @@ var ChatAction = Widget.extend(ControlPanelMixin, { return Channel.call('channel_search_to_join', [search_val]).then(function(result){ var values = []; _.each(result, function(channel){ + var escaped_name = _.escape(channel.name); values.push(_.extend(channel, { - 'value': channel.name, - 'label': channel.name, + 'value': escaped_name, + 'label': escaped_name, })); }); return values; @@ -316,9 +322,10 @@ var ChatAction = Widget.extend(ControlPanelMixin, { return Partner.call('im_search', [search_val, 20]).then(function(result){ var values = []; _.each(result, function(user){ + var escaped_name = _.escape(user.name); values.push(_.extend(user, { - 'value': user.name, - 'label': user.name, + 'value': escaped_name, + 'label': escaped_name, })); }); return values; @@ -381,7 +388,15 @@ var ChatAction = Widget.extend(ControlPanelMixin, { .removeClass('o_unread_message') .addClass('o_active'); - self.thread.scroll_to({offset: new_channel_scrolltop}); + var $new_messages_separator = self.$('.o_thread_new_messages_separator'); + if ($new_messages_separator.length) { + self.thread.$el.scrollTo($new_messages_separator); + } else { + self.thread.scroll_to({offset: new_channel_scrolltop}); + } + + // Update control panel before focusing the composer, otherwise focus is on the searchview + self.update_cp(); if (!config.device.touch) { self.composer.focus(); } @@ -389,7 +404,6 @@ var ChatAction = Widget.extend(ControlPanelMixin, { self.$('.o_mail_chat_sidebar').hide(); } - self.update_cp(); self.action_manager.do_push_state({ action: self.action.id, active_id: self.channel.id, diff --git a/addons/mail/static/src/js/composer.js b/addons/mail/static/src/js/composer.js index 971c2e99c69..2965ccf9298 100644 --- a/addons/mail/static/src/js/composer.js +++ b/addons/mail/static/src/js/composer.js @@ -330,6 +330,7 @@ var Composer = Widget.extend({ input_max_height: 150, input_min_height: 28, mention_fetch_limit: 8, + send_text: _('Send'), }); this.context = this.options.context; @@ -397,7 +398,7 @@ var Composer = Widget.extend({ preprocess_message: function () { // Return a deferred as this function is extended with asynchronous // behavior for the chatter composer - var value = this.$input.val().replace(/\n|\r/g, '<br/>'); + var value = _.escape(this.$input.val()).replace(/\n|\r/g, '<br/>'); return $.when({ content: this.mention_manager.generate_links(value), attachment_ids: _.pluck(this.get('attachment_ids'), 'id'), diff --git a/addons/mail/static/src/js/systray.js b/addons/mail/static/src/js/systray.js index c5d34f179bc..19e225c364f 100644 --- a/addons/mail/static/src/js/systray.js +++ b/addons/mail/static/src/js/systray.js @@ -29,11 +29,14 @@ var NotificationTopButton = Widget.extend({ }, on_click: function (event) { event.preventDefault(); + this.discuss_redirect(); + }, + discuss_redirect: _.debounce(function () { var discuss_ids = chat_manager.get_discuss_ids(); this.do_action(discuss_ids.action_id, {clear_breadcrumbs: true}).then(function () { core.bus.trigger('change_menu_section', discuss_ids.menu_id); }); - }, + }, 1000, true), }); SystrayMenu.Items.push(NotificationTopButton); diff --git a/addons/mail/static/src/js/thread.js b/addons/mail/static/src/js/thread.js index 86b34255cf7..99b4d6ba1c2 100644 --- a/addons/mail/static/src/js/thread.js +++ b/addons/mail/static/src/js/thread.js @@ -16,8 +16,9 @@ var Thread = Widget.extend({ className: 'o_mail_thread', events: { - "click .o_mail_redirect": "on_click_redirect", - "click .o_channel_redirect": "on_channel_redirect", + "click a": "on_click_redirect", + "click img": "on_click_redirect", + "click strong": "on_click_redirect", "click .o_thread_show_more": "on_click_show_more", "click .o_thread_message_needaction": function (event) { event.stopPropagation(); @@ -51,6 +52,7 @@ var Thread = Widget.extend({ display_stars: true, display_document_link: true, display_avatar: true, + shorten_messages: true, squash_close_messages: true, }); }, @@ -84,16 +86,13 @@ var Thread = Widget.extend({ }, on_click_redirect: function (event) { - event.preventDefault(); - var res_id = $(event.target).data('oe-id'); - var res_model = $(event.target).data('oe-model'); - this._redirect({model:res_model, id: res_id}); - }, - - on_channel_redirect: function (event) { - event.preventDefault(); - var channel_id = $(event.target).data('oe-id'); - this._redirect({channel_id: channel_id}); + var id = $(event.target).data('oe-id'); + if (id) { + event.preventDefault(); + var model = $(event.target).data('oe-model'); + var options = model && (model !== 'mail.channel') ? {model: model, id: id} : {channel_id: id}; + this._redirect(options); + } }, _redirect: _.debounce(function (options) { diff --git a/addons/mail/static/src/js/window_manager.js b/addons/mail/static/src/js/window_manager.js index 5a62c15ed8b..f217d929c20 100644 --- a/addons/mail/static/src/js/window_manager.js +++ b/addons/mail/static/src/js/window_manager.js @@ -11,7 +11,7 @@ var web_client = require('web.web_client'); // chat window management //---------------------------------------------------------------- var chat_sessions = []; -var CHAT_WINDOW_WIDTH = 260; +var CHAT_WINDOW_WIDTH = 300; function open_chat (session) { if (!_.findWhere(chat_sessions, {id: session.id})) { @@ -38,6 +38,7 @@ function open_chat (session) { }); chat_session.window.on("post_message", null, function (message, channel_id) { + message.content = _.escape(message.content); chat_manager.post_message(message, {channel_id: channel_id}); }); chat_session.window.on("messages_read", null, function () { diff --git a/addons/mail/static/src/less/chat_window.less b/addons/mail/static/src/less/chat_window.less index b911ef467ed..ca2e8ca74f1 100644 --- a/addons/mail/static/src/less/chat_window.less +++ b/addons/mail/static/src/less/chat_window.less @@ -1,14 +1,22 @@ -@o-chat-window-bg: lighten(lightgray, 13%); +@o-chat-window-bg: white; .o_chat_window { .o-flex-display(); .o-flex-flow(column, nowrap); position: fixed; - width: 260px; - height: 333px; + width: 300px; + max-width: 100%; + height: 400px; + max-height: 100%; + font-size: 12px; background-color: @o-chat-window-bg; border: 1px solid gray; border-radius: 3px; + z-index: 2; + + @media (max-width: @screen-xs-max) { + display:none; + } .o_chat_header { .o-flex-display(); @@ -44,10 +52,18 @@ background-color: @o-chat-window-bg; } } + .o_thread_message { + .o_thread_message_sidebar { + margin-right: 5px; + } + } } - .o_chat_input > input { - padding: 5px; - width: 100%; + .o_chat_input { + .o-flex(0, 0, auto); + > input { + padding: 5px; + width: 100%; + } } } diff --git a/addons/mail/static/src/less/client_action.less b/addons/mail/static/src/less/client_action.less index c87f5a4e6bc..dc49f6234ac 100644 --- a/addons/mail/static/src/less/client_action.less +++ b/addons/mail/static/src/less/client_action.less @@ -1,27 +1,26 @@ // ------------------------------------------------------------------ // Layout // ------------------------------------------------------------------ +@mail-chat-sidebar-width: 250px; .o_mail_chat { .o-position-absolute(0, 0, 0, 0); height: 100%; @media (max-width: @screen-xs-max) { height: auto; - flex-direction: column; - } - .o-flex-display(); - .o-flex-flow(row, nowrap); - .o_mail_chat_sidebar { - .o-flex(0, 0, 220px); + width: @mail-chat-sidebar-width; + height: 100%; + float: left; overflow: auto; padding: 8px 0; font-weight: 300; @media (max-width: @screen-xs-max) { - flex: none; + width: 100%; + float: none; display: none; } @@ -73,12 +72,16 @@ } .o_mail_chat_content { - .o-flex(1, 1, 100%); .o-flex-display(); .o-flex-flow(column, nowrap); height: 100%; + margin-left: @mail-chat-sidebar-width; position: relative; + @media (max-width: @screen-xs-max) { + margin-left: 0; + } + .o_mail_thread { .o-flex(1, 0, 0); overflow: auto; @@ -106,6 +109,9 @@ .o_composer_buttons { .o-flex(0, 0, auto); + .o_composer_button_send { + float: right; + } } } } diff --git a/addons/mail/static/src/less/thread.less b/addons/mail/static/src/less/thread.less index e28b949bd5d..f2971dcf17e 100644 --- a/addons/mail/static/src/less/thread.less +++ b/addons/mail/static/src/less/thread.less @@ -1,6 +1,7 @@ @mail-thread-avatar-size: 36px; @mail-thread-icon-opacity: 0.6; @mail-thread-side-date-opacity: 0.6; +@mail-thread-note: @gray-lighter; .o_mail_thread { .o_thread_show_more { @@ -97,6 +98,10 @@ .o_thread_message_core { .o-flex(1, 1, auto); + &.o_mail_note { + background-color: @gray-lighter; + } + .o_mail_subject { font-style: italic; } diff --git a/addons/mail/static/src/xml/client_action.xml b/addons/mail/static/src/xml/client_action.xml index 1a7c22a1496..497dc6dc0e8 100644 --- a/addons/mail/static/src/xml/client_action.xml +++ b/addons/mail/static/src/xml/client_action.xml @@ -77,7 +77,7 @@ <t t-set="counter" t-value="channel.needaction_counter"/> <div t-if="channel.type === channel_type" t-att-data-channel-id="channel.id" t-attf-class="o_mail_chat_channel_item #{channel.unread_counter ? ' o_unread_message' : ''} #{(active_channel_id == channel.id) ? 'o_active': ''}"> - <span><i t-if="display_status" t-att-class="'o_user_status fa ' + (channel.status == 'online' ? 'fa-circle' : 'fa-circle-o')"/></span> + <span><i t-if="display_status" t-att-class="'o_user_status fa ' + (channel.status == 'online' ? 'fa-circle' : (channel.status == 'away' ? 'fa-clock-o' : 'fa-circle-o'))" t-attf-title="#{channel.status}"/></span> <span t-if="display_hash" class="o_mail_hash">#</span> <t t-esc="channel.name"/> <i t-if="channel.mass_mailing" class="fa fa-envelope-o"/> diff --git a/addons/mail/static/src/xml/composer.xml b/addons/mail/static/src/xml/composer.xml index d199c0d5fdf..71afe4d1695 100644 --- a/addons/mail/static/src/xml/composer.xml +++ b/addons/mail/static/src/xml/composer.xml @@ -6,9 +6,9 @@ <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"/> - <button class="btn btn-sm btn-primary o_composer_button_send" type="button">Send</button> </div> </div> diff --git a/addons/mail/static/src/xml/thread.xml b/addons/mail/static/src/xml/thread.xml index f1a364999b5..0952fcf0e7f 100644 --- a/addons/mail/static/src/xml/thread.xml +++ b/addons/mail/static/src/xml/thread.xml @@ -21,12 +21,12 @@ <!-- When a channel is empty--> <div t-name="mail.EmptyChannel"> <t t-if="options.channel_id==='channel_inbox'"> - <div class="o_thread_title">Congratulation, your inbox is empty</div> - <div>New messages will appear here.</div> + <div class="o_thread_title">Congratulations, your inbox is empty</div> + <div>New messages appear here.</div> </t> <t t-if="options.channel_id==='channel_starred'"> - <div class="o_thread_title">No message starred</div> - <div> You can mark any message as 'starred', and it will show up in this channel.</div> + <div class="o_thread_title">No starred message</div> + <div> You can mark any message as 'starred', and it shows up in this channel.</div> </t> </div> @@ -52,7 +52,7 @@ <img t-if="message.avatar_src && message.display_author" t-att-src="message.avatar_src" data-oe-model="res.partner" - t-att-data-oe-id="message.author_id[0]" + t-att-data-oe-id="message.author_redirect ? message.author_id[0] : ''" t-attf-class="o_thread_message_avatar #{message.author_redirect ? 'o_mail_redirect' : ''}"/> </t> <t t-if="message.mailto || !message.author_id[0]"> @@ -67,7 +67,7 @@ t-att-class="'fa o_thread_message_star ' + (message.is_starred ? 'fa-star' : 'fa-star-o')" t-att-data-message-id="message.id" t-att-title="_t('Mark as Todo')"/> </div> - <div class="o_thread_message_core"> + <div t-att-class="'o_thread_message_core' + (message.is_note ? ' o_mail_note' : '')"> <p t-if="message.display_author" class="o_mail_info"> <t t-if="message.is_note"> Note by @@ -79,7 +79,7 @@ </a> </strong> <strong t-if="!message.mailto && message.author_id[0]" - data-oe-model="res.partner" t-att-data-oe-id="message.author_id[0]" + data-oe-model="res.partner" t-att-data-oe-id="message.author_redirect ? message.author_id[0] : ''" t-attf-class="#{message.author_redirect ? 'o_mail_redirect' : ''}"> <t t-esc="message.displayed_author"/> </strong> @@ -91,10 +91,10 @@ - <t t-esc="message.hour"/> </small> <t t-if="message.model && (message.model != 'mail.channel') && options.display_document_link"> - on <a class="o_mail_redirect" href="#" t-att-data-oe-model="message.model" t-att-data-oe-id="message.res_id"><t t-esc="message.record_name"/></a> + on <a t-att-href="message.url" t-att-data-oe-model="message.model" t-att-data-oe-id="message.res_id"><t t-esc="message.record_name"/></a> </t> <t t-if="message.origin_id && (message.origin_id !== options.channel_id)"> - (from <a class="o_channel_redirect" t-att-data-oe-id="message.origin_id" href="#">#<t t-esc="message.origin_name"/></a>) + (from <a t-att-data-oe-id="message.origin_id" href="#">#<t t-esc="message.origin_name"/></a>) </t> <span> <i t-if="options.display_stars && message.message_type != 'notification'" @@ -102,7 +102,7 @@ t-att-data-message-id="message.id" t-att-title="_t('Mark as Todo')"/> <i t-if="message.is_needaction && options.display_needactions" class="fa fa-check o_thread_message_needaction" - t-att-data-message-id="message.id" t-att-title="_t('Mark as Done')"/> + t-att-data-message-id="message.id" t-att-title="_t('Mark as Read')"/> </span> </p> <t t-if="message.tracking_value_ids && message.tracking_value_ids.length > 0"> @@ -113,7 +113,7 @@ </t> <p t-if="options.display_subject && message.display_subject" class="o_mail_subject">Subject: <t t-esc="message.subject"/></p> <t t-if="!(message.tracking_value_ids && message.tracking_value_ids.length > 0)"> - <t t-if="message.body_short"> + <t t-if="options.shorten_messages && message.body_short"> <div class="o_mail_body_short"> <t t-raw="message.body_short"/> </div> @@ -121,7 +121,7 @@ <t t-raw="message.body"/> </div> </t> - <t t-if="! message.body_short"> + <t t-if="!options.shorten_messages || !message.body_short"> <t t-raw="message.body"/> </t> </t> |
