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
*
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)) {
};
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 "":
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');
+ });
+
});