-
Notifications
You must be signed in to change notification settings - Fork 0
/
index.js
126 lines (110 loc) · 3.18 KB
/
index.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
import 'core-js/features/object/assign';
import accounting from 'accounting';
import localeCurrency from 'locale-currency';
import curr from './json/currencies';
import localeFormats from './json/localeFormats';
let defaultCurrency = {
symbol: '',
thousandsSeparator: ',',
decimalSeparator: '.',
symbolOnLeft: true,
spaceBetweenAmountAndSymbol: false,
decimalDigits: 2
};
let defaultLocaleFormat = {};
let formatMapping = [
{
symbolOnLeft: true,
spaceBetweenAmountAndSymbol: false,
format: {
pos: '%s%v',
neg: '-%s%v',
zero: '%s%v'
}
},
{
symbolOnLeft: true,
spaceBetweenAmountAndSymbol: true,
format: {
pos: '%s %v',
neg: '-%s %v',
zero: '%s %v'
}
},
{
symbolOnLeft: false,
spaceBetweenAmountAndSymbol: false,
format: {
pos: '%v%s',
neg: '-%v%s',
zero: '%v%s'
}
},
{
symbolOnLeft: false,
spaceBetweenAmountAndSymbol: true,
format: {
pos: '%v %s',
neg: '-%v %s',
zero: '%v %s'
}
}
];
function format(value, options) {
let code = options.code || (options.locale && localeCurrency.getCurrency(options.locale));
let localeMatch = /^([a-z]+)([_-]([a-z]+))?$/i.exec(options.locale) || [];
let language = localeMatch[1];
let region = localeMatch[3];
let localeFormat = Object.assign({}, defaultLocaleFormat,
localeFormats[language] || {},
localeFormats[language + '-' + region] || {});
let currency = Object.assign({}, defaultCurrency, findCurrency(code), localeFormat);
if (!currency.symbol) {
currency.symbol = `${code} `;
}
let symbolOnLeft = currency.symbolOnLeft;
let spaceBetweenAmountAndSymbol = currency.spaceBetweenAmountAndSymbol;
let format = formatMapping.filter(function (f) {
return f.symbolOnLeft === symbolOnLeft && f.spaceBetweenAmountAndSymbol === spaceBetweenAmountAndSymbol
})[0].format;
return accounting.formatMoney(value, {
symbol: (typeof options.symbol === 'undefined')
? currency.symbol
: options.symbol,
decimal: (typeof options.decimal === 'undefined')
? currency.decimalSeparator
: options.decimal,
thousand: (typeof options.thousand === 'undefined')
? currency.thousandsSeparator
: options.thousand,
precision: (typeof options.precision === 'number')
? options.precision
: currency.decimalDigits,
format: ['string', 'object'].indexOf(typeof options.format) > -1
? options.format
: format
});
}
function findCurrency(currencyCode) {
return curr[currencyCode];
}
function unformat(value, options) {
const code = options.code || (options.locale && localeCurrency.getCurrency(options.locale));
const localeFormat = localeFormats[options.locale] || defaultLocaleFormat;
const currency = Object.assign({}, defaultCurrency, findCurrency(code), localeFormat);
const decimal = (typeof options.decimal === 'undefined') ? currency.decimalSeparator : options.decimal;
return accounting.unformat(value, decimal);
}
let currencies = function () {
return Object.keys(curr).map(function (key) {
return curr[key];
});
};;
export {
defaultCurrency,
currencies,
findCurrency,
localeCurrency,
format,
unformat
};