OLD | NEW |
1 part of angular.filter; | 1 part of angular.formatter_internal; |
2 | 2 |
3 /** | 3 /** |
4 * Formats a number as a currency (ie $1,234.56). When no currency symbol is | 4 * Formats a number as a currency (ie $1,234.56). When no currency symbol is |
5 * provided, '$' used. | 5 * provided, '$' used. |
6 * | 6 * |
7 * | 7 * |
8 * Usage: | 8 * Usage: |
9 * | 9 * |
10 * {{ numeric_expression | currency[:symbol[:leading]] }} | 10 * {{ numeric_expression | currency[:symbol[:leading]] }} |
11 * | 11 * |
12 */ | 12 */ |
13 @NgFilter(name:'currency') | 13 @Formatter(name:'currency') |
14 class CurrencyFilter { | 14 class Currency implements Function { |
15 NumberFormat nf = new NumberFormat(); | |
16 | 15 |
17 CurrencyFilter() { | 16 var _nfs = new Map<String, NumberFormat>(); |
18 nf.minimumFractionDigits = 2; | |
19 nf.maximumFractionDigits = 2; | |
20 } | |
21 | 17 |
22 /** | 18 /** |
23 * [value]: the value to format | 19 * [value]: the value to format |
24 * | 20 * |
25 * [symbol]: Symbol to use. | 21 * [symbol]: Symbol to use. |
26 * | 22 * |
27 * [leading]: Symbol should be placed in front of the number | 23 * [leading]: Symbol should be placed in front of the number |
28 */ | 24 */ |
29 call(value, [symbol = r'$', leading = true]) { | 25 call(value, [symbol = r'$', leading = true]) { |
30 if (value is String) value = double.parse(value); | 26 if (value is String) value = double.parse(value); |
31 if (value is! num) return value; | 27 if (value is! num) return value; |
32 if (value.isNaN) return ''; | 28 if (value.isNaN) return ''; |
| 29 var verifiedLocale = Intl.verifiedLocale(Intl.getCurrentLocale(), NumberForm
at.localeExists); |
| 30 var nf = _nfs[verifiedLocale]; |
| 31 if (nf == null) { |
| 32 nf = new NumberFormat(); |
| 33 nf.minimumFractionDigits = 2; |
| 34 nf.maximumFractionDigits = 2; |
| 35 _nfs[verifiedLocale] = nf; |
| 36 } |
33 var neg = value < 0; | 37 var neg = value < 0; |
34 if (neg) value = -value; | 38 if (neg) value = -value; |
35 var before = neg ? '(' : ''; | 39 var before = neg ? '(' : ''; |
36 var after = neg ? ')' : ''; | 40 var after = neg ? ')' : ''; |
37 return leading ? | 41 return leading ? |
38 '$before$symbol${nf.format(value)}$after' : | 42 '$before$symbol${nf.format(value)}$after' : |
39 '$before${nf.format(value)}$symbol$after'; | 43 '$before${nf.format(value)}$symbol$after'; |
40 } | 44 } |
41 } | 45 } |
OLD | NEW |