summaryrefslogtreecommitdiff
path: root/addons/base/static/src/js
diff options
context:
space:
mode:
authorXavier Morel <xmo@openerp.com>2011-04-12 15:21:20 +0200
committerXavier Morel <xmo@openerp.com>2011-04-12 15:21:20 +0200
commitd7da740264e35dd67a7a891770b47d2bc38578ef (patch)
tree3c381edfd569b045e959ccd71dbe21dfef141421 /addons/base/static/src/js
parentb840e25c1d901f0d83c41eef38ada73e8d61bd7b (diff)
parentb70b02bc5138d7f5f4b70433cb47e28c39f1f953 (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.js29
-rw-r--r--addons/base/static/src/js/data.js9
-rw-r--r--addons/base/static/src/js/form.js313
-rw-r--r--addons/base/static/src/js/list.js4
-rw-r--r--addons/base/static/src/js/search.js2
-rw-r--r--addons/base/static/src/js/views.js16
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);
});
}
}