Mercurial > pub > ImplabJs
view src/implab/text/format.js @ 19:8332e287d552
fix (click on cospas)
author | nickolay |
---|---|
date | Wed, 04 Oct 2017 21:05:21 +0300 |
parents | 37e9e6bbe87a |
children | f750c89976d3 |
line wrap: on
line source
define([ "../safe", "./format-compile", "dojo/number", "dojo/date/locale", "dojo/_base/array" ], function(safe, compile, number, date, array) { // {short,medium,full,long}-{date,time} var convert = function(value, pattern) { if (!pattern) return value.toString(); if (pattern.toLocaleLowerCase() == "json") { var cache = []; return JSON.stringify(value, function(k, v) { if (!safe.isPrimitive(v)) { var id = array.indexOf(cache, v); if (id >= 0) return "@ref-" + id; else return v; } else { return v; } }); } if (safe.isNumber(value)) { var nopt = {}; if (pattern.indexOf("!") === 0) { nopt.round = -1; pattern = pattern.substr(1); } nopt.pattern = pattern; return number.format(value, nopt); } else if (value instanceof Date) { var m = pattern.match(/^(\w+)-(\w+)$/); if (m) return date.format(value, { selector : m[2], formatLength : m[1] }); else if (pattern == "iso") return value.toISOString(); else return date.format(value, { selector : "date", datePattern : pattern }); } else { return value.toString(pattern); } }; function formatter(format) { var data; if (arguments.length <= 1) return format; data = Array.prototype.slice.call(arguments, 1); var template = compile(format); return template(function(name, pattern) { var value = data[name]; return !safe.isNull(value) ? convert(value, pattern) : ""; }); } formatter.compile = function(format) { var template = compile(format); return function() { var data = arguments; return template(function(name, pattern) { var value = data[name]; return !safe.isNull(value) ? convert(value, pattern) : ""; }); }; }; formatter.convert = convert; return formatter; });