bootstrap_validator_rails 0.0.5

Sign up to get free protection for your applications and to get access to all the features.
Files changed (106) hide show
  1. checksums.yaml +7 -0
  2. data/MIT-LICENSE +20 -0
  3. data/Rakefile +32 -0
  4. data/lib/bootstrap_validator_rails/engine.rb +4 -0
  5. data/lib/bootstrap_validator_rails/version.rb +3 -0
  6. data/lib/bootstrap_validator_rails.rb +42 -0
  7. data/lib/tasks/bootstrap_validator_rails_tasks.rake +4 -0
  8. data/test/bootstrap_validator_rails_test.rb +13 -0
  9. data/test/dummy/README.rdoc +28 -0
  10. data/test/dummy/Rakefile +6 -0
  11. data/test/dummy/app/assets/javascripts/application.js +13 -0
  12. data/test/dummy/app/assets/stylesheets/application.css +15 -0
  13. data/test/dummy/app/controllers/application_controller.rb +5 -0
  14. data/test/dummy/app/helpers/application_helper.rb +2 -0
  15. data/test/dummy/app/models/post.rb +3 -0
  16. data/test/dummy/app/views/layouts/application.html.erb +14 -0
  17. data/test/dummy/bin/bundle +3 -0
  18. data/test/dummy/bin/rails +4 -0
  19. data/test/dummy/bin/rake +4 -0
  20. data/test/dummy/config/application.rb +23 -0
  21. data/test/dummy/config/boot.rb +5 -0
  22. data/test/dummy/config/database.yml +25 -0
  23. data/test/dummy/config/environment.rb +5 -0
  24. data/test/dummy/config/environments/development.rb +37 -0
  25. data/test/dummy/config/environments/production.rb +82 -0
  26. data/test/dummy/config/environments/test.rb +39 -0
  27. data/test/dummy/config/initializers/assets.rb +8 -0
  28. data/test/dummy/config/initializers/backtrace_silencers.rb +7 -0
  29. data/test/dummy/config/initializers/cookies_serializer.rb +3 -0
  30. data/test/dummy/config/initializers/filter_parameter_logging.rb +4 -0
  31. data/test/dummy/config/initializers/inflections.rb +16 -0
  32. data/test/dummy/config/initializers/mime_types.rb +4 -0
  33. data/test/dummy/config/initializers/session_store.rb +3 -0
  34. data/test/dummy/config/initializers/wrap_parameters.rb +14 -0
  35. data/test/dummy/config/locales/en.yml +23 -0
  36. data/test/dummy/config/routes.rb +56 -0
  37. data/test/dummy/config/secrets.yml +22 -0
  38. data/test/dummy/config.ru +4 -0
  39. data/test/dummy/db/development.sqlite3 +0 -0
  40. data/test/dummy/db/migrate/20140723124112_create_posts.rb +7 -0
  41. data/test/dummy/db/schema.rb +20 -0
  42. data/test/dummy/db/test.sqlite3 +0 -0
  43. data/test/dummy/log/ENV=test.log +0 -0
  44. data/test/dummy/log/development.log +22 -0
  45. data/test/dummy/log/test.log +781 -0
  46. data/test/dummy/public/404.html +67 -0
  47. data/test/dummy/public/422.html +67 -0
  48. data/test/dummy/public/500.html +66 -0
  49. data/test/dummy/public/favicon.ico +0 -0
  50. data/test/test_helper.rb +15 -0
  51. data/vendor/assets/javascripts/bootstrapValidator.js +1803 -0
  52. data/vendor/assets/javascripts/language/de_DE.js +326 -0
  53. data/vendor/assets/javascripts/language/en_US.js +327 -0
  54. data/vendor/assets/javascripts/language/es_CL.js +326 -0
  55. data/vendor/assets/javascripts/language/hu_HU.js +326 -0
  56. data/vendor/assets/javascripts/language/vi_VN.js +322 -0
  57. data/vendor/assets/javascripts/language/zh_CN.js +326 -0
  58. data/vendor/assets/javascripts/language/zh_TW.js +326 -0
  59. data/vendor/assets/javascripts/validator/base64.js +25 -0
  60. data/vendor/assets/javascripts/validator/between.js +66 -0
  61. data/vendor/assets/javascripts/validator/callback.js +40 -0
  62. data/vendor/assets/javascripts/validator/choice.js +68 -0
  63. data/vendor/assets/javascripts/validator/creditCard.js +103 -0
  64. data/vendor/assets/javascripts/validator/cusip.js +55 -0
  65. data/vendor/assets/javascripts/validator/cvv.js +116 -0
  66. data/vendor/assets/javascripts/validator/date.js +118 -0
  67. data/vendor/assets/javascripts/validator/different.js +41 -0
  68. data/vendor/assets/javascripts/validator/digits.js +24 -0
  69. data/vendor/assets/javascripts/validator/ean.js +40 -0
  70. data/vendor/assets/javascripts/validator/emailAddress.js +31 -0
  71. data/vendor/assets/javascripts/validator/file.js +69 -0
  72. data/vendor/assets/javascripts/validator/greaterThan.js +61 -0
  73. data/vendor/assets/javascripts/validator/grid.js +37 -0
  74. data/vendor/assets/javascripts/validator/hex.js +25 -0
  75. data/vendor/assets/javascripts/validator/hexColor.js +28 -0
  76. data/vendor/assets/javascripts/validator/iban.js +246 -0
  77. data/vendor/assets/javascripts/validator/id.js +815 -0
  78. data/vendor/assets/javascripts/validator/identical.js +40 -0
  79. data/vendor/assets/javascripts/validator/imei.js +44 -0
  80. data/vendor/assets/javascripts/validator/integer.js +28 -0
  81. data/vendor/assets/javascripts/validator/ip.js +48 -0
  82. data/vendor/assets/javascripts/validator/isbn.js +86 -0
  83. data/vendor/assets/javascripts/validator/isin.js +59 -0
  84. data/vendor/assets/javascripts/validator/ismn.js +59 -0
  85. data/vendor/assets/javascripts/validator/issn.js +46 -0
  86. data/vendor/assets/javascripts/validator/lessThan.js +61 -0
  87. data/vendor/assets/javascripts/validator/mac.js +25 -0
  88. data/vendor/assets/javascripts/validator/notEmpty.js +32 -0
  89. data/vendor/assets/javascripts/validator/numeric.js +39 -0
  90. data/vendor/assets/javascripts/validator/phone.js +84 -0
  91. data/vendor/assets/javascripts/validator/regexp.js +42 -0
  92. data/vendor/assets/javascripts/validator/remote.js +70 -0
  93. data/vendor/assets/javascripts/validator/rtn.js +38 -0
  94. data/vendor/assets/javascripts/validator/sedol.js +40 -0
  95. data/vendor/assets/javascripts/validator/siren.js +28 -0
  96. data/vendor/assets/javascripts/validator/siret.js +38 -0
  97. data/vendor/assets/javascripts/validator/step.js +64 -0
  98. data/vendor/assets/javascripts/validator/stringCase.js +36 -0
  99. data/vendor/assets/javascripts/validator/stringLength.js +81 -0
  100. data/vendor/assets/javascripts/validator/uri.js +101 -0
  101. data/vendor/assets/javascripts/validator/uuid.js +46 -0
  102. data/vendor/assets/javascripts/validator/vat.js +1220 -0
  103. data/vendor/assets/javascripts/validator/vin.js +49 -0
  104. data/vendor/assets/javascripts/validator/zipCode.js +162 -0
  105. data/vendor/assets/stylesheets/bootstrapValidator.css +21 -0
  106. 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));