diff --git a/addons/web_im/static/src/js/im.js b/addons/web_im/static/src/js/im.js index dd88d0a611e..cdeb7fc16e0 100644 --- a/addons/web_im/static/src/js/im.js +++ b/addons/web_im/static/src/js/im.js @@ -7,7 +7,7 @@ openerp.web_im = function(instance) { this.update_promise.then(function() { var im = new instance.web_im.InstantMessaging(self); im.appendTo(instance.client.$el); - var button = new instance.web.IMTopButton(self); + var button = new instance.web.ImTopButton(self); button.im = im; button.appendTo(instance.webclient.$el.find('.oe_systray')); }); @@ -15,8 +15,8 @@ openerp.web_im = function(instance) { }, }); - instance.web.IMTopButton = instance.web.Widget.extend({ - template:'IMTopButton', + instance.web.ImTopButton = instance.web.Widget.extend({ + template:'ImTopButton', events: { "click button": "clicked", }, @@ -27,28 +27,24 @@ openerp.web_im = function(instance) { instance.web_im.InstantMessaging = instance.web.Widget.extend({ template: "InstantMessaging", + events: { + "keydown .oe_im_input": "search_users", + }, init: function(parent) { this._super(parent); this.shown = false; this.set("right_offset", 0); + this.last = null; + this.users = []; }, start: function() { - var self = this; this.$el.css("right", -this.$el.outerWidth()); - self.poll(); - self.last = null; $(window).scroll(_.bind(this.calc_box, this)); $(window).resize(_.bind(this.calc_box, this)); - self.calc_box(); - self.$(".oe_im_input").keypress(function(e) { - if(e.which != 13) { - return; - } - var mes = self.$(".oe_im_input").val(); - self.$(".oe_im_input").val(""); - var model = new instance.web.Model("im.message"); - model.call("post", [mes], {context: new instance.web.CompoundContext()}); - }).focus(); + this.calc_box(); + + this.poll(); + this.search_users(); }, calc_box: function() { var $topbar = instance.client.$(".oe_topbar"); @@ -57,6 +53,31 @@ openerp.web_im = function(instance) { this.$el.css("top", top); this.$el.css("bottom", 0); }, + search_users: function(e) { + if(e && e.which !== 13) { + return; + } + var users = new instance.web.Model("res.users"); + var self = this; + return users.query(["name"]).filter([["name", "ilike", this.$(".oe_im_input").val()]]).limit(20).all().then(function(result) { + _.each(self.users, function(user) { + user.destroy(); + }); + self.users = []; + _.each(result, function(user) { + var widget = new instance.web_im.ImUser(self, user); + widget.appendTo(self.$(".oe_im_users")); + self.users.push(widget); + }); + }); + }, + send_message: function() { + // old code + var mes = self.$(".oe_im_input").val(); + self.$(".oe_im_input").val(""); + var model = new instance.web.Model("im.message"); + model.call("post", [mes], {context: new instance.web.CompoundContext()}); + }, switch_display: function() { var fct = _.bind(function() { this.set("right_offset", $(window).width() - this.$el.offset().left); @@ -94,4 +115,12 @@ openerp.web_im = function(instance) { } }); + instance.web_im.ImUser = instance.web.Widget.extend({ + "template": "ImUser", + init: function(parent, user_rec) { + this._super(parent); + this.user_rec = user_rec; + }, + }); + } \ No newline at end of file diff --git a/addons/web_im/static/src/xml/im.xml b/addons/web_im/static/src/xml/im.xml index f87a0c1c531..c6b4f01b8e7 100644 --- a/addons/web_im/static/src/xml/im.xml +++ b/addons/web_im/static/src/xml/im.xml @@ -4,13 +4,19 @@
-
+
+
- +
+ +
+ +
+
\ No newline at end of file