From 96b47f89208b6a89ba72935187d4f04a35b43d55 Mon Sep 17 00:00:00 2001 From: Fabien Meghazi Date: Mon, 25 Jun 2012 17:01:50 +0200 Subject: [PATCH] [FIX] Fixed kanban view global click bzr revid: fme@openerp.com-20120625150150-pn4hdhccr6rqlvhp --- addons/web/static/src/js/chrome.js | 1 + addons/web_kanban/static/src/js/kanban.js | 41 ++++++++++++++++++++--- 2 files changed, 38 insertions(+), 4 deletions(-) diff --git a/addons/web/static/src/js/chrome.js b/addons/web/static/src/js/chrome.js index 563837d4f68..a398ceb67d9 100644 --- a/addons/web/static/src/js/chrome.js +++ b/addons/web/static/src/js/chrome.js @@ -875,6 +875,7 @@ instance.web.WebClient = instance.web.Widget.extend({ $(this).attr('data-tipsy', 'true').tipsy().trigger('mouseenter'); }); this.$element.on('click', '.oe_dropdown_toggle', function(ev) { + ev.preventDefault(); var $menu = $(this).find('.oe_dropdown_menu'); var state = $menu.is('.oe_opened'); setTimeout(function() { diff --git a/addons/web_kanban/static/src/js/kanban.js b/addons/web_kanban/static/src/js/kanban.js index 6811953465d..3fd3ee76f71 100644 --- a/addons/web_kanban/static/src/js/kanban.js +++ b/addons/web_kanban/static/src/js/kanban.js @@ -311,9 +311,9 @@ instance.web_kanban.KanbanView = instance.web.View.extend({ } return this._super(); }, - open_record: function(id) { + open_record: function(id, editable) { if (this.dataset.select_id(id)) { - this.do_switch_view('form', null, { editable: true }); + this.do_switch_view('form', null, { editable: editable }); } else { this.do_warn("Kanban: could not find id#" + id); } @@ -611,7 +611,40 @@ instance.web_kanban.KanbanRecord = instance.web.OldWidget.extend({ if (this.$element.find('.oe_kanban_global_click').length) { this.$element.on('click', function(ev) { if (!ev.isTrigger && !$(ev.target).data('events')) { - //self.on_card_clicked(ev); + var trigger = true; + var elem = ev.target; + var ischild = true; + var children = []; + while (elem) { + var events = $(elem).data('events'); + if (elem == ev.currentTarget) { + ischild = false; + } + if (ischild) { + children.push(elem); + if (events && events.click) { + // do not trigger global click if one child has a click event registered + trigger = false; + } + } + if (trigger && events && events.click) { + _.each(events.click, function(click_event) { + if (click_event.selector) { + // For each parent of original target, check if a + // delegated click is bound to any previously found children + _.each(children, function(child) { + if ($(child).is(click_event.selector)) { + trigger = false; + } + }); + } + }); + } + elem = elem.parentElement; + } + if (trigger) { + self.on_card_clicked(ev); + } } }); } @@ -660,7 +693,7 @@ instance.web_kanban.KanbanRecord = instance.web.OldWidget.extend({ self.view.form_dialog.open(); }); } else { - this.view.open_record(this.id); + this.view.open_record(this.id, true); } }, do_action_object: function ($action) {