bootstrap_validator_rails 0.0.5
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/MIT-LICENSE +20 -0
- data/Rakefile +32 -0
- data/lib/bootstrap_validator_rails/engine.rb +4 -0
- data/lib/bootstrap_validator_rails/version.rb +3 -0
- data/lib/bootstrap_validator_rails.rb +42 -0
- data/lib/tasks/bootstrap_validator_rails_tasks.rake +4 -0
- data/test/bootstrap_validator_rails_test.rb +13 -0
- data/test/dummy/README.rdoc +28 -0
- data/test/dummy/Rakefile +6 -0
- data/test/dummy/app/assets/javascripts/application.js +13 -0
- data/test/dummy/app/assets/stylesheets/application.css +15 -0
- data/test/dummy/app/controllers/application_controller.rb +5 -0
- data/test/dummy/app/helpers/application_helper.rb +2 -0
- data/test/dummy/app/models/post.rb +3 -0
- data/test/dummy/app/views/layouts/application.html.erb +14 -0
- data/test/dummy/bin/bundle +3 -0
- data/test/dummy/bin/rails +4 -0
- data/test/dummy/bin/rake +4 -0
- data/test/dummy/config/application.rb +23 -0
- data/test/dummy/config/boot.rb +5 -0
- data/test/dummy/config/database.yml +25 -0
- data/test/dummy/config/environment.rb +5 -0
- data/test/dummy/config/environments/development.rb +37 -0
- data/test/dummy/config/environments/production.rb +82 -0
- data/test/dummy/config/environments/test.rb +39 -0
- data/test/dummy/config/initializers/assets.rb +8 -0
- data/test/dummy/config/initializers/backtrace_silencers.rb +7 -0
- data/test/dummy/config/initializers/cookies_serializer.rb +3 -0
- data/test/dummy/config/initializers/filter_parameter_logging.rb +4 -0
- data/test/dummy/config/initializers/inflections.rb +16 -0
- data/test/dummy/config/initializers/mime_types.rb +4 -0
- data/test/dummy/config/initializers/session_store.rb +3 -0
- data/test/dummy/config/initializers/wrap_parameters.rb +14 -0
- data/test/dummy/config/locales/en.yml +23 -0
- data/test/dummy/config/routes.rb +56 -0
- data/test/dummy/config/secrets.yml +22 -0
- data/test/dummy/config.ru +4 -0
- data/test/dummy/db/development.sqlite3 +0 -0
- data/test/dummy/db/migrate/20140723124112_create_posts.rb +7 -0
- data/test/dummy/db/schema.rb +20 -0
- data/test/dummy/db/test.sqlite3 +0 -0
- data/test/dummy/log/ENV=test.log +0 -0
- data/test/dummy/log/development.log +22 -0
- data/test/dummy/log/test.log +781 -0
- data/test/dummy/public/404.html +67 -0
- data/test/dummy/public/422.html +67 -0
- data/test/dummy/public/500.html +66 -0
- data/test/dummy/public/favicon.ico +0 -0
- data/test/test_helper.rb +15 -0
- data/vendor/assets/javascripts/bootstrapValidator.js +1803 -0
- data/vendor/assets/javascripts/language/de_DE.js +326 -0
- data/vendor/assets/javascripts/language/en_US.js +327 -0
- data/vendor/assets/javascripts/language/es_CL.js +326 -0
- data/vendor/assets/javascripts/language/hu_HU.js +326 -0
- data/vendor/assets/javascripts/language/vi_VN.js +322 -0
- data/vendor/assets/javascripts/language/zh_CN.js +326 -0
- data/vendor/assets/javascripts/language/zh_TW.js +326 -0
- data/vendor/assets/javascripts/validator/base64.js +25 -0
- data/vendor/assets/javascripts/validator/between.js +66 -0
- data/vendor/assets/javascripts/validator/callback.js +40 -0
- data/vendor/assets/javascripts/validator/choice.js +68 -0
- data/vendor/assets/javascripts/validator/creditCard.js +103 -0
- data/vendor/assets/javascripts/validator/cusip.js +55 -0
- data/vendor/assets/javascripts/validator/cvv.js +116 -0
- data/vendor/assets/javascripts/validator/date.js +118 -0
- data/vendor/assets/javascripts/validator/different.js +41 -0
- data/vendor/assets/javascripts/validator/digits.js +24 -0
- data/vendor/assets/javascripts/validator/ean.js +40 -0
- data/vendor/assets/javascripts/validator/emailAddress.js +31 -0
- data/vendor/assets/javascripts/validator/file.js +69 -0
- data/vendor/assets/javascripts/validator/greaterThan.js +61 -0
- data/vendor/assets/javascripts/validator/grid.js +37 -0
- data/vendor/assets/javascripts/validator/hex.js +25 -0
- data/vendor/assets/javascripts/validator/hexColor.js +28 -0
- data/vendor/assets/javascripts/validator/iban.js +246 -0
- data/vendor/assets/javascripts/validator/id.js +815 -0
- data/vendor/assets/javascripts/validator/identical.js +40 -0
- data/vendor/assets/javascripts/validator/imei.js +44 -0
- data/vendor/assets/javascripts/validator/integer.js +28 -0
- data/vendor/assets/javascripts/validator/ip.js +48 -0
- data/vendor/assets/javascripts/validator/isbn.js +86 -0
- data/vendor/assets/javascripts/validator/isin.js +59 -0
- data/vendor/assets/javascripts/validator/ismn.js +59 -0
- data/vendor/assets/javascripts/validator/issn.js +46 -0
- data/vendor/assets/javascripts/validator/lessThan.js +61 -0
- data/vendor/assets/javascripts/validator/mac.js +25 -0
- data/vendor/assets/javascripts/validator/notEmpty.js +32 -0
- data/vendor/assets/javascripts/validator/numeric.js +39 -0
- data/vendor/assets/javascripts/validator/phone.js +84 -0
- data/vendor/assets/javascripts/validator/regexp.js +42 -0
- data/vendor/assets/javascripts/validator/remote.js +70 -0
- data/vendor/assets/javascripts/validator/rtn.js +38 -0
- data/vendor/assets/javascripts/validator/sedol.js +40 -0
- data/vendor/assets/javascripts/validator/siren.js +28 -0
- data/vendor/assets/javascripts/validator/siret.js +38 -0
- data/vendor/assets/javascripts/validator/step.js +64 -0
- data/vendor/assets/javascripts/validator/stringCase.js +36 -0
- data/vendor/assets/javascripts/validator/stringLength.js +81 -0
- data/vendor/assets/javascripts/validator/uri.js +101 -0
- data/vendor/assets/javascripts/validator/uuid.js +46 -0
- data/vendor/assets/javascripts/validator/vat.js +1220 -0
- data/vendor/assets/javascripts/validator/vin.js +49 -0
- data/vendor/assets/javascripts/validator/zipCode.js +162 -0
- data/vendor/assets/stylesheets/bootstrapValidator.css +21 -0
- metadata +233 -0
@@ -0,0 +1,326 @@
|
|
1
|
+
(function($) {
|
2
|
+
/**
|
3
|
+
* Simplified Chinese language package
|
4
|
+
* Translated by @tureki
|
5
|
+
*/
|
6
|
+
$.fn.bootstrapValidator.i18n = $.extend(true, $.fn.bootstrapValidator.i18n, {
|
7
|
+
base64: {
|
8
|
+
'default': '請輸入有效的Base64編碼'
|
9
|
+
},
|
10
|
+
between: {
|
11
|
+
'default': '請輸入不小於 %s 且不大於 %s 的值',
|
12
|
+
notInclusive: '請輸入不小於等於 %s 且不大於等於 %s 的值'
|
13
|
+
},
|
14
|
+
callback: {
|
15
|
+
'default': '請輸入有效的值'
|
16
|
+
},
|
17
|
+
choice: {
|
18
|
+
'default': '請輸入有效的值',
|
19
|
+
less: '最少選擇 %s 個選項',
|
20
|
+
more: '最多選擇 %s 個選項',
|
21
|
+
between: '請選擇 %s 至 %s 個選項'
|
22
|
+
},
|
23
|
+
creditCard: {
|
24
|
+
'default': '請輸入有效的信用卡號碼'
|
25
|
+
},
|
26
|
+
cusip: {
|
27
|
+
'default': '請輸入有效的CUSIP'
|
28
|
+
},
|
29
|
+
cvv: {
|
30
|
+
'default': '請輸入有效的CVV'
|
31
|
+
},
|
32
|
+
date: {
|
33
|
+
'default': '請輸入有效的日期'
|
34
|
+
},
|
35
|
+
different: {
|
36
|
+
'default': '請輸入不一樣的值'
|
37
|
+
},
|
38
|
+
digits: {
|
39
|
+
'default': '只能輸入數字'
|
40
|
+
},
|
41
|
+
ean: {
|
42
|
+
'default': '請輸入有效的EAN'
|
43
|
+
},
|
44
|
+
emailAddress: {
|
45
|
+
'default': '請輸入有效的EMAIL'
|
46
|
+
},
|
47
|
+
file: {
|
48
|
+
'default': '請選擇有效的檔案'
|
49
|
+
},
|
50
|
+
greaterThan: {
|
51
|
+
'default': '請輸入大於或等於 %s 的值',
|
52
|
+
notInclusive: '請輸入大於 %s 的值'
|
53
|
+
},
|
54
|
+
grid: {
|
55
|
+
'default': '請輸入有效的GRId'
|
56
|
+
},
|
57
|
+
hex: {
|
58
|
+
'default': '請輸入有效的16位元碼'
|
59
|
+
},
|
60
|
+
hexColor: {
|
61
|
+
'default': '請輸入有效的16位色碼'
|
62
|
+
},
|
63
|
+
iban: {
|
64
|
+
'default': '請輸入有效的IBAN ',
|
65
|
+
countryNotSupported: '不支援該國家代碼 %s',
|
66
|
+
country: '請輸入有效的 %s IBAN編號 ',
|
67
|
+
countries: {
|
68
|
+
AD: '安道爾',
|
69
|
+
AE: '阿聯酋',
|
70
|
+
AL: '阿爾巴尼亞',
|
71
|
+
AO: '安哥拉',
|
72
|
+
AT: '奧地利',
|
73
|
+
AZ: '阿塞拜疆',
|
74
|
+
BA: '波斯尼亞和黑塞哥維那',
|
75
|
+
BE: '比利時',
|
76
|
+
BF: '布基納法索',
|
77
|
+
BG: '保加利亞',
|
78
|
+
BH: '巴林',
|
79
|
+
BI: '布隆迪',
|
80
|
+
BJ: '貝寧',
|
81
|
+
BR: '巴西',
|
82
|
+
CH: '瑞士',
|
83
|
+
CI: '象牙海岸',
|
84
|
+
CM: '喀麥隆',
|
85
|
+
CR: '哥斯達黎加',
|
86
|
+
CV: '佛得角',
|
87
|
+
CY: '塞浦路斯',
|
88
|
+
CZ: '捷克共和國',
|
89
|
+
DE: '德國',
|
90
|
+
DK: '丹麥',
|
91
|
+
DO: '多明尼加共和國',
|
92
|
+
DZ: '阿爾及利亞',
|
93
|
+
EE: '愛沙尼亞',
|
94
|
+
ES: '西班牙',
|
95
|
+
FI: '芬蘭',
|
96
|
+
FO: '法羅群島',
|
97
|
+
FR: '法國',
|
98
|
+
GB: '英國',
|
99
|
+
GE: '格魯吉亞',
|
100
|
+
GI: '直布羅陀',
|
101
|
+
GL: '格陵蘭島',
|
102
|
+
GR: '希臘',
|
103
|
+
GT: '危地馬拉',
|
104
|
+
HR: '克羅地亞',
|
105
|
+
HU: '匈牙利',
|
106
|
+
IE: '愛爾蘭',
|
107
|
+
IL: '以色列',
|
108
|
+
IR: '伊朗',
|
109
|
+
IS: '冰島',
|
110
|
+
IT: '意大利',
|
111
|
+
JO: '喬丹',
|
112
|
+
KW: '科威特',
|
113
|
+
KZ: '哈薩克斯坦',
|
114
|
+
LB: '黎巴嫩',
|
115
|
+
LI: '列支敦士登',
|
116
|
+
LT: '立陶宛',
|
117
|
+
LU: '盧森堡',
|
118
|
+
LV: '拉脫維亞',
|
119
|
+
MC: '摩納哥',
|
120
|
+
MD: '摩爾多瓦',
|
121
|
+
ME: '黑山共和國',
|
122
|
+
MG: '馬達加斯加',
|
123
|
+
MK: '馬其頓',
|
124
|
+
ML: '馬里',
|
125
|
+
MR: '毛里塔尼亞',
|
126
|
+
MT: '馬耳他',
|
127
|
+
MU: '毛里求斯',
|
128
|
+
MZ: '莫桑比克',
|
129
|
+
NL: '荷蘭',
|
130
|
+
NO: '挪威',
|
131
|
+
PK: '巴基斯坦',
|
132
|
+
PL: '波蘭',
|
133
|
+
PS: '巴勒斯坦',
|
134
|
+
PT: '葡萄牙',
|
135
|
+
QA: '卡塔爾',
|
136
|
+
RO: '羅馬尼亞',
|
137
|
+
RS: '塞爾維亞',
|
138
|
+
SA: '沙特阿拉伯',
|
139
|
+
SE: '瑞典',
|
140
|
+
SI: '斯洛文尼亞',
|
141
|
+
SK: '斯洛伐克',
|
142
|
+
SM: '聖馬力諾',
|
143
|
+
SN: '塞內加爾',
|
144
|
+
TN: '突尼斯',
|
145
|
+
TR: '土耳其',
|
146
|
+
VG: '英屬維爾京群島'
|
147
|
+
}
|
148
|
+
},
|
149
|
+
id: {
|
150
|
+
'default': '請輸入有效的身份證字號碼',
|
151
|
+
countryNotSupported: '不支援該國家代碼 %s',
|
152
|
+
country: '請輸入有效的 %s 身份證字號碼',
|
153
|
+
countries: {
|
154
|
+
BA: '波斯尼亞和黑塞哥維那',
|
155
|
+
BG: '保加利亞',
|
156
|
+
BR: '巴西',
|
157
|
+
CH: '瑞士',
|
158
|
+
CL: '智利',
|
159
|
+
CZ: '捷克',
|
160
|
+
DK: '丹麥',
|
161
|
+
EE: '愛沙尼亞',
|
162
|
+
ES: '西班牙語',
|
163
|
+
FI: '芬蘭',
|
164
|
+
HR: '克羅地亞',
|
165
|
+
IE: '愛爾蘭',
|
166
|
+
IS: '冰島',
|
167
|
+
LT: '立陶宛',
|
168
|
+
LV: '拉脫維亞語',
|
169
|
+
ME: '黑山共和國',
|
170
|
+
MK: '馬其頓',
|
171
|
+
NL: '荷蘭',
|
172
|
+
RO: '羅馬尼亞',
|
173
|
+
RS: '塞爾維亞',
|
174
|
+
SE: '瑞典',
|
175
|
+
SI: '斯洛文尼亞',
|
176
|
+
SK: '斯洛伐克',
|
177
|
+
SM: '聖馬力諾',
|
178
|
+
ZA: '南非'
|
179
|
+
}
|
180
|
+
},
|
181
|
+
identical: {
|
182
|
+
'default': '請輸入一樣的值'
|
183
|
+
},
|
184
|
+
imei: {
|
185
|
+
'default': '請輸入有效的IMEI'
|
186
|
+
},
|
187
|
+
integer: {
|
188
|
+
'default': '請輸入有效的整數'
|
189
|
+
},
|
190
|
+
ip: {
|
191
|
+
'default': '請輸入有效的IP位址',
|
192
|
+
ipv4: '請輸入有效的IPv4位址',
|
193
|
+
ipv6: '請輸入有效的IPv6位址'
|
194
|
+
},
|
195
|
+
isbn: {
|
196
|
+
'default': '請輸入有效的ISBN'
|
197
|
+
},
|
198
|
+
isin: {
|
199
|
+
'default': '請輸入有效的ISIN'
|
200
|
+
},
|
201
|
+
ismn: {
|
202
|
+
'default': '請輸入有效的ISMN'
|
203
|
+
},
|
204
|
+
issn: {
|
205
|
+
'default': '請輸入有效的ISSN'
|
206
|
+
},
|
207
|
+
lessThan: {
|
208
|
+
'default': '請輸入小於或等於 %s 的值',
|
209
|
+
notInclusive: '請輸入小於 %s 的值'
|
210
|
+
},
|
211
|
+
mac: {
|
212
|
+
'default': '請輸入有效的MAC位址'
|
213
|
+
},
|
214
|
+
notEmpty: {
|
215
|
+
'default': '欄位不能為空'
|
216
|
+
},
|
217
|
+
numeric: {
|
218
|
+
'default': '請輸入有效的浮點數'
|
219
|
+
},
|
220
|
+
phone: {
|
221
|
+
'default': '請輸入有效的電話號碼',
|
222
|
+
countryNotSupported: '不支援該國家代碼 %s',
|
223
|
+
country: '請輸入有效的 %s 電話號碼',
|
224
|
+
countries: {
|
225
|
+
GB: '英國',
|
226
|
+
US: '美國'
|
227
|
+
}
|
228
|
+
},
|
229
|
+
regexp: {
|
230
|
+
'default': '請輸入有效的值'
|
231
|
+
},
|
232
|
+
remote: {
|
233
|
+
'default': '請輸入有效的值'
|
234
|
+
},
|
235
|
+
rtn: {
|
236
|
+
'default': '請輸入有效的RTN'
|
237
|
+
},
|
238
|
+
sedol: {
|
239
|
+
'default': '請輸入有效的SEDOL'
|
240
|
+
},
|
241
|
+
siren: {
|
242
|
+
'default': '請輸入有效的SIREN'
|
243
|
+
},
|
244
|
+
siret: {
|
245
|
+
'default': '請輸入有效的SIRET'
|
246
|
+
},
|
247
|
+
step: {
|
248
|
+
'default': '請輸入 %s 個有效步驟'
|
249
|
+
},
|
250
|
+
stringCase: {
|
251
|
+
'default': '只能輸入小寫的值',
|
252
|
+
upper: '只能輸入大寫的值'
|
253
|
+
},
|
254
|
+
stringLength: {
|
255
|
+
'default': '請輸入符合長度限制的值',
|
256
|
+
less: '請輸入小於 %s 個字',
|
257
|
+
more: '請輸入大於 %s 個字',
|
258
|
+
between: '請輸入介於 %s 至 %s 個字'
|
259
|
+
},
|
260
|
+
uri: {
|
261
|
+
'default': '請輸入一個有效的鏈接'
|
262
|
+
},
|
263
|
+
uuid: {
|
264
|
+
'default': '請輸入有效的UUID',
|
265
|
+
version: '請輸入符合版本 %s 的UUID'
|
266
|
+
},
|
267
|
+
vat: {
|
268
|
+
'default': '請輸入有效的VAT',
|
269
|
+
countryNotSupported: '不支援該國家代碼 %s',
|
270
|
+
country: '請輸入有效的 %s VAT',
|
271
|
+
countries: {
|
272
|
+
AT: '奧地利',
|
273
|
+
BE: '比利時',
|
274
|
+
BG: '保加利亞',
|
275
|
+
CH: '瑞士',
|
276
|
+
CY: '塞浦路斯',
|
277
|
+
CZ: '捷克',
|
278
|
+
DE: '德語',
|
279
|
+
DK: '丹麥',
|
280
|
+
EE: '愛沙尼亞',
|
281
|
+
ES: '西班牙',
|
282
|
+
FI: '芬蘭',
|
283
|
+
FR: '法語',
|
284
|
+
GB: '英國',
|
285
|
+
GR: '希臘',
|
286
|
+
EL: '希臘',
|
287
|
+
HU: '匈牙利',
|
288
|
+
HR: '克羅地亞',
|
289
|
+
IE: '愛爾蘭',
|
290
|
+
IT: '意大利',
|
291
|
+
LT: '立陶宛',
|
292
|
+
LU: '盧森堡',
|
293
|
+
LV: '拉脫維亞語',
|
294
|
+
MT: '馬耳他',
|
295
|
+
NL: '荷蘭',
|
296
|
+
NO: '挪威',
|
297
|
+
PL: '波蘭',
|
298
|
+
PT: '葡萄牙',
|
299
|
+
RO: '羅馬尼亞',
|
300
|
+
RU: '俄羅斯',
|
301
|
+
RS: '塞爾維亞',
|
302
|
+
SE: '瑞典',
|
303
|
+
SI: '斯洛文尼亞',
|
304
|
+
SK: '斯洛伐克'
|
305
|
+
}
|
306
|
+
},
|
307
|
+
vin: {
|
308
|
+
'default': '請輸入有效的VIN'
|
309
|
+
},
|
310
|
+
zipCode: {
|
311
|
+
'default': '請輸入有效的郵政編碼',
|
312
|
+
countryNotSupported: '不支援該國家代碼 %s',
|
313
|
+
country: '請輸入有效的 %s',
|
314
|
+
countries: {
|
315
|
+
'CA': '加拿大 郵政編碼',
|
316
|
+
'DK': '丹麥 郵政編碼',
|
317
|
+
'GB': '英國 郵政編碼',
|
318
|
+
'IT': '意大利 郵政編碼',
|
319
|
+
'NL': '荷蘭 郵政編碼',
|
320
|
+
'SE': '瑞士 郵政編碼',
|
321
|
+
'SG': '新加坡 郵政編碼',
|
322
|
+
'US': '美國 郵政編碼'
|
323
|
+
}
|
324
|
+
}
|
325
|
+
});
|
326
|
+
}(window.jQuery));
|
@@ -0,0 +1,25 @@
|
|
1
|
+
(function($) {
|
2
|
+
$.fn.bootstrapValidator.i18n.base64 = $.extend($.fn.bootstrapValidator.i18n.base64 || {}, {
|
3
|
+
'default': 'Please enter a valid base 64 encoded'
|
4
|
+
});
|
5
|
+
|
6
|
+
$.fn.bootstrapValidator.validators.base64 = {
|
7
|
+
/**
|
8
|
+
* Return true if the input value is a base 64 encoded string.
|
9
|
+
*
|
10
|
+
* @param {BootstrapValidator} validator The validator plugin instance
|
11
|
+
* @param {jQuery} $field Field element
|
12
|
+
* @param {Object} options Can consist of the following keys:
|
13
|
+
* - message: The invalid message
|
14
|
+
* @returns {Boolean}
|
15
|
+
*/
|
16
|
+
validate: function(validator, $field, options) {
|
17
|
+
var value = $field.val();
|
18
|
+
if (value === '') {
|
19
|
+
return true;
|
20
|
+
}
|
21
|
+
|
22
|
+
return /^(?:[A-Za-z0-9+/]{4})*(?:[A-Za-z0-9+/]{2}==|[A-Za-z0-9+/]{3}=|[A-Za-z0-9+/]{4})$/.test(value);
|
23
|
+
}
|
24
|
+
};
|
25
|
+
}(window.jQuery));
|
@@ -0,0 +1,66 @@
|
|
1
|
+
(function($) {
|
2
|
+
$.fn.bootstrapValidator.i18n.between = $.extend($.fn.bootstrapValidator.i18n.between || {}, {
|
3
|
+
'default': 'Please enter a value between %s and %s',
|
4
|
+
notInclusive: 'Please enter a value between %s and %s strictly'
|
5
|
+
});
|
6
|
+
|
7
|
+
$.fn.bootstrapValidator.validators.between = {
|
8
|
+
html5Attributes: {
|
9
|
+
message: 'message',
|
10
|
+
min: 'min',
|
11
|
+
max: 'max',
|
12
|
+
inclusive: 'inclusive'
|
13
|
+
},
|
14
|
+
|
15
|
+
enableByHtml5: function($field) {
|
16
|
+
if ('range' === $field.attr('type')) {
|
17
|
+
return {
|
18
|
+
min: $field.attr('min'),
|
19
|
+
max: $field.attr('max')
|
20
|
+
};
|
21
|
+
}
|
22
|
+
|
23
|
+
return false;
|
24
|
+
},
|
25
|
+
|
26
|
+
/**
|
27
|
+
* Return true if the input value is between (strictly or not) two given numbers
|
28
|
+
*
|
29
|
+
* @param {BootstrapValidator} validator The validator plugin instance
|
30
|
+
* @param {jQuery} $field Field element
|
31
|
+
* @param {Object} options Can consist of the following keys:
|
32
|
+
* - min
|
33
|
+
* - max
|
34
|
+
*
|
35
|
+
* The min, max keys define the number which the field value compares to. min, max can be
|
36
|
+
* - A number
|
37
|
+
* - Name of field which its value defines the number
|
38
|
+
* - Name of callback function that returns the number
|
39
|
+
* - A callback function that returns the number
|
40
|
+
*
|
41
|
+
* - inclusive [optional]: Can be true or false. Default is true
|
42
|
+
* - message: The invalid message
|
43
|
+
* @returns {Boolean|Object}
|
44
|
+
*/
|
45
|
+
validate: function(validator, $field, options) {
|
46
|
+
var value = $field.val();
|
47
|
+
if (value === '') {
|
48
|
+
return true;
|
49
|
+
}
|
50
|
+
|
51
|
+
var min = $.isNumeric(options.min) ? options.min : validator.getDynamicOption($field, options.min),
|
52
|
+
max = $.isNumeric(options.max) ? options.max : validator.getDynamicOption($field, options.max);
|
53
|
+
|
54
|
+
value = parseFloat(value);
|
55
|
+
return (options.inclusive === true || options.inclusive === undefined)
|
56
|
+
? {
|
57
|
+
valid: value >= min && value <= max,
|
58
|
+
message: $.fn.bootstrapValidator.helpers.format(options.message || $.fn.bootstrapValidator.i18n.between['default'], [min, max])
|
59
|
+
}
|
60
|
+
: {
|
61
|
+
valid: value > min && value < max,
|
62
|
+
message: $.fn.bootstrapValidator.helpers.format(options.message || $.fn.bootstrapValidator.i18n.between.notInclusive, [min, max])
|
63
|
+
};
|
64
|
+
}
|
65
|
+
};
|
66
|
+
}(window.jQuery));
|
@@ -0,0 +1,40 @@
|
|
1
|
+
(function($) {
|
2
|
+
$.fn.bootstrapValidator.i18n.callback = $.extend($.fn.bootstrapValidator.i18n.callback || {}, {
|
3
|
+
'default': 'Please enter a valid value'
|
4
|
+
});
|
5
|
+
|
6
|
+
$.fn.bootstrapValidator.validators.callback = {
|
7
|
+
html5Attributes: {
|
8
|
+
message: 'message',
|
9
|
+
callback: 'callback'
|
10
|
+
},
|
11
|
+
|
12
|
+
/**
|
13
|
+
* Return result from the callback method
|
14
|
+
*
|
15
|
+
* @param {BootstrapValidator} validator The validator plugin instance
|
16
|
+
* @param {jQuery} $field Field element
|
17
|
+
* @param {Object} options Can consist of the following keys:
|
18
|
+
* - callback: The callback method that passes 2 parameters:
|
19
|
+
* callback: function(fieldValue, validator, $field) {
|
20
|
+
* // fieldValue is the value of field
|
21
|
+
* // validator is instance of BootstrapValidator
|
22
|
+
* // $field is the field element
|
23
|
+
* }
|
24
|
+
* - message: The invalid message
|
25
|
+
* @returns {Boolean|Deferred}
|
26
|
+
*/
|
27
|
+
validate: function(validator, $field, options) {
|
28
|
+
var value = $field.val();
|
29
|
+
|
30
|
+
if (options.callback) {
|
31
|
+
var dfd = new $.Deferred(),
|
32
|
+
response = $.fn.bootstrapValidator.helpers.call(options.callback, [value, validator, $field]);
|
33
|
+
dfd.resolve($field, 'callback', 'boolean' === typeof response ? response : response.valid, 'object' === typeof response && response.message ? response.message : null);
|
34
|
+
return dfd;
|
35
|
+
}
|
36
|
+
|
37
|
+
return true;
|
38
|
+
}
|
39
|
+
};
|
40
|
+
}(window.jQuery));
|
@@ -0,0 +1,68 @@
|
|
1
|
+
(function($) {
|
2
|
+
$.fn.bootstrapValidator.i18n.choice = $.extend($.fn.bootstrapValidator.i18n.choice || {}, {
|
3
|
+
'default': 'Please enter a valid value',
|
4
|
+
less: 'Please choose %s options at minimum',
|
5
|
+
more: 'Please choose %s options at maximum',
|
6
|
+
between: 'Please choose %s - %s options'
|
7
|
+
});
|
8
|
+
|
9
|
+
$.fn.bootstrapValidator.validators.choice = {
|
10
|
+
html5Attributes: {
|
11
|
+
message: 'message',
|
12
|
+
min: 'min',
|
13
|
+
max: 'max'
|
14
|
+
},
|
15
|
+
|
16
|
+
/**
|
17
|
+
* Check if the number of checked boxes are less or more than a given number
|
18
|
+
*
|
19
|
+
* @param {BootstrapValidator} validator The validator plugin instance
|
20
|
+
* @param {jQuery} $field Field element
|
21
|
+
* @param {Object} options Consists of following keys:
|
22
|
+
* - min
|
23
|
+
* - max
|
24
|
+
*
|
25
|
+
* At least one of two keys is required
|
26
|
+
* The min, max keys define the number which the field value compares to. min, max can be
|
27
|
+
* - A number
|
28
|
+
* - Name of field which its value defines the number
|
29
|
+
* - Name of callback function that returns the number
|
30
|
+
* - A callback function that returns the number
|
31
|
+
*
|
32
|
+
* - message: The invalid message
|
33
|
+
* @returns {Object}
|
34
|
+
*/
|
35
|
+
validate: function(validator, $field, options) {
|
36
|
+
var numChoices = $field.is('select')
|
37
|
+
? validator.getFieldElements($field.attr('data-bv-field')).find('option').filter(':selected').length
|
38
|
+
: validator.getFieldElements($field.attr('data-bv-field')).filter(':checked').length,
|
39
|
+
min = options.min ? ($.isNumeric(options.min) ? options.min : validator.getDynamicOption($field, options.min)) : null,
|
40
|
+
max = options.max ? ($.isNumeric(options.max) ? options.max : validator.getDynamicOption($field, options.max)) : null,
|
41
|
+
isValid = true,
|
42
|
+
message = options.message || $.fn.bootstrapValidator.i18n.choice['default'];
|
43
|
+
|
44
|
+
if ((min && numChoices < parseInt(min, 10)) || (max && numChoices > parseInt(max, 10))) {
|
45
|
+
isValid = false;
|
46
|
+
}
|
47
|
+
|
48
|
+
switch (true) {
|
49
|
+
case (!!min && !!max):
|
50
|
+
message = $.fn.bootstrapValidator.helpers.format(options.message || $.fn.bootstrapValidator.i18n.choice.between, [parseInt(min, 10), parseInt(max, 10)]);
|
51
|
+
break;
|
52
|
+
|
53
|
+
case (!!min):
|
54
|
+
message = $.fn.bootstrapValidator.helpers.format(options.message || $.fn.bootstrapValidator.i18n.choice.less, parseInt(min, 10));
|
55
|
+
break;
|
56
|
+
|
57
|
+
case (!!max):
|
58
|
+
message = $.fn.bootstrapValidator.helpers.format(options.message || $.fn.bootstrapValidator.i18n.choice.more, parseInt(max, 10));
|
59
|
+
break;
|
60
|
+
|
61
|
+
default:
|
62
|
+
break;
|
63
|
+
}
|
64
|
+
|
65
|
+
return { valid: isValid, message: message };
|
66
|
+
}
|
67
|
+
};
|
68
|
+
}(window.jQuery));
|
@@ -0,0 +1,103 @@
|
|
1
|
+
(function($) {
|
2
|
+
$.fn.bootstrapValidator.i18n.creditCard = $.extend($.fn.bootstrapValidator.i18n.creditCard || {}, {
|
3
|
+
'default': 'Please enter a valid credit card number'
|
4
|
+
});
|
5
|
+
|
6
|
+
$.fn.bootstrapValidator.validators.creditCard = {
|
7
|
+
/**
|
8
|
+
* Return true if the input value is valid credit card number
|
9
|
+
* Based on https://gist.github.com/DiegoSalazar/4075533
|
10
|
+
*
|
11
|
+
* @param {BootstrapValidator} validator The validator plugin instance
|
12
|
+
* @param {jQuery} $field Field element
|
13
|
+
* @param {Object} [options] Can consist of the following key:
|
14
|
+
* - message: The invalid message
|
15
|
+
* @returns {Boolean}
|
16
|
+
*/
|
17
|
+
validate: function(validator, $field, options) {
|
18
|
+
var value = $field.val();
|
19
|
+
if (value === '') {
|
20
|
+
return true;
|
21
|
+
}
|
22
|
+
|
23
|
+
// Accept only digits, dashes or spaces
|
24
|
+
if (/[^0-9-\s]+/.test(value)) {
|
25
|
+
return false;
|
26
|
+
}
|
27
|
+
value = value.replace(/\D/g, '');
|
28
|
+
|
29
|
+
if (!$.fn.bootstrapValidator.helpers.luhn(value)) {
|
30
|
+
return false;
|
31
|
+
}
|
32
|
+
|
33
|
+
// Validate the card number based on prefix (IIN ranges) and length
|
34
|
+
var cards = {
|
35
|
+
AMERICAN_EXPRESS: {
|
36
|
+
length: [15],
|
37
|
+
prefix: ['34', '37']
|
38
|
+
},
|
39
|
+
DINERS_CLUB: {
|
40
|
+
length: [14],
|
41
|
+
prefix: ['300', '301', '302', '303', '304', '305', '36']
|
42
|
+
},
|
43
|
+
DINERS_CLUB_US: {
|
44
|
+
length: [16],
|
45
|
+
prefix: ['54', '55']
|
46
|
+
},
|
47
|
+
DISCOVER: {
|
48
|
+
length: [16],
|
49
|
+
prefix: ['6011', '622126', '622127', '622128', '622129', '62213',
|
50
|
+
'62214', '62215', '62216', '62217', '62218', '62219',
|
51
|
+
'6222', '6223', '6224', '6225', '6226', '6227', '6228',
|
52
|
+
'62290', '62291', '622920', '622921', '622922', '622923',
|
53
|
+
'622924', '622925', '644', '645', '646', '647', '648',
|
54
|
+
'649', '65']
|
55
|
+
},
|
56
|
+
JCB: {
|
57
|
+
length: [16],
|
58
|
+
prefix: ['3528', '3529', '353', '354', '355', '356', '357', '358']
|
59
|
+
},
|
60
|
+
LASER: {
|
61
|
+
length: [16, 17, 18, 19],
|
62
|
+
prefix: ['6304', '6706', '6771', '6709']
|
63
|
+
},
|
64
|
+
MAESTRO: {
|
65
|
+
length: [12, 13, 14, 15, 16, 17, 18, 19],
|
66
|
+
prefix: ['5018', '5020', '5038', '6304', '6759', '6761', '6762', '6763', '6764', '6765', '6766']
|
67
|
+
},
|
68
|
+
MASTERCARD: {
|
69
|
+
length: [16],
|
70
|
+
prefix: ['51', '52', '53', '54', '55']
|
71
|
+
},
|
72
|
+
SOLO: {
|
73
|
+
length: [16, 18, 19],
|
74
|
+
prefix: ['6334', '6767']
|
75
|
+
},
|
76
|
+
UNIONPAY: {
|
77
|
+
length: [16, 17, 18, 19],
|
78
|
+
prefix: ['622126', '622127', '622128', '622129', '62213', '62214',
|
79
|
+
'62215', '62216', '62217', '62218', '62219', '6222', '6223',
|
80
|
+
'6224', '6225', '6226', '6227', '6228', '62290', '62291',
|
81
|
+
'622920', '622921', '622922', '622923', '622924', '622925']
|
82
|
+
},
|
83
|
+
VISA: {
|
84
|
+
length: [16],
|
85
|
+
prefix: ['4']
|
86
|
+
}
|
87
|
+
};
|
88
|
+
|
89
|
+
var type, i;
|
90
|
+
for (type in cards) {
|
91
|
+
for (i in cards[type].prefix) {
|
92
|
+
if (value.substr(0, cards[type].prefix[i].length) === cards[type].prefix[i] // Check the prefix
|
93
|
+
&& $.inArray(value.length, cards[type].length) !== -1) // and length
|
94
|
+
{
|
95
|
+
return true;
|
96
|
+
}
|
97
|
+
}
|
98
|
+
}
|
99
|
+
|
100
|
+
return false;
|
101
|
+
}
|
102
|
+
};
|
103
|
+
}(window.jQuery));
|
@@ -0,0 +1,55 @@
|
|
1
|
+
(function($) {
|
2
|
+
$.fn.bootstrapValidator.i18n.cusip = $.extend($.fn.bootstrapValidator.i18n.cusip || {}, {
|
3
|
+
'default': 'Please enter a valid CUSIP number'
|
4
|
+
});
|
5
|
+
|
6
|
+
$.fn.bootstrapValidator.validators.cusip = {
|
7
|
+
/**
|
8
|
+
* Validate a CUSIP
|
9
|
+
* Examples:
|
10
|
+
* - Valid: 037833100, 931142103, 14149YAR8, 126650BG6
|
11
|
+
* - Invalid: 31430F200, 022615AC2
|
12
|
+
*
|
13
|
+
* @see http://en.wikipedia.org/wiki/CUSIP
|
14
|
+
* @param {BootstrapValidator} validator The validator plugin instance
|
15
|
+
* @param {jQuery} $field Field element
|
16
|
+
* @param {Object} [options] Can consist of the following keys:
|
17
|
+
* - message: The invalid message
|
18
|
+
* @returns {Boolean}
|
19
|
+
*/
|
20
|
+
validate: function(validator, $field, options) {
|
21
|
+
var value = $field.val();
|
22
|
+
if (value === '') {
|
23
|
+
return true;
|
24
|
+
}
|
25
|
+
|
26
|
+
value = value.toUpperCase();
|
27
|
+
if (!/^[0-9A-Z]{9}$/.test(value)) {
|
28
|
+
return false;
|
29
|
+
}
|
30
|
+
|
31
|
+
var converted = $.map(value.split(''), function(item) {
|
32
|
+
var code = item.charCodeAt(0);
|
33
|
+
return (code >= 'A'.charCodeAt(0) && code <= 'Z'.charCodeAt(0))
|
34
|
+
// Replace A, B, C, ..., Z with 10, 11, ..., 35
|
35
|
+
? (code - 'A'.charCodeAt(0) + 10)
|
36
|
+
: item;
|
37
|
+
}),
|
38
|
+
length = converted.length,
|
39
|
+
sum = 0;
|
40
|
+
for (var i = 0; i < length - 1; i++) {
|
41
|
+
var num = parseInt(converted[i], 10);
|
42
|
+
if (i % 2 !== 0) {
|
43
|
+
num *= 2;
|
44
|
+
}
|
45
|
+
if (num > 9) {
|
46
|
+
num -= 9;
|
47
|
+
}
|
48
|
+
sum += num;
|
49
|
+
}
|
50
|
+
|
51
|
+
sum = (10 - (sum % 10)) % 10;
|
52
|
+
return sum === converted[length - 1];
|
53
|
+
}
|
54
|
+
};
|
55
|
+
}(window.jQuery));
|