diff options
| author | qsm-odoo <qsm@odoo.com> | 2016-05-23 15:18:03 +0200 |
|---|---|---|
| committer | qsm-odoo <qsm@odoo.com> | 2016-05-23 17:08:50 +0200 |
| commit | d4f8096790e3a76e3219d37ea17a7154b426d2fe (patch) | |
| tree | fe0508091613ce801d381958c2390be38a3d9cad /addons/web/static/src/js/views/form_relational_widgets.js | |
| parent | 865ccfe636f9ce51cde701752e8938a5ecabad25 (diff) | |
[FIX] web,base: m2o empty name results
M2O use the autocomplete lib to display its content. The problem is
that if a result is empty (or only composed of whitespaces), a
divider is displayed in the dropdown.
Commit 1d9f7d279a74aaf6aaf25f91e2313b23b4122827 was fixing this by only displaying non-empty
name results... but it did not work as many models implement the
name_search method the wrong way.
The new solution is to add a default display for record values which
are empty strings, at the right places in the webclient components.
Diffstat (limited to 'addons/web/static/src/js/views/form_relational_widgets.js')
| -rw-r--r-- | addons/web/static/src/js/views/form_relational_widgets.js | 33 |
1 files changed, 15 insertions, 18 deletions
diff --git a/addons/web/static/src/js/views/form_relational_widgets.js b/addons/web/static/src/js/views/form_relational_widgets.js index 8e64599f470..7acf464ae3c 100644 --- a/addons/web/static/src/js/views/form_relational_widgets.js +++ b/addons/web/static/src/js/views/form_relational_widgets.js @@ -177,7 +177,7 @@ var FieldMany2One = common.AbstractField.extend(common.CompletionFieldMixin, com this.$input.change(input_changed); this.$input.on('click', function() { if (self.$input.autocomplete("widget").is(":visible")) { - self.$input.autocomplete("close"); + self.$input.autocomplete("close"); } else { if (self.get("value") && ! self.floating) { self.$input.autocomplete("search", ""); @@ -308,7 +308,7 @@ var FieldMany2One = common.AbstractField.extend(common.CompletionFieldMixin, com render_value: function(no_recurse) { var self = this; if (!this.get("value")) { - this.display_string(""); + this.display_string(null); return; } var display = this.display_value["" + this.get("value")]; @@ -336,14 +336,15 @@ var FieldMany2One = common.AbstractField.extend(common.CompletionFieldMixin, com } } }, - display_string: function(str) { + display_string: function (str) { + var noValue = (str === null); if (!this.get("effective_readonly")) { - this.$input.val(str.split("\n")[0]); + this.$input.val(noValue ? "" : (str.split("\n")[0].trim() || $(data.noDisplayContent).text())); this.current_display = this.$input.val(); this.$follow_button.toggle(!this.is_false()); this.$el.toggleClass('o_with_button', !!this.$follow_button && this.$follow_button.length > 0 && !this.is_false()); } else { - this.$el.html(_.escape(str).split("\n").join("<br/>")); + this.$el.html(noValue ? "" : (_.escape(str.trim()).split("\n").join("<br/>") || data.noDisplayContent)); // Define callback to perform when clicking on the field if (!this.options.no_open) { // Remove potential previously added event handler @@ -627,7 +628,7 @@ var AbstractManyField = common.AbstractField.extend({ add_ids = [], command_list = [], id, index, record; - + _.each(this.get('value'), function (id) { index = starting_ids.indexOf(id); if (index !== -1) { @@ -697,7 +698,7 @@ var FieldX2Many = AbstractManyField.extend({ default_view: 'tree', init: function(field_manager, node) { this._super(field_manager, node); - + this.is_loaded = $.Deferred(); this.initial_is_loaded = this.is_loaded; this.is_started = false; @@ -1422,19 +1423,15 @@ var FieldMany2ManyTags = AbstractManyField.extend(common.CompletionFieldMixin, c }, render_value: function() { var self = this; - var values = self.get("value"); - var handle_names = function(data) { - if (self.isDestroyed()) - return; - var indexed = {}; - _.each(data, function(el) { - indexed[el['id']] = el; + var values = this.get("value"); + var handle_names = function(_data) { + _.each(_data, function(el) { + el.display_name = el.display_name.trim() ? _.str.escapeHTML(el.display_name) : data.noDisplayContent; }); - data = _.map(values, function(el) { return indexed[el]; }); - self.render_tag(data); + self.render_tag(_data); }; if (!values || values.length > 0) { - return self.get_render_data(values).done(handle_names); + return this.alive(this.get_render_data(values)).done(handle_names); } else { handle_names([]); } @@ -1493,7 +1490,7 @@ var FieldMany2ManyTags = AbstractManyField.extend(common.CompletionFieldMixin, c var old_color = tag.data('color'); tag.removeClass('o_tag_color_' + old_color); tag.data('color', color); - tag.addClass('o_tag_color_' + color); + tag.addClass('o_tag_color_' + color); }); }, }); |
