From 97517a1cc25998c7192ae93fe64caad2edf6fd4b Mon Sep 17 00:00:00 2001 From: qsm-odoo Date: Wed, 10 May 2017 13:33:35 +0200 Subject: [PATCH] [REF] web: label creation on form view rendering The original goal of the commit was to implement a missing behavior for label tags in form view. This finally need some deeper refactoring for it to work so this commit does not introduce any change in behavior, only comments explaining the problem. --- .../static/src/js/views/form/form_renderer.js | 49 ++++++++++++------- 1 file changed, 30 insertions(+), 19 deletions(-) diff --git a/addons/web/static/src/js/views/form/form_renderer.js b/addons/web/static/src/js/views/form/form_renderer.js index f19375a4aca..b4576dffa38 100644 --- a/addons/web/static/src/js/views/form/form_renderer.js +++ b/addons/web/static/src/js/views/form/form_renderer.js @@ -368,24 +368,11 @@ var FormRenderer = BasicRenderer.extend({ * @returns {jQueryElement} */ _renderInnerGroupField: function (node) { - var self = this; var widget = this._renderFieldWidget(node, this.state); - var fieldName = node.attrs.name; var $tds = $('').append(widget.$el); if (node.attrs.nolabel !== '1') { - var $labelTd = this._renderInnerGroupLabel(node, { - callback: function (element, modifiers, record) { - var widgets = self.allFieldWidgets[record.id]; - element.$el.toggleClass('o_form_label_empty', !!( // FIXME condition is evaluated twice (label AND widget...) - record.data.id - && (modifiers.readonly || self.mode === 'readonly') - // The widget could have been rerendered so we have to - // search it in the list with the field name - && !_.findWhere(widgets, {name: fieldName}).isSet() - )); - }, - }); + var $labelTd = this._renderInnerGroupLabel(node); $tds = $labelTd.add($tds); } @@ -394,12 +381,11 @@ var FormRenderer = BasicRenderer.extend({ /** * @private * @param {string} label - * @param {Object} [modifiersOptions] * @returns {jQueryElement} */ - _renderInnerGroupLabel: function (label, modifiersOptions) { + _renderInnerGroupLabel: function (label) { return $('', {class: 'o_td_label'}) - .append(this._renderTagLabel(label, modifiersOptions)); + .append(this._renderTagLabel(label)); }, /** * Render a node, from the arch of the view. It is a generic method, that @@ -566,10 +552,10 @@ var FormRenderer = BasicRenderer.extend({ /** * @private * @param {Object} node - * @param {Object} [modifiersOptions] * @returns {jQueryElement} */ - _renderTagLabel: function (node, modifiersOptions) { + _renderTagLabel: function (node) { + var self = this; var text; var fieldName = node.tag === 'label' ? node.attrs.for : node.attrs.name; if ('string' in node.attrs) { // allow empty string @@ -587,6 +573,31 @@ var FormRenderer = BasicRenderer.extend({ if (node.tag === 'label') { this._handleAttributes($result, node); } + var modifiersOptions; + if (fieldName) { + modifiersOptions = { + callback: function (element, modifiers, record) { + var widgets = self.allFieldWidgets[record.id]; + var widget = _.findWhere(widgets, {name: fieldName}); + if (!widget) { + return; // FIXME this occurs if the widget is created + // after the label (explicit