Merge lp:~openerp-dev/openobject-client-web/listview_invisible into lp:openobject-client-web/trunk

Proposed by Sananaz (Open ERP)
Status: Merged
Merged at revision: 4107
Proposed branch: lp:~openerp-dev/openobject-client-web/listview_invisible
Merge into: lp:openobject-client-web/trunk
Diff against target: 243 lines (+51/-28)
8 files modified
addons/openerp/static/javascript/form_state.js (+21/-14)
addons/openerp/widgets/form/_form.py (+7/-3)
addons/openerp/widgets/form/templates/hidden.mako (+1/-1)
addons/openerp/widgets/listgrid.py (+13/-5)
addons/openerp/widgets/templates/listgrid/boolean.mako (+1/-1)
addons/openerp/widgets/templates/listgrid/button.mako (+3/-3)
addons/openerp/widgets/templates/listgrid/char.mako (+1/-1)
addons/openerp/widgets/templates/listgrid/listgrid.mako (+4/-0)
To merge this branch: bzr merge lp:~openerp-dev/openobject-client-web/listview_invisible
Reviewer Review Type Date Requested Status
OpenERP R&D Web Team Pending
Review via email: mp+43494@code.launchpad.net

Description of the change

- Support invisible for List view.
- Example: <field name="journal_id" invisible="1">
- It fixed the Bug #681688.

To post a comment you must log in.
4084. By Sananaz (Open ERP)

[FIX] Call get_sortable_text directly from the fields, need to remove conflicts from listgroup.mako.

4085. By Sananaz (Open ERP)

[FIX] Improve update_param.

4086. By Sananaz (Open ERP)

[FIX] Fixed typo 'template', update params for attrs.

4087. By Sananaz (Open ERP)

[IMP] Implement attrs for listview.

4088. By Sananaz (Open ERP)

[FIX] minor changes.

Revision history for this message
Sananaz (Open ERP) (sma-tiny) wrote :

Hello XMO,

Attrs `invisible` for listview will work now.
I request you to please check it and merge with trunk branch.

Thank you.

Revision history for this message
Xavier (Open ERP) (xmo-deactivatedaccount) wrote :

