summaryrefslogtreecommitdiff
path: root/addons/web/static/src
diff options
context:
space:
mode:
authorAlexandre Kühn <alexkuhn@users.noreply.github.com>2017-11-20 10:47:43 +0100
committerGitHub <noreply@github.com>2017-11-20 10:47:43 +0100
commit23e6dd36d7477f13fe42fdcaae890ffb690d05a4 (patch)
treee797dc6b2a29d4d106c86dd937761c405399e4f4 /addons/web/static/src
parent7d2666d020215d8d8fe36c32f4a8e049e5d7915c (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.js55
-rw-r--r--addons/web/static/src/less/fields.less70
-rw-r--r--addons/web/static/src/xml/base.xml19
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>