summaryrefslogtreecommitdiff
path: root/addons/web/static/src/js
diff options
context:
space:
mode:
Diffstat (limited to 'addons/web/static/src/js')
-rw-r--r--addons/web/static/src/js/fields/field_registry.js3
-rw-r--r--addons/web/static/src/js/fields/relational_fields.js17
-rw-r--r--addons/web/static/src/js/services/data_manager.js4
-rw-r--r--addons/web/static/src/js/views/kanban/kanban_record.js29
-rw-r--r--addons/web/static/src/js/views/kanban/kanban_renderer.js32
5 files changed, 29 insertions, 56 deletions
diff --git a/addons/web/static/src/js/fields/field_registry.js b/addons/web/static/src/js/fields/field_registry.js
index 405af71438b..0130d20a211 100644
--- a/addons/web/static/src/js/fields/field_registry.js
+++ b/addons/web/static/src/js/fields/field_registry.js
@@ -58,8 +58,9 @@ registry
.add('kanban.many2one', relational_fields.KanbanFieldMany2One)
.add('many2many', relational_fields.FieldMany2Many)
.add('many2many_tags', relational_fields.FieldMany2ManyTags)
- .add('many2many_checkboxes', relational_fields.FieldMany2ManyCheckBoxes)
.add('form.many2many_tags', relational_fields.FormFieldMany2ManyTags)
+ .add('kanban.many2many_tags', relational_fields.KanbanFieldMany2ManyTags)
+ .add('many2many_checkboxes', relational_fields.FieldMany2ManyCheckBoxes)
.add('one2many', relational_fields.FieldOne2Many)
.add('statusbar', relational_fields.FieldStatus)
.add('one2many_list', relational_fields.FieldOne2Many);
diff --git a/addons/web/static/src/js/fields/relational_fields.js b/addons/web/static/src/js/fields/relational_fields.js
index bdd291c6fab..dbc18efd560 100644
--- a/addons/web/static/src/js/fields/relational_fields.js
+++ b/addons/web/static/src/js/fields/relational_fields.js
@@ -1122,6 +1122,22 @@ var FormFieldMany2ManyTags = FieldMany2ManyTags.extend({
},
});
+var KanbanFieldMany2ManyTags = FieldMany2Many.extend({
+ _render: function () {
+ var self = this;
+ this.$el.addClass('o_form_field_many2manytags o_kanban_tags');
+ _.each(this.value.data, function (m2m) {
+ // 10th color is invisible
+ if ('color' in m2m.data && m2m.data.color !== 10) {
+ $('<span>')
+ .addClass('o_tag o_tag_color_' + m2m.data.color)
+ .attr('title', _.str.escapeHTML(m2m.data.display_name))
+ .appendTo(self.$el);
+ }
+ });
+ },
+});
+
var FieldMany2ManyCheckBoxes = AbstractField.extend({
template: 'FieldMany2ManyCheckBoxes',
events: _.extend({}, AbstractField.prototype.events, {
@@ -1464,6 +1480,7 @@ return {
FieldMany2ManyCheckBoxes: FieldMany2ManyCheckBoxes,
FieldMany2ManyTags: FieldMany2ManyTags,
FormFieldMany2ManyTags: FormFieldMany2ManyTags,
+ KanbanFieldMany2ManyTags: KanbanFieldMany2ManyTags,
FieldRadio: FieldRadio,
FieldSelection: FieldSelection,
diff --git a/addons/web/static/src/js/services/data_manager.js b/addons/web/static/src/js/services/data_manager.js
index abcf10a2e6d..cb2773fd2be 100644
--- a/addons/web/static/src/js/services/data_manager.js
+++ b/addons/web/static/src/js/services/data_manager.js
@@ -392,6 +392,10 @@ return core.Class.extend({
if (!Widget) {
console.warn("Missing widget: ", attrs.widget, " for field", attrs.name, "of type", field.type);
}
+ } else if (viewType === 'kanban' && field.type === 'many2many') {
+ // we want to display the widget many2manytags in kanban even if it
+ // is not specified in the view
+ Widget = fieldRegistry.get('kanban.many2many_tags');
}
return Widget || fieldRegistry.getAny([viewType + "." + field.type, field.type, "abstract"]);
},
diff --git a/addons/web/static/src/js/views/kanban/kanban_record.js b/addons/web/static/src/js/views/kanban/kanban_record.js
index 55bfcc6650e..128dda9413f 100644
--- a/addons/web/static/src/js/views/kanban/kanban_record.js
+++ b/addons/web/static/src/js/views/kanban/kanban_record.js
@@ -176,8 +176,11 @@ var KanbanRecord = Widget.extend({
var $field = $(this);
var field_name = $field.attr("name");
var field_widget = $field.attr("widget");
- if (field_widget) {
- // a widget is specified for that field
+
+ // a widget is specified for that field or a field is a many2many ;
+ // in this latest case, we want to display the widget many2manytags
+ // even if it is not specified in the view.
+ if (field_widget || self.fields[field_name].type === 'many2many') {
var widget = self.subWidgets[field_name];
if (!widget) {
// the widget doesn't exist yet, so instanciate it
@@ -270,28 +273,8 @@ var KanbanRecord = Widget.extend({
this._processFields();
this._setupColor();
this._setupColorPicker();
- this._renderM2MTags();
this._attachTooltip();
- },
- /**
- * @private
- */
- _renderM2MTags: function () {
- var self = this;
- _.each(this.recordData, function (values, field_name) {
- if (self.fields[field_name].type !== 'many2many') { return; }
- var rel_ids = self.record[field_name].raw_value;
- var $m2m_tags = self.$('.o_form_field_many2manytags[name=' + field_name + ']');
- _.each(rel_ids, function (id) {
- var m2m = _.findWhere(values.data, {res_id: id}).data;
- if (typeof m2m.color !== 'undefined' && m2m.color !== 10) { // 10th color is invisible
- $('<span>')
- .addClass('o_tag o_tag_color_' + m2m.color)
- .attr('title', _.str.escapeHTML(m2m.display_name))
- .appendTo($m2m_tags);
- }
- });
- });
+
// We use boostrap tooltips for better and faster display
this.$('span.o_tag').tooltip({delay: {'show': 50}});
},
diff --git a/addons/web/static/src/js/views/kanban/kanban_renderer.js b/addons/web/static/src/js/views/kanban/kanban_renderer.js
index d49149debc3..dd6c193701b 100644
--- a/addons/web/static/src/js/views/kanban/kanban_renderer.js
+++ b/addons/web/static/src/js/views/kanban/kanban_renderer.js
@@ -3,7 +3,6 @@ odoo.define('web.KanbanRenderer', function (require) {
var BasicRenderer = require('web.BasicRenderer');
var core = require('web.core');
-var field_registry = require('web.field_registry');
var KanbanColumn = require('web.KanbanColumn');
var KanbanRecord = require('web.KanbanRecord');
var quick_create = require('web.kanban_quick_create');
@@ -45,37 +44,6 @@ function transformQwebTemplate(node, fields) {
}
}
switch (node.tag) {
- case 'field':
- var ftype = fields[node.attrs.name].type;
- ftype = node.attrs.widget ? node.attrs.widget : ftype;
- if (ftype === 'many2many') {
- node.tag = 'div';
- node.attrs['class'] = (node.attrs['class'] || '') + ' oe_form_field o_form_field_many2manytags o_kanban_tags';
- } else if (field_registry.contains(ftype)) {
- // do nothing, the kanban record will handle it
- } else {
- node.tag = 'span';
- var child_node = {
- attrs: {},
- children: [],
- tag: qweb.prefix,
- };
- child_node.attrs[qweb.prefix + '-esc'] = 'record.' + node.attrs.name + '.value';
- node.children.push(child_node);
-
- // set class according to field attribute
- var child_classes = [];
- if (node.attrs.display === 'right') {
- child_classes.push('pull-right');
- } else if (node.attrs.display === 'full') {
- child_classes.push('o_text_block');
- }
- if (node.attrs.bold) {
- child_classes.push('o_text_bold');
- }
- node.attrs['class'] = child_classes.join(' ');
- }
- break;
case 'button':
case 'a':
var type = node.attrs.type || '';