summaryrefslogtreecommitdiff
path: root/addons/web/static
diff options
context:
space:
mode:
authorChristophe Simonis <chs@odoo.com>2018-08-01 18:02:29 +0200
committerChristophe Simonis <chs@odoo.com>2018-08-01 18:02:29 +0200
commit4797627259f2d7202e48a772d5495002182d5392 (patch)
tree97c6469927d60dea8c484e3ce0be90260e39a083 /addons/web/static
parentabbba35598d01d1a11f1b034912608be7c132239 (diff)
parent8d9366197e174d33fdf6962364a24ea40a1131b1 (diff)
[MERGE] forward port branch saas-11.4 up to 8d9366197e1
Diffstat (limited to 'addons/web/static')
-rw-r--r--addons/web/static/src/css/reset.min.css1
-rw-r--r--addons/web/static/src/js/chrome/action_manager_act_window.js2
-rw-r--r--addons/web/static/src/js/fields/basic_fields.js2
-rw-r--r--addons/web/static/src/js/views/kanban/kanban_column_progressbar.js8
-rw-r--r--addons/web/static/src/scss/form_view_extra.scss10
-rw-r--r--addons/web/static/src/scss/kanban_column_progressbar.scss5
-rw-r--r--addons/web/static/tests/fields/basic_fields_tests.js34
-rw-r--r--addons/web/static/tests/helpers/test_utils.js5
8 files changed, 52 insertions, 15 deletions
diff --git a/addons/web/static/src/css/reset.min.css b/addons/web/static/src/css/reset.min.css
index ee21ad74e7d..97c0b78b002 100644
--- a/addons/web/static/src/css/reset.min.css
+++ b/addons/web/static/src/css/reset.min.css
@@ -48,6 +48,7 @@ ol {
ul {
list-style: disc;
+ padding-left: 40px;
}
ul ul {
diff --git a/addons/web/static/src/js/chrome/action_manager_act_window.js b/addons/web/static/src/js/chrome/action_manager_act_window.js
index 0b18b04172a..1ab4367de4c 100644
--- a/addons/web/static/src/js/chrome/action_manager_act_window.js
+++ b/addons/web/static/src/js/chrome/action_manager_act_window.js
@@ -704,7 +704,7 @@ ActionManager.include({
var env = ev.data.env;
var context = new Context(env.context, actionData.context || {});
var recordID = env.currentID || null; // pyUtils handles null value, not undefined
- var def;
+ var def = $.Deferred();
// determine the action to execute according to the actionData
if (actionData.special) {
diff --git a/addons/web/static/src/js/fields/basic_fields.js b/addons/web/static/src/js/fields/basic_fields.js
index 8ac3b49e90e..9d0f62b5ebc 100644
--- a/addons/web/static/src/js/fields/basic_fields.js
+++ b/addons/web/static/src/js/fields/basic_fields.js
@@ -1931,7 +1931,7 @@ var StatInfo = AbstractField.extend({
*/
_render: function () {
var options = {
- value: this.value || 0,
+ value: this._formatValue(this.value || 0),
};
if (! this.attrs.nolabel) {
if (this.nodeOptions.label_field && this.recordData[this.nodeOptions.label_field]) {
diff --git a/addons/web/static/src/js/views/kanban/kanban_column_progressbar.js b/addons/web/static/src/js/views/kanban/kanban_column_progressbar.js
index 0bfe5027876..1ce13d678f2 100644
--- a/addons/web/static/src/js/views/kanban/kanban_column_progressbar.js
+++ b/addons/web/static/src/js/views/kanban/kanban_column_progressbar.js
@@ -140,6 +140,7 @@ var KanbanColumnProgressBar = Widget.extend({
}
// Display and animate the progress bars
+ var barNumber = 0;
_.each(self.colors, function (val, key) {
var $bar = self.$bars[val];
var count = self.subgroupCounts && self.subgroupCounts[key] || 0;
@@ -163,7 +164,14 @@ var KanbanColumnProgressBar = Widget.extend({
window.getComputedStyle($bar[0]).getPropertyValue('width'); // Force reflow so that animations work
if (count > 0) {
$bar.addClass('o_bar_has_records');
+ // Make sure every bar that has records has some space
+ // and that everything adds up to 100%
+ var minWidth = 6*barNumber;
+ var maxWidth = 100 - minWidth;
+ self.$('.progress-bar.o_bar_has_records').css('max-width', maxWidth + '%');
+ self.$('.progress-bar.o_bar_has_records').css('min-width', minWidth + '%');
$bar.css('width', (count * 100 / self.groupCount) + '%');
+ barNumber++;
$bar.attr('aria-valuemin', 0);
$bar.attr('aria-valuemax', self.groupCount);
$bar.attr('aria-valuenow', count);
diff --git a/addons/web/static/src/scss/form_view_extra.scss b/addons/web/static/src/scss/form_view_extra.scss
index cadce3f6809..fcf9ac284c1 100644
--- a/addons/web/static/src/scss/form_view_extra.scss
+++ b/addons/web/static/src/scss/form_view_extra.scss
@@ -72,18 +72,16 @@
max-width: 70%;
line-height: 1.2;
- .o_stat_value {
+ > .o_stat_value, > .o_stat_text {
@include o-text-overflow(block);
+ }
+
+ .o_stat_value {
font-weight: 700;
color: $o-brand-odoo;
}
.o_stat_text {
- @include o-text-overflow(block);
font-size: small;
-
- .o_stat_value {
- display: inline;
- }
}
}
> span {
diff --git a/addons/web/static/src/scss/kanban_column_progressbar.scss b/addons/web/static/src/scss/kanban_column_progressbar.scss
index 5f16a222736..d70644f7e4a 100644
--- a/addons/web/static/src/scss/kanban_column_progressbar.scss
+++ b/addons/web/static/src/scss/kanban_column_progressbar.scss
@@ -72,11 +72,6 @@
margin-bottom: 0;
box-shadow: none;
cursor: pointer;
-
- // Be sure that a bar with data has a minimun width
- &.o_bar_has_records {
- min-width: 10px;
- }
}
.o_kanban_counter_label {
diff --git a/addons/web/static/tests/fields/basic_fields_tests.js b/addons/web/static/tests/fields/basic_fields_tests.js
index 3b2fdd8686c..58fa6944334 100644
--- a/addons/web/static/tests/fields/basic_fields_tests.js
+++ b/addons/web/static/tests/fields/basic_fields_tests.js
@@ -4170,6 +4170,40 @@ QUnit.module('basic_fields', {
QUnit.module('StatInfo');
+ QUnit.test('statinfo widget formats decimal precision', function (assert) {
+ // sometimes the round method can return numbers such as 14.000001
+ // when asked to round a number to 2 decimals, as such is the behaviour of floats.
+ // we check that even in that eventuality, only two decimals are displayed
+ assert.expect(2);
+
+ this.data.partner.fields.monetary = {string: "Monetary", type: 'monetary'};
+ this.data.partner.records[0].monetary = 9.999999;
+ this.data.partner.records[0].currency_id = 1;
+
+ var form = createView({
+ View: FormView,
+ model: 'partner',
+ data: this.data,
+ arch: '<form string="Partners">' +
+ '<button class="oe_stat_button" name="items" icon="fa-gear">' +
+ '<field name="qux" widget="statinfo"/>' +
+ '</button>' +
+ '<button class="oe_stat_button" name="money" icon="fa-money">' +
+ '<field name="monetary" widget="statinfo"/>' +
+ '</button>' +
+ '</form>',
+ res_id: 1,
+ });
+
+ // formatFloat renders according to this.field.digits
+ assert.strictEqual(form.$('.oe_stat_button .o_field_widget.o_stat_info .o_stat_value').eq(0).text(),
+ '0.4', "Default precision should be [16,1]");
+ assert.strictEqual(form.$('.oe_stat_button .o_field_widget.o_stat_info .o_stat_value').eq(1).text(),
+ '10.00', "Currency decimal precision should be 2");
+
+ form.destroy();
+ });
+
QUnit.test('statinfo widget in form view', function (assert) {
assert.expect(9);
diff --git a/addons/web/static/tests/helpers/test_utils.js b/addons/web/static/tests/helpers/test_utils.js
index c460bf95673..a1b2718fc1a 100644
--- a/addons/web/static/tests/helpers/test_utils.js
+++ b/addons/web/static/tests/helpers/test_utils.js
@@ -552,10 +552,11 @@ function dragAndDrop($el, $to, options) {
var toOffset = $to.offset();
toOffset.top += $to.outerHeight()/2;
toOffset.left += $to.outerWidth()/2;
+ var vertical_offset = (toOffset.top < elementCenter.top) ? -1 : 1;
if (position === 'top') {
- toOffset.top -= $to.outerHeight()/2;
+ toOffset.top -= $to.outerHeight()/2 + vertical_offset;
} else if (position === 'bottom') {
- toOffset.top += $to.outerHeight()/2;
+ toOffset.top += $to.outerHeight()/2 - vertical_offset;
} else if (position === 'left') {
toOffset.left -= $to.outerWidth()/2;
} else if (position === 'right') {