[imp] all new invisible handling
bzr revid: nicolas.vanhoren@openerp.com-20120326162934-zvhu2n2j13qdz7qe
This commit is contained in:
parent
d53cfb001b
commit
d63fc1c119
|
@ -652,7 +652,7 @@ openerp.web.FormView = openerp.web.View.extend( /** @lends openerp.web.FormView#
|
||||||
// ignore fields which are empty, invisible, readonly, o2m
|
// ignore fields which are empty, invisible, readonly, o2m
|
||||||
// or m2m
|
// or m2m
|
||||||
if (!value
|
if (!value
|
||||||
|| field.invisible
|
|| field.get('invisible')
|
||||||
|| field.get("readonly")
|
|| field.get("readonly")
|
||||||
|| field.field.type === 'one2many'
|
|| field.field.type === 'one2many'
|
||||||
|| field.field.type === 'many2many') {
|
|| field.field.type === 'many2many') {
|
||||||
|
@ -806,6 +806,8 @@ openerp.web.FormRenderingEngine = openerp.web.Class.extend({
|
||||||
$tag.children().each(function() {
|
$tag.children().each(function() {
|
||||||
self.process($(this));
|
self.process($(this));
|
||||||
});
|
});
|
||||||
|
self.handle_invisible($tag, $tag.attr("invisible"));
|
||||||
|
$tag.removeAttr("invisible");
|
||||||
return $tag;
|
return $tag;
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
@ -826,7 +828,8 @@ openerp.web.FormRenderingEngine = openerp.web.Class.extend({
|
||||||
field_orm = this.fvg.fields[name],
|
field_orm = this.fvg.fields[name],
|
||||||
field_string = $field.attr('string') || field_orm.string || '',
|
field_string = $field.attr('string') || field_orm.string || '',
|
||||||
field_help = $field.attr('help') || field_orm.help || '',
|
field_help = $field.attr('help') || field_orm.help || '',
|
||||||
field_colspan = parseInt($field.attr('colspan'), 10);
|
field_colspan = parseInt($field.attr('colspan'), 10),
|
||||||
|
field_modifiers = JSON.parse($field.attr('modifiers') || '{}');
|
||||||
if ($field.attr('nolabel') !== '1') {
|
if ($field.attr('nolabel') !== '1') {
|
||||||
$field.attr('nolabel', '1');
|
$field.attr('nolabel', '1');
|
||||||
var $label = this.$form.find('label[for="' + name + '"]');
|
var $label = this.$form.find('label[for="' + name + '"]');
|
||||||
|
@ -838,6 +841,9 @@ openerp.web.FormRenderingEngine = openerp.web.Class.extend({
|
||||||
'string' : field_string,
|
'string' : field_string,
|
||||||
'help' : field_help
|
'help' : field_help
|
||||||
});
|
});
|
||||||
|
if (field_modifiers.invisible !== undefined) {
|
||||||
|
$label.attr("invisible", JSON.stringify(field_modifiers.invisible));
|
||||||
|
}
|
||||||
$label.insertBefore($field);
|
$label.insertBefore($field);
|
||||||
if (field_colspan > 1) {
|
if (field_colspan > 1) {
|
||||||
$field.attr('colspan', field_colspan - 1);
|
$field.attr('colspan', field_colspan - 1);
|
||||||
|
@ -948,6 +954,7 @@ openerp.web.FormRenderingEngine = openerp.web.Class.extend({
|
||||||
_.each(children, function(el) {
|
_.each(children, function(el) {
|
||||||
self.process($(el));
|
self.process($(el));
|
||||||
});
|
});
|
||||||
|
this.handle_invisible($new_group, $group.attr("invisible"));
|
||||||
return $new_group;
|
return $new_group;
|
||||||
},
|
},
|
||||||
process_notebook: function($notebook) {
|
process_notebook: function($notebook) {
|
||||||
|
@ -962,6 +969,7 @@ openerp.web.FormRenderingEngine = openerp.web.Class.extend({
|
||||||
$dst = self.legacy_mode ? $new_page.find('group:first') : $new_page;
|
$dst = self.legacy_mode ? $new_page.find('group:first') : $new_page;
|
||||||
$page.children().appendTo($dst);
|
$page.children().appendTo($dst);
|
||||||
$page.before($new_page).remove();
|
$page.before($new_page).remove();
|
||||||
|
self.handle_invisible($new_page, $page.attr("invisible"));
|
||||||
});
|
});
|
||||||
var $new_notebook = $(QWeb.render('FormRenderingNotebook', { pages : pages }));
|
var $new_notebook = $(QWeb.render('FormRenderingNotebook', { pages : pages }));
|
||||||
$notebook.children().appendTo($new_notebook);
|
$notebook.children().appendTo($new_notebook);
|
||||||
|
@ -970,11 +978,13 @@ openerp.web.FormRenderingEngine = openerp.web.Class.extend({
|
||||||
self.process($(this));
|
self.process($(this));
|
||||||
});
|
});
|
||||||
$new_notebook.tabs();
|
$new_notebook.tabs();
|
||||||
|
this.handle_invisible($new_notebook, $notebook.attr("invisible"));
|
||||||
return $new_notebook;
|
return $new_notebook;
|
||||||
},
|
},
|
||||||
process_separator: function($separator) {
|
process_separator: function($separator) {
|
||||||
var $new_separator = $(QWeb.render('FormRenderingSeparator', $separator.getAttributes()));
|
var $new_separator = $(QWeb.render('FormRenderingSeparator', $separator.getAttributes()));
|
||||||
$separator.before($new_separator).remove();
|
$separator.before($new_separator).remove();
|
||||||
|
this.handle_invisible($new_separator, $separator.attr("invisible"));
|
||||||
return $new_separator;
|
return $new_separator;
|
||||||
},
|
},
|
||||||
process_label: function($label) {
|
process_label: function($label) {
|
||||||
|
@ -990,12 +1000,19 @@ openerp.web.FormRenderingEngine = openerp.web.Class.extend({
|
||||||
dict.align = align;
|
dict.align = align;
|
||||||
var $new_label = $(QWeb.render('FormRenderingLabel', dict));
|
var $new_label = $(QWeb.render('FormRenderingLabel', dict));
|
||||||
$label.before($new_label).remove();
|
$label.before($new_label).remove();
|
||||||
|
this.handle_invisible($new_label, $label.attr("invisible"));
|
||||||
return $new_label;
|
return $new_label;
|
||||||
},
|
},
|
||||||
process_button: function($button) {
|
process_button: function($button) {
|
||||||
this.to_init.push($button);
|
this.to_init.push($button);
|
||||||
return $button;
|
return $button;
|
||||||
}
|
},
|
||||||
|
handle_invisible: function($element, str_domain) {
|
||||||
|
if (str_domain === undefined)
|
||||||
|
return;
|
||||||
|
var parsed = JSON.parse(str_domain);
|
||||||
|
new openerp.web.form.InvisibilityChanger(this.view, this.view, parsed, $element);
|
||||||
|
},
|
||||||
});
|
});
|
||||||
|
|
||||||
openerp.web.FormDialog = openerp.web.Dialog.extend({
|
openerp.web.FormDialog = openerp.web.Dialog.extend({
|
||||||
|
@ -1155,7 +1172,47 @@ openerp.web.form.compute_domain = function(expr, fields) {
|
||||||
return _.all(stack, _.identity);
|
return _.all(stack, _.identity);
|
||||||
};
|
};
|
||||||
|
|
||||||
openerp.web.form.Widget = openerp.web.Widget.extend(/** @lends openerp.web.form.Widget# */{
|
/**
|
||||||
|
* Must be applied over an class already possessing the GetterSetterMixin.
|
||||||
|
*
|
||||||
|
* Apply the result of the "invisible" domain to this.$element.
|
||||||
|
*/
|
||||||
|
openerp.web.form.InvisibilityChangerMixin = {
|
||||||
|
init: function(field_manager, invisible_domain) {
|
||||||
|
this._ic_field_manager = field_manager
|
||||||
|
this._ic_invisible_modifier = invisible_domain;
|
||||||
|
this._ic_field_manager.on("view_content_has_changed", this, function() {
|
||||||
|
var result = this._ic_invisible_modifier === undefined ? false :
|
||||||
|
openerp.web.form.compute_domain(this._ic_invisible_modifier, this._ic_field_manager.fields);
|
||||||
|
this.set({"invisible": result});
|
||||||
|
});
|
||||||
|
this.set({invisible: this._ic_invisible_modifier === true});
|
||||||
|
},
|
||||||
|
start: function() {
|
||||||
|
var check_visibility = function() {
|
||||||
|
if (this.get("invisible")) {
|
||||||
|
this.$element.hide();
|
||||||
|
} else {
|
||||||
|
this.$element.show();
|
||||||
|
}
|
||||||
|
};
|
||||||
|
this.on("change:invisible", this, check_visibility);
|
||||||
|
_.bind(check_visibility, this)();
|
||||||
|
},
|
||||||
|
};
|
||||||
|
|
||||||
|
openerp.web.form.InvisibilityChanger = nova.Class.extend(_.extend({}, nova.GetterSetterMixin, openerp.web.form.InvisibilityChangerMixin, {
|
||||||
|
init: function(parent, field_manager, invisible_domain, $element) {
|
||||||
|
this.setParent(parent);
|
||||||
|
nova.GetterSetterMixin.init.call(this);
|
||||||
|
openerp.web.form.InvisibilityChangerMixin.init.call(this, field_manager, invisible_domain);
|
||||||
|
this.$element = $element;
|
||||||
|
this.start();
|
||||||
|
},
|
||||||
|
}));
|
||||||
|
|
||||||
|
openerp.web.form.Widget = openerp.web.Widget.extend(/** @lends openerp.web.form.Widget# */
|
||||||
|
_.extend({}, openerp.web.form.InvisibilityChangerMixin, {
|
||||||
/**
|
/**
|
||||||
* @constructs openerp.web.form.Widget
|
* @constructs openerp.web.form.Widget
|
||||||
* @extends openerp.web.Widget
|
* @extends openerp.web.Widget
|
||||||
|
@ -1164,32 +1221,35 @@ openerp.web.form.Widget = openerp.web.Widget.extend(/** @lends openerp.web.form.
|
||||||
* @param node
|
* @param node
|
||||||
*/
|
*/
|
||||||
init: function(view, node) {
|
init: function(view, node) {
|
||||||
|
this._super(view);
|
||||||
this.view = view;
|
this.view = view;
|
||||||
this.node = node;
|
this.node = node;
|
||||||
this.modifiers = JSON.parse(this.node.attrs.modifiers || '{}');
|
this.modifiers = JSON.parse(this.node.attrs.modifiers || '{}');
|
||||||
this.always_invisible = (this.modifiers.invisible && this.modifiers.invisible === true);
|
openerp.web.form.InvisibilityChangerMixin.init.call(this, view, this.modifiers.invisible);
|
||||||
|
|
||||||
this._super(view);
|
|
||||||
|
|
||||||
this.invisible = this.modifiers['invisible'] === true;
|
|
||||||
this.view.on("view_content_has_changed", this, this.process_modifiers);
|
this.view.on("view_content_has_changed", this, this.process_modifiers);
|
||||||
},
|
},
|
||||||
|
start: function() {
|
||||||
|
this._super();
|
||||||
|
openerp.web.form.InvisibilityChangerMixin.start.call(this);
|
||||||
|
},
|
||||||
destroy: function() {
|
destroy: function() {
|
||||||
this._super.apply(this, arguments);
|
|
||||||
$.fn.tipsy.clear();
|
$.fn.tipsy.clear();
|
||||||
|
this._super.apply(this, arguments);
|
||||||
},
|
},
|
||||||
process_modifiers: function() {
|
process_modifiers: function() {
|
||||||
var compute_domain = openerp.web.form.compute_domain;
|
var compute_domain = openerp.web.form.compute_domain;
|
||||||
var to_set = {};
|
var to_set = {};
|
||||||
for (var a in this.modifiers) {
|
for (var a in this.modifiers) {
|
||||||
var val = compute_domain(this.modifiers[a], this.view.fields);
|
if (!_.include(["invisible"], a)) {
|
||||||
this[a] = val;
|
var val = compute_domain(this.modifiers[a], this.view.fields);
|
||||||
to_set[a] = val;
|
this[a] = val;
|
||||||
|
to_set[a] = val;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
this.set(to_set);
|
this.set(to_set);
|
||||||
},
|
},
|
||||||
update_dom: function() {
|
update_dom: function() {
|
||||||
this.$element.toggle(!this.invisible);
|
|
||||||
},
|
},
|
||||||
do_attach_tooltip: function(widget, trigger, options) {
|
do_attach_tooltip: function(widget, trigger, options) {
|
||||||
widget = widget || this;
|
widget = widget || this;
|
||||||
|
@ -1261,7 +1321,7 @@ openerp.web.form.Widget = openerp.web.Widget.extend(/** @lends openerp.web.form.
|
||||||
}
|
}
|
||||||
return final_domain;
|
return final_domain;
|
||||||
}
|
}
|
||||||
});
|
}));
|
||||||
|
|
||||||
openerp.web.form.WidgetButton = openerp.web.form.Widget.extend({
|
openerp.web.form.WidgetButton = openerp.web.form.Widget.extend({
|
||||||
template: 'WidgetButton',
|
template: 'WidgetButton',
|
||||||
|
|
Loading…
Reference in New Issue