summaryrefslogtreecommitdiff
path: root/addons/mail/static/src
diff options
context:
space:
mode:
authorMartin Trigaux <mat@odoo.com>2015-12-21 11:37:53 +0100
committerMartin Trigaux <mat@odoo.com>2015-12-21 11:37:53 +0100
commite4bf03aeaf2c8200164c27f0d93994e2c173bded (patch)
treeabce75b917f931d042dba1e34060efd625f90ed7 /addons/mail/static/src
parent82a495eed52a9f42e5b88caa52c20a85f8d81ce3 (diff)
parentc298cf3250fcfa351775dc57c3b913169e30e418 (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.js42
-rw-r--r--addons/mail/static/src/js/chat_window.js17
-rw-r--r--addons/mail/static/src/js/chatter.js3
-rw-r--r--addons/mail/static/src/js/client_action.js40
-rw-r--r--addons/mail/static/src/js/composer.js3
-rw-r--r--addons/mail/static/src/js/systray.js5
-rw-r--r--addons/mail/static/src/js/thread.js23
-rw-r--r--addons/mail/static/src/js/window_manager.js3
-rw-r--r--addons/mail/static/src/less/chat_window.less28
-rw-r--r--addons/mail/static/src/less/client_action.less22
-rw-r--r--addons/mail/static/src/less/thread.less5
-rw-r--r--addons/mail/static/src/xml/client_action.xml2
-rw-r--r--addons/mail/static/src/xml/composer.xml2
-rw-r--r--addons/mail/static/src/xml/thread.xml24
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)+'&hellip;' : 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 &amp;&amp; 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 &amp;&amp; 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 &amp;&amp; (message.model != 'mail.channel') &amp;&amp; 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 &amp;&amp; (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 &amp;&amp; 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 &amp;&amp; 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 &amp;&amp; message.tracking_value_ids.length &gt; 0">
@@ -113,7 +113,7 @@
</t>
<p t-if="options.display_subject &amp;&amp; message.display_subject" class="o_mail_subject">Subject: <t t-esc="message.subject"/></p>
<t t-if="!(message.tracking_value_ids &amp;&amp; message.tracking_value_ids.length &gt; 0)">
- <t t-if="message.body_short">
+ <t t-if="options.shorten_messages &amp;&amp; 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>