summaryrefslogtreecommitdiff
path: root/addons/web/static/src
diff options
context:
space:
mode:
Diffstat (limited to 'addons/web/static/src')
-rw-r--r--addons/web/static/src/js/core/utils.js2
-rw-r--r--addons/web/static/src/js/views/basic/basic_model.js6
-rw-r--r--addons/web/static/src/js/views/kanban/kanban_renderer_mobile.js44
-rw-r--r--addons/web/static/src/js/views/list/list_editable_renderer.js14
-rw-r--r--addons/web/static/src/scss/list_view.scss3
5 files changed, 50 insertions, 19 deletions
diff --git a/addons/web/static/src/js/core/utils.js b/addons/web/static/src/js/core/utils.js
index 44e17324b85..622050c9626 100644
--- a/addons/web/static/src/js/core/utils.js
+++ b/addons/web/static/src/js/core/utils.js
@@ -522,7 +522,7 @@ var utils = {
}
var normalized_value = value / precision;
var epsilon_magnitude = Math.log(Math.abs(normalized_value))/Math.log(2);
- var epsilon = Math.pow(2, epsilon_magnitude - 53);
+ var epsilon = Math.pow(2, epsilon_magnitude - 52);
normalized_value += normalized_value >= 0 ? epsilon : -epsilon;
/**
diff --git a/addons/web/static/src/js/views/basic/basic_model.js b/addons/web/static/src/js/views/basic/basic_model.js
index d3165420ef8..6d1b31ea8ea 100644
--- a/addons/web/static/src/js/views/basic/basic_model.js
+++ b/addons/web/static/src/js/views/basic/basic_model.js
@@ -1362,9 +1362,9 @@ var BasicModel = AbstractModel.extend({
// apply changes to local data
for (var fieldName in changes) {
field = record.fields[fieldName];
- if (field.type === 'one2many' || field.type === 'many2many') {
+ if (field && (field.type === 'one2many' || field.type === 'many2many')) {
defs.push(this._applyX2ManyChange(record, fieldName, changes[fieldName], options));
- } else if (field.type === 'many2one' || field.type === 'reference') {
+ } else if (field && (field.type === 'many2one' || field.type === 'reference')) {
defs.push(this._applyX2OneChange(record, fieldName, changes[fieldName]));
} else {
record._changes[fieldName] = changes[fieldName];
@@ -1379,7 +1379,7 @@ var BasicModel = AbstractModel.extend({
var onChangeFields = []; // the fields that have changed and that have an on_change
for (var fieldName in changes) {
field = record.fields[fieldName];
- if (field.onChange) {
+ if (field && field.onChange) {
var isX2Many = field.type === 'one2many' || field.type === 'many2many';
if (!isX2Many || (self._isX2ManyValid(record._changes[fieldName] || record.data[fieldName]))) {
onChangeFields.push(fieldName);
diff --git a/addons/web/static/src/js/views/kanban/kanban_renderer_mobile.js b/addons/web/static/src/js/views/kanban/kanban_renderer_mobile.js
index eae16968833..dfc86042aca 100644
--- a/addons/web/static/src/js/views/kanban/kanban_renderer_mobile.js
+++ b/addons/web/static/src/js/views/kanban/kanban_renderer_mobile.js
@@ -91,10 +91,15 @@ KanbanRenderer.include({
var index = _.findIndex(this.widgets, {db_id: localID});
var $column = this.widgets[index].$el;
var left = $column.css('left');
+ var right = $column.css('right');
var scrollTop = $column.scrollTop();
return this._super.apply(this, arguments).then(function () {
$column = self.widgets[index].$el;
- $column.css({left: left});
+ if (_t.database.parameters.direction === 'rtl') {
+ $column.css({right: right});
+ } else {
+ $column.css({left: left});
+ }
$column.scrollTop(scrollTop); // required when clicking on 'Load More'
self._enableSwipe();
});
@@ -115,19 +120,40 @@ KanbanRenderer.include({
var self = this;
var moveToIndex = this.activeColumnIndex;
var updateFunc = animate ? 'animate' : 'css';
+ var rtl = _t.database.parameters.direction === 'rtl';
_.each(this.widgets, function (column, index) {
var columnID = column.id || column.db_id;
var $column = self.$('.o_kanban_group[data-id="' + columnID + '"]');
if (index === moveToIndex - 1) {
- $column[updateFunc]({left: '-100%'});
+ if (rtl) {
+ $column[updateFunc]({right: '-100%'});
+ } else {
+ $column[updateFunc]({left: '-100%'});
+ }
} else if (index === moveToIndex + 1) {
- $column[updateFunc]({left: '100%'});
+ if (rtl) {
+ $column[updateFunc]({right: '100%'});
+ } else {
+ $column[updateFunc]({left: '100%'});
+ }
} else if (index === moveToIndex) {
- $column[updateFunc]({left: '0%'});
+ if (rtl) {
+ $column[updateFunc]({right: '0%'});
+ } else {
+ $column[updateFunc]({left: '0%'});
+ }
} else if (index < moveToIndex) {
- $column.css({left: '-100%'});
+ if (rtl) {
+ $column.css({right: '-100%'});
+ } else {
+ $column.css({left: '-100%'});
+ }
} else if (index > moveToIndex) {
- $column.css({left: '100%'});
+ if (rtl) {
+ $column.css({right: '100%'});
+ } else {
+ $column.css({left: '100%'});
+ }
}
});
}
@@ -184,6 +210,7 @@ KanbanRenderer.include({
}
}
// Apply the scroll x on the tabs
+ // XXX in case of RTL, should we use scrollRight?
this.$('.o_kanban_mobile_tabs').scrollLeft(scrollToLeft);
}
},
@@ -213,16 +240,17 @@ KanbanRenderer.include({
*/
_enableSwipe: function () {
var self = this;
+ var step = _t.database.parameters.direction === 'rtl' ? -1 : 1;
this.$el.swipe({
excludedElements: ".o_kanban_mobile_tabs",
swipeLeft: function () {
- var moveToIndex = self.activeColumnIndex + 1;
+ var moveToIndex = self.activeColumnIndex + step;
if (moveToIndex < self.widgets.length) {
self._moveToGroup(moveToIndex, self.ANIMATE);
}
},
swipeRight: function () {
- var moveToIndex = self.activeColumnIndex - 1;
+ var moveToIndex = self.activeColumnIndex - step;
if (moveToIndex > -1) {
self._moveToGroup(moveToIndex, self.ANIMATE);
}
diff --git a/addons/web/static/src/js/views/list/list_editable_renderer.js b/addons/web/static/src/js/views/list/list_editable_renderer.js
index 3c36720081e..f87268ddb1e 100644
--- a/addons/web/static/src/js/views/list/list_editable_renderer.js
+++ b/addons/web/static/src/js/views/list/list_editable_renderer.js
@@ -502,16 +502,16 @@ ListRenderer.include({
switch (field.type) {
case 'binary': return 1;
case 'boolean': return '40px';
- case 'char': return 1;
- case 'date': return '100px';
- case 'datetime': return '150px';
- case 'float': return '100px';
+ case 'char': return 2;
+ case 'date': return '92px';
+ case 'datetime': return '146px';
+ case 'float': return '92px';
case 'html': return 3;
- case 'integer': return '80px';
+ case 'integer': return '74px';
case 'many2many': return 2;
case 'many2one': return 2;
- case 'monetary': return 1.2;
- case 'one2many': return 2.5;
+ case 'monetary': return '104px';
+ case 'one2many': return 2;
case 'reference': return 1.5;
case 'selection': return 1.5;
case 'text': return 2.5;
diff --git a/addons/web/static/src/scss/list_view.scss b/addons/web/static/src/scss/list_view.scss
index 7c766a1cc81..1c148604bc7 100644
--- a/addons/web/static/src/scss/list_view.scss
+++ b/addons/web/static/src/scss/list_view.scss
@@ -38,6 +38,9 @@
&.o_list_many2one {
white-space: pre-wrap;
}
+ &.o_list_text {
+ word-break: break-word;
+ }
}
tfoot {