[FIX] handling of date and time formats with bare/literal characters
lp bug: https://launchpad.net/bugs/932448 fixed bzr revid: xmo@openerp.com-20120215153237-4q1y6snebxk6sheh
This commit is contained in:
parent
288f7c7892
commit
a01c57c31f
|
@ -61,6 +61,28 @@ openerp.web.insert_thousand_seps = function (num) {
|
|||
return (negative ? '-' : '') + openerp.web.intersperse(
|
||||
num, _t.database.parameters.grouping, _t.database.parameters.thousands_sep);
|
||||
};
|
||||
|
||||
/**
|
||||
* removes literal (non-format) text from a date or time pattern, as datejs can
|
||||
* not deal with literal text in format strings (whatever the format), whereas
|
||||
* strftime allows for literal characters
|
||||
*
|
||||
* @param {String} value original format
|
||||
*/
|
||||
openerp.web.strip_raw_chars = function (value) {
|
||||
var isletter = /[a-zA-Z]/, output = [];
|
||||
for(var index=0; index < value.length; ++index) {
|
||||
var character = value[index];
|
||||
if(isletter.test(character) && (index === 0 || value[index-1] !== '%')) {
|
||||
continue;
|
||||
}
|
||||
output.push(character);
|
||||
}
|
||||
return output.join('');
|
||||
};
|
||||
var normalize_format = function (format) {
|
||||
return Date.normalizeFormat(openerp.web.strip_raw_chars(format));
|
||||
};
|
||||
/**
|
||||
* Formats a single atomic value based on a field descriptor
|
||||
*
|
||||
|
@ -116,16 +138,16 @@ openerp.web.format_value = function (value, descriptor, value_if_empty) {
|
|||
if (typeof(value) == "string")
|
||||
value = openerp.web.auto_str_to_date(value);
|
||||
|
||||
return value.format(l10n.date_format
|
||||
+ ' ' + l10n.time_format);
|
||||
return value.toString(normalize_format(l10n.date_format)
|
||||
+ ' ' + normalize_format(l10n.time_format));
|
||||
case 'date':
|
||||
if (typeof(value) == "string")
|
||||
value = openerp.web.auto_str_to_date(value);
|
||||
return value.format(l10n.date_format);
|
||||
return value.toString(normalize_format(l10n.date_format));
|
||||
case 'time':
|
||||
if (typeof(value) == "string")
|
||||
value = openerp.web.auto_str_to_date(value);
|
||||
return value.format(l10n.time_format);
|
||||
return value.toString(normalize_format(l10n.time_format));
|
||||
case 'selection':
|
||||
// Each choice is [value, label]
|
||||
if(_.isArray(value)) {
|
||||
|
@ -142,8 +164,8 @@ openerp.web.format_value = function (value, descriptor, value_if_empty) {
|
|||
};
|
||||
|
||||
openerp.web.parse_value = function (value, descriptor, value_if_empty) {
|
||||
var date_pattern = Date.normalizeFormat(_t.database.parameters.date_format),
|
||||
time_pattern = Date.normalizeFormat(_t.database.parameters.time_format);
|
||||
var date_pattern = normalize_format(_t.database.parameters.date_format),
|
||||
time_pattern = normalize_format(_t.database.parameters.time_format);
|
||||
switch (value) {
|
||||
case false:
|
||||
case "":
|
||||
|
|
|
@ -204,4 +204,29 @@ $(document).ready(function () {
|
|||
equal(openerp.web.format_value(6000, {type: 'float'}),
|
||||
'6.000,00');
|
||||
});
|
||||
module('custom-date-formats', {
|
||||
setup: function () {
|
||||
openerp = window.openerp.init();
|
||||
window.openerp.web.core(openerp);
|
||||
window.openerp.web.dates(openerp);
|
||||
window.openerp.web.formats(openerp);
|
||||
}
|
||||
});
|
||||
test('format stripper', function () {
|
||||
strictEqual(openerp.web.strip_raw_chars('%a, %Y %b %d'), '%a, %Y %b %d');
|
||||
strictEqual(openerp.web.strip_raw_chars('%a, %Y.eko %bren %da'), '%a, %Y. %b %d');
|
||||
});
|
||||
test('ES date format', function () {
|
||||
openerp.web._t.database.parameters.date_format = '%a, %Y %b %d';
|
||||
var date = openerp.web.str_to_date("2009-05-04");
|
||||
strictEqual(openerp.web.format_value(date, {type:"date"}), 'Mon, 2009 May 04');
|
||||
strictEqual(openerp.web.parse_value('Mon, 2009 May 04', {type: 'date'}), '2009-05-04');
|
||||
});
|
||||
test('extended ES date format', function () {
|
||||
openerp.web._t.database.parameters.date_format = '%a, %Y.eko %bren %da';
|
||||
var date = openerp.web.str_to_date("2009-05-04");
|
||||
strictEqual(openerp.web.format_value(date, {type:"date"}), 'Mon, 2009. May 04');
|
||||
strictEqual(openerp.web.parse_value('Mon, 2009. May 04', {type: 'date'}), '2009-05-04');
|
||||
});
|
||||
|
||||
});
|
||||
|
|
Loading…
Reference in New Issue