diff options
| author | Xavier Morel <xmo@openerp.com> | 2011-04-12 15:21:20 +0200 |
|---|---|---|
| committer | Xavier Morel <xmo@openerp.com> | 2011-04-12 15:21:20 +0200 |
| commit | d7da740264e35dd67a7a891770b47d2bc38578ef (patch) | |
| tree | 3c381edfd569b045e959ccd71dbe21dfef141421 /addons/base/static/src/js | |
| parent | b840e25c1d901f0d83c41eef38ada73e8d61bd7b (diff) | |
| parent | b70b02bc5138d7f5f4b70433cb47e28c39f1f953 (diff) | |
[MERGE] from mainline branch, hook in new record handling
bzr revid: xmo@openerp.com-20110412132120-ii3mosez9kguvcjb
Diffstat (limited to 'addons/base/static/src/js')
| -rw-r--r-- | addons/base/static/src/js/chrome.js | 29 | ||||
| -rw-r--r-- | addons/base/static/src/js/data.js | 9 | ||||
| -rw-r--r-- | addons/base/static/src/js/form.js | 313 | ||||
| -rw-r--r-- | addons/base/static/src/js/list.js | 4 | ||||
| -rw-r--r-- | addons/base/static/src/js/search.js | 2 | ||||
| -rw-r--r-- | addons/base/static/src/js/views.js | 16 |
6 files changed, 261 insertions, 112 deletions
diff --git a/addons/base/static/src/js/chrome.js b/addons/base/static/src/js/chrome.js index b26dccffb2e..bbfe37661cf 100644 --- a/addons/base/static/src/js/chrome.js +++ b/addons/base/static/src/js/chrome.js @@ -245,12 +245,7 @@ openerp.base.Notification = openerp.base.BasicController.extend({ text: text }); }, - // TODO remove to avoid default as attribute - 'default': function(title, text) { - this.notify(title,text); - }, - // TODO change into warn to avoid alert - alert: function(title, text) { + warn: function(title, text) { this.$element.notify('create', 'oe_notification_alert', { title: title, text: text @@ -478,8 +473,10 @@ openerp.base.Session = openerp.base.BasicController.extend( /** @lends openerp.b continue; openerp[mod] = {}; // init module mod - openerp._openerp[mod](openerp); - self.module_loaded[mod] = true; + if(openerp._openerp[mod] != undefined) { + openerp._openerp[mod](openerp); + self.module_loaded[mod] = true; + } } } }); @@ -783,6 +780,10 @@ openerp.base.Header = openerp.base.Controller.extend({ this.do_update(); }, do_update: function() { + if(jQuery.param != undefined && + jQuery.deparam(jQuery.param.querystring()).kitten != undefined) { + this.kitten = 1; + } this.$element.html(QWeb.render("Header", this)); } }); @@ -907,11 +908,21 @@ openerp.base.WebClient = openerp.base.Controller.extend({ this.header.start(); this.login.start(); this.menu.start(); - this.notification['default']("OpenERP Client", "The openerp client has been initialized."); + this.notification.notify("OpenERP Client", "The openerp client has been initialized."); }, on_logged: function() { this.action = new openerp.base.ActionManager(this.session, "oe_app"); this.action.start(); + + // if using saved actions, load the action and give it to action manager + var parameters = jQuery.deparam(jQuery.param.querystring()); + if(parameters["s_action"] != undefined) { + var key = parseInt(parameters["s_action"]); + var self = this; + this.rpc("/base/session/get_session_action", {key:key}, function(action) { + self.action.do_action(action); + }); + } }, on_menu_action: function(action) { this.action.do_action(action); diff --git a/addons/base/static/src/js/data.js b/addons/base/static/src/js/data.js index 8f5d6168e75..7b1a930c88f 100644 --- a/addons/base/static/src/js/data.js +++ b/addons/base/static/src/js/data.js @@ -89,7 +89,12 @@ openerp.base.DataSet = openerp.base.Controller.extend( /** @lends openerp.base. context: this.context }, callback); }, - create: function() { + create: function(data, callback) { + return this.rpc('/base/dataset/create', { + model: this.model, + data: data, + context: this.context + }, callback); }, write: function (id, data, callback) { return this.rpc('/base/dataset/save', { @@ -100,7 +105,7 @@ openerp.base.DataSet = openerp.base.Controller.extend( /** @lends openerp.base. }, callback); }, unlink: function(ids) { - this.notification['default']("Unlink", ids); + this.notification.notify("Unlink", ids); }, call: function (method, ids, args, callback) { ids = ids || []; diff --git a/addons/base/static/src/js/form.js b/addons/base/static/src/js/form.js index d33c9f2ee7e..e54c46bb533 100644 --- a/addons/base/static/src/js/form.js +++ b/addons/base/static/src/js/form.js @@ -27,6 +27,7 @@ openerp.base.FormView = openerp.base.Controller.extend( /** @lends openerp.base this.fields = {}; this.datarecord = {}; this.ready = false; + this.show_invalid = true; }, start: function() { //this.log('Starting FormView '+this.model+this.view_id) @@ -48,10 +49,10 @@ openerp.base.FormView = openerp.base.Controller.extend( /** @lends openerp.base self.on_pager_action(action); }); - this.$element.find('div.oe_form_buttons button.oe_form_button_save').click(this.do_save); - this.$element.find('div.oe_form_buttons button.oe_form_button_save_edit').click(this.do_save_edit); - this.$element.find('div.oe_form_buttons button.oe_form_button_cancel').click(this.do_cancel); - this.$element.find('div.oe_form_buttons button.oe_form_button_new').click(this.on_button_new); + this.$element.find('#' + this.element_id + '_header button.oe_form_button_save').click(this.do_save); + this.$element.find('#' + this.element_id + '_header button.oe_form_button_save_edit').click(this.do_save_edit); + this.$element.find('#' + this.element_id + '_header button.oe_form_button_cancel').click(this.do_cancel); + this.$element.find('#' + this.element_id + '_header button.oe_form_button_new').click(this.on_button_new); // sidebar stuff if (this.view_manager.sidebar) { @@ -59,8 +60,19 @@ openerp.base.FormView = openerp.base.Controller.extend( /** @lends openerp.base } }, do_show: function () { - this.dataset.read_index(_.keys(this.fields_view.fields), this.on_record_loaded); - this.$element.show(); + var self = this; + this.do_update_pager.add({ + unique: true, + callback: function() { + self.$element.show(); + } + }); + if (this.dataset.index === null) { + // null index means we should start a new record + this.on_button_new(); + } else { + this.dataset.read_index(_.keys(this.fields_view.fields), this.on_record_loaded); + } }, do_hide: function () { this.$element.hide(); @@ -69,20 +81,22 @@ openerp.base.FormView = openerp.base.Controller.extend( /** @lends openerp.base if (record) { this.datarecord = record; for (var f in this.fields) { - this.fields[f].set_value(this.datarecord[f]); + this.fields[f].set_value(this.datarecord[f] || false); + this.fields[f].validate(); } if (!record.id) { + this.show_invalid = false; // Second pass in order to trigger the onchanges in case of new record for (var f in record) { - this.fields[f].on_ui_change(); + this.on_form_changed(this.fields[f]); } } this.on_form_changed(); - this.ready = true; + this.show_invalid = this.ready = true; } else { this.log("No record received"); } - this.do_update_pager(); + this.do_update_pager(record.id == null); }, on_form_changed: function(widget) { if (widget && widget.node.attrs.on_change) { @@ -110,14 +124,13 @@ openerp.base.FormView = openerp.base.Controller.extend( /** @lends openerp.base this.dataset.index = this.dataset.ids.length - 1; break; } - this.dataset.read_index(_.keys(this.fields_view.fields), this.on_record_loaded); + this.reload(); }, - do_update_pager: function() { - var $pager = this.$element.find('div.oe_form_pager'); - $pager.find("button[data-pager-action='first'], button[data-pager-action='previous']").attr('disabled', this.dataset.index == 0); - $pager.find("button[data-pager-action='next'], button[data-pager-action='last']").attr('disabled', this.dataset.index == this.dataset.ids.length - 1); - this.$element.find('span.oe_pager_index').html(this.dataset.index + 1); - this.$element.find('span.oe_pager_count').html(this.dataset.count); + do_update_pager: function(hide_index) { + var $pager = this.$element.find('#' + this.element_id + '_header div.oe_form_pager').eq(0); + var index = hide_index ? '-' : this.dataset.index + 1; + $pager.find('span.oe_pager_index').html(index); + $pager.find('span.oe_pager_count').html(this.dataset.count); }, do_onchange: function(widget, processed) { processed = processed || []; @@ -196,7 +209,8 @@ openerp.base.FormView = openerp.base.Controller.extend( /** @lends openerp.base self.on_record_loaded(result.result); }); }, - do_save: function() { + do_save: function(success) { + var self = this; if (!this.ready) { return false; } @@ -206,21 +220,31 @@ openerp.base.FormView = openerp.base.Controller.extend( /** @lends openerp.base f = this.fields[f]; if (f.invalid) { invalid = true; + f.update_dom(); } else if (f.touched) { values[f.name] = f.get_value(); } } if (invalid) { this.on_invalid(); + return false; } else { this.log("About to save", values); - this.dataset.write(this.datarecord.id, values, this.on_saved); + if (!this.datarecord.id) { + this.dataset.create(values, function(r) { + self.on_created(r, success); + }); + } else { + this.dataset.write(this.datarecord.id, values, function(r) { + self.on_saved(r, success); + }); + } + return true; } }, do_save_edit: function() { - if (this.do_save()) { - this.switch_readonly(); - } + this.do_save(); + //this.switch_readonly(); Use promises }, switch_readonly: function() { }, @@ -234,24 +258,48 @@ openerp.base.FormView = openerp.base.Controller.extend( /** @lends openerp.base } }); msg += "</ul>"; - this.notification.alert("The following fields are invalid :", msg); + this.notification.warn("The following fields are invalid :", msg); }, - on_saved: function(r) { + on_saved: function(r, success) { if (!r.result) { - this.log("Record was not saved"); + this.notification.warn("Record not saved", "Problem while saving record."); } else { - // Check response for exceptions, display error - this.notification['default']("Record saved", "The record #" + this.datarecord.id + " has been saved."); + this.notification.notify("Record saved", "The record #" + this.datarecord.id + " has been saved."); + if (success) { + success(r); + } + } + }, + on_created: function(r, success) { + if (!r.result) { + this.notification.warn("Record not created", "Problem while creating record."); + } else { + this.datarecord.id = arguments[0].result; + this.dataset.ids.push(this.datarecord.id); + this.dataset.index = this.dataset.ids.length - 1; + this.dataset.count++; + this.do_update_pager(); + this.notification.notify("Record created", "The record has been created with id #" + this.datarecord.id); + if (success) { + success(r); + } } }, do_search: function (domains, contexts, groupbys) { - this.notification['default']("Searching form"); + this.notification.notify("Searching form"); }, on_action: function (action) { - this.notification['default']('Executing action ' + action); + this.notification.notify('Executing action ' + action); }, do_cancel: function () { - this.notification['default']("Cancelling form"); + this.notification.notify("Cancelling form"); + }, + reload: function() { + if (this.datarecord.id) { + this.dataset.read_index(_.keys(this.fields_view.fields), this.on_record_loaded); + } else { + this.on_button_new(); + } } }); @@ -396,12 +444,12 @@ openerp.base.form.WidgetFrame = openerp.base.form.Widget.extend({ } } }, - handle_node: function(n) { - var type = this.view.fields_view.fields[n.attrs.name] || {}; - var widget_type = n.attrs.widget || type.type || n.tag; - var widget = new (openerp.base.form.widgets.get_object(widget_type)) (this.view, n); - if (n.tag == 'field' && n.attrs.nolabel != '1') { - var label = new (openerp.base.form.widgets.get_object('label')) (this.view, n); + handle_node: function(node) { + var type = this.view.fields_view.fields[node.attrs.name] || {}; + var widget_type = node.attrs.widget || type.type || node.tag; + var widget = new (openerp.base.form.widgets.get_object(widget_type)) (this.view, node); + if (node.tag == 'field' && node.attrs.nolabel != '1') { + var label = new (openerp.base.form.widgets.get_object('label')) (this.view, node); label["for"] = widget; this.add_widget(label); } @@ -450,6 +498,61 @@ openerp.base.form.WidgetButton = openerp.base.form.Widget.extend({ init: function(view, node) { this._super(view, node); this.template = "WidgetButton"; + }, + start: function() { + this._super.apply(this, arguments); + this.$element.click(this.on_click); + }, + on_click: function(saved) { + var self = this; + if (saved !== true) { + this.view.do_save(function() { + self.on_click(true); + }); + } else { + if (this.node.attrs.confirm) { + var dialog = $('<div>' + this.node.attrs.confirm + '</div>').dialog({ + title: 'Confirm', + modal: true, + buttons: { + Ok: function() { + self.on_confirmed(); + $(this).dialog("close"); + }, + Cancel: function() { + $(this).dialog("close"); + } + } + }); + } else { + this.on_confirmed(); + } + } + }, + on_confirmed: function() { + var attrs = this.node.attrs; + if (attrs.special) { + return this.log("Should close the popup"); + } else { + var type = attrs.type || 'workflow'; + var context = _.extend({}, this.view.dataset.context, attrs.context || {}); + switch(type) { + case 'object': + return this.view.dataset.call(attrs.name, [this.view.datarecord.id], [context], this.on_button_object); + break; + default: + this.log(_.sprintf("Unsupported button type : %s", type)); + } + } + }, + on_button_object: function(r) { + if (r.result === false) { + this.log("Button object returns false"); + } else if (r.result.constructor == Object) { + console.log("TODO: send action to action manager", r.result); + } else { + this.view.reload(); + } } }); @@ -485,12 +588,13 @@ openerp.base.form.Field = openerp.base.form.Widget.extend({ if (node.attrs.nolabel != '1' && this.colspan > 1) { this.colspan--; } - this.field = view.fields_view.fields[node.attrs.name]; + this.field = view.fields_view.fields[node.attrs.name] || {}; this.string = node.attrs.string || this.field.string; this.help = node.attrs.help || this.field.help; - this.nolabel = (node.attrs.nolabel == '1'); - this.readonly = (node.attrs.readonly == '1'); - this.required = (node.attrs.required == '1'); + this.invisible = (this.invisible || this.field.invisible == '1'); + this.nolabel = (this.field.nolabel || node.attrs.nolabel) == '1'; + this.readonly = (this.field.readonly || node.attrs.readonly) == '1'; + this.required = (this.field.required || node.attrs.required) == '1'; this.invalid = false; this.touched = false; }, @@ -499,6 +603,9 @@ openerp.base.form.Field = openerp.base.form.Widget.extend({ this.invalid = false; this.update_dom(); }, + set_value_from_ui: function() { + this.value = undefined; + }, get_value: function() { return this.value; }, @@ -506,10 +613,17 @@ openerp.base.form.Field = openerp.base.form.Widget.extend({ this._super.apply(this, arguments); this.$element.toggleClass('disabled', this.readonly); this.$element.toggleClass('required', this.required); - this.$element.toggleClass('invalid', this.invalid); + if (this.view.show_invalid) { + this.$element.toggleClass('invalid', this.invalid); + } }, on_ui_change: function() { this.touched = true; + this.set_value_from_ui(); + this.validate(); + this.view.on_form_changed(this); + }, + validate: function() { } }); @@ -531,31 +645,41 @@ openerp.base.form.FieldChar = openerp.base.form.Field.extend({ this._super.apply(this, arguments); this.$element.find('input').attr('disabled', this.readonly); }, - on_ui_change: function() { - this._super.apply(this, arguments); + set_value_from_ui: function() { this.value = this.$element.find('input').val(); - this.invalid = this.required && this.value == ""; - this.view.on_form_changed(this); + }, + validate: function() { + this.invalid = false; + if (this.value === false || this.value === "") { + this.invalid = this.required; + } else if (this.validation_regex) { + this.invalid = !this.validation_regex.test(this.value); + } } }); openerp.base.form.FieldEmail = openerp.base.form.FieldChar.extend({ + init: function(view, node) { + this._super(view, node); + this.validation_regex = /@/; + } }); openerp.base.form.FieldUrl = openerp.base.form.FieldChar.extend({ }); openerp.base.form.FieldFloat = openerp.base.form.FieldChar.extend({ + init: function(view, node) { + this._super(view, node); + this.validation_regex = /^\d+(\.\d+)?$/; + }, set_value: function(value) { this._super.apply(this, arguments); var show_value = (value != null && value !== false) ? value.toFixed(2) : ''; - this.$element.find('input').val(value); + this.$element.find('input').val(show_value); }, - on_ui_change: function() { - this._super.apply(this, arguments); + set_value_from_ui: function() { this.value = this.$element.find('input').val().replace(/,/g, '.'); - this.invalid = (this.required && this.value == "") || !this.value.match(/^\d+(\.\d+)?$/) ; - this.view.on_form_changed(this); } }); @@ -563,23 +687,13 @@ openerp.base.form.FieldDate = openerp.base.form.FieldChar.extend({ init: function(view, node) { this._super(view, node); this.template = "FieldDate"; + this.validation_regex = /^\d+-\d+-\d+$/; }, start: function() { this._super.apply(this, arguments); this.$element.find('input').change(this.on_ui_change).datepicker({ dateFormat: 'yy-mm-dd' }); - }, - set_value: function(value) { - this._super.apply(this, arguments); - var show_value = (value != null && value !== false) ? value : ''; - this.$element.find('input').val(show_value); - }, - on_ui_change: function() { - this._super.apply(this, arguments); - this.value = this.$element.find('input').val(); - this.invalid = this.required && this.value == ""; - this.view.on_form_changed(this); } }); @@ -587,6 +701,7 @@ openerp.base.form.FieldDatetime = openerp.base.form.FieldChar.extend({ init: function(view, node) { this._super(view, node); this.template = "FieldDatetime"; + this.validation_regex = /^\d+-\d+-\d+( \d+:\d+(:\d+)?)?$/; }, start: function() { this._super.apply(this, arguments); @@ -594,17 +709,6 @@ openerp.base.form.FieldDatetime = openerp.base.form.FieldChar.extend({ dateFormat: 'yy-mm-dd', timeFormat: 'hh:mm:ss' }); - }, - set_value: function(value) { - this._super.apply(this, arguments); - var show_value = (value != null && value !== false) ? value : ''; - this.$element.find('input').val(show_value); - }, - on_ui_change: function() { - this._super.apply(this, arguments); - this.value = this.$element.find('input').val(); - this.invalid = this.required && this.value == ""; - this.view.on_form_changed(this); } }); @@ -612,6 +716,7 @@ openerp.base.form.FieldText = openerp.base.form.Field.extend({ init: function(view, node) { this._super(view, node); this.template = "FieldText"; + this.validation_regex = null; }, start: function() { this._super.apply(this, arguments); @@ -626,11 +731,16 @@ openerp.base.form.FieldText = openerp.base.form.Field.extend({ this._super.apply(this, arguments); this.$element.find('textarea').attr('disabled', this.readonly); }, - on_ui_change: function() { - this._super.apply(this, arguments); + set_value_from_ui: function() { this.value = this.$element.find('textarea').val(); - this.invalid = this.required && this.value == ""; - this.view.on_form_changed(this); + }, + validate: function() { + this.invalid = false; + if (this.value === false || this.value === "") { + this.invalid = this.required; + } else if (this.validation_regex) { + this.invalid = !this.validation_regex.test(this.value); + } } }); @@ -652,15 +762,29 @@ openerp.base.form.FieldBoolean = openerp.base.form.Field.extend({ this._super.apply(this, arguments); this.$element.find('input')[0].checked = value; }, + set_value_from_ui: function() { + this.value = this.$element.find('input').is(':checked'); + }, update_dom: function() { this._super.apply(this, arguments); - this.$element.find('textarea').attr('disabled', this.readonly); + this.$element.find('input').attr('disabled', this.readonly); }, - on_ui_change: function() { - this._super.apply(this, arguments); - this.value = this.$element.find('input').is(':checked'); + validate: function() { this.invalid = this.required && !this.value; - this.view.on_form_changed(this); + } +}); + +openerp.base.form.FieldProgressBar = openerp.base.form.Field.extend({ + init: function(view, node) { + this._super(view, node); + this.template = "FieldProgressBar"; + }, + start: function() { + this._super.apply(this, arguments); + this.$element.find('div').progressbar({ + value: this.value, + disabled: this.readonly + }); } }); @@ -685,15 +809,15 @@ openerp.base.form.FieldSelection = openerp.base.form.Field.extend({ this.$element.find('select')[0].selectedIndex = 0; } }, + set_value_from_ui: function() { + this.value = this.$element.find('select').val(); + }, update_dom: function() { this._super.apply(this, arguments); this.$element.find('select').attr('disabled', this.readonly); }, - on_ui_change: function() { - this._super.apply(this, arguments); - this.value = this.$element.find('select').val(); - this.invalid = this.required && this.value == ""; - this.view.on_form_changed(this); + validate: function() { + this.invalid = this.required && this.value === ""; } }); @@ -720,7 +844,7 @@ openerp.base.form.FieldOne2ManyDatasSet = openerp.base.DataSetStatic.extend({ this._super(id, data, callback); }, unlink: function() { - this.notification['default']('Unlinking o2m ' + this.ids); + this.notification.notify('Unlinking o2m ' + this.ids); } }); @@ -744,12 +868,14 @@ openerp.base.form.FieldOne2Many = openerp.base.form.Field.extend({ this.viewmanager = new openerp.base.form.FieldOne2ManyViewManager(this.view.session, this.element_id, this.dataset, views); this.viewmanager.start(); }, - set_value_CASSEEEEEEEEEEEEEEEEE: function(value) { + set_value: function(value) { this.value = value; - this.log("o2m.set_value",value); - this.viewmanager.dataset.ids = value; - this.viewmanager.dataset.ids.count = value.length; - this.viewmanager.views.list.controller.do_update(); + if (value != false) { + this.log("o2m.set_value",value); + this.viewmanager.dataset.ids = value; + this.viewmanager.dataset.count = value.length; + this.viewmanager.views.list.controller.do_update(); + } }, get_value: function(value) { return this.operations; @@ -790,6 +916,7 @@ openerp.base.form.widgets = new openerp.base.Registry({ 'email' : 'openerp.base.form.FieldEmail', 'url' : 'openerp.base.form.FieldUrl', 'text' : 'openerp.base.form.FieldText', + 'text_wiki' : 'openerp.base.form.FieldText', 'date' : 'openerp.base.form.FieldDate', 'datetime' : 'openerp.base.form.FieldDatetime', 'selection' : 'openerp.base.form.FieldSelection', @@ -801,7 +928,7 @@ openerp.base.form.widgets = new openerp.base.Registry({ 'boolean' : 'openerp.base.form.FieldBoolean', 'float' : 'openerp.base.form.FieldFloat', 'integer': 'openerp.base.form.FieldFloat', - 'progressbar': 'openerp.base.form.FieldFloat', + 'progressbar': 'openerp.base.form.FieldProgressBar', 'float_time': 'openerp.base.form.FieldFloat' }); diff --git a/addons/base/static/src/js/list.js b/addons/base/static/src/js/list.js index 8d4a1cce360..0b63639cb5d 100644 --- a/addons/base/static/src/js/list.js +++ b/addons/base/static/src/js/list.js @@ -245,8 +245,8 @@ openerp.base.ListView = openerp.base.Controller.extend( * The default implementation is to switch to a new record on the form view */ do_add_record: function () { - this.notification['default']('Add', "New record"); - // this.switch_to_record(null); + this.notification.notify('Add', "New record"); + this.switch_to_record(null); }, /** * Handles deletion of all selected lines diff --git a/addons/base/static/src/js/search.js b/addons/base/static/src/js/search.js index ef10992d75f..21d1408f087 100644 --- a/addons/base/static/src/js/search.js +++ b/addons/base/static/src/js/search.js @@ -215,7 +215,7 @@ openerp.base.SearchView = openerp.base.Controller.extend({ * @param {Array} errors a never-empty array of error objects */ on_invalid: function (errors) { - this.notification['default']("Invalid Search", "triggered from search view"); + this.notification.notify("Invalid Search", "triggered from search view"); }, do_clear: function (e) { if (e && e.preventDefault) { e.preventDefault(); } diff --git a/addons/base/static/src/js/views.js b/addons/base/static/src/js/views.js index 5e6e3d72745..8cbc766df4d 100644 --- a/addons/base/static/src/js/views.js +++ b/addons/base/static/src/js/views.js @@ -229,10 +229,10 @@ openerp.base.Sidebar = openerp.base.BaseWidget.extend({ set_toolbar: function(toolbar) { this.sections = []; var self = this; - _.each(["print", "action", "relate"], function(type) { - if (toolbar[type].length == 0) + _.each([["print", "Reports"], ["action", "Actions"], ["relate", "Links"]], function(type) { + if (toolbar[type[0]].length == 0) return; - var section = {elements:toolbar[type]}; + var section = {elements:toolbar[type[0]], label:type[1]}; self.sections.push(section); }); this.refresh(); @@ -240,6 +240,11 @@ openerp.base.Sidebar = openerp.base.BaseWidget.extend({ refresh: function() { this.$element.html(QWeb.render("ViewManager.sidebar.internal", _.extend({_:_}, this))); var self = this; + this.$element.find(".toggle-sidebar").click(function(e) { + self.$element.toggleClass('open-sidebar closed-sidebar'); + e.stopPropagation(); + e.preventDefault(); + }); this.$element.find("a").click(function(e) { var $this = jQuery(this); var i = $this.attr("data-i"); @@ -269,8 +274,9 @@ openerp.base.ExternalActionManager = openerp.base.Controller.extend({ viewmanager.start(); } else if (action.target == "current") { this.rpc("/base/session/save_session_action", {the_action:action}, function(key) { - var url = window.location.href; - //window.open(); + var url = window.location.protocol + "//" + window.location.host + + window.location.pathname + "?" + jQuery.param({s_action:""+key}); + window.open(url); }); } } |
