diff options
| author | Christophe Simonis <chs@odoo.com> | 2016-01-12 15:30:29 +0100 |
|---|---|---|
| committer | Christophe Simonis <chs@odoo.com> | 2016-01-12 15:30:29 +0100 |
| commit | 7fa6f73302709d7e7b6b19ebd16d338b3dd0e2db (patch) | |
| tree | 1487b6fe232e0b9477a6e68018d5bc5d3432372f /addons/mail/static/src | |
| parent | 2a834c22b0570b3a0d5ec5b4a8a0b378e3a6e12b (diff) | |
| parent | cb79297a41b7747a9318fd4794dce422ee931060 (diff) | |
[MERGE] forward port of branch 9.0 up to cb79297
Diffstat (limited to 'addons/mail/static/src')
| -rw-r--r-- | addons/mail/static/src/js/chat_manager.js | 35 | ||||
| -rw-r--r-- | addons/mail/static/src/js/chatter.js | 21 | ||||
| -rw-r--r-- | addons/mail/static/src/js/client_action.js | 4 | ||||
| -rw-r--r-- | addons/mail/static/src/js/composer.js | 20 | ||||
| -rw-r--r-- | addons/mail/static/src/less/chatter.less | 7 | ||||
| -rw-r--r-- | addons/mail/static/src/xml/chatter.xml | 6 | ||||
| -rw-r--r-- | addons/mail/static/src/xml/client_action.xml | 15 |
7 files changed, 71 insertions, 37 deletions
diff --git a/addons/mail/static/src/js/chat_manager.js b/addons/mail/static/src/js/chat_manager.js index 7796226da10..f05a3e8b506 100644 --- a/addons/mail/static/src/js/chat_manager.js +++ b/addons/mail/static/src/js/chat_manager.js @@ -30,7 +30,7 @@ var discuss_ids = {}; var global_unread_counter = 0; var pinned_dm_partners = []; // partner_ids we have a pinned DM with -// Window focus/unfocus, beep and title +// Utils: Window focus/unfocus, beep, tab title, parsing html strings //---------------------------------------------------------------------------------- var beep = (function () { if (typeof(Audio) === "undefined") { @@ -76,6 +76,36 @@ function notify_incoming_message (msg, options) { } } +function parse_and_transform(html_string, transform_function) { + var open_token = "OPEN" + Date.now(); + var string = html_string.replace(/</g, open_token); + var children = $('<div>').html(string).contents(); + return _parse_and_transform(children, transform_function) + .replace(new RegExp(open_token, "g"), "<"); +} + +function _parse_and_transform(nodes, transform_function) { + return _.map(nodes, function (node) { + return transform_function(node, function () { + return _parse_and_transform(node.childNodes, transform_function); + }); + }).join(""); +} + +// suggested regexp (gruber url matching regexp, adapted to js, see https://gist.github.com/gruber/8891611) +var url_regexp = /\b((?:https?:\/\/|www\d{0,3}[.]|[a-z0-9.\-]+[.][a-z]{2,4}\/)(?:[^\s()<>]+|\(([^\s()<>]+|(\([^\s()<>]+\)))*\))+(?:\(([^\s()<>]+|(\([^\s()<>]+\)))*\)|[^\s`!()\[\]{};:'".,<>?«»“”‘’]))/gi; +function add_link (node, transform_children) { + if (node.nodeType === 3) { // text node + return node.data.replace(url_regexp, function (url) { + var href = (!/^(f|ht)tps?:\/\//i.test(url)) ? "http://" + url : url; + return '<a href="' + href + '">' + url + '</a>'; + }); + } + if (node.tagName === "A") return node.outerHTML; + node.innerHTML = transform_children(); + return node.outerHTML; +} + // Message and channel manipulation helpers //---------------------------------------------------------------------------------- @@ -207,6 +237,9 @@ function make_message (data) { msg.avatar_src = "/mail/static/src/img/smiley/avatar.jpg"; } + // add anchor tags to urls + msg.body = parse_and_transform(msg.body, add_link); + // Compute url of attachments _.each(msg.attachment_ids, function(a) { a.url = '/web/content/' + a.id + '?download=true'; diff --git a/addons/mail/static/src/js/chatter.js b/addons/mail/static/src/js/chatter.js index 5f4ef8a3060..28a269379df 100644 --- a/addons/mail/static/src/js/chatter.js +++ b/addons/mail/static/src/js/chatter.js @@ -114,7 +114,7 @@ var Followers = form_common.AbstractField.extend({ var follower_id = $currentTarget.data('oe-id'); var is_channel = $currentTarget.data('oe-model') === 'mail.channel'; self.dialog = new Dialog(this, { - size: 'small', + size: 'medium', title: _t('Edit Subscription of ') + $currentTarget.siblings('a').text(), buttons: [ { @@ -131,7 +131,7 @@ var Followers = form_common.AbstractField.extend({ }, ], }).open(); - return self.fetch_subtypes($currentTarget.data('id')); + return self.fetch_subtypes($currentTarget.data('id'), $currentTarget.data('oe-model')); }, on_invite_follower: function (channel_only) { @@ -270,8 +270,10 @@ var Followers = form_common.AbstractField.extend({ /** Fetch subtypes, only if current user is follower or if follower_id is given, i.e. if * the current user is editing the subtypes of another follower + * @param {int} [follower_id] the id of the follower + * @param {string} [follower_model] 'res.partner' or 'mail.channel' */ - fetch_subtypes: function (follower_id) { + fetch_subtypes: function (follower_id, follower_model) { var self = this; var dialog = false; @@ -292,7 +294,7 @@ var Followers = form_common.AbstractField.extend({ res_id: this.view.datarecord.id, follower_id: follower_id, }).then(function (data) { - self.display_subtypes(data, dialog); + self.display_subtypes(data, dialog, (follower_model === 'mail.channel')); }); } else { return $.Deferred().resolve(); @@ -300,11 +302,11 @@ var Followers = form_common.AbstractField.extend({ }, /** Display subtypes: {'name': default, followed} */ - display_subtypes:function (data, dialog) { + display_subtypes:function (data, dialog, display_warning) { var old_parent_model; var $list; if (dialog) { - $list = this.dialog.$el; + $list = $('<ul>').appendTo(this.dialog.$el); } else { $list = this.$('.o_subtypes_list ul'); } @@ -324,9 +326,14 @@ var Followers = form_common.AbstractField.extend({ old_parent_model = record.parent_model; record.followed = record.followed || undefined; $(qweb.render('mail.Followers.subtype', {'record': record, - 'dialog': dialog})) + 'dialog': dialog, + 'display_warning': display_warning && record.internal})) .appendTo($list); }); + + if (display_warning) { + $(qweb.render('mail.Followers.subtypes.warning')).appendTo(this.dialog.$el); + } }, do_follow: function () { diff --git a/addons/mail/static/src/js/client_action.js b/addons/mail/static/src/js/client_action.js index ce505e569c1..a0c22add842 100644 --- a/addons/mail/static/src/js/client_action.js +++ b/addons/mail/static/src/js/client_action.js @@ -143,7 +143,7 @@ var ChatAction = Widget.extend(ControlPanelMixin, { this.options = options || {}; this.channels_scrolltop = {}; this.throttled_render_sidebar = _.throttle(this.render_sidebar.bind(this), 100, { leading: false }); - this.notification_bar = (window.Notification.permission === "default"); + this.notification_bar = (window.Notification && window.Notification.permission === "default"); }, willStart: function () { @@ -210,7 +210,7 @@ var ChatAction = Widget.extend(ControlPanelMixin, { this.extended_composer.on('post_message', this, this.on_post_message); this.extended_composer.on('input_focused', this, this.on_composer_input_focused); - var def1 = this.thread.prependTo(this.$('.o_mail_chat_content')); + var def1 = this.thread.appendTo(this.$('.o_mail_chat_content')); var def2 = this.basic_composer.appendTo(this.$('.o_mail_chat_content')); var def3 = this.extended_composer.appendTo(this.$('.o_mail_chat_content')); var def4 = this.searchview.appendTo($("<div>")); diff --git a/addons/mail/static/src/js/composer.js b/addons/mail/static/src/js/composer.js index 751b4c2ccc7..a02a3966333 100644 --- a/addons/mail/static/src/js/composer.js +++ b/addons/mail/static/src/js/composer.js @@ -5,6 +5,7 @@ var chat_manager = require('mail.chat_manager'); var core = require('web.core'); var data = require('web.data'); +var dom_utils = require('web.dom_utils'); var Model = require('web.Model'); var session = require('web.session'); var Widget = require('web.Widget'); @@ -366,7 +367,7 @@ var BasicComposer = Widget.extend({ this.$input.focus(function () { self.trigger('input_focused'); }); - this.resize_input(); + dom_utils.autoresize(this.$input, {parent: this, min_height: this.options.input_min_height}); // Attachments $(window).on(this.fileupload_id, this.on_attachment_loaded); @@ -421,7 +422,6 @@ var BasicComposer = Widget.extend({ // Empty input, selected partners and attachments self.$input.val(''); - self.resize_input(); self.mention_manager.reset_selections(); self.set('attachment_ids', []); @@ -429,19 +429,6 @@ var BasicComposer = 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(); @@ -481,8 +468,6 @@ var BasicComposer = Widget.extend({ } else if (!this.prevent_send(event)) { event.preventDefault(); this.send_message(); - } else { - this.resize_input(true); } break; } @@ -508,7 +493,6 @@ var BasicComposer = Widget.extend({ // Otherwise, check if a mention is typed default: this.mention_manager.detect_delimiter(); - this.resize_input(); } }, diff --git a/addons/mail/static/src/less/chatter.less b/addons/mail/static/src/less/chatter.less index 35d5b3b7a76..839e419e88e 100644 --- a/addons/mail/static/src/less/chatter.less +++ b/addons/mail/static/src/less/chatter.less @@ -125,8 +125,11 @@ } // Edit subtypes in dialog -.modal .modal-body > li.o_subtype { - list-style: none; +.modal .modal-body > ul { + padding-left: 0; + > li.o_subtype { + list-style: none; + } } @media print { diff --git a/addons/mail/static/src/xml/chatter.xml b/addons/mail/static/src/xml/chatter.xml index 6207cdb3980..cf6096bc8a9 100644 --- a/addons/mail/static/src/xml/chatter.xml +++ b/addons/mail/static/src/xml/chatter.xml @@ -154,7 +154,13 @@ <span t-att-for="'input_mail_followers_subtype_'+record.id+(dialog ? '_in_dialog': '')"> <t t-esc="record.name"/> </span> + <i t-if="display_warning" class="fa fa-warning text-warning"/> </li> </t> + <t t-name="mail.Followers.subtypes.warning"> + <span class="text-warning"> + <i class="fa fa-warning"/> Be careful with channels following internal notifications + </span> + </t> </templates> diff --git a/addons/mail/static/src/xml/client_action.xml b/addons/mail/static/src/xml/client_action.xml index 18fef4a4ed6..da2e29057e0 100644 --- a/addons/mail/static/src/xml/client_action.xml +++ b/addons/mail/static/src/xml/client_action.xml @@ -4,14 +4,15 @@ <!-- Client Action --> <t t-name="mail.client_action"> <div class="o_mail_chat"> - <t t-if="widget.notification_bar"> - <div class="o_mail_annoying_notification_bar"> - <span class="o_mail_request_permission">Odoo needs your permission to <a href="#"> enable desktop notifications</a>.</span> - <span class="fa fa-close"></span> - </div> - </t> <div class="o_mail_chat_sidebar"/> - <div class="o_mail_chat_content"/> + <div class="o_mail_chat_content"> + <t t-if="widget.notification_bar"> + <div class="o_mail_annoying_notification_bar"> + <span class="o_mail_request_permission">Odoo needs your permission to <a href="#"> enable desktop notifications</a>.</span> + <span class="fa fa-close"></span> + </div> + </t> + </div> </div> </t> <t t-name="mail.chat.Sidebar"> |
