diff --git a/addons/web/static/src/js/view_form.js b/addons/web/static/src/js/view_form.js index 32660fc5c52..a7684712d1f 100644 --- a/addons/web/static/src/js/view_form.js +++ b/addons/web/static/src/js/view_form.js @@ -728,27 +728,18 @@ openerp.web.FormView = openerp.web.View.extend( /** @lends openerp.web.FormView# openerp.web.FormRenderingEngine = openerp.web.Widget.extend({ init: function(parent, fvg, registry) { - var self = this; this._super.apply(this, arguments); + this.registry = registry; this.fvg = fvg; this.view = parent; this.fields_prefix = this.view.dataset ? this.view.dataset.model : ''; // TODO: I know this will save the world and all the kitten for a moment, // but one day, we will have to get rid of xml2json - var xml = openerp.web.json_node_to_xml(fvg.arch), - $form = this.$form = $(xml); + var xml = openerp.web.json_node_to_xml(fvg.arch); + this.$form = $(xml); - // TODO: extract embeded views before preprocessing - _.each(['field', 'group', 'notebook', 'separator', 'label'], function(tag) { - var fn = self['process_' + tag]; - if (registry && registry.contains(tag)) { - fn = registry.get_object(tag); - } - $form.find(tag).each(function() { - fn.call(self, $(this), $form); - }); - }); + this.process_any(this.$form); }, start: function() { var self = this; @@ -768,7 +759,34 @@ openerp.web.FormRenderingEngine = openerp.web.Widget.extend({ } }); }, - process_field: function($field, $form) { + process_any: function($tag) { + var self = this; + // TODO: extract embeded views before preprocessing + var tagname = $tag[0].nodeName.toLowerCase(); + var fn = self['process_' + tagname]; + if (this.registry && this.registry.contains(tagname)) { + fn = this.registry.get_object(tagname); + } + if (fn) + fn.call(self, $tag); + else { // generic tag handling, just process children + _.each($tag.children(), function(el) { + self.process_any($(el)); + }); + } + /* + _.each(['field', 'group', 'notebook', 'separator', 'label'], function(tag) { + var fn = self['process_' + tag]; + if (this.registry && this.registry.contains(tag)) { + fn = this.registry.get_object(tag); + } + $form.find(tag).each(function() { + fn.call(self, $(this), $form); + }); + }); + */ + }, + process_field: function($field) { var name = $field.attr('name'), field_orm = this.fvg.fields[name], field_string = $field.attr('string') || field_orm.string || '', @@ -780,15 +798,17 @@ openerp.web.FormRenderingEngine = openerp.web.Widget.extend({ } if ($field.attr('nolabel') !== '1') { - var $label = $form.find('label[for="' + name + '"]'); + var $label = this.$form.find('label[for="' + name + '"]'); if (!$label.length) { field_string = $label.attr('string') || $label.text() || field_string; field_help = $label.attr('help') || field_help; - $('