From 247e5865424cdd7581308dfa3e0ea7ea98fd8db7 Mon Sep 17 00:00:00 2001 From: Martin Geubelle Date: Tue, 8 Sep 2015 13:18:36 +0200 Subject: [PATCH] [FIX] web: many2many2tags if no color field If there is no field 'color' on tag model, the colorpicker should not be displayed. --- .../src/js/views/form_relational_widgets.js | 36 ++++++++++++------- .../src/less/enterprise_compatibility.less | 17 ++++++--- addons/web/static/src/xml/base.xml | 8 ++--- 3 files changed, 40 insertions(+), 21 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 5788b3b333e..e4f48e398b0 100644 --- a/addons/web/static/src/js/views/form_relational_widgets.js +++ b/addons/web/static/src/js/views/form_relational_widgets.js @@ -1359,7 +1359,7 @@ var FieldMany2ManyTags = AbstractManyField.extend(common.CompletionFieldMixin, c this.remove_id($(e.target).parent().data('id')); }, 'click .badge': 'open_color_picker', - 'mousedown .o_colorpicker a': 'update_color', + 'mousedown .o_colorpicker span': 'update_color', 'focusout .o_colorpicker': 'close_color_picker', }, @@ -1368,6 +1368,12 @@ var FieldMany2ManyTags = AbstractManyField.extend(common.CompletionFieldMixin, c common.CompletionFieldMixin.init.call(this); this.set({"value": []}); this._display_orderer = new utils.DropMisordered(); + + var self = this; + // We need to know if the field 'color' exists on the model + this.dataset.call('fields_get', []).then(function(fields) { + self.fields = fields; + }); }, initialize_content: function() { if(!this.get("effective_readonly")) { @@ -1401,7 +1407,8 @@ var FieldMany2ManyTags = AbstractManyField.extend(common.CompletionFieldMixin, c } }, get_render_data: function(ids){ - return this.dataset.read_ids(ids, ['name', 'color']); + var fields = this.fields.color ? ['name', 'color'] : ['name']; + return this.dataset.read_ids(ids, fields); }, render_tag: function(data) { this.$('.badge').remove(); @@ -1446,29 +1453,34 @@ var FieldMany2ManyTags = AbstractManyField.extend(common.CompletionFieldMixin, c } }, open_color_picker: function(ev){ - var self = this; - this.$color_picker = $(QWeb.render('FieldMany2ManyTag.colorpicker', { - 'widget': this, - 'tag_id': $(ev.currentTarget).data('id'), - })); + if (this.fields.color) { + this.$color_picker = $(QWeb.render('FieldMany2ManyTag.colorpicker', { + 'widget': this, + 'tag_id': $(ev.currentTarget).data('id'), + })); - $(ev.currentTarget).append(this.$color_picker); - this.$color_picker.dropdown('toggle'); - this.$color_picker.attr("tabindex", 1).focus(); + $(ev.currentTarget).append(this.$color_picker); + this.$color_picker.dropdown('toggle'); + this.$color_picker.attr("tabindex", 1).focus(); + } }, close_color_picker: function(){ this.$color_picker.remove(); }, update_color: function(ev) { ev.preventDefault(); - var self = this; var color = $(ev.currentTarget).data('color'); var id = $(ev.currentTarget).data('id'); + var self = this; this.dataset._model.call('write', [id, {'color': color}]).done(function(){ - self.view.reload(); + var tag = self.$el.find("span.badge[data-id='" + id + "']"); + var old_color = tag.data('color'); + tag.removeClass('o_tag_color_' + old_color); + tag.data('color', color); + tag.addClass('o_tag_color_' + color); }); }, diff --git a/addons/web/static/src/less/enterprise_compatibility.less b/addons/web/static/src/less/enterprise_compatibility.less index 05c5706c11d..710587bb92b 100644 --- a/addons/web/static/src/less/enterprise_compatibility.less +++ b/addons/web/static/src/less/enterprise_compatibility.less @@ -278,23 +278,30 @@ div.o_checkbox { .o_delete { cursor: pointer; } - ul { - min-width: 230px; - li { + > ul { + @colored-tag-width: 45px; + width: 5*@colored-tag-width + 2px; + > li { float: left; color: black; - a { + > span { border-radius: 6px; - width: 28px; + width: @colored-tag-width; height: 30px; display: inline-block; border: 2px solid white; + cursor: pointer; + padding: 0; &:hover { opacity: 0.8; } } } + > li:last-child { + margin-top: 7px; + cursor: auto; + } } } diff --git a/addons/web/static/src/xml/base.xml b/addons/web/static/src/xml/base.xml index 4d95b0e81a0..131e42c4042 100644 --- a/addons/web/static/src/xml/base.xml +++ b/addons/web/static/src/xml/base.xml @@ -840,7 +840,7 @@ - + @@ -850,12 +850,12 @@