diff options
| author | niv-openerp <nicolas.vanhoren@openerp.com> | 2012-03-27 14:47:04 +0200 |
|---|---|---|
| committer | niv-openerp <nicolas.vanhoren@openerp.com> | 2012-03-27 14:47:04 +0200 |
| commit | 6df024535a133fbccd9ca1c2e02a4e0a37e4f694 (patch) | |
| tree | b536c9929fdeee299bcadb7a41afe73de6eb93e2 | |
| parent | 6455eb30d63060cb8d71865036d6a65f16a6cde3 (diff) | |
[imp] changed the way the ids are set for the labels
bzr revid: nicolas.vanhoren@openerp.com-20120327124704-iq4lyv7qr0szn02w
| -rw-r--r-- | addons/web/static/src/js/view_form.js | 34 | ||||
| -rw-r--r-- | addons/web/static/src/xml/base.xml | 2 |
2 files changed, 22 insertions, 14 deletions
diff --git a/addons/web/static/src/js/view_form.js b/addons/web/static/src/js/view_form.js index 2cf78f7e656..f23c20c23df 100644 --- a/addons/web/static/src/js/view_form.js +++ b/addons/web/static/src/js/view_form.js @@ -757,6 +757,7 @@ openerp.web.FormRenderingEngine = openerp.web.Class.extend({ this.$form = $('<div>' + xml + '</div>'); this.to_init = []; + this.labels = {}; this.process(this.$form); this.$form.appendTo(this.$element); @@ -764,14 +765,22 @@ openerp.web.FormRenderingEngine = openerp.web.Class.extend({ // - @width is obsolete ? _.each(this.to_init, function($elem) { - var key = $elem.attr('widget') || $elem[0].tagName.toLowerCase(); + var tag_name = $elem[0].tagName.toLowerCase(); + var key = $elem.attr('widget') || tag_name; if (self.view.registry.contains(key)) { var obj = self.view.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); } }); + if (openerp.connection.debug) { $('<button>Outline Form Layout</button>').appendTo(this.$element).click($.proxy(this.toggle_layout_debugging, this)); } @@ -1003,6 +1012,7 @@ openerp.web.FormRenderingEngine = openerp.web.Class.extend({ var dict = { string: $label.attr('string') || field_orm.string || '', help: $label.attr('help') || field_orm.help || '', + _for: _.uniqueId('oe-field-input-'), }; var align = parseFloat(dict.align); if (isNaN(align) || align === 1) { @@ -1016,6 +1026,7 @@ openerp.web.FormRenderingEngine = openerp.web.Class.extend({ var $new_label = $(QWeb.render('FormRenderingLabel', dict)); $label.before($new_label).remove(); this.handle_invisible($new_label, $label.attr("modifiers")); + this.labels[name] = $new_label; return $new_label; }, process_button: function($button) { @@ -1493,6 +1504,11 @@ openerp.web.form.FieldInterface = { * syntax for "read" and "write" (example: m2o: set_value([0, "Administrator"]), get_value() => 0). */ get_value: function() {}, + /** + * Inform the current object of the id it should use to match a html <label> that exists somewhere in the + * view. + */ + set_input_id: function(id) {} }; /** @@ -1531,17 +1547,6 @@ openerp.web.form.AbstractField = openerp.web.form.Widget.extend(/** @lends opene this.on("change:readonly", this, test_effective_readonly); this.on("change:force_readonly", this, test_effective_readonly); _.bind(test_effective_readonly, this)(); - - // TODO: do something good about this - if (this.view) { - this.$label = this.view.$element.find('label[for="' + this.name + '"]'); - if (this.$label.length) { - this.id_for_label = _.uniqueId(['field', this.type, this.name, ''].join('_')); - this.$label.attr('for', this.id_for_label); - } else { - this.$label; - } - } }, start: function() { this._super.apply(this, arguments); @@ -1621,7 +1626,10 @@ openerp.web.form.AbstractField = openerp.web.form.Widget.extend(/** @lends opene this.definition_options = JSON.parse(str); } return this.definition_options; - } + }, + set_input_id: function(id) { + this.id_for_label = id; + }, }); /** diff --git a/addons/web/static/src/xml/base.xml b/addons/web/static/src/xml/base.xml index 71976062d46..ec199630aaa 100644 --- a/addons/web/static/src/xml/base.xml +++ b/addons/web/static/src/xml/base.xml @@ -878,7 +878,7 @@ </div> </t> <t t-name="FormRenderingLabel"> - <label t-att-for="for" + <label t-att-for="_for" t-att-title="help" t-attf-class="oe_form_label#{help ? '_help' : ''} oe_align_#{align}"> <t t-esc="string"/> |
