Merge lp:~openerp-dev/openerp-web/trunk-apiculture into lp:openerp-web

Proposed by Antony Lesuisse (OpenERP)
Status: Needs review
Proposed branch: lp:~openerp-dev/openerp-web/trunk-apiculture
Merge into: lp:openerp-web
Diff against target: 87 lines (+49/-11)
1 file modified
addons/web/static/src/js/view_form.js (+49/-11)
To merge this branch: bzr merge lp:~openerp-dev/openerp-web/trunk-apiculture
Reviewer Review Type Date Requested Status
OpenERP R&D Web Team Pending
Review via email: mp+220496@code.launchpad.net
To post a comment you must log in.

Unmerged revisions

3961. By Raphael Collet (OpenERP)

[MERGE] from trunk

3960. By Raphael Collet (OpenERP)

[MERGE] from trunk

3959. By Raphael Collet (OpenERP)

[MERGE] from trunk

3958. By Raphael Collet (OpenERP)

[MERGE] from trunk

3957. By Raphael Collet (OpenERP)

[IMP] web/view_form: accept on_change="0" and do nothing in that case

3956. By Raphael Collet (OpenERP)

[MERGE] from trunk

3955. By Raphael Collet (OpenERP)

[MERGE] from trunk

3954. By Raphael Collet (OpenERP)

[MERGE] from trunk

3953. By Raphael Collet (OpenERP)

[FIX] web: web sending on_change values, do not leak virtual ids

3952. By Raphael Collet (OpenERP)

[IMP] web/form_view/on_change: add parent field in onchange values

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1=== modified file 'addons/web/static/src/js/view_form.js'
2--- addons/web/static/src/js/view_form.js 2014-05-08 15:34:18 +0000
3+++ addons/web/static/src/js/view_form.js 2014-05-21 16:09:53 +0000
4@@ -438,12 +438,50 @@
5 $(".oe_form_pager_state", this.$pager).html(_.str.sprintf(_t("%d / %d"), this.dataset.index + 1, this.dataset.ids.length));
6 }
7 },
8+ parse_on_change_v8: function (onchange, widget) {
9+ // onchange V8: call onchange(field_values, field_name, tocheck)
10+ var field_values = this.get_fields_values();
11+ if (field_values.id.toString().match(instance.web.BufferedDataSet.virtual_id_regex)) {
12+ delete field_values.id;
13+ }
14+ if (this.dataset.parent_view) {
15+ // this belongs to a parent view: add parent field if possible
16+ var parent_view = this.dataset.parent_view;
17+ var child_name = this.dataset.child_name;
18+ var parent_name = parent_view.get_field_desc(child_name).relation_field;
19+ if (parent_name) {
20+ // consider all fields except the inverse of the parent field
21+ var parent_values = parent_view.get_fields_values();
22+ delete parent_values[child_name];
23+ field_values[parent_name] = parent_values;
24+ }
25+ }
26+ // add all known subfields in views into tocheck
27+ var tocheck = [];
28+ _.each(this.fields, function(field, name) {
29+ _.each(field.field.views, function(view) {
30+ _.each(view.fields, function(subfield, subname) {
31+ tocheck.push(name + "." + subname);
32+ });
33+ });
34+ });
35+ return {
36+ method: "onchange",
37+ args: [field_values, widget.name, tocheck]
38+ };
39+ },
40 parse_on_change: function (on_change, widget) {
41 var self = this;
42 var onchange = _.str.trim(on_change);
43- var call = onchange.match(/^\s?(.*?)\((.*?)\)\s?$/);
44+ var call = onchange.match(/^(\w+)\((.*?)\)$/);
45 if (!call) {
46- throw new Error(_.str.sprintf( _t("Wrong on change format: %s"), onchange ));
47+ if (onchange === "1" || onchange === "true") {
48+ return this.parse_on_change_v8(onchange, widget);
49+ }
50+ if (onchange === "0" || onchange === "false") {
51+ return {};
52+ }
53+ throw new Error(_.str.sprintf(_t("Wrong on change format: %s"), onchange));
54 }
55
56 var method = call[1];
57@@ -515,21 +553,21 @@
58 var widget = on_change_obj.widget;
59 var processed = on_change_obj.processed;
60 try {
61- var def;
62+ var def = $.when({});
63 processed = processed || [];
64 processed.push(widget.name);
65 var on_change = widget.node.attrs.on_change;
66 if (on_change) {
67 var change_spec = self.parse_on_change(on_change, widget);
68- var ids = [];
69- if (self.datarecord.id && !instance.web.BufferedDataSet.virtual_id_regex.test(self.datarecord.id)) {
70- // In case of a o2m virtual id, we should pass an empty ids list
71- ids.push(self.datarecord.id);
72+ if (change_spec.method) {
73+ var ids = [];
74+ if (self.datarecord.id && !instance.web.BufferedDataSet.virtual_id_regex.test(self.datarecord.id)) {
75+ // In case of a o2m virtual id, we should pass an empty ids list
76+ ids.push(self.datarecord.id);
77+ }
78+ def = self.alive(new instance.web.Model(self.dataset.model).call(
79+ change_spec.method, [ids].concat(change_spec.args)));
80 }
81- def = self.alive(new instance.web.Model(self.dataset.model).call(
82- change_spec.method, [ids].concat(change_spec.args)));
83- } else {
84- def = $.when({});
85 }
86 return def.then(function(response) {
87 if (widget.field['change_default']) {