diff --git a/addons/base/static/src/js/views.js b/addons/base/static/src/js/views.js
index 23cd43c0efd..f603a75646e 100644
--- a/addons/base/static/src/js/views.js
+++ b/addons/base/static/src/js/views.js
@@ -19,7 +19,6 @@ openerp.base.ActionManager = openerp.base.Controller.extend({
* Supported actions: act_window
*/
do_action: function(action, on_closed) {
- var self = this;
action.flags = _.extend({
sidebar : action.target != 'new',
search_view : true,
@@ -29,61 +28,65 @@ openerp.base.ActionManager = openerp.base.Controller.extend({
pager : true
}, action.flags || {});
// instantiate the right controllers by understanding the action
- switch (action.type) {
- case 'ir.actions.act_window':
- if (!action.target && this.dialog_stack.length) {
- action.flags.new_window = true;
- }
- if (action.target == 'new') {
- var element_id = _.uniqueId("act_window_dialog");
- $('
', {id: element_id}).dialog({
- title: action.name,
- modal: true,
- width: '50%',
- height: 'auto'
- }).bind('dialogclose', function(event) {
- // When dialog is closed with ESC key or close manually, branch to act_window_close logic
- self.do_action({ type: 'ir.actions.act_window_close' });
- });
- var viewmanager = new openerp.base.ViewManagerAction(this.session, element_id, action);
- viewmanager.start();
- viewmanager.on_act_window_closed.add(on_closed);
- viewmanager.is_dialog = true;
- this.dialog_stack.push(viewmanager);
- } else if (action.flags.new_window) {
- action.flags.new_window = false;
- this.rpc("/base/session/save_session_action", { the_action : action}, function(key) {
- var url = window.location.protocol + "//" + window.location.host +
- window.location.pathname + "?" + jQuery.param({ s_action : "" + key });
- window.open(url);
- });
- } else {
- if (this.viewmanager) {
- this.viewmanager.stop();
- }
- this.viewmanager = new openerp.base.ViewManagerAction(this.session, this.element_id, action);
- this.viewmanager.start();
- }
- break;
- case 'ir.actions.act_window_close':
- var dialog = this.dialog_stack.pop();
- if (!action.special) {
- dialog.on_act_window_closed();
- }
- dialog.$element.dialog('destroy');
- dialog.stop();
- break;
- case 'ir.actions.server':
- this.rpc('/base/action/run', {
- action_id: action.id,
- context: {active_id: 66, active_ids: [66], active_model: 'ir.ui.menu'}
- }).then(function (action) {
- self.do_action(action, on_closed)
- });
- break;
- default:
- console.log("Action manager can't handle action of type " + action.type, action);
+ if (!(action.type in this)) {
+ console.log("Action manager can't handle action of type " + action.type, action);
+ return;
}
+ this[action.type](action, on_closed);
+ },
+
+ 'ir.actions.act_window': function (action, on_closed) {
+ var self = this;
+ if (!action.target && this.dialog_stack.length) {
+ action.flags.new_window = true;
+ }
+ if (action.target == 'new') {
+ var element_id = _.uniqueId("act_window_dialog");
+ $('
', {id: element_id}).dialog({
+ title: action.name,
+ modal: true,
+ width: '50%',
+ height: 'auto'
+ }).bind('dialogclose', function(event) {
+ // When dialog is closed with ESC key or close manually, branch to act_window_close logic
+ self.do_action({ type: 'ir.actions.act_window_close' });
+ });
+ var viewmanager = new openerp.base.ViewManagerAction(this.session, element_id, action);
+ viewmanager.start();
+ viewmanager.on_act_window_closed.add(on_closed);
+ viewmanager.is_dialog = true;
+ this.dialog_stack.push(viewmanager);
+ } else if (action.flags.new_window) {
+ action.flags.new_window = false;
+ this.rpc("/base/session/save_session_action", { the_action : action}, function(key) {
+ var url = window.location.protocol + "//" + window.location.host +
+ window.location.pathname + "?" + jQuery.param({ s_action : "" + key });
+ window.open(url);
+ });
+ } else {
+ if (this.viewmanager) {
+ this.viewmanager.stop();
+ }
+ this.viewmanager = new openerp.base.ViewManagerAction(this.session, this.element_id, action);
+ this.viewmanager.start();
+ }
+ },
+ 'ir.actions.act_window_close': function (action, on_closed) {
+ var dialog = this.dialog_stack.pop();
+ if (!action.special) {
+ dialog.on_act_window_closed();
+ }
+ dialog.$element.dialog('destroy');
+ dialog.stop();
+ },
+ 'ir.actions.server': function (action, on_closed) {
+ var self = this;
+ this.rpc('/base/action/run', {
+ action_id: action.id,
+ context: {active_id: 66, active_ids: [66], active_model: 'ir.ui.menu'}
+ }).then(function (action) {
+ self.do_action(action, on_closed)
+ });
}
});