diff options
| author | Christophe Simonis <chs@odoo.com> | 2018-01-10 20:35:53 +0100 |
|---|---|---|
| committer | Christophe Simonis <chs@odoo.com> | 2018-01-10 20:35:53 +0100 |
| commit | 782154da11975b9db4620d7d39df3b567f3abcdc (patch) | |
| tree | 8cfe110e53ccfcee7a06421d6367b88d51d60add /addons/web/static/src/js/fields | |
| parent | 61bb46c82ba8113dddc0a95bd86cb029fbbf110e (diff) | |
| parent | f6ef0c776096774fc4c6821449ab42cfc2f53e62 (diff) | |
[MERGE] forward port branch saas-11.1 up to f6ef0c77609
Diffstat (limited to 'addons/web/static/src/js/fields')
| -rw-r--r-- | addons/web/static/src/js/fields/basic_fields.js | 21 | ||||
| -rw-r--r-- | addons/web/static/src/js/fields/field_registry.js | 1 | ||||
| -rw-r--r-- | addons/web/static/src/js/fields/field_utils.js | 22 | ||||
| -rw-r--r-- | addons/web/static/src/js/fields/relational_fields.js | 8 |
4 files changed, 50 insertions, 2 deletions
diff --git a/addons/web/static/src/js/fields/basic_fields.js b/addons/web/static/src/js/fields/basic_fields.js index eb56844de14..d0662fe7cef 100644 --- a/addons/web/static/src/js/fields/basic_fields.js +++ b/addons/web/static/src/js/fields/basic_fields.js @@ -582,6 +582,7 @@ var FieldMonetary = InputField.extend({ this.formatOptions.currency = this.currency; this.formatOptions.digits = [16, 2]; + this.formatOptions.field_digits = this.nodeOptions.field_digits; }, //-------------------------------------------------------------------------- @@ -1311,6 +1312,25 @@ var FieldBinaryFile = AbstractFieldBinary.extend({ }, }); +var FieldBinaryDownloadLink = AbstractFieldBinary.extend({ + template: 'FieldBinaryDownloadLink', + events: _.extend({}, AbstractFieldBinary.prototype.events, { + 'click': function (ev) { + ev.stopPropagation(); + }, + }), + supportedFieldTypes: ['binary'], + init: function () { + this._super.apply(this, arguments); + this.filename = _t("Binary File"); + if (this.nodeOptions.filename && this.recordData[this.nodeOptions.filename]) { + this.filename = this.recordData[this.nodeOptions.filename]; + } + this.url = "data:application/octet-stream;base64," + this.value; + this.text = _t("Download"); + }, +}); + var PriorityWidget = AbstractField.extend({ // the current implementation of this widget makes it // only usable for fields of type selection @@ -2541,6 +2561,7 @@ return { TranslatableFieldMixin: TranslatableFieldMixin, DebouncedField: DebouncedField, FieldEmail: FieldEmail, + FieldBinaryDownloadLink: FieldBinaryDownloadLink, FieldBinaryFile: FieldBinaryFile, FieldBinaryImage: FieldBinaryImage, FieldBoolean: FieldBoolean, diff --git a/addons/web/static/src/js/fields/field_registry.js b/addons/web/static/src/js/fields/field_registry.js index 6692663d5f9..85b4fc1187f 100644 --- a/addons/web/static/src/js/fields/field_registry.js +++ b/addons/web/static/src/js/fields/field_registry.js @@ -33,6 +33,7 @@ registry .add('email', basic_fields.FieldEmail) .add('phone', basic_fields.FieldPhone) .add('url', basic_fields.UrlWidget) + .add('download_link', basic_fields.FieldBinaryDownloadLink) .add('image', basic_fields.FieldBinaryImage) .add('binary', basic_fields.FieldBinaryFile) .add('monetary', basic_fields.FieldMonetary) diff --git a/addons/web/static/src/js/fields/field_utils.js b/addons/web/static/src/js/fields/field_utils.js index 932ea997e6a..812a7f380f7 100644 --- a/addons/web/static/src/js/fields/field_utils.js +++ b/addons/web/static/src/js/fields/field_utils.js @@ -28,6 +28,20 @@ var _t = core._t; //------------------------------------------------------------------------------ /** + * + * @param {string} value base64 representation of the binary + * @param {Object} [field] + * a description of the field (note: this parameter is ignored) + * @param {Object} [options] additional options (note: this parameter is ignored) + */ +function formatBinary(value, field, options) { + if (!value) { + return ''; + } + return utils.human_size(value.length / 1.37); // base64 estimated size: http://en.wikipedia.org/wiki/Base64#MIME +} + +/** * @todo Really? it returns a jQuery element... We should try to avoid this and * let DOM utility functions handle this directly. And replace this with a * function that returns a string so we can get rid of the forceString. @@ -286,8 +300,12 @@ function formatMonetary(value, field, options) { currency = session.get_currency(currency_id); } + var digits = (currency && currency.digits) || options.digits; + if (options.field_digits === true) { + digits = field.digits || digits; + } var formatted_value = formatFloat(value, field, { - digits: (currency && currency.digits) || options.digits, + digits: digits, }); if (!currency || options.noSymbol) { @@ -557,7 +575,7 @@ function parseMany2one(value) { return { format: { - binary: _.identity, // todo + binary: formatBinary, boolean: formatBoolean, char: formatChar, date: formatDate, diff --git a/addons/web/static/src/js/fields/relational_fields.js b/addons/web/static/src/js/fields/relational_fields.js index 677663a4967..1ee40bfccdb 100644 --- a/addons/web/static/src/js/fields/relational_fields.js +++ b/addons/web/static/src/js/fields/relational_fields.js @@ -1019,6 +1019,7 @@ var FieldX2Many = AbstractField.extend({ */ _onEditLine: function (ev) { ev.stopPropagation(); + this.trigger_up('freeze_order', {id: this.value.id}); var editedRecord = this.value.data[ev.data.index]; this.renderer.setRowMode(editedRecord.id, 'edit') .done(ev.data.onSuccess); @@ -1105,6 +1106,7 @@ var FieldX2Many = AbstractField.extend({ */ _onResequence: function (event) { var self = this; + this.trigger_up('freeze_order', {id: this.value.id}); var rowIDs = event.data.rowIDs.slice(); var rowID = rowIDs.pop(); var defs = _.map(rowIDs, function (rowID, index) { @@ -1124,6 +1126,11 @@ var FieldX2Many = AbstractField.extend({ operation: 'UPDATE', id: rowID, data: _.object([event.data.handleField], [event.data.offset + rowIDs.length]), + }).always(function () { + self.trigger_up('toggle_column_order', { + id: self.value.id, + name: event.data.handleField, + }); }); }); }, @@ -1230,6 +1237,7 @@ var FieldOne2Many = FieldX2Many.extend({ } } else if (!this.creatingRecord) { this.creatingRecord = true; + this.trigger_up('freeze_order', {id: this.value.id}); this._setValue({ operation: 'CREATE', position: this.editable, |
