formvalidation-rails 0.7.0 → 0.7.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- 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 || {},
|