From 2f2c246fac6bcef23687e7623e8addc9b92a8998 Mon Sep 17 00:00:00 2001 From: Fabien Meghazi Date: Wed, 29 Feb 2012 14:02:35 +0100 Subject: [PATCH] [IMP] Improve menus. Works when client is reloaded bzr revid: fme@openerp.com-20120229130235-bx8ptrz4xah1aqct --- addons/web/static/src/js/chrome.js | 28 ++++++++++++++++------------ addons/web/static/src/js/views.js | 3 +++ addons/web/static/src/xml/base.xml | 8 ++++---- 3 files changed, 23 insertions(+), 16 deletions(-) diff --git a/addons/web/static/src/js/chrome.js b/addons/web/static/src/js/chrome.js index ae3a7143d9d..1589ede75c1 100644 --- a/addons/web/static/src/js/chrome.js +++ b/addons/web/static/src/js/chrome.js @@ -674,6 +674,10 @@ openerp.web.Menu = openerp.web.Widget.extend(/** @lends openerp.web.Menu# */{ * @param parent */ template: 'Menu', + init: function() { + this._super.apply(this, arguments); + this.has_been_loaded = $.Deferred(); + }, do_reload: function() { var self = this; return this.rpc("/web/menu/load", {}, this.on_loaded).then(function () { @@ -693,12 +697,13 @@ openerp.web.Menu = openerp.web.Widget.extend(/** @lends openerp.web.Menu# */{ this.$secondary_menus.html(QWeb.render("Menu.secondary", { widget : this })); // Hide second level submenus this.$secondary_menus.find('.oe_menu_toggler').siblings('.oe_secondary_submenu').hide(); + this.has_been_loaded.resolve(); }, /** * Opens a given menu by id, as if a user had browsed to that menu by hand * except does not trigger any event on the way * - * @param {Number} menu_id database id of the terminal menu to select + * @param {Number} id database id of the terminal menu to select */ open_menu: function (id) { var $clicked_menu, $sub_menu, $main_menu; @@ -731,6 +736,12 @@ openerp.web.Menu = openerp.web.Widget.extend(/** @lends openerp.web.Menu# */{ } } }, + open_action: function (id) { + var menu_id, $menu = this.$element.add(this.$secondary_menus).find('a[data-action-id=' + id + ']'); + if (menu_id = $menu.data('menu')) { + this.open_menu(menu_id); + } + }, on_menu_click: function(ev, id) { id = id || 0; var $clicked_menu, manual = false; @@ -751,7 +762,10 @@ openerp.web.Menu = openerp.web.Widget.extend(/** @lends openerp.web.Menu# */{ this.open_menu(id); this.current_menu = id; this.session.active_id = id; - this.rpc('/web/menu/action', {'menu_id': id}, this.on_menu_action_loaded); + var action_id = $clicked_menu.data('action-id'); + if (action_id) { + this.on_action(action_id); + } } if (ev) { ev.stopPropagation(); @@ -766,16 +780,6 @@ openerp.web.Menu = openerp.web.Widget.extend(/** @lends openerp.web.Menu# */{ } $sub_menu.show(); }, - on_menu_action_loaded: function(data) { - var self = this; - if (data.action.length) { - var action = data.action[0][2]; - action.from_menu = true; - self.on_action(action); - } else { - self.on_action({type: 'null_action'}); - } - }, on_action: function(action) { } }); diff --git a/addons/web/static/src/js/views.js b/addons/web/static/src/js/views.js index 08886ddfbe3..82f6d63b9f1 100644 --- a/addons/web/static/src/js/views.js +++ b/addons/web/static/src/js/views.js @@ -65,6 +65,9 @@ session.web.ActionManager = session.web.OldWidget.extend({ if (run_action) { this.null_action(); action_loaded = this.do_action(state.action_id); + session.webclient.menu.has_been_loaded.then(function() { + session.webclient.menu.open_action(state.action_id); + }); } } else if (state.model && state.id) { // TODO handle context & domain ? diff --git a/addons/web/static/src/xml/base.xml b/addons/web/static/src/xml/base.xml index d2d30c5d580..d1dbf9845c9 100644 --- a/addons/web/static/src/xml/base.xml +++ b/addons/web/static/src/xml/base.xml @@ -327,9 +327,7 @@ @@ -359,7 +357,9 @@ + t-att-data-menu="menu.id" + t-att-data-action-model="menu.action ? menu.action.split(',')[0] : ''" + t-att-data-action-id="menu.action ? menu.action.split(',')[1] : ''">