Seems to be working fine, I want to check a little something re. 628037 tomorrow morning but I should be able to merge it before morning ends (ours anyway).

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1=== modified file 'addons/openerp/static/javascript/form_state.js'
2--- addons/openerp/static/javascript/form_state.js 2010-12-13 06:36:34 +0000
3+++ addons/openerp/static/javascript/form_state.js 2010-12-14 11:26:30 +0000
4@@ -93,7 +93,7 @@
5 }
6
7 function form_hookAttrChange() {
8- var $items = jQuery('td[attrs], div.notebook-page[attrs]');
9+ var $items = jQuery('[attrs]');
10 var fields = {};
11
12 $items.each(function(){
13@@ -120,13 +120,13 @@
14 var expr_fields = {}; // check if field appears more then once in the expr
15
16 if (attrs[attr] == ''){
17- return form_onAttrChange(container, widget, attr, attrs[attr]);
18+ return form_onAttrChange(container, widget, attr, attrs[attr], $this);
19 }
20-
21+
22 forEach(attrs[attr], function(n){
23
24 if (typeof(n) == "number") { // {'invisible': [1]}
25- return form_onAttrChange(container, widget, attr, n);
26+ return form_onAttrChange(container, widget, attr, n, $this);
27 }
28
29 var name = prefix + n[0];
30@@ -136,7 +136,7 @@
31 expr_fields[field.id] = 1;
32 // events disconnected during hook_onStateChange,
33 // don't redisconnect or may break onStateChange
34- var $field = jQuery(field).bind('onAttrChange', partial(form_onAttrChange, container, widget, attr, attrs[attr]));
35+ var $field = jQuery(field).bind('onAttrChange', partial(form_onAttrChange, container, widget, attr, attrs[attr], $this));
36 $field.change(function () {
37 jQuery(this).trigger('onAttrChange');
38 });
39@@ -150,12 +150,12 @@
40 }
41 }
42
43-function form_onAttrChange(container, widgetName, attr, expr) {
44+function form_onAttrChange(container, widgetName, attr, expr, elem) {
45
46 var prefix = widgetName.slice(0, widgetName.lastIndexOf('/') + 1);
47 var widget = openobject.dom.get(widgetName);
48
49- var result = form_evalExpr(prefix, expr);
50+ var result = form_evalExpr(prefix, expr, elem);
51
52 switch (attr) {
53 case 'readonly': form_setReadonly(container, widget, result);
54@@ -168,26 +168,33 @@
55 }
56 }
57
58-function form_evalExpr(prefix, expr) {
59+function form_evalExpr(prefix, expr, ref_elem) {
60
61 var stack = [];
62 for (var i = 0; i < expr.length; i++) {
63
64 var ex = expr[i];
65- var elem = openobject.dom.get(prefix + ex[0]);
66-
67+ var elem = null;
68+ if (ref_elem.parents('table.grid').length) {
69+ var parent = ref_elem.parents('tr.grid-row');
70+ var elem = parent.find(idSelector(prefix + ex[0]));
71+ }
72+ if (!elem || !elem.length) {
73+ var elem = jQuery(idSelector(prefix + ex[0]));
74+ }
75+
76 if (ex.length==1) {
77 stack.push(ex[0]);
78 continue;
79 }
80
81- if (!elem)
82+ if (!elem)
83 continue;
84-
85+
86 var op = ex[1];
87 var val = ex[2];
88- var elem_value = elem.value || getNodeAttribute(elem, 'value') || elem.innerHTML;
89-
90+ var elem_value = elem.attr('value') || elem.text();
91+
92 switch (op.toLowerCase()) {
93 case '=':
94 case '==':
95
96=== modified file 'addons/openerp/widgets/form/_form.py'
97--- addons/openerp/widgets/form/_form.py 2010-12-14 06:01:56 +0000
98+++ addons/openerp/widgets/form/_form.py 2010-12-14 11:26:30 +0000
99@@ -616,15 +616,19 @@
100 self.widget = get_widget(kind)(**attrs)
101 self.validator = self.widget.validator
102 self.relation = attrs.get('relation') or None
103- if self.readonly:
104- self.editable = self.readonly
105+ self.editable = self.readonly
106 if 'field_id' not in attrs:
107 self.field_id = self.name
108
109 def set_value(self, value):
110 self.widget.set_value(value)
111 self.default = self.widget.default
112-
113+
114+ def get_sortable_text(self):
115+ """ If returns anything other then None, the return value will be
116+ used to sort the listgrid. Useful for localized data.
117+ """
118+ return None
119
120 class Button(TinyInputWidget):
121
122
123=== modified file 'addons/openerp/widgets/form/templates/hidden.mako'
124--- addons/openerp/widgets/form/templates/hidden.mako 2010-10-27 09:36:11 +0000
125+++ addons/openerp/widgets/form/templates/hidden.mako 2010-12-14 11:26:30 +0000
126@@ -1,2 +1,2 @@
127-<input type="hidden" name="${name}" class="${css_class}" readonly="${editable}"
128+<input type="hidden" name="${name}" class="${css_class}" value="${value}"
129 ${py.attrs(attrs, id=field_id, kind=kind, relation=relation, value=value)}/>
130
131=== modified file 'addons/openerp/widgets/listgrid.py'
132--- addons/openerp/widgets/listgrid.py 2010-12-09 13:54:43 +0000
133+++ addons/openerp/widgets/listgrid.py 2010-12-14 11:26:30 +0000
134@@ -203,7 +203,8 @@
135 self.headers, self.hiddens, self.data, self.field_total, self.buttons = self.parse(root, fields, data)
136
137 for k, v in self.field_total.items():
138- self.field_total[k][1] = self.do_sum(self.data, k)
139+ if(len([test[0] for test in self.hiddens if test[0] == k])) <= 0:
140+ self.field_total[k][1] = self.do_sum(self.data, k)
141
142 self.columns = len(self.headers)
143
144@@ -361,7 +362,6 @@
145
146 if invisible:
147 hiddens += [(name, fields[name])]
148-# continue
149
150 if 'sum' in attrs:
151 field_total[name] = [attrs['sum'], 0.0]
152@@ -369,7 +369,11 @@
153 for i, row in enumerate(data):
154
155 row_value = values[i]
156- cell = CELLTYPES[kind](value=row_value.get(name, False), **fields[name])
157+ if invisible:
158+ cell = form.Hidden(**fields[name])
159+ cell.set_value(row_value.get(name, False))
160+ else:
161+ cell = CELLTYPES[kind](value=row_value.get(name, False), **fields[name])
162
163 for color, expr in self.colors.items():
164 try:
165@@ -540,7 +544,7 @@
166 return ustr(self.value or '')
167
168 class Boolean(Char):
169- templates = "/openerp/widgets/templates/listgrid/boolean.mako"
170+ template = "/openerp/widgets/templates/listgrid/boolean.mako"
171
172 params = ['val', 'kind']
173
174@@ -567,7 +571,7 @@
175
176 self.btype = attrs.get('special', attrs.get('type', 'workflow'))
177 self.icon = attrs.get('icon')
178-
179+ self.attrs = attrs.get('attrs', {})
180 if self.icon:
181 self.icon = icons.get_icon(self.icon)
182
183@@ -594,6 +598,10 @@
184
185 return dict(id=id, visible=visible)
186
187+ def update_params(self, params):
188+ super(Button, self).update_params(params)
189+ params['attrs']['attrs']=self.attrs
190+
191
192 CELLTYPES = {
193 'char':Char,
194
195=== modified file 'addons/openerp/widgets/templates/listgrid/boolean.mako'
196--- addons/openerp/widgets/templates/listgrid/boolean.mako 2010-12-02 13:30:21 +0000
197+++ addons/openerp/widgets/templates/listgrid/boolean.mako 2010-12-14 11:26:30 +0000
198@@ -1,1 +1,1 @@
199-<input type="checkbox" kind="${kind}" class="checkbox" readonly="readonly" disabled="disabled" ${py.checker(val)} value="${val}">
200+<input type="checkbox" name="${name}" id="${name}" kind="${kind}" class="checkbox" readonly="readonly" disabled="disabled" ${py.checker(val)} value="${val}">
201
202=== modified file 'addons/openerp/widgets/templates/listgrid/button.mako'
203--- addons/openerp/widgets/templates/listgrid/button.mako 2010-12-02 12:14:31 +0000
204+++ addons/openerp/widgets/templates/listgrid/button.mako 2010-12-14 11:26:30 +0000
205@@ -1,13 +1,13 @@
206 % if visible:
207 % if icon:
208- <img height="16" width="16" class="listImage" src="${icon}" title="${help}" context="${ctx}" ${py.attrs(attrs)}
209+ <img height="16" width="16" name="${name}" id="${name}" class="listImage" src="${icon}" title="${help}" context="${ctx}" ${py.attrs(attrs)}
210 onclick="new ListView('${parent_grid}').onButtonClick('${name}', '${btype}', ${id}, '${confirm}', getNodeAttribute(this, 'context'))"/>
211 % else:
212- <a class="button-b" href="javascript: void(0)" ${py.attrs(attrs, context=ctx)} title="${help}"
213+ <a class="button-b" name="${name}" id="${name}" href="javascript: void(0)" ${py.attrs(attrs, context=ctx)} title="${help}"
214 onclick="new ListView('${parent_grid}').onButtonClick('${name}', '${btype}', ${id}, '${confirm}', getNodeAttribute(this, 'context'))">
215 ${string}
216 </a>
217 % endif
218 % elif not icon:
219- <span>&nbsp;</span>
220+ <span><img style="display:none" name="${name}" id="${name}" height="16" width="16" class="listImage" src="${icon}" title="${help}" context="${ctx}" ${py.attrs(attrs)} onclick="new ListView('${parent_grid}').onButtonClick('${name}', '${btype}', ${id}, '${confirm}', getNodeAttribute(this, 'context'))"/></span>
221 % endif
222
223=== modified file 'addons/openerp/widgets/templates/listgrid/char.mako'
224--- addons/openerp/widgets/templates/listgrid/char.mako 2010-12-02 12:14:31 +0000
225+++ addons/openerp/widgets/templates/listgrid/char.mako 2010-12-14 11:26:30 +0000
226@@ -1,1 +1,1 @@
227-<span>${text}</span>
228+<span name="${name}" id="${name}" value="${value}">${text}</span>
229
230=== modified file 'addons/openerp/widgets/templates/listgrid/listgrid.mako'
231--- addons/openerp/widgets/templates/listgrid/listgrid.mako 2010-12-09 12:13:54 +0000
232+++ addons/openerp/widgets/templates/listgrid/listgrid.mako 2010-12-14 11:26:30 +0000
233@@ -67,6 +67,10 @@
234 % endif
235 </td>
236 % endif
237+ % for field, field_attrs in hiddens:
238+ ${data[field].display()}
239+ % endfor
240+
241 % if editable:
242 <td class="grid-cell selector">
243 % if not editors: