From e0c57cbadf325b3eb96b58306d6098c48fc3060b Mon Sep 17 00:00:00 2001 From: Fabien Meghazi Date: Tue, 10 Apr 2012 12:29:51 +0200 Subject: [PATCH] [ADD] Added support for @layout attribute in form views. Support for tag bzr revid: fme@openerp.com-20120410102951-vnzvqms09uytaydx --- addons/web/static/src/js/view_form.js | 71 ++++++++++++++++----------- addons/web/static/src/xml/base.xml | 19 ++++--- 2 files changed, 52 insertions(+), 38 deletions(-) diff --git a/addons/web/static/src/js/view_form.js b/addons/web/static/src/js/view_form.js index 3723dad214d..47d955d808e 100644 --- a/addons/web/static/src/js/view_form.js +++ b/addons/web/static/src/js/view_form.js @@ -805,11 +805,9 @@ openerp.web.form.FormRenderingEngineInterface = { openerp.web.form.FormRenderingEngine = openerp.web.Class.extend({ init: function(view) { this.view = view; - this.legacy_mode = false; }, set_fields_view: function(fvg) { this.fvg = fvg; - this.legacy_mode = (this.fvg.arch.tag === 'form'); }, set_registry: function(registry) { this.registry = registry; @@ -823,7 +821,7 @@ openerp.web.form.FormRenderingEngine = openerp.web.Class.extend({ var xml = openerp.web.json_node_to_xml(this.fvg.arch); this.$form = $('
' + xml + '
'); if (this.fvg.arch.attrs && this.fvg.arch.attrs['layout'] !== 'manual') { - this.$form.addClass('oe_form_autolayout'); + this.$form.attr('layout', 'auto'); } this.to_init = []; @@ -867,9 +865,13 @@ openerp.web.form.FormRenderingEngine = openerp.web.Class.extend({ $('').appendTo(this.$element).click($.proxy(this.toggle_layout_debugging, this)); } }, - render_element: function(template, dict) { - dict = dict || {}; - dict.legacy_mode = this.legacy_mode; + render_element: function(template, layout/* dictionaries */) { + var dicts = [].slice.call(arguments).slice(2); + dicts.unshift({ 'layout' : layout }); + var dict = _.extend.apply(_, dicts); + dict['classnames'] = dict['class'] || ''; // class is a reserved word and might caused problem to Safari when used from QWeb + var alt_template = template + '.' + layout; + template = QWeb.has_template(alt_template) ? alt_template : template; return $(QWeb.render(template, dict)); }, alter_field: function(field) { @@ -884,30 +886,39 @@ openerp.web.form.FormRenderingEngine = openerp.web.Class.extend({ } this.$element.toggleClass('oe_layout_debugging'); }, - process: function($tag) { + process: function($tag, layout) { var self = this; + if ($tag.attr('layout') === 'auto') { + $tag.addClass('oe_form_autolayout'); + } + layout = $tag.attr('layout') || layout || 'auto'; + $tag.removeAttr('layout'); var tagname = $tag[0].nodeName.toLowerCase(); - var fn = self['process_' + tagname]; + var fn = self['process_' + tagname]; if (this.registry && this.registry.contains(tagname)) { fn = this.registry.get_object(tagname); } if (fn) { var args = [].slice.call(arguments); args[0] = $tag; + args[1] = layout; return fn.apply(self, args); } else { // generic tag handling, just process children $tag.children().each(function() { - self.process($(this)); + self.process($(this), layout); }); self.handle_common_properties($tag, $tag); $tag.removeAttr("modifiers"); return $tag; } }, - process_form: function($form) { - var $new_form = this.render_element('FormRenderingForm', $form.getAttributes()); - var $dst = this.legacy_mode ? $new_form.find('group:first') : $new_form.children(); + process_sheet: function() { + this.process_form.apply(this, arguments); + }, + process_form: function($form, layout) { + var $new_form = this.render_element('FormRenderingForm', layout, $form.getAttributes()); + var $dst = (layout === 'auto') ? $new_form.find('group:first') : $new_form; $new_form.attr("modifiers", $form.attr("modifiers")); $form.children().appendTo($dst); if ($form[0] === this.$form[0]) { @@ -922,7 +933,7 @@ openerp.web.form.FormRenderingEngine = openerp.web.Class.extend({ var name = $field.attr('name'), field_colspan = parseInt($field.attr('colspan'), 10), field_modifiers = JSON.parse($field.attr('modifiers') || '{}'); - + if ($field.attr('nolabel') === '1') return; $field.attr('nolabel', '1'); @@ -933,7 +944,7 @@ openerp.web.form.FormRenderingEngine = openerp.web.Class.extend({ }); if (found) return; - + $label = $('