From 31b316577ccf24ffd0a2259ec3f87c0a70c46cb4 Mon Sep 17 00:00:00 2001 From: Fabien Meghazi Date: Wed, 17 Oct 2012 16:55:48 +0200 Subject: [PATCH] [IMP] Use an 'options' dict as second arg for ActionManager#do_action() bzr revid: fme@openerp.com-20121017145548-oc9s6oadhwzbr78m --- addons/web/static/src/js/chrome.js | 4 ++- addons/web/static/src/js/views.js | 53 ++++++++++++++++-------------- 2 files changed, 31 insertions(+), 26 deletions(-) diff --git a/addons/web/static/src/js/chrome.js b/addons/web/static/src/js/chrome.js index 5c7eb8524e6..a298ac67159 100644 --- a/addons/web/static/src/js/chrome.js +++ b/addons/web/static/src/js/chrome.js @@ -1122,7 +1122,9 @@ instance.web.WebClient = instance.web.Client.extend({ if (options.needaction) { action.context.search_default_message_unread = true; } - return $.when(self.action_manager.do_action(action, null, true)).fail(function() { + return $.when(self.action_manager.do_action(action, { + clear_breadcrumbs: true, + })).fail(function() { self.menu.open_menu(options.previous_menu_id); }); }); diff --git a/addons/web/static/src/js/views.js b/addons/web/static/src/js/views.js index e4e48adb13c..3c7f16a47eb 100644 --- a/addons/web/static/src/js/views.js +++ b/addons/web/static/src/js/views.js @@ -239,14 +239,19 @@ instance.web.ActionManager = instance.web.Widget.extend({ } }); }, - do_action: function(action, on_close, clear_breadcrumbs, on_reverse_breadcrumb) { + do_action: function(action, options) { + options = _.defaults(options || {}, { + clear_breadcrumbs: false, + on_reverse_breadcrumb: function() {}, + on_close: function() {}, + }); if (_.isString(action) && instance.web.client_actions.contains(action)) { var action_client = { type: "ir.actions.client", tag: action }; - return this.do_action(action_client, on_close, clear_breadcrumbs, on_reverse_breadcrumb); + return this.do_action(action_client, options); } else if (_.isNumber(action) || _.isString(action)) { var self = this; return self.rpc("/web/action/load", { action_id: action }).pipe(function(result) { - return self.do_action(result, on_close, clear_breadcrumbs, on_reverse_breadcrumb); + return self.do_action(result, options); }); } if (!action.type) { @@ -268,7 +273,7 @@ instance.web.ActionManager = instance.web.Widget.extend({ console.error("Action manager can't handle action of type " + action.type, action); return $.Deferred().reject(); } - return this[type](action, on_close, clear_breadcrumbs, on_reverse_breadcrumb); + return this[type](action, options); }, null_action: function() { this.dialog_stop(); @@ -281,15 +286,14 @@ instance.web.ActionManager = instance.web.Widget.extend({ * @param {Function} executor.widget function used to fetch the widget instance * @param {String} executor.klass CSS class to add on the dialog root, if action.target=new * @param {Function} executor.post_process cleanup called after a widget has been added as inner_widget - * @param on_close - * @param clear_breadcrumbs + * @param {Object} options * @return {*} */ - ir_actions_common: function(executor, on_close, clear_breadcrumbs) { + ir_actions_common: function(executor, options) { if (this.inner_widget && executor.action.target !== 'new') { if (this.getParent().has_uncommitted_changes()) { return $.Deferred().reject(); - } else if (clear_breadcrumbs) { + } else if (options.clear_breadcrumbs) { this.clear_breadcrumbs(); } } @@ -300,8 +304,7 @@ instance.web.ActionManager = instance.web.Widget.extend({ buttons: {"Close": function() {$(this).dialog("close")}}, dialogClass: executor.klass, }); - if (on_close) - this.dialog.on("closing", null, on_close); + this.dialog.on("closing", null, options.on_close); this.dialog.init_dialog(); } else { this.dialog_widget.destroy(); @@ -325,24 +328,24 @@ instance.web.ActionManager = instance.web.Widget.extend({ return this.inner_widget.appendTo(this.$el); } }, - ir_actions_act_window: function (action, on_close, clear_breadcrumbs, on_reverse_breadcrumb) { + ir_actions_act_window: function (action, options) { var self = this; return this.ir_actions_common({ widget: function () { return new instance.web.ViewManagerAction(self, action); }, action: action, klass: 'oe_act_window', - post_process: function (widget) { widget.add_breadcrumb(on_reverse_breadcrumb); } - }, on_close, clear_breadcrumbs, on_reverse_breadcrumb); + post_process: function (widget) { widget.add_breadcrumb(options.on_reverse_breadcrumb); } + }, options); }, - ir_actions_client: function (action, on_close, clear_breadcrumbs, on_reverse_breadcrumb) { + ir_actions_client: function (action, options) { var self = this; var ClientWidget = instance.web.client_actions.get_object(action.tag); if (!(ClientWidget.prototype instanceof instance.web.Widget)) { var next; if (next = ClientWidget(this, action.params)) { - return this.do_action(next, on_close, clear_breadcrumbs, on_reverse_breadcrumb); + return this.do_action(next, options); } return $.when(); } @@ -355,30 +358,30 @@ instance.web.ActionManager = instance.web.Widget.extend({ self.push_breadcrumb({ widget: widget, title: action.name, - on_reverse_breadcrumb: on_reverse_breadcrumb, + on_reverse_breadcrumb: options.on_reverse_breadcrumb, }); if (action.tag !== 'reload') { self.do_push_state({}); } } - }, on_close, clear_breadcrumbs, on_reverse_breadcrumb); + }, options); }, - ir_actions_act_window_close: function (action, on_closed) { - if (!this.dialog && on_closed) { - on_closed(); + ir_actions_act_window_close: function (action, options) { + if (!this.dialog) { + options.on_close(); } this.dialog_stop(); }, - ir_actions_server: function (action, on_closed, clear_breadcrumbs, on_reverse_breadcrumb) { + ir_actions_server: function (action, options) { var self = this; this.rpc('/web/action/run', { action_id: action.id, context: action.context || {} }).then(function (action) { - self.do_action(action, on_closed, clear_breadcrumbs, on_reverse_breadcrumb) + self.do_action(action, options) }); }, - ir_actions_report_xml: function(action, on_closed) { + ir_actions_report_xml: function(action, options) { var self = this; instance.web.blockUI(); self.rpc("/web/session/eval_domain_and_context", { @@ -392,8 +395,8 @@ instance.web.ActionManager = instance.web.Widget.extend({ data: {action: JSON.stringify(action)}, complete: instance.web.unblockUI, success: function(){ - if (!self.dialog && on_closed) { - on_closed(); + if (!self.dialog) { + options.on_close(); } self.dialog_stop(); },