diff options
| author | Christophe Simonis <chs@odoo.com> | 2015-11-25 16:18:10 +0100 |
|---|---|---|
| committer | Christophe Simonis <chs@odoo.com> | 2015-11-25 16:18:10 +0100 |
| commit | d4906307459f3c67270d6461a7db2367cc24cd20 (patch) | |
| tree | e0bfd33e7afe2634de8228ed68027bdf2fcc10b6 /addons/web/static/src/js/framework | |
| parent | 0ff9a1c34a8019081c1fb2d5f97c984b9c6a1b99 (diff) | |
| parent | b2939537d97624122bddfecaadb2490d2f4c477c (diff) | |
[MERGE] forward port of branch 9.0 up to b293953
Diffstat (limited to 'addons/web/static/src/js/framework')
| -rw-r--r-- | addons/web/static/src/js/framework/data.js | 6 | ||||
| -rw-r--r-- | addons/web/static/src/js/framework/mixins.js | 1 | ||||
| -rw-r--r-- | addons/web/static/src/js/framework/utils.js | 11 |
3 files changed, 17 insertions, 1 deletions
diff --git a/addons/web/static/src/js/framework/data.js b/addons/web/static/src/js/framework/data.js index 8dd34cd4b93..e92bbd98c53 100644 --- a/addons/web/static/src/js/framework/data.js +++ b/addons/web/static/src/js/framework/data.js @@ -761,6 +761,12 @@ var BufferedDataSet = DataSetStatic.extend({ _.extend(cached.from_read, options.from_read); _.extend(cached.changes, options.changes); _.extend(cached.readonly_fields, options.readonly_fields); + // discard values from cached.changes that are in cached.from_read + _.each(cached.changes, function (v, k) { + if (cached.from_read[k] === v) { + delete cached.changes[k]; + } + }); if (options.to_create !== undefined) cached.to_create = options.to_create; if (options.to_delete !== undefined) cached.to_delete = options.to_delete; } diff --git a/addons/web/static/src/js/framework/mixins.js b/addons/web/static/src/js/framework/mixins.js index 2f96da09872..40bdaeb51b4 100644 --- a/addons/web/static/src/js/framework/mixins.js +++ b/addons/web/static/src/js/framework/mixins.js @@ -288,6 +288,7 @@ var EventDispatcherMixin = _.extend({}, ParentedMixin, { this._trigger_up(event); }, _trigger_up: function(event) { + var parent; this.__edispatcherEvents.trigger(event.name, event); if (!event.is_stopped() && (parent = this.getParent())) { parent._trigger_up(event); diff --git a/addons/web/static/src/js/framework/utils.js b/addons/web/static/src/js/framework/utils.js index f99d99ccc14..f1f28d83613 100644 --- a/addons/web/static/src/js/framework/utils.js +++ b/addons/web/static/src/js/framework/utils.js @@ -322,7 +322,16 @@ function round_precision (value, precision) { var epsilon_magnitude = Math.log(Math.abs(normalized_value))/Math.log(2); var epsilon = Math.pow(2, epsilon_magnitude - 53); normalized_value += normalized_value >= 0 ? epsilon : -epsilon; - var rounded_value = Math.round(normalized_value); + + /** + * Javascript performs strictly the round half up method, which is asymmetric. However, in + * Python, the method is symmetric. For example: + * - In JS, Math.round(-0.5) is equal to -0. + * - In Python, round(-0.5) is equal to -1. + * We want to keep the Python behavior for consistency. + */ + var sign = normalized_value < 0 ? -1.0 : 1.0; + var rounded_value = sign * Math.round(Math.abs(normalized_value)); return rounded_value * precision; } |
