update_counter: function () { var counter = chat_manager.get_needaction_counter(); this.$needaction_counter.text(counter); this.$el.toggleClass('o_no_notification', !counter); },
this.thread.on('redirect_to_channel', this, function (channel_id) { chat_manager.join_channel(channel_id).then(this.set_channel.bind(this)); });
this.thread.on('toggle_star_status', this, function (message_id) { chat_manager.toggle_star_status(message_id); });
def.then(function () { chat_manager.send_native_notification('Permission granted', 'Odoo has now the permission to send you native notifications on this device.'); });
this.$buttons.on('click', '.o_mail_chat_button_mark_read', function () { chat_manager.mark_all_as_read(self.channel, self.domain); });
"click .o_mail_chat_channel_item": function (event) { event.preventDefault(); var channel_id = this.$(event.currentTarget).data('channel-id'); this.set_channel(chat_manager.get_channel(channel_id)); },
"click .o_mail_partner_unpin": function (event) { event.stopPropagation(); var channel_id = $(event.target).data("channel-id"); this.unsubscribe_from_channel(chat_manager.get_channel(channel_id)); },
chat_session.window.thread.$el.on("scroll", null, _.debounce(function () { if (!chat_session.keep_unread && chat_session.window.thread.is_at_bottom()) { chat_manager.mark_channel_as_seen(session); } }, 100));
chat_session.window.$('.o_mail_thread, .o_chat_composer').one('click', function () { chat_manager.mark_channel_as_seen(session); });
source: function(request, response) { chat_manager.search_partner(request.term, 10).done(response); },
.then(function () { reposition_windows({remove_new_chat: remove_new_chat}); return chat_manager.get_messages({channel_id: chat_session.id}); }).then(function (messages) {
on_click_button_unsubscribe: function () { chat_manager.unsubscribe(this.channel); },
render_sidebar: function () { var self = this; var $sidebar = this._render_sidebar({ active_channel_id: this.channel ? this.channel.id: undefined, channels: chat_manager.get_channels(), needaction_counter: chat_manager.get_needaction_counter(), starred_counter: chat_manager.get_starred_counter(), }); this.$(".o_mail_chat_sidebar").html($sidebar.contents()); this.$('.o_mail_add_channel[data-type=public]').find("input").autocomplete({ source: function(request, response) { self.last_search_val = _.escape(request.term); self.do_search_channel(self.last_search_val).done(function(result){ result.push({ 'label': _.str.sprintf('<strong>'+_t("Create %s")+'</strong>', '<em>"#'+self.last_search_val+'"</em>'), 'value': '_create', }); response(result); }); }, select: function(event, ui) { if (self.last_search_val) { if (ui.item.value === '_create') { chat_manager.create_channel(self.last_search_val, "public"); } else { chat_manager.join_channel(ui.item.id); } } }, focus: function(event) { event.preventDefault(); }, html: true, }); this.$('.o_mail_add_channel[data-type=dm]').find("input").autocomplete({ source: function(request, response) { self.last_search_val = _.escape(request.term); chat_manager.search_partner(self.last_search_val, 10).done(response); }, select: function(event, ui) { var partner_id = ui.item.id; var dm = chat_manager.get_dm_from_partner_id(partner_id); if (dm) { self.set_channel(dm); } else { chat_manager.create_channel(partner_id, "dm"); } // clear the input $(this).val(''); return false; }, focus: function(event) { event.preventDefault(); }, }); this.$('.o_mail_add_channel[data-type=private]').find("input").on('keyup', this, function (event) { var name = _.escape($(event.target).val()); if(event.which === $.ui.keyCode.ENTER && name) { chat_manager.create_channel(name, "private"); } }); },
this.$buttons.on('click', '.o_mail_chat_button_mark_read', function () { chat_manager.mark_all_as_read(); });
this.$('.o_mail_add_channel[data-type=private]').find("input").on('keyup', this, function (event) { var name = _.escape($(event.target).val()); if(event.which === $.ui.keyCode.ENTER && name) { chat_manager.create_channel(name, "private"); } });
chat_session.window.on("close_chat_session", null, function () { close_chat(chat_session); chat_manager.close_chat_session(chat_session.id); });
on_composer_input_focused: function () { var suggestions = chat_manager.get_mention_partner_suggestions(this.channel); var composer = this.channel.mass_mailing ? this.extended_composer : this.basic_composer; composer.mention_set_prefetched_partners(suggestions); },
chat_session.window.on("toggle_star_status", null, function (message_id) { chat_manager.toggle_star_status(message_id); });
.then(function () { self.trigger_up('hide_home_menu'); // we cannot 'go back to previous page' otherwise core.bus.trigger('change_menu_section', chat_manager.get_discuss_menu_id()); });
chat_session.window.on("fold_channel", null, function (channel_id, folded) { chat_manager.fold_channel(channel_id, folded); });
this.clear_needactions_def.then(function (msgs_ids) { chat_manager.undo_mark_as_read(msgs_ids, channel); });
chat_session.window.on("redirect", null, function (res_model, res_id) { chat_manager.redirect(res_model, res_id, open_chat); });
start: function() { var self = this; // create searchview var options = { $buttons: $("<div>"), action: this.action, disable_groupby: true, }; var dataset = new data.DataSetSearch(this, 'mail.message'); var view_id = (this.action && this.action.search_view_id && this.action.search_view_id[0]) || false; var default_channel_id = this.options.active_id || this.action.context.active_id || this.action.params.default_active_id || 'channel_inbox'; var default_channel = chat_manager.get_channel(default_channel_id) || chat_manager.get_channel('channel_inbox'); this.searchview = new SearchView(this, dataset, view_id, {}, options); this.searchview.on('search_data', this, this.on_search); this.basic_composer = new composer.BasicComposer(this, {mention_partners_restricted: true}); this.extended_composer = new composer.ExtendedComposer(this, {mention_partners_restricted: true}); this.thread = new ChatThread(this, { display_help: true, shorten_messages: false, }); this.$buttons = $(QWeb.render("mail.chat.ControlButtons", {})); this.$buttons.find('button').css({display:"inline-block"}); this.$buttons.on('click', '.o_mail_chat_button_invite', this.on_click_button_invite); this.$buttons.on('click', '.o_mail_chat_button_unsubscribe', this.on_click_button_unsubscribe); this.$buttons.on('click', '.o_mail_chat_button_settings', this.on_click_button_settings); this.$buttons.on('click', '.o_mail_toggle_channels', function () { self.$('.o_mail_chat_sidebar').slideToggle(200); }); this.$buttons.on('click', '.o_mail_chat_button_mark_read', function () { chat_manager.mark_all_as_read(self.channel, self.domain); }); this.$buttons.on('click', '.o_mail_chat_button_unstar_all', chat_manager.unstar_all); this.$buttons.on('click', '.o_mail_chat_button_new_message', this.on_click_new_message); this.thread.on('redirect', this, function (res_model, res_id) { chat_manager.redirect(res_model, res_id, this.set_channel.bind(this)); }); this.thread.on('redirect_to_channel', this, function (channel_id) { chat_manager.join_channel(channel_id).then(this.set_channel.bind(this)); }); this.thread.on('load_more_messages', this, this.load_more_messages); this.thread.on('mark_as_read', this, function (message_id) { chat_manager.mark_as_read([message_id]); }); this.thread.on('toggle_star_status', this, function (message_id) { chat_manager.toggle_star_status(message_id); }); this.thread.on('select_message', this, this.select_message); this.thread.on('unselect_message', this, this.unselect_message); this.basic_composer.on('post_message', this, this.on_post_message); this.basic_composer.on('input_focused', this, this.on_composer_input_focused); 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.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>")).then(function () { self.$searchview_buttons = self.searchview.$buttons.contents(); }); this.render_sidebar(); return $.when(def1, def2, def3, def4) .then(this.set_channel.bind(this, default_channel)) .then(function () { chat_manager.bus.on('open_channel', self, self.set_channel); chat_manager.bus.on('new_message', self, self.on_new_message); chat_manager.bus.on('update_message', self, self.on_update_message); chat_manager.bus.on('new_channel', self, self.on_new_channel); chat_manager.bus.on('anyone_listening', self, function (channel, query) { query.is_displayed = query.is_displayed || (channel.id === self.channel.id && self.thread.is_at_bottom()); }); chat_manager.bus.on('unsubscribe_from_channel', 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); self.thread.$el.on("scroll", null, _.debounce(function () { if (self.thread.is_at_bottom()) { chat_manager.mark_channel_as_seen(self.channel); } }, 100)); }); },
chat_manager.join_channel(channel_id).then(function (channel) { chat_manager.detach_channel(channel); });
this.thread.on('redirect', this, function (res_model, res_id) { chat_manager.redirect(res_model, res_id, this.set_channel.bind(this)); });
source: function(request, response) { self.last_search_val = _.escape(request.term); chat_manager.search_partner(self.last_search_val).done(response); },
this.thread.on('mark_as_read', this, function (message_id) { chat_manager.mark_as_read([message_id]); });
select: function(event, ui) { var partner_id = ui.item.id; chat_manager.create_channel(partner_id, "dm"); },
self.thread.$el.on("scroll", null, _.debounce(function () { if (self.thread.is_at_bottom()) { chat_manager.mark_channel_as_seen(self.channel); } }, 100));
destroy: function () { chat_manager.remove_chatter_messages(this.model); this._super.apply(this, arguments); },