From f1370dfa0abac2b50315e47dccd0daf906336fc5 Mon Sep 17 00:00:00 2001 From: qsm-odoo Date: Mon, 11 Sep 2017 13:54:18 +0200 Subject: [PATCH] [REF] web: allow adding custom stuff in kanban header Previous kanban header was a div with `flex-flow: row nowrap`. So if someone tried to add some stuff in it, it will be forced to stay on the same row as the title and config buttons. This commit wraps these row elements in a new div to allow kanban header customization (this prepares for the kanban progressbars). --- .../src/js/views/kanban/kanban_column.js | 4 +- .../src/js/views/kanban/kanban_renderer.js | 2 +- addons/web/static/src/less/kanban_view.less | 12 +++--- addons/web/static/src/xml/kanban.xml | 40 +++++++++---------- addons/web/static/tests/views/kanban_tests.js | 4 +- 5 files changed, 31 insertions(+), 31 deletions(-) diff --git a/addons/web/static/src/js/views/kanban/kanban_column.js b/addons/web/static/src/js/views/kanban/kanban_column.js index d22f4fe2fe9..ab071d0e930 100644 --- a/addons/web/static/src/js/views/kanban/kanban_column.js +++ b/addons/web/static/src/js/views/kanban/kanban_column.js @@ -86,7 +86,7 @@ var KanbanColumn = Widget.extend({ for (var i = 0; i < this.data_records.length; i++) { this.addRecord(this.data_records[i], {no_update: true}); } - this.$header.tooltip(); + this.$header.find('.o_kanban_header_title').tooltip(); if (config.device.size_class > config.device.SIZES.XS && this.draggable !== false) { // deactivate sortable in mobile mode. It does not work anyway, @@ -215,7 +215,7 @@ var KanbanColumn = Widget.extend({ this.$el.toggleClass('o_column_folded', this.folded); var tooltip = this.size + _t(' records'); tooltip = '

' + tooltip + '

' + this.tooltipInfo; - this.$header.tooltip({html: true}).attr('data-original-title', tooltip); + this.$header.find('.o_kanban_header_title').tooltip({html: true}).attr('data-original-title', tooltip); if (!this.remaining) { this.$('.o_kanban_load_more').remove(); } else { 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 0bbc7aa2698..5d7be3d3636 100644 --- a/addons/web/static/src/js/views/kanban/kanban_renderer.js +++ b/addons/web/static/src/js/views/kanban/kanban_renderer.js @@ -233,7 +233,7 @@ var KanbanRenderer = BasicRenderer.extend({ this.$el.sortable({ axis: 'x', items: '> .o_kanban_group', - handle: '.o_kanban_header', + handle: '.o_kanban_header_title', cursor: 'move', revert: 150, delay: 100, diff --git a/addons/web/static/src/less/kanban_view.less b/addons/web/static/src/less/kanban_view.less index 8df393a6d51..e63bd357269 100644 --- a/addons/web/static/src/less/kanban_view.less +++ b/addons/web/static/src/less/kanban_view.less @@ -47,7 +47,7 @@ padding: 0 @o-kanban-group-padding * 0.5; cursor: pointer; } -.o-kanban-header() { +.o-kanban-header-title() { .o-flex-display(); height: 50px; line-height: 2.2; @@ -485,8 +485,8 @@ border-width: 0 1px; margin-left: -1px; - .o_kanban_header { - .o-kanban-header(); + .o_kanban_header > .o_kanban_header_title { + .o-kanban-header-title(); .o_column_title { .o-flex(1, 1, auto); @@ -544,7 +544,7 @@ } } - &.ui-sortable .o_kanban_header { + &.ui-sortable .o_kanban_header_title { cursor: move; } @@ -557,7 +557,7 @@ margin-left: 1px; } - .o_kanban_header { + .o_kanban_header_title { position: relative; opacity: 0.5; @@ -583,7 +583,7 @@ .o-kanban-slim-col(); .o_column_header { - .o-kanban-header(); + .o-kanban-header-title(); position: relative; opacity: 0.5; diff --git a/addons/web/static/src/xml/kanban.xml b/addons/web/static/src/xml/kanban.xml index 0da9033a976..c7e7c83e836 100644 --- a/addons/web/static/src/xml/kanban.xml +++ b/addons/web/static/src/xml/kanban.xml @@ -10,26 +10,26 @@
-
- - - - - - - - - +
+
+ + + + + + + +
diff --git a/addons/web/static/tests/views/kanban_tests.js b/addons/web/static/tests/views/kanban_tests.js index 724b080d5f4..6ce6e8ce190 100644 --- a/addons/web/static/tests/views/kanban_tests.js +++ b/addons/web/static/tests/views/kanban_tests.js @@ -1734,13 +1734,13 @@ QUnit.module('Views', { "column should contain 1 record(s)"); assert.ok(kanban.$('.o_kanban_group:first span.o_column_title:contains(Undefined)').length, "first column should have a default title for when no value is provided"); - assert.strictEqual(kanban.$('.o_kanban_group:first .o_kanban_header').data('original-title'), + assert.strictEqual(kanban.$('.o_kanban_group:first .o_kanban_header_title').data('original-title'), "

1 records

", "first column should have a tooltip with the number of records, but not" + "the group_by_tooltip title and the many2one field value since it has no value"); assert.ok(kanban.$('.o_kanban_group:eq(1) span.o_column_title:contains(hello)').length, "second column should have a title with a value from the many2one"); - assert.strictEqual(kanban.$('.o_kanban_group:eq(1) .o_kanban_header').data('original-title'), + assert.strictEqual(kanban.$('.o_kanban_group:eq(1) .o_kanban_header_title').data('original-title'), "

2 records

Kikou
hello
", "second column should have a tooltip with the number of records, the group_by_tooltip title and many2one field value");