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 | 1×
1×
1×
1×
100×
1×
31×
1×
31×
31×
31×
36×
36×
36×
17×
19×
19×
19×
19×
1×
133×
133×
71×
71×
71×
71×
1569×
1569×
74×
1569×
145×
71×
35×
19×
19×
16×
36×
| import messages from './messages'
var DEFAULT_OPTIONS = {
allowBlank: false,
urlProtocols: ['http', 'https'],
dateFormat: 'yyyy-mm-dd', // ISO
dateYmd: 'ymd',
accept: ['1', 'true'],
caseSensitive: true // confirmation, inclusion, exclusion
}
var Validators = {
formatMessage,
formatSize,
defaultOptions: DEFAULT_OPTIONS,
messages,
pluralRules: {
0: 'zero',
1: 'one'
}
}
export default Validators
function formatSize (size, unit) {
return size + ' ' + unit
}
function formatMessage (msg) {
if (msg.props) {
msg = msg.props
}
let text = msg.defaultMessage || msg.id || ''
let rules = Validators.pluralRules
return !msg.values
? text
: parseMsg(text, function (part) {
let parts = part.split(',')
let count = msg.values[parts[0]]
// {value} OR {count, number}
if (parts.length <= 2) {
return count == null ? '' : '' + count
}
// plural
let plural = parts
.slice(2)
.join(',')
.trim()
let info = {}
let result = parseMsg(plural, null, rules[+count] || 'other', info)
return info.found ? result : parseMsg(plural, null, 'other', {})
})
}
function parseMsg (msg, func, pattern, info) {
let start = msg.indexOf('{')
if (start < 0) return pattern ? '' : msg
let index = start
let count = 1
let len = msg.length
while (count > 0 && index < len) {
++index
if (msg.charAt(index) === '{') {
++count
}
if (msg.charAt(index) === '}') {
--count
}
}
if (pattern) {
if (pattern === msg.slice(0, start).trim()) {
info.found = true
return msg.slice(start + 1, index).trim()
}
return parseMsg(msg.slice(index + 1), null, pattern, info)
}
// func gets all '{.*}' parts
// e.g:
// - {count}
// - {count, plural, one {1 thing} other {many things}}
// - ...
return (
msg.slice(0, start) +
parseMsg(func(msg.slice(start + 1, index).trim()), func) +
parseMsg(msg.slice(index + 1), func)
)
}
|