[imp] used tags_registry for buttons

bzr revid: nicolas.vanhoren@openerp.com-20120410130444-plgsypxcbaxig4m2
This commit is contained in:
niv-openerp 2012-04-10 15:04:44 +02:00
parent 3feb4136e1
commit b660349e94
1 changed files with 32 additions and 44 deletions

View File

@ -835,42 +835,37 @@ openerp.web.form.FormRenderingEngine = openerp.web.Class.extend({
this.$form.attr('layout', 'auto');
}
this.to_init = [];
this.fields_to_init = [];
this.tags_to_init = [];
this.labels = {};
this.process(this.$form);
this.$form.appendTo(this.$target);
// OpenERP views spec :
// - @width is obsolete ?
_.each(this.to_init, function($elem) {
var tag_name = $elem[0].tagName.toLowerCase();
if (tag_name === "field") {
var name = $elem.attr("name");
var key = $elem.attr('widget') || self.fvg.fields[name].type;
if (!self.fields_registry.contains(key)) {
throw new Error("Widget type '"+ key + "' is not implemented");
}
var obj = self.fields_registry.get_object(key);
var w = new (obj)(self.view, openerp.web.xml_to_json($elem[0]));
if (tag_name === "field") {
var $label = self.labels[$elem.attr("name")];
if ($label) {
w.set_input_id($label.attr("for"));
}
}
self.alter_field(w);
w.replace($elem);
} else {
var key = tag_name;
if (!self.fields_registry.contains(key)) {
return;
}
var obj = self.fields_registry.get_object(key);
var w = new (obj)(self.view, openerp.web.xml_to_json($elem[0]));
w.replace($elem);
_.each(this.fields_to_init, function($elem) {
var name = $elem.attr("name");
if (!self.fvg.fields[name]) {
throw new Error("Field '" + name + "' specified in view could not be found.");
}
var key = $elem.attr('widget') || self.fvg.fields[name].type;
if (!self.fields_registry.contains(key)) {
throw new Error("Widget type '"+ key + "' is not implemented");
}
var obj = self.fields_registry.get_object(key);
var w = new (obj)(self.view, openerp.web.xml_to_json($elem[0]));
var $label = self.labels[$elem.attr("name")];
if ($label) {
w.set_input_id($label.attr("for"));
}
self.alter_field(w);
w.replace($elem);
});
_.each(this.tags_to_init, function($elem) {
var tag_name = $elem[0].tagName.toLowerCase();
var obj = self.tags_registry.get_object(tag_name);
var w = new (obj)(self.view, openerp.web.xml_to_json($elem[0]));
w.replace($elem);
})
},
render_element: function(template, layout/* dictionaries */) {
var dicts = [].slice.call(arguments).slice(2);
@ -901,10 +896,11 @@ openerp.web.form.FormRenderingEngine = openerp.web.Class.extend({
layout = $tag.attr('layout') || layout || 'auto';
$tag.removeAttr('layout');
var tagname = $tag[0].nodeName.toLowerCase();
var fn = self['process_' + tagname];
if (this.tags_registry && this.tags_registry.contains(tagname)) {
fn = this.tags_registry.get_object(tagname);
if (this.tags_registry.contains(tagname)) {
this.tags_to_init.push($tag);
return $tag;
}
var fn = self['process_' + tagname];
if (fn) {
var args = [].slice.call(arguments);
args[0] = $tag;
@ -968,12 +964,7 @@ openerp.web.form.FormRenderingEngine = openerp.web.Class.extend({
var $label = this.preprocess_field($field);
if ($label)
this.process($label, layout);
if (!this.fvg.fields[$field.attr("name")]) {
throw new Error("Field '" + name + "' specified in view could not be found.");
}
this.to_init.push($field);
this.fields_to_init.push($field);
return $field;
},
process_group: function($group, layout) {
@ -1122,10 +1113,6 @@ openerp.web.form.FormRenderingEngine = openerp.web.Class.extend({
}
return $new_label;
},
process_button: function($button, layout) {
this.to_init.push($button);
return $button;
},
handle_common_properties: function($new_element, $node) {
var str_modifiers = $node.attr("modifiers") || "{}"
var modifiers = JSON.parse(str_modifiers);
@ -3802,7 +3789,6 @@ openerp.web.form.FieldStatus = openerp.web.form.AbstractField.extend({
* Registry of form widgets, called by :js:`openerp.web.FormView`
*/
openerp.web.form.widgets = new openerp.web.Registry({
'button' : 'openerp.web.form.WidgetButton',
'char' : 'openerp.web.form.FieldChar',
'id' : 'openerp.web.form.FieldID',
'email' : 'openerp.web.form.FieldEmail',
@ -3826,7 +3812,9 @@ openerp.web.form.widgets = new openerp.web.Registry({
'statusbar': 'openerp.web.form.FieldStatus'
});
openerp.web.form.tags = new openerp.web.Registry({});
openerp.web.form.tags = new openerp.web.Registry({
'button' : 'openerp.web.form.WidgetButton',
});
};