formvalidation-rails 0.7.0 → 0.7.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +1 -1
- data/lib/formvalidation-rails/version.rb +2 -2
- data/vendor/assets/javascripts/formvalidation.js +174 -52
- data/vendor/assets/javascripts/formvalidation.min.js +6 -6
- data/vendor/assets/javascripts/formvalidation/framework/bootstrap.js +2 -2
- data/vendor/assets/javascripts/formvalidation/framework/bootstrap.min.js +2 -2
- data/vendor/assets/javascripts/formvalidation/framework/foundation.js +2 -2
- data/vendor/assets/javascripts/formvalidation/framework/foundation.min.js +2 -2
- data/vendor/assets/javascripts/formvalidation/framework/pure.js +2 -2
- data/vendor/assets/javascripts/formvalidation/framework/pure.min.js +2 -2
- data/vendor/assets/javascripts/formvalidation/framework/semantic.js +2 -2
- data/vendor/assets/javascripts/formvalidation/framework/semantic.min.js +2 -2
- data/vendor/assets/javascripts/formvalidation/framework/uikit.js +13 -7
- data/vendor/assets/javascripts/formvalidation/framework/uikit.min.js +3 -3
- data/vendor/assets/javascripts/formvalidation/language/ar_MA.js +1 -0
- data/vendor/assets/javascripts/formvalidation/language/bg_BG.js +1 -0
- data/vendor/assets/javascripts/formvalidation/language/ca_ES.js +1 -0
- data/vendor/assets/javascripts/formvalidation/language/cs_CZ.js +1 -0
- data/vendor/assets/javascripts/formvalidation/language/da_DK.js +1 -0
- data/vendor/assets/javascripts/formvalidation/language/de_DE.js +2 -1
- data/vendor/assets/javascripts/formvalidation/language/el_GR.js +1 -0
- data/vendor/assets/javascripts/formvalidation/language/en_US.js +1 -0
- data/vendor/assets/javascripts/formvalidation/language/es_CL.js +1 -0
- data/vendor/assets/javascripts/formvalidation/language/es_ES.js +1 -0
- data/vendor/assets/javascripts/formvalidation/language/eu_ES.js +1 -0
- data/vendor/assets/javascripts/formvalidation/language/fa_IR.js +1 -0
- data/vendor/assets/javascripts/formvalidation/language/fi_FI.js +1 -0
- data/vendor/assets/javascripts/formvalidation/language/fr_BE.js +1 -0
- data/vendor/assets/javascripts/formvalidation/language/fr_FR.js +1 -0
- data/vendor/assets/javascripts/formvalidation/language/he_IL.js +1 -0
- data/vendor/assets/javascripts/formvalidation/language/hi_IN.js +1 -0
- data/vendor/assets/javascripts/formvalidation/language/hu_HU.js +1 -0
- data/vendor/assets/javascripts/formvalidation/language/id_ID.js +1 -0
- data/vendor/assets/javascripts/formvalidation/language/it_IT.js +1 -0
- data/vendor/assets/javascripts/formvalidation/language/ja_JP.js +1 -0
- data/vendor/assets/javascripts/formvalidation/language/nl_BE.js +1 -0
- data/vendor/assets/javascripts/formvalidation/language/nl_NL.js +1 -0
- data/vendor/assets/javascripts/formvalidation/language/no_NO.js +1 -0
- data/vendor/assets/javascripts/formvalidation/language/pl_PL.js +1 -0
- data/vendor/assets/javascripts/formvalidation/language/pt_BR.js +1 -0
- data/vendor/assets/javascripts/formvalidation/language/pt_PT.js +1 -0
- data/vendor/assets/javascripts/formvalidation/language/ro_RO.js +1 -0
- data/vendor/assets/javascripts/formvalidation/language/ru_RU.js +1 -0
- data/vendor/assets/javascripts/formvalidation/language/sk_SK.js +1 -0
- data/vendor/assets/javascripts/formvalidation/language/sq_AL.js +1 -0
- data/vendor/assets/javascripts/formvalidation/language/sr_RS.js +1 -0
- data/vendor/assets/javascripts/formvalidation/language/sv_SE.js +1 -0
- data/vendor/assets/javascripts/formvalidation/language/th_TH.js +1 -0
- data/vendor/assets/javascripts/formvalidation/language/tr_TR.js +1 -0
- data/vendor/assets/javascripts/formvalidation/language/ua_UA.js +1 -0
- data/vendor/assets/javascripts/formvalidation/language/vi_VN.js +1 -0
- data/vendor/assets/javascripts/formvalidation/language/zh_CN.js +1 -0
- data/vendor/assets/javascripts/formvalidation/language/zh_TW.js +1 -0
- data/vendor/assets/stylesheets/formvalidation.css +1 -1
- metadata +3 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: f4f643c7c8429cffdf0628d33755863c29f3c6b2
|
4
|
+
data.tar.gz: aea79b0e8185f264e9bcd2ccc1658fc6d80476fc
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 8d55c2bc37e8dfa8e03c4ffb8a3b74b1a7d7c343884a880fe2a643cd108abbae095dea7a2f66da70108b92e211939dec5dbb2bd64ea4838dd65f8722f6c4f1ce
|
7
|
+
data.tar.gz: 9e5fb088a18450cc1e97113dc2f65a544ce870026a3ec170062369e9d83a356a6b0490e2228d57c28c85166d626cd9a620121fe75010ea03aea6a50526024e65
|
data/README.md
CHANGED
@@ -2,9 +2,9 @@
|
|
2
2
|
* FormValidation (http://formvalidation.io)
|
3
3
|
* The best jQuery plugin to validate form fields. Support Bootstrap, Foundation, Pure, SemanticUI, UIKit and custom frameworks
|
4
4
|
*
|
5
|
-
* @version v0.7.
|
5
|
+
* @version v0.7.1, built on 2016-02-01 12:00:57 AM
|
6
6
|
* @author https://twitter.com/formvalidation
|
7
|
-
* @copyright (c) 2013 -
|
7
|
+
* @copyright (c) 2013 - 2016 Nguyen Huu Phuoc
|
8
8
|
* @license http://formvalidation.io/license/
|
9
9
|
*/
|
10
10
|
// Register the namespace
|
@@ -125,11 +125,13 @@ if (typeof jQuery === 'undefined') {
|
|
125
125
|
formInit: this.$form.attr('data-' + ns + '-events-form-init'),
|
126
126
|
formPreValidate: this.$form.attr('data-' + ns + '-events-form-prevalidate'),
|
127
127
|
formError: this.$form.attr('data-' + ns + '-events-form-error'),
|
128
|
+
formReset: this.$form.attr('data-' + ns + '-events-form-reset'),
|
128
129
|
formSuccess: this.$form.attr('data-' + ns + '-events-form-success'),
|
129
130
|
fieldAdded: this.$form.attr('data-' + ns + '-events-field-added'),
|
130
131
|
fieldRemoved: this.$form.attr('data-' + ns + '-events-field-removed'),
|
131
132
|
fieldInit: this.$form.attr('data-' + ns + '-events-field-init'),
|
132
133
|
fieldError: this.$form.attr('data-' + ns + '-events-field-error'),
|
134
|
+
fieldReset: this.$form.attr('data-' + ns + '-events-field-reset'),
|
133
135
|
fieldSuccess: this.$form.attr('data-' + ns + '-events-field-success'),
|
134
136
|
fieldStatus: this.$form.attr('data-' + ns + '-events-field-status'),
|
135
137
|
localeChanged: this.$form.attr('data-' + ns + '-events-locale-changed'),
|
@@ -149,6 +151,7 @@ if (typeof jQuery === 'undefined') {
|
|
149
151
|
message: this.$form.attr('data-' + ns + '-message'),
|
150
152
|
onPreValidate: this.$form.attr('data-' + ns + '-onprevalidate'),
|
151
153
|
onError: this.$form.attr('data-' + ns + '-onerror'),
|
154
|
+
onReset: this.$form.attr('data-' + ns + '-onreset'),
|
152
155
|
onSuccess: this.$form.attr('data-' + ns + '-onsuccess'),
|
153
156
|
row: {
|
154
157
|
selector: this.$form.attr('data-' + ns + '-row-selector') || this.$form.attr('data-' + ns + '-group'), // Support backward
|
@@ -285,6 +288,11 @@ if (typeof jQuery === 'undefined') {
|
|
285
288
|
FormValidation.Helper.call(that.options.onError, [e]);
|
286
289
|
});
|
287
290
|
}
|
291
|
+
if (this.options.onReset) {
|
292
|
+
this.$form.on(this.options.events.formReset, function(e) {
|
293
|
+
FormValidation.Helper.call(that.options.onReset, [e]);
|
294
|
+
});
|
295
|
+
}
|
288
296
|
},
|
289
297
|
|
290
298
|
/**
|
@@ -335,6 +343,7 @@ if (typeof jQuery === 'undefined') {
|
|
335
343
|
type = fields.attr('type'),
|
336
344
|
updateAll = (total === 1) || ('radio' === type) || ('checkbox' === type),
|
337
345
|
trigger = this._getFieldTrigger(fields.eq(0)),
|
346
|
+
clazz = this.options.err.clazz.split(' ').join('.'),
|
338
347
|
events = $.map(trigger, function(item) {
|
339
348
|
return item + '.update.' + ns;
|
340
349
|
}).join(' ');
|
@@ -355,7 +364,7 @@ if (typeof jQuery === 'undefined') {
|
|
355
364
|
}
|
356
365
|
|
357
366
|
// Remove all error messages and feedback icons
|
358
|
-
$message.find('.' +
|
367
|
+
$message.find('.' + clazz + '[data-' + ns + '-validator][data-' + ns + '-for="' + field + '"]').remove();
|
359
368
|
$parent.find('i[data-' + ns + '-icon-for="' + field + '"]').remove();
|
360
369
|
|
361
370
|
// Whenever the user change the field value, mark it as not validated yet
|
@@ -434,8 +443,27 @@ if (typeof jQuery === 'undefined') {
|
|
434
443
|
}
|
435
444
|
}
|
436
445
|
|
446
|
+
// Sort the validators by priority
|
447
|
+
var sortedByPriority = [];
|
448
|
+
for (validatorName in validators) {
|
449
|
+
alias = validators[validatorName].alias || validatorName;
|
450
|
+
|
451
|
+
// Determine the priority
|
452
|
+
validators[validatorName].priority = parseInt(validators[validatorName].priority
|
453
|
+
|| FormValidation.Validator[alias].priority
|
454
|
+
|| 1, 10);
|
455
|
+
sortedByPriority.push({
|
456
|
+
validator: validatorName,
|
457
|
+
priority: validators[validatorName].priority
|
458
|
+
});
|
459
|
+
}
|
460
|
+
sortedByPriority = sortedByPriority.sort(function(a, b) {
|
461
|
+
return a.priority - b.priority;
|
462
|
+
});
|
463
|
+
|
437
464
|
// Prepare the events
|
438
465
|
fields
|
466
|
+
.data(ns + '.validators', sortedByPriority)
|
439
467
|
.on(this.options.events.fieldSuccess, function(e, data) {
|
440
468
|
var onSuccess = that.getOptions(data.field, null, 'onSuccess');
|
441
469
|
if (onSuccess) {
|
@@ -448,6 +476,12 @@ if (typeof jQuery === 'undefined') {
|
|
448
476
|
FormValidation.Helper.call(onError, [e, data]);
|
449
477
|
}
|
450
478
|
})
|
479
|
+
.on(this.options.events.fieldReset, function(e, data) {
|
480
|
+
var onReset = that.getOptions(data.field, null, 'onReset');
|
481
|
+
if (onReset) {
|
482
|
+
FormValidation.Helper.call(onReset, [e, data]);
|
483
|
+
}
|
484
|
+
})
|
451
485
|
.on(this.options.events.fieldStatus, function(e, data) {
|
452
486
|
var onStatus = that.getOptions(data.field, null, 'onStatus');
|
453
487
|
if (onStatus) {
|
@@ -717,7 +751,9 @@ if (typeof jQuery === 'undefined') {
|
|
717
751
|
validator.html5Attributes = $.extend({}, {
|
718
752
|
message: 'message',
|
719
753
|
onerror: 'onError',
|
754
|
+
onreset: 'onReset',
|
720
755
|
onsuccess: 'onSuccess',
|
756
|
+
priority: 'priority',
|
721
757
|
transformer: 'transformer'
|
722
758
|
}, validator.html5Attributes);
|
723
759
|
validators[v] = $.extend({}, html5AttrMap === true ? {} : html5AttrMap, validators[v]);
|
@@ -749,6 +785,7 @@ if (typeof jQuery === 'undefined') {
|
|
749
785
|
icon: $field.attr('data-' + ns + '-icon') || $field.attr('data-' + ns + '-feedbackicons') || (this.options.fields && this.options.fields[field] ? this.options.fields[field].feedbackIcons : null), // Support backward
|
750
786
|
message: $field.attr('data-' + ns + '-message'),
|
751
787
|
onError: $field.attr('data-' + ns + '-onerror'),
|
788
|
+
onReset: $field.attr('data-' + ns + '-onreset'),
|
752
789
|
onStatus: $field.attr('data-' + ns + '-onstatus'),
|
753
790
|
onSuccess: $field.attr('data-' + ns + '-onsuccess'),
|
754
791
|
row: $field.attr('data-' + ns + '-row') || $field.attr('data-' + ns + '-group') || (this.options.fields && this.options.fields[field] ? this.options.fields[field].group : null), // Support backward
|
@@ -1200,12 +1237,13 @@ if (typeof jQuery === 'undefined') {
|
|
1200
1237
|
}
|
1201
1238
|
});
|
1202
1239
|
|
1203
|
-
var total = fields.length
|
1240
|
+
var total = fields.length,
|
1241
|
+
clazz = this.options.err.clazz.split(' ').join('.');
|
1204
1242
|
for (var i = 0; i < total; i++) {
|
1205
1243
|
var $f = fields[i],
|
1206
1244
|
field = $f.attr('data-' + ns + '-field'),
|
1207
1245
|
$errors = $f.data(ns + '.messages')
|
1208
|
-
.find('.' +
|
1246
|
+
.find('.' + clazz + '[data-' + ns + '-validator][data-' + ns + '-for="' + field + '"]');
|
1209
1247
|
|
1210
1248
|
if (this.options.fields && this.options.fields[field]
|
1211
1249
|
&& (this.options.fields[field].enabled === 'false' || this.options.fields[field].enabled === false))
|
@@ -1351,8 +1389,7 @@ if (typeof jQuery === 'undefined') {
|
|
1351
1389
|
* @returns {FormValidation.Base}
|
1352
1390
|
*/
|
1353
1391
|
updateMessage: function(field, validator, message) {
|
1354
|
-
var
|
1355
|
-
ns = this._namespace,
|
1392
|
+
var ns = this._namespace,
|
1356
1393
|
$fields = $([]);
|
1357
1394
|
switch (typeof field) {
|
1358
1395
|
case 'object':
|
@@ -1366,10 +1403,11 @@ if (typeof jQuery === 'undefined') {
|
|
1366
1403
|
break;
|
1367
1404
|
}
|
1368
1405
|
|
1406
|
+
var clazz = this.options.err.clazz.split(' ').join('.');
|
1369
1407
|
$fields.each(function() {
|
1370
1408
|
$(this)
|
1371
1409
|
.data(ns + '.messages')
|
1372
|
-
.find('.' +
|
1410
|
+
.find('.' + clazz + '[data-' + ns + '-validator="' + validator + '"][data-' + ns + '-for="' + field + '"]').html(message);
|
1373
1411
|
});
|
1374
1412
|
|
1375
1413
|
return this;
|
@@ -1411,7 +1449,8 @@ if (typeof jQuery === 'undefined') {
|
|
1411
1449
|
var that = this,
|
1412
1450
|
type = fields.attr('type'),
|
1413
1451
|
row = this.options.fields[field].row || this.options.row.selector,
|
1414
|
-
total = ('radio' === type || 'checkbox' === type) ? 1 : fields.length
|
1452
|
+
total = ('radio' === type || 'checkbox' === type) ? 1 : fields.length,
|
1453
|
+
clazz = this.options.err.clazz.split(' ').join('.');
|
1415
1454
|
|
1416
1455
|
for (var i = 0; i < total; i++) {
|
1417
1456
|
var $field = fields.eq(i);
|
@@ -1421,7 +1460,7 @@ if (typeof jQuery === 'undefined') {
|
|
1421
1460
|
|
1422
1461
|
var $parent = $field.closest(row),
|
1423
1462
|
$message = $field.data(ns + '.messages'),
|
1424
|
-
$allErrors = $message.find('.' +
|
1463
|
+
$allErrors = $message.find('.' + clazz + '[data-' + ns + '-validator][data-' + ns + '-for="' + field + '"]'),
|
1425
1464
|
$errors = validatorName ? $allErrors.filter('[data-' + ns + '-validator="' + validatorName + '"]') : $allErrors,
|
1426
1465
|
$icon = $field.data(ns + '.icon'),
|
1427
1466
|
// Support backward
|
@@ -1614,8 +1653,12 @@ if (typeof jQuery === 'undefined') {
|
|
1614
1653
|
continue;
|
1615
1654
|
}
|
1616
1655
|
|
1617
|
-
var stop
|
1618
|
-
|
1656
|
+
var stop = false,
|
1657
|
+
sortedByPriority = $field.data(ns + '.validators'),
|
1658
|
+
numValidators = sortedByPriority.length;
|
1659
|
+
|
1660
|
+
for (var j = 0; j < numValidators; j++) {
|
1661
|
+
validatorName = sortedByPriority[j].validator;
|
1619
1662
|
if ($field.data(ns + '.dfs.' + validatorName)) {
|
1620
1663
|
$field.data(ns + '.dfs.' + validatorName).reject();
|
1621
1664
|
}
|
@@ -1788,6 +1831,7 @@ if (typeof jQuery === 'undefined') {
|
|
1788
1831
|
}
|
1789
1832
|
|
1790
1833
|
// Remove messages and icons
|
1834
|
+
var clazz = this.options.err.clazz.split(' ').join('.');
|
1791
1835
|
for (field in this.options.fields) {
|
1792
1836
|
fields = this.getFieldElements(field);
|
1793
1837
|
row = this.options.fields[field].row || this.options.row.selector;
|
@@ -1796,9 +1840,10 @@ if (typeof jQuery === 'undefined') {
|
|
1796
1840
|
$field
|
1797
1841
|
// Remove all error messages
|
1798
1842
|
.data(ns + '.messages')
|
1799
|
-
.find('.' +
|
1843
|
+
.find('.' + clazz + '[data-' + ns + '-validator][data-' + ns + '-for="' + field + '"]').remove().end()
|
1800
1844
|
.end()
|
1801
1845
|
.removeData(ns + '.messages')
|
1846
|
+
.removeData(ns + '.validators')
|
1802
1847
|
// Remove feedback classes
|
1803
1848
|
.closest(row)
|
1804
1849
|
.removeClass(this.options.row.valid)
|
@@ -1981,12 +2026,13 @@ if (typeof jQuery === 'undefined') {
|
|
1981
2026
|
break;
|
1982
2027
|
}
|
1983
2028
|
|
1984
|
-
var filter = validator ? '[data-' + ns + '-validator="' + validator + '"]' : ''
|
2029
|
+
var filter = validator ? '[data-' + ns + '-validator="' + validator + '"]' : '',
|
2030
|
+
clazz = this.options.err.clazz.split(' ').join('.');
|
1985
2031
|
$fields.each(function() {
|
1986
2032
|
messages = messages.concat(
|
1987
2033
|
$(this)
|
1988
2034
|
.data(ns + '.messages')
|
1989
|
-
.find('.' +
|
2035
|
+
.find('.' + clazz + '[data-' + ns + '-for="' + $(this).attr('data-' + ns + '-field') + '"][data-' + ns + '-result="' + that.STATUS_INVALID + '"]' + filter)
|
1990
2036
|
.map(function() {
|
1991
2037
|
var v = $(this).attr('data-' + ns + '-validator'),
|
1992
2038
|
f = $(this).attr('data-' + ns + '-for');
|
@@ -2086,9 +2132,10 @@ if (typeof jQuery === 'undefined') {
|
|
2086
2132
|
break;
|
2087
2133
|
}
|
2088
2134
|
|
2089
|
-
var
|
2135
|
+
var i = 0,
|
2136
|
+
total = $fields.length;
|
2090
2137
|
if (this.options.fields[field]) {
|
2091
|
-
for (
|
2138
|
+
for (i = 0; i < total; i++) {
|
2092
2139
|
for (var validator in this.options.fields[field].validators) {
|
2093
2140
|
$fields.eq(i).removeData(ns + '.dfs.' + validator);
|
2094
2141
|
}
|
@@ -2103,6 +2150,15 @@ if (typeof jQuery === 'undefined') {
|
|
2103
2150
|
// Mark field as not validated yet
|
2104
2151
|
this.updateStatus(field, this.STATUS_NOT_VALIDATED);
|
2105
2152
|
|
2153
|
+
for (i = 0; i < total; i++) {
|
2154
|
+
$fields.eq(i).trigger($.Event(this.options.events.fieldReset), {
|
2155
|
+
fv: this,
|
2156
|
+
field: field,
|
2157
|
+
element: $fields.eq(i),
|
2158
|
+
resetValue: resetValue
|
2159
|
+
});
|
2160
|
+
}
|
2161
|
+
|
2106
2162
|
return this;
|
2107
2163
|
},
|
2108
2164
|
|
@@ -2123,6 +2179,11 @@ if (typeof jQuery === 'undefined') {
|
|
2123
2179
|
// Enable submit buttons
|
2124
2180
|
this.disableSubmitButtons(false);
|
2125
2181
|
|
2182
|
+
this.$form.trigger($.Event(this.options.events.formReset), {
|
2183
|
+
fv: this,
|
2184
|
+
resetValue: resetValue
|
2185
|
+
});
|
2186
|
+
|
2126
2187
|
return this;
|
2127
2188
|
},
|
2128
2189
|
|
@@ -2262,11 +2323,13 @@ if (typeof jQuery === 'undefined') {
|
|
2262
2323
|
formInit: 'init.form.fv',
|
2263
2324
|
formPreValidate: 'prevalidate.form.fv',
|
2264
2325
|
formError: 'err.form.fv',
|
2326
|
+
formReset: 'rst.form.fv',
|
2265
2327
|
formSuccess: 'success.form.fv',
|
2266
2328
|
fieldAdded: 'added.field.fv',
|
2267
2329
|
fieldRemoved: 'removed.field.fv',
|
2268
2330
|
fieldInit: 'init.field.fv',
|
2269
2331
|
fieldError: 'err.field.fv',
|
2332
|
+
fieldReset: 'rst.field.fv',
|
2270
2333
|
fieldSuccess: 'success.field.fv',
|
2271
2334
|
fieldStatus: 'status.field.fv',
|
2272
2335
|
localeChanged: 'changed.locale.fv',
|
@@ -2716,6 +2779,8 @@ if (typeof jQuery === 'undefined') {
|
|
2716
2779
|
});
|
2717
2780
|
|
2718
2781
|
FormValidation.Validator.callback = {
|
2782
|
+
priority: 999,
|
2783
|
+
|
2719
2784
|
html5Attributes: {
|
2720
2785
|
message: 'message',
|
2721
2786
|
callback: 'callback'
|
@@ -3478,30 +3543,29 @@ if (typeof jQuery === 'undefined') {
|
|
3478
3543
|
|
3479
3544
|
// Validate day, month, and year
|
3480
3545
|
var valid = FormValidation.Helper.date(year, month, day),
|
3481
|
-
// declare the date, min and max objects
|
3482
3546
|
min = null,
|
3483
3547
|
max = null,
|
3484
3548
|
minOption = options.min,
|
3485
3549
|
maxOption = options.max;
|
3486
3550
|
|
3487
3551
|
if (minOption) {
|
3488
|
-
|
3489
|
-
|
3490
|
-
|
3552
|
+
min = (minOption instanceof Date)
|
3553
|
+
? minOption
|
3554
|
+
: (this._parseDate(minOption, dateFormat, separator) ||
|
3555
|
+
this._parseDate(validator.getDynamicOption($field, minOption), dateFormat, separator));
|
3491
3556
|
|
3492
|
-
min = minOption instanceof Date ? minOption : this._parseDate(minOption, dateFormat, separator);
|
3493
3557
|
// In order to avoid displaying a date string like "Mon Dec 08 2014 19:14:12 GMT+0000 (WET)"
|
3494
|
-
minOption =
|
3558
|
+
minOption = this._formatDate(min, options.format);
|
3495
3559
|
}
|
3496
3560
|
|
3497
3561
|
if (maxOption) {
|
3498
|
-
|
3499
|
-
|
3500
|
-
|
3562
|
+
max = (maxOption instanceof Date)
|
3563
|
+
? maxOption
|
3564
|
+
: (this._parseDate(maxOption, dateFormat, separator) ||
|
3565
|
+
this._parseDate(validator.getDynamicOption($field, maxOption), dateFormat, separator));
|
3501
3566
|
|
3502
|
-
max = maxOption instanceof Date ? maxOption : this._parseDate(maxOption, dateFormat, separator);
|
3503
3567
|
// In order to avoid displaying a date string like "Mon Dec 08 2014 19:14:12 GMT+0000 (WET)"
|
3504
|
-
maxOption =
|
3568
|
+
maxOption = this._formatDate(max, options.format);
|
3505
3569
|
}
|
3506
3570
|
|
3507
3571
|
date = new Date(year, month -1, day, hours, minutes, seconds);
|
@@ -3536,7 +3600,7 @@ if (typeof jQuery === 'undefined') {
|
|
3536
3600
|
/**
|
3537
3601
|
* Return a date object after parsing the date string
|
3538
3602
|
*
|
3539
|
-
* @param {String} date The date string to parse
|
3603
|
+
* @param {Date|String} date The date string to parse
|
3540
3604
|
* @param {String} format The date format
|
3541
3605
|
* The format can be:
|
3542
3606
|
* - date: Consist of DD, MM, YYYY parts which are separated by the separator option
|
@@ -3546,23 +3610,37 @@ if (typeof jQuery === 'undefined') {
|
|
3546
3610
|
* @returns {Date}
|
3547
3611
|
*/
|
3548
3612
|
_parseDate: function(date, format, separator) {
|
3613
|
+
if (date instanceof Date) {
|
3614
|
+
return date;
|
3615
|
+
}
|
3616
|
+
if (typeof date !== 'string') {
|
3617
|
+
return null;
|
3618
|
+
}
|
3619
|
+
|
3620
|
+
// Ensure that the format must consist of year, month and day patterns
|
3621
|
+
var yearIndex = $.inArray('YYYY', format),
|
3622
|
+
monthIndex = $.inArray('MM', format),
|
3623
|
+
dayIndex = $.inArray('DD', format);
|
3624
|
+
if (yearIndex === -1 || monthIndex === -1 || dayIndex === -1) {
|
3625
|
+
return null;
|
3626
|
+
}
|
3627
|
+
|
3549
3628
|
var minutes = 0, hours = 0, seconds = 0,
|
3550
3629
|
sections = date.split(' '),
|
3551
|
-
dateSection = sections[0]
|
3552
|
-
|
3630
|
+
dateSection = sections[0].split(separator);
|
3631
|
+
if (dateSection.length < 3) {
|
3632
|
+
return null;
|
3633
|
+
}
|
3553
3634
|
|
3554
|
-
|
3555
|
-
|
3556
|
-
|
3557
|
-
|
3558
|
-
|
3559
|
-
timeSection = timeSection.split(':');
|
3560
|
-
hours = timeSection.length > 0 ? timeSection[0] : null;
|
3561
|
-
minutes = timeSection.length > 1 ? timeSection[1] : null;
|
3562
|
-
seconds = timeSection.length > 2 ? timeSection[2] : null;
|
3635
|
+
if (sections.length > 1) {
|
3636
|
+
var timeSection = sections[1].split(':');
|
3637
|
+
hours = timeSection.length > 0 ? timeSection[0] : null;
|
3638
|
+
minutes = timeSection.length > 1 ? timeSection[1] : null;
|
3639
|
+
seconds = timeSection.length > 2 ? timeSection[2] : null;
|
3563
3640
|
}
|
3564
3641
|
|
3565
|
-
return new Date(
|
3642
|
+
return new Date(dateSection[yearIndex], dateSection[monthIndex] - 1, dateSection[dayIndex],
|
3643
|
+
hours, minutes, seconds);
|
3566
3644
|
},
|
3567
3645
|
|
3568
3646
|
/**
|
@@ -3680,7 +3758,7 @@ if (typeof jQuery === 'undefined') {
|
|
3680
3758
|
init: function(validator, $field, options, validatorName) {
|
3681
3759
|
var fields = options.field.split(',');
|
3682
3760
|
for (var i = 0; i < fields.length; i++) {
|
3683
|
-
var compareWith = validator.getFieldElements(fields[i]);
|
3761
|
+
var compareWith = validator.getFieldElements($.trim(fields[i]));
|
3684
3762
|
validator.onLiveChange(compareWith, 'live_' + validatorName, function() {
|
3685
3763
|
var status = validator.getStatus($field, validatorName);
|
3686
3764
|
if (status !== validator.STATUS_NOT_VALIDATED) {
|
@@ -3701,7 +3779,7 @@ if (typeof jQuery === 'undefined') {
|
|
3701
3779
|
destroy: function(validator, $field, options, validatorName) {
|
3702
3780
|
var fields = options.field.split(',');
|
3703
3781
|
for (var i = 0; i < fields.length; i++) {
|
3704
|
-
var compareWith = validator.getFieldElements(fields[i]);
|
3782
|
+
var compareWith = validator.getFieldElements($.trim(fields[i]));
|
3705
3783
|
validator.offLiveChange(compareWith, 'live_' + validatorName);
|
3706
3784
|
}
|
3707
3785
|
},
|
@@ -3726,7 +3804,7 @@ if (typeof jQuery === 'undefined') {
|
|
3726
3804
|
isValid = true;
|
3727
3805
|
|
3728
3806
|
for (var i = 0; i < fields.length; i++) {
|
3729
|
-
var compareWith = validator.getFieldElements(fields[i]);
|
3807
|
+
var compareWith = validator.getFieldElements($.trim(fields[i]));
|
3730
3808
|
if (compareWith == null || compareWith.length === 0) {
|
3731
3809
|
continue;
|
3732
3810
|
}
|
@@ -3835,8 +3913,8 @@ if (typeof jQuery === 'undefined') {
|
|
3835
3913
|
KANSAS_CITY: ['40', '44'],
|
3836
3914
|
MEMPHIS: ['94', '95'],
|
3837
3915
|
OGDEN: ['80', '90'],
|
3838
|
-
PHILADELPHIA: ['33', '39', '41', '42', '43', '
|
3839
|
-
INTERNET: ['20', '26', '27', '45', '46'],
|
3916
|
+
PHILADELPHIA: ['33', '39', '41', '42', '43', '48', '62', '63', '64', '66', '68', '71', '72', '73', '74', '75', '76', '77', '81', '82', '83', '84', '85', '86', '87', '88', '91', '92', '93', '98', '99'],
|
3917
|
+
INTERNET: ['20', '26', '27', '45', '46', '47'],
|
3840
3918
|
SMALL_BUSINESS_ADMINISTRATION: ['31']
|
3841
3919
|
},
|
3842
3920
|
|
@@ -4503,6 +4581,7 @@ if (typeof jQuery === 'undefined') {
|
|
4503
4581
|
SK: 'Slovakia',
|
4504
4582
|
SM: 'San Marino',
|
4505
4583
|
TH: 'Thailand',
|
4584
|
+
TR: 'Turkey',
|
4506
4585
|
ZA: 'South Africa'
|
4507
4586
|
}
|
4508
4587
|
}
|
@@ -4518,7 +4597,7 @@ if (typeof jQuery === 'undefined') {
|
|
4518
4597
|
// Supported country codes
|
4519
4598
|
COUNTRY_CODES: [
|
4520
4599
|
'BA', 'BG', 'BR', 'CH', 'CL', 'CN', 'CZ', 'DK', 'EE', 'ES', 'FI', 'HR', 'IE', 'IS', 'LT', 'LV', 'ME', 'MK', 'NL',
|
4521
|
-
'PL', 'RO', 'RS', 'SE', 'SI', 'SK', 'SM', 'TH', 'ZA'
|
4600
|
+
'PL', 'RO', 'RS', 'SE', 'SI', 'SK', 'SM', 'TH', 'TR', 'ZA'
|
4522
4601
|
],
|
4523
4602
|
|
4524
4603
|
/**
|
@@ -5852,6 +5931,26 @@ if (typeof jQuery === 'undefined') {
|
|
5852
5931
|
return (11 - sum % 11) % 10 === parseInt(value.charAt(12), 10);
|
5853
5932
|
},
|
5854
5933
|
|
5934
|
+
/**
|
5935
|
+
* Validate Turkish Identification Number
|
5936
|
+
*
|
5937
|
+
* @see https://en.wikipedia.org/wiki/Turkish_Identification_Number
|
5938
|
+
* @param {String} value The ID
|
5939
|
+
* @returns {Boolean}
|
5940
|
+
*/
|
5941
|
+
_tr: function(value) {
|
5942
|
+
if (value.length !== 11) {
|
5943
|
+
return false;
|
5944
|
+
}
|
5945
|
+
|
5946
|
+
var sum = 0;
|
5947
|
+
for (var i = 0; i < 10; i++) {
|
5948
|
+
sum += parseInt(value.charAt(i), 10);
|
5949
|
+
}
|
5950
|
+
|
5951
|
+
return (sum % 10) === parseInt(value.charAt(10), 10);
|
5952
|
+
},
|
5953
|
+
|
5855
5954
|
/**
|
5856
5955
|
* Validate South African ID
|
5857
5956
|
*
|
@@ -6532,7 +6631,7 @@ if (typeof jQuery === 'undefined') {
|
|
6532
6631
|
return true;
|
6533
6632
|
}
|
6534
6633
|
|
6535
|
-
return /^([0-9A-
|
6634
|
+
return /^([0-9A-Fa-f]{2}[:-]){5}([0-9A-Fa-f]{2})$/.test(value) || /^([0-9A-Fa-f]{4}\.){2}([0-9A-Fa-f]{4})$/.test(value);
|
6536
6635
|
}
|
6537
6636
|
};
|
6538
6637
|
}(jQuery));
|
@@ -6704,10 +6803,19 @@ if (typeof jQuery === 'undefined') {
|
|
6704
6803
|
if (value === '') {
|
6705
6804
|
return true;
|
6706
6805
|
}
|
6806
|
+
|
6707
6807
|
var decimalSeparator = options.separator || options.decimalSeparator || '.',
|
6708
6808
|
thousandsSeparator = options.thousandsSeparator || '';
|
6709
|
-
|
6710
|
-
|
6809
|
+
|
6810
|
+
// Support preceding zero numbers such as .5, -.5
|
6811
|
+
if (value.substr(0, 1) === decimalSeparator) {
|
6812
|
+
value = '0' + decimalSeparator + value.substr(1);
|
6813
|
+
} else if (value.substr(0, 2) === '-' + decimalSeparator) {
|
6814
|
+
value = '-0' + decimalSeparator + value.substr(2);
|
6815
|
+
}
|
6816
|
+
|
6817
|
+
decimalSeparator = (decimalSeparator === '.') ? '\\.' : decimalSeparator;
|
6818
|
+
thousandsSeparator = (thousandsSeparator === '.') ? '\\.' : thousandsSeparator;
|
6711
6819
|
|
6712
6820
|
var testRegexp = new RegExp('^-?[0-9]{1,3}(' + thousandsSeparator + '[0-9]{3})*(' + decimalSeparator + '[0-9]+)?$'),
|
6713
6821
|
thousandsReplacer = new RegExp(thousandsSeparator, 'g');
|
@@ -6938,7 +7046,7 @@ if (typeof jQuery === 'undefined') {
|
|
6938
7046
|
// May start with 1, +1, or 1-; should discard
|
6939
7047
|
// Area code may be delimited with (), & sections may be delimited with . or -
|
6940
7048
|
// http://regexr.com/38mqi
|
6941
|
-
isValid = (/^(?:(1\-?)|(\+1 ?))?\(
|
7049
|
+
isValid = (/^(?:(1\-?)|(\+1 ?))?\(?\d{3}\)?\s?[\-\.]?\d{3}[\-\.]?\d{4}$/).test(value);
|
6942
7050
|
break;
|
6943
7051
|
}
|
6944
7052
|
|
@@ -6959,6 +7067,8 @@ if (typeof jQuery === 'undefined') {
|
|
6959
7067
|
});
|
6960
7068
|
|
6961
7069
|
FormValidation.Validator.promise = {
|
7070
|
+
priority: 999,
|
7071
|
+
|
6962
7072
|
html5Attributes: {
|
6963
7073
|
message: 'message',
|
6964
7074
|
promise: 'promise'
|
@@ -7029,6 +7139,7 @@ if (typeof jQuery === 'undefined') {
|
|
7029
7139
|
FormValidation.Validator.regexp = {
|
7030
7140
|
html5Attributes: {
|
7031
7141
|
message: 'message',
|
7142
|
+
flags: 'flags',
|
7032
7143
|
regexp: 'regexp'
|
7033
7144
|
},
|
7034
7145
|
|
@@ -7050,6 +7161,10 @@ if (typeof jQuery === 'undefined') {
|
|
7050
7161
|
* @param {jQuery} $field Field element
|
7051
7162
|
* @param {Object} options Consists of the following key:
|
7052
7163
|
* - regexp: The regular expression you need to check
|
7164
|
+
* - flags: If specified, flags can have any combination of Javascript regular expression flags such as:
|
7165
|
+
* g: global match
|
7166
|
+
* i: ignore case
|
7167
|
+
* m: multiple line
|
7053
7168
|
* @returns {Boolean}
|
7054
7169
|
*/
|
7055
7170
|
validate: function(validator, $field, options, validatorName) {
|
@@ -7058,7 +7173,9 @@ if (typeof jQuery === 'undefined') {
|
|
7058
7173
|
return true;
|
7059
7174
|
}
|
7060
7175
|
|
7061
|
-
var regexp = ('string' === typeof options.regexp)
|
7176
|
+
var regexp = ('string' === typeof options.regexp)
|
7177
|
+
? (options.flags ? new RegExp(options.regexp, options.flags) : new RegExp(options.regexp))
|
7178
|
+
: options.regexp;
|
7062
7179
|
return regexp.test(value);
|
7063
7180
|
}
|
7064
7181
|
};
|
@@ -7073,7 +7190,10 @@ if (typeof jQuery === 'undefined') {
|
|
7073
7190
|
});
|
7074
7191
|
|
7075
7192
|
FormValidation.Validator.remote = {
|
7193
|
+
priority: 1000,
|
7194
|
+
|
7076
7195
|
html5Attributes: {
|
7196
|
+
async: 'async',
|
7077
7197
|
crossdomain: 'crossDomain',
|
7078
7198
|
data: 'data',
|
7079
7199
|
datatype: 'dataType',
|
@@ -7103,6 +7223,7 @@ if (typeof jQuery === 'undefined') {
|
|
7103
7223
|
* @param {FormValidation.Base} validator Plugin instance
|
7104
7224
|
* @param {jQuery} $field Field element
|
7105
7225
|
* @param {Object} options Can consist of the following keys:
|
7226
|
+
* - async {Boolean} [optional] Indicate the Ajax request will be asynchronous or not. It's true by default
|
7106
7227
|
* - crossDomain {Boolean} [optional]
|
7107
7228
|
* - data {Object|Function} [optional]: By default, it will take the value
|
7108
7229
|
* {
|
@@ -7151,6 +7272,7 @@ if (typeof jQuery === 'undefined') {
|
|
7151
7272
|
data[options.name || name] = value;
|
7152
7273
|
|
7153
7274
|
var ajaxOptions = {
|
7275
|
+
async: options.async === null || options.async === true || options.async === 'true',
|
7154
7276
|
data: data,
|
7155
7277
|
dataType: options.dataType || 'json',
|
7156
7278
|
headers: options.headers || {},
|