From 3dc215b1579a2dc71df8171fe382459a35a72286 Mon Sep 17 00:00:00 2001 From: Fabien Meghazi Date: Thu, 24 May 2012 17:50:15 +0200 Subject: [PATCH 1/2] [IMP] corelib events: on() should throw error when func is not a Function bzr revid: fme@openerp.com-20120524155015-avjc79bqcet8xnb6 --- addons/web/static/src/js/corelib.js | 3 +++ 1 file changed, 3 insertions(+) diff --git a/addons/web/static/src/js/corelib.js b/addons/web/static/src/js/corelib.js index a7ef3eb9b23..94c748f839c 100644 --- a/addons/web/static/src/js/corelib.js +++ b/addons/web/static/src/js/corelib.js @@ -331,6 +331,9 @@ instance.web.EventDispatcherMixin = _.extend({}, instance.web.ParentedMixin, { }, on: function(events, dest, func) { var self = this; + if (!(func instanceof Function)) { + throw new Error("Event handler must be a function."); + } events = events.split(/\s+/); _.each(events, function(eventName) { self.__edispatcherEvents.on(eventName, func, dest); From b70dd5534f16ce590c2b52f0edc616b7c280d17d Mon Sep 17 00:00:00 2001 From: Fabien Meghazi Date: Thu, 24 May 2012 17:58:37 +0200 Subject: [PATCH 2/2] [ADD] Kanban card are clickable bzr revid: fme@openerp.com-20120524155837-5j6zflr5rldun98e --- addons/web_kanban/static/src/js/kanban.js | 55 ++++++++++++----------- 1 file changed, 30 insertions(+), 25 deletions(-) diff --git a/addons/web_kanban/static/src/js/kanban.js b/addons/web_kanban/static/src/js/kanban.js index d5fd73bf23d..60ff0891525 100644 --- a/addons/web_kanban/static/src/js/kanban.js +++ b/addons/web_kanban/static/src/js/kanban.js @@ -39,29 +39,16 @@ instance.web_kanban.KanbanView = instance.web.View.extend({ var self = this; this._super.apply(this, arguments); // Bind kanban cards dropdown menus - this.$element.on('click', '.oe_kanban_menuaction', function() { - var $menu = $(this).next('.oe_kanban_menu'); - var show = !$menu.is(':visible'); - self.$element.find('.oe_kanban_menu').hide(); - var doc_width = $(document).width(); - $menu.toggle(show); - if (show) { - var offset = $menu.offset(); - var menu_width = $menu.width(); - var x = doc_width - offset.left - menu_width - 15; - if (x < 0) { - $menu.offset({ left: offset.left + x }).width(menu_width); - } - } - return false; + $('html').on('click.kanban', function() { + self.trigger('hide_menus'); }); - $('html').on('click', function() { + this.on('hide_menus', this, function() { self.$element.find('.oe_kanban_menu').hide(); }); }, destroy: function() { this._super.apply(this, arguments); - $('html').off('click'); + $('html').off('click.kanban'); }, on_loaded: function(data) { this.fields_view = data; @@ -599,8 +586,8 @@ instance.web_kanban.KanbanRecord = instance.web.OldWidget.extend({ this.$element.children(':first').addClass('oe_kanban_draghandle'); } - this.$element.find('.oe_kanban_action').click(function(ev) { - ev.preventDefault(); + this.$element.find('.oe_kanban_action').click(function() { + self.view.trigger('hide_menus'); var $action = $(this), type = $action.data('type') || 'button', method = 'do_action_' + (type === 'action' ? 'object' : type); @@ -611,14 +598,31 @@ instance.web_kanban.KanbanRecord = instance.web.OldWidget.extend({ } else { self.do_warn("Kanban: no action for type : " + type); } + return false; }); - this.$element.on('click', function(ev) { - var tag = ev.target.tagName.toLowerCase(); - if (!$(ev.target).data('events')) { - console.log(tag); + this.$element.on('click', '.oe_kanban_menuaction', function() { + var $menu = $(this).next('.oe_kanban_menu'); + var show = !$menu.is(':visible'); + self.view.trigger('hide_menus'); + var doc_width = $(document).width(); + $menu.toggle(show); + if (show) { + var offset = $menu.offset(); + var menu_width = $menu.width(); + var x = doc_width - offset.left - menu_width - 15; + if (x < 0) { + $menu.offset({ left: offset.left + x }).width(menu_width); + } } + return false; }); + + this.$element.on('click', this.on_card_clicked); + }, + on_card_clicked: function() { + this.view.trigger('hide_menus'); + this.view.open_record(this.id); }, setup_color_picker: function() { var self = this; @@ -627,8 +631,8 @@ instance.web_kanban.KanbanRecord = instance.web.OldWidget.extend({ $el.html(QWeb.render('KanbanColorPicker', { widget: this })); - $el.on('click', 'a', function(ev) { - ev.preventDefault(); + $el.on('click', 'a', function() { + self.view.trigger('hide_menus'); var color_field = $(this).parents('.oe_kanban_colorpicker').first().data('field') || 'color'; var data = {}; data[color_field] = $(this).data('color'); @@ -636,6 +640,7 @@ instance.web_kanban.KanbanRecord = instance.web.OldWidget.extend({ self.record[color_field] = $(this).data('color'); self.do_reload(); }); + return false; }); } },