diff options
| author | Alexandre Kühn <alexkuhn@users.noreply.github.com> | 2017-11-20 10:47:43 +0100 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2017-11-20 10:47:43 +0100 |
| commit | 23e6dd36d7477f13fe42fdcaae890ffb690d05a4 (patch) | |
| tree | e797dc6b2a29d4d106c86dd937761c405399e4f4 /addons/web/static/src | |
| parent | 7d2666d020215d8d8fe36c32f4a8e049e5d7915c (diff) | |
[IMP] web: hide in kanban tag's color (#20815)
New feature:
- New Transparent tag visual (grey border & text, white bg),
- By default, newly created kanban tags are transparent,
- Tag's colorpicker has now a 'Hide in Kanban' checkbox,
to select the transparent color.
Toggling off 'Hide in Kanban' sets the color of the tag as follow:
- Previous color, if 'Hide in Kanban' was toggled on on the
same formview session.
- Color 1 (dark orange), otherwise.
Diffstat (limited to 'addons/web/static/src')
| -rw-r--r-- | addons/web/static/src/js/fields/relational_fields.js | 55 | ||||
| -rw-r--r-- | addons/web/static/src/less/fields.less | 70 | ||||
| -rw-r--r-- | addons/web/static/src/xml/base.xml | 19 |
3 files changed, 111 insertions, 33 deletions
diff --git a/addons/web/static/src/js/fields/relational_fields.js b/addons/web/static/src/js/fields/relational_fields.js index 6f775e789d4..f9ed847cefc 100644 --- a/addons/web/static/src/js/fields/relational_fields.js +++ b/addons/web/static/src/js/fields/relational_fields.js @@ -1703,6 +1703,7 @@ var FormFieldMany2ManyTags = FieldMany2ManyTags.extend({ events: _.extend({}, FieldMany2ManyTags.prototype.events, { 'click .badge': '_onOpenColorPicker', 'mousedown .o_colorpicker a': '_onUpdateColor', + 'mousedown .o_colorpicker .o_hide_in_kanban': '_onUpdateColor', 'focusout .o_colorpicker': '_onCloseColorPicker', }), @@ -1713,43 +1714,63 @@ var FormFieldMany2ManyTags = FieldMany2ManyTags.extend({ /** * @private */ - _onCloseColorPicker: function (){ + _onCloseColorPicker: function () { this.$color_picker.remove(); }, /** * @private - * @param {MouseEvent} event + * @param {MouseEvent} ev */ - _onOpenColorPicker: function (event) { - var tag_id = $(event.currentTarget).data('id'); - var tag = _.findWhere(this.value.data, { res_id: tag_id }); + _onOpenColorPicker: function (ev) { + var tagID = $(ev.currentTarget).data('id'); + var tagColor = $(ev.currentTarget).data('color'); + var tag = _.findWhere(this.value.data, { res_id: tagID }); if (tag && this.colorField in tag.data) { // if there is a color field on the related model this.$color_picker = $(qweb.render('FieldMany2ManyTag.colorpicker', { 'widget': this, - 'tag_id': tag_id, + 'tag_id': tagID, })); - $(event.currentTarget).append(this.$color_picker); + $(ev.currentTarget).append(this.$color_picker); this.$color_picker.dropdown('toggle'); this.$color_picker.attr("tabindex", 1).focus(); + if (!tagColor) { + this.$('.o_checkbox input').prop('checked', true); + } } }, /** + * Update color based on target of ev + * either by clicking on a color item or + * by toggling the 'Hide in Kanban' checkbox. + * * @private - * @param {MouseEvent} event + * @param {MouseEvent} ev */ - _onUpdateColor: function (event) { - event.preventDefault(); - var self = this; - var color = $(event.currentTarget).data('color'); - var id = $(event.currentTarget).data('id'); - var tag = self.$("span.badge[data-id='" + id + "']"); - var current_color = tag.data('color'); + _onUpdateColor: function (ev) { + ev.preventDefault(); + var $target = $(ev.currentTarget); + var color = $target.data('color'); + var id = $target.data('id'); + var tag = this.$("span.badge[data-id='" + id + "']"); + var currentColor = tag.data('color'); + var changes = {}; - if (color === current_color) { return; } + if ($target.is('.o_hide_in_kanban')) { + var $checkbox = $('.o_hide_in_kanban .o_checkbox input'); + $checkbox.prop('checked', !$checkbox.prop('checked')); // toggle checkbox + this.prevColors = this.prevColors ? this.prevColors : {}; + if ($checkbox.is(':checked')) { + this.prevColors[id] = currentColor + } else { + color = this.prevColors[id] ? this.prevColors[id] : 1; + } + } else if ($target.is('[class^="o_tag_color"]')) { // $target.is('o_tag_color_') + if (color === currentColor) { return; } + } - var changes = {}; changes[this.colorField] = color; + this.trigger_up('field_changed', { dataPointID: _.findWhere(this.value.data, {res_id: id}).id, changes: changes, diff --git a/addons/web/static/src/less/fields.less b/addons/web/static/src/less/fields.less index 9450147e7e8..358e9e81897 100644 --- a/addons/web/static/src/less/fields.less +++ b/addons/web/static/src/less/fields.less @@ -91,16 +91,6 @@ .o-flex-flow(row, wrap); .o-align-items(baseline); - .o-tag-color(@size: 0) when (@size < @odoo-nb-ui-color) { - .o_tag_color_@{size} { - &, &::after { - background-color: ~"@{odoo-color-@{size}}"; - } - } - .o-tag-color(@size + 1); - } - .o-tag-color(); - > .o_field_widget { .o-flex(1, 0, 100px); position: initial; @@ -119,8 +109,45 @@ max-width: 200px; } + // o-kanban-colorpicker without customizing + // '&:first-child > a::before' (transparent red-crossed colorpick) + .o-tag-colorpicker() { + @o-tag-colorpicker-padding-right: @odoo-dropdown-hpadding - 2 * @o-kanban-inner-hmargin; + + max-width: 100%; + padding: 3px @o-tag-colorpicker-padding-right 3px @odoo-dropdown-hpadding; + + > li { + display: inline-block; + margin: @o-kanban-inner-hmargin @o-kanban-inner-hmargin 0 0; + border: 1px solid white; + box-shadow: 0 0 0 1px @gray-lighter-dark; + + > a { + display: block; + + &::after { + content: ""; + display: block; + width: 20px; + height: 15px; + } + } + + &:last-of-type { + box-shadow: 0 0 0 0px white; // remove grey border on hide in kanban + color: @odoo-main-text-color; + } + } + } + + > .tagcolor_dropdown_menu { + min-width: 150px; // down from 160px of .dropdown-menu + margin-right: 0px; // cancel right margin of .dropdown-menu + } + > .o_colorpicker > ul { - .o-kanban-colorpicker(); + .o-tag-colorpicker(); white-space: normal; } @@ -128,6 +155,27 @@ cursor: pointer; } } + + .o-tag-color(@size: 0) when (@size < @odoo-nb-ui-color) { + .o_tag_color_@{size} when (@size = 0) { + & { + background-color: white; + color: ~"@{odoo-color-@{size}}"; + box-shadow: inset 0 0 0 2px ~"@{odoo-color-@{size}}"; + } + &::after { + background-color: ~"@{odoo-color-@{size}}"; + } + } + .o_tag_color_@{size} when (@size > 0) { + &, &::after { + background-color: ~"@{odoo-color-@{size}}"; + } + } + .o-tag-color(@size + 1); + } + .o-tag-color(); + } // Stars diff --git a/addons/web/static/src/xml/base.xml b/addons/web/static/src/xml/base.xml index f1af2e7d762..78ffa4cac1e 100644 --- a/addons/web/static/src/xml/base.xml +++ b/addons/web/static/src/xml/base.xml @@ -792,14 +792,23 @@ </t> </t> <t t-name="FieldMany2ManyTag.colorpicker"> - <div class="o_colorpicker dropdown-menu" role="menu"> + <div class="o_colorpicker dropdown-menu tagcolor_dropdown_menu" role="menu"> <ul> - <li t-foreach="12" t-as="color"> + <li t-foreach="11" t-as="color"> <a href="#" t-att-data-id="tag_id" - t-att-data-color="color" - t-attf-class="o_tag_color_#{color}" - t-att-title="color === 0 ? 'Not shown in kanban' : ''"/> + t-att-data-color="color+1" + t-attf-class="o_tag_color_#{color+1}"/> + </li> + <li> <!-- checkbox for tag color 0 --> + <div class="o_hide_in_kanban" + t-att-data-id="tag_id" + t-att-data-color="0"> + <div class="o_checkbox"> + <input type="checkbox"/> + <span/> + </div> Hide in Kanban + </div> </li> </ul> </div> |
