Mercurial > pub > ImplabJs
comparison src/implab/text/format.js @ 0:fc2517695ee1
Initial commit, draft import of existing work
| author | cin |
|---|---|
| date | Thu, 01 Jun 2017 13:20:03 +0300 |
| parents | |
| children | 93fb6c09f2e1 |
comparison
equal
deleted
inserted
replaced
| -1:000000000000 | 0:fc2517695ee1 |
|---|---|
| 1 define([ | |
| 2 "./safe", | |
| 3 "./format-compile", | |
| 4 "dojo/number", | |
| 5 "dojo/date/locale", | |
| 6 "dojo/_base/array" ], function(safe, compile, number, date, array) { | |
| 7 | |
| 8 // {short,medium,full,long}-{date,time} | |
| 9 var convert = function(value, pattern) { | |
| 10 if (!pattern) | |
| 11 return value.toString(); | |
| 12 | |
| 13 if (pattern.toLocaleLowerCase() == "json") { | |
| 14 var cache = []; | |
| 15 return JSON.stringify(value, function(k, v) { | |
| 16 if (!safe.isPrimitive(v)) { | |
| 17 var id = array.indexOf(cache, v); | |
| 18 if (id >= 0) | |
| 19 return "@ref-" + id; | |
| 20 else | |
| 21 return v; | |
| 22 } else { | |
| 23 return v; | |
| 24 } | |
| 25 }); | |
| 26 } | |
| 27 | |
| 28 if (safe.isNumber(value)) { | |
| 29 var nopt = {}; | |
| 30 if (pattern.indexOf("!") === 0) { | |
| 31 nopt.round = -1; | |
| 32 pattern = pattern.substr(1); | |
| 33 } | |
| 34 nopt.pattern = pattern; | |
| 35 return number.format(value, nopt); | |
| 36 } else if (value instanceof Date) { | |
| 37 var m = pattern.match(/^(\w+)-(\w+)$/); | |
| 38 if (m) | |
| 39 return date.format(value, { | |
| 40 selector : m[2], | |
| 41 formatLength : m[1] | |
| 42 }); | |
| 43 else | |
| 44 return date.format(value, { | |
| 45 selector : "date", | |
| 46 datePattern : pattern | |
| 47 }); | |
| 48 } else { | |
| 49 return value.toString(pattern); | |
| 50 } | |
| 51 }; | |
| 52 | |
| 53 function formatter(format) { | |
| 54 var data; | |
| 55 | |
| 56 if (arguments.length <= 1) | |
| 57 return format; | |
| 58 | |
| 59 data = Array.prototype.slice.call(arguments, 1); | |
| 60 | |
| 61 var template = compile(format); | |
| 62 | |
| 63 return template(function(name, pattern) { | |
| 64 var value = data[name]; | |
| 65 return !safe.isNull(value) ? convert(value, pattern) : ""; | |
| 66 }); | |
| 67 } | |
| 68 | |
| 69 formatter.compile = function(format) { | |
| 70 var template = compile(format); | |
| 71 | |
| 72 return function() { | |
| 73 var data = arguments; | |
| 74 | |
| 75 return template(function(name, pattern) { | |
| 76 var value = data[name]; | |
| 77 return !safe.isNull(value) ? convert(value, pattern) : ""; | |
| 78 }); | |
| 79 }; | |
| 80 }; | |
| 81 | |
| 82 formatter.convert = convert; | |
| 83 | |
| 84 return formatter; | |
| 85 }); |
