diff options
| author | Christophe Matthieu <chm@odoo.com> | 2017-02-23 10:14:57 +0100 |
|---|---|---|
| committer | Aaron Bohy <aab@odoo.com> | 2017-04-11 19:44:38 +0200 |
| commit | 173896b62d2c2d3c4acc6be75c3396b29887e4fb (patch) | |
| tree | 09ea86ccb845313e07adbd21c01e7cad1853c85f /addons/web/static/src/js/fields | |
| parent | c9f747dad646b48d3dc9fed799df046180526531 (diff) | |
[REF] web: remove format.js
use 'web.field_utils' instead of 'web.formats'
Diffstat (limited to 'addons/web/static/src/js/fields')
| -rw-r--r-- | addons/web/static/src/js/fields/basic_fields.js | 5 | ||||
| -rw-r--r-- | addons/web/static/src/js/fields/field_utils.js | 61 |
2 files changed, 57 insertions, 9 deletions
diff --git a/addons/web/static/src/js/fields/basic_fields.js b/addons/web/static/src/js/fields/basic_fields.js index d07bcb5dd95..34c2b08e362 100644 --- a/addons/web/static/src/js/fields/basic_fields.js +++ b/addons/web/static/src/js/fields/basic_fields.js @@ -129,8 +129,9 @@ var FieldDate = InputField.extend({ if (this.mode === 'edit') { this.datewidget = this._makeDatePicker(); this.datewidget.on('datetime_changed', this, function () { - if (this.datewidget.get_value() !== this._parseValue(this.value)) { - this._setValue(this.datewidget.get_value()); + var value = this._parseValue(this.datewidget.get_value()); + if (value !== this._parseValue(this.value)) { + this._setValue(value); } }); def = this.datewidget.appendTo('<div>').done(function () { diff --git a/addons/web/static/src/js/fields/field_utils.js b/addons/web/static/src/js/fields/field_utils.js index 3b06af9efc4..fb20839fa2d 100644 --- a/addons/web/static/src/js/fields/field_utils.js +++ b/addons/web/static/src/js/fields/field_utils.js @@ -17,6 +17,10 @@ var session = require('web.session'); var time = require('web.time'); var utils = require('web.utils'); +//////////////////////////////////////////////////////////////////////////////// +// Format +//////////////////////////////////////////////////////////////////////////////// + function format_boolean(value) { var $input = $('<input type="checkbox">') .prop('checked', value) @@ -34,7 +38,7 @@ function format_char(value) { function format_date(value) { var l10n = core._t.database.parameters; var date_format = time.strftime_to_moment_format(l10n.date_format); - return value && moment(time.str_to_date(value)).format(date_format); + return value && moment(time.str_to_date(value), moment.ISO_8601).format(date_format); } function format_datetime(value) { @@ -42,7 +46,7 @@ function format_datetime(value) { var date_format = time.strftime_to_moment_format(l10n.date_format); var time_format = time.strftime_to_moment_format(l10n.time_format); var datetime_format = date_format + ' ' + time_format; - return value && moment(time.str_to_datetime(value)).format(datetime_format); + return value && moment(time.str_to_datetime(value), moment.ISO_8601).format(datetime_format); } // Format a float, according to the local settings @@ -73,7 +77,6 @@ function format_float_time(value) { return _.str.sprintf(pattern, hour, min); } - function format_id(value) { return value ? value.toString() : false; } @@ -140,12 +143,57 @@ function format_selection(value, field) { return val[1]; } +//////////////////////////////////////////////////////////////////////////////// +// Parse +//////////////////////////////////////////////////////////////////////////////// + +function parse_date(value) { + var date_pattern = time.strftime_to_moment_format(core._t.database.parameters.date_format); + var date_pattern_wo_zero = date_pattern.replace('MM','M').replace('DD','D'); + var date = moment(value, [date_pattern, date_pattern_wo_zero, moment.ISO_8601], true); + if (date.isValid() && date.year() >= 1900) { + return time.date_to_str(date.toDate()); + } + date = moment(value, [date_pattern, date_pattern_wo_zero, moment.ISO_8601]); + if (date.isValid()) { + if (date.year() === 0) { + date.year(moment.utc().year()); + } + if (date.year() >= 1900) { + return time.date_to_str(date.toDate()); + } + } + throw new Error(_.str.sprintf(core._t("'%s' is not a correct date"), value)); +} + +function parse_datetime(value) { + var date_pattern = time.strftime_to_moment_format(core._t.database.parameters.date_format), + time_pattern = time.strftime_to_moment_format(core._t.database.parameters.time_format); + var date_pattern_wo_zero = date_pattern.replace('MM','M').replace('DD','D'), + time_pattern_wo_zero = time_pattern.replace('HH','H').replace('mm','m').replace('ss','s'); + var pattern1 = date_pattern + ' ' + time_pattern; + var pattern2 = date_pattern_wo_zero + ' ' + time_pattern_wo_zero; + var datetime = moment(value, [pattern1, pattern2, moment.ISO_8601], true); + if (datetime.isValid() && datetime.year() >= 1900) { + return time.datetime_to_str(datetime.toDate()); + } + datetime = moment(value, [pattern1, pattern2, moment.ISO_8601]); + if (datetime.isValid()) { + if (datetime.year() === 0) { + datetime.year(moment.utc().year()); + } + if (datetime.year() >= 1900) { + return time.datetime_to_str(datetime.toDate()); + } + } + throw new Error(_.str.sprintf(core._t("'%s' is not a correct datetime"), value)); +} + function parse_field(value, field) { var parser = result['parse_' + field.type]; return parser(value, field); } - function parse_float(value) { value = value.replace(new RegExp(core._t.database.parameters.thousands_sep, "g"), ''); value = value.replace(core._t.database.parameters.decimal_point, '.'); @@ -216,8 +264,8 @@ var result = { parse_binary: identity, // todo parse_boolean: identity, // todo parse_char: identity, // todo - parse_date: identity, // todo - parse_datetime: identity, // todo + parse_date: parse_date, // todo + parse_datetime: parse_datetime, // todo parse_float: parse_float, parse_float_time: parse_float_time, parse_html: identity, // todo @@ -232,7 +280,6 @@ var result = { parse_text: identity, // todo parse_field: parse_field, - }; return result; |
