parsley-rails 2.7.0.0 → 2.8.1.0
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 +5 -5
- data/lib/parsley-rails/version.rb +1 -1
- data/vendor/assets/javascripts/parsley.i18n.et.js +29 -0
- data/vendor/assets/javascripts/parsley.i18n.tk.js +29 -0
- data/vendor/assets/javascripts/parsley.js +205 -157
- data/vendor/assets/javascripts/parsley.js.map +1 -1
- data/vendor/assets/javascripts/parsley.min.js +4 -4
- data/vendor/assets/javascripts/parsley.min.js.map +1 -1
- metadata +5 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
|
-
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: b79a31170c5d026f30e041abcb75854a13ee9bd944ed3e8ec7085f5c9d7a4789
|
4
|
+
data.tar.gz: 2bf9da88978b2470b6f24c26ceefec3f6846aec9d437094ca4d0c40b23d9b9f9
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: c9c21f4c71bec8c557669a1d309d95b886f29d55850da21efc3bec6e713a9346466198e4ccaec336c30b54e3ae1cfa2c323988bf9279f718f95e708072ea8b82
|
7
|
+
data.tar.gz: e36bc896f0df9b0a8f6af038e6aa60c392cebeb86a7ba2719b9900a56a1a652c710080c8d1c2b5587f66d34c6c33cf591fe22e2cf80e10ed4a801a03a5511ba9
|
@@ -0,0 +1,29 @@
|
|
1
|
+
// Validation errors messages for Parsley
|
2
|
+
// Load this after Parsley
|
3
|
+
|
4
|
+
Parsley.addMessages('et', {
|
5
|
+
defaultMessage: "See väärtus ei sobi.",
|
6
|
+
type: {
|
7
|
+
email: "See väärtus peab olema kehtiv email.",
|
8
|
+
url: "See väärtus peab olema kehtiv link.",
|
9
|
+
number: "See väärtus peab olema number.",
|
10
|
+
integer: "See väärtus peab olema täisarv.",
|
11
|
+
digits: "See väärtus peab olema number.",
|
12
|
+
alphanum: "See väärtus peab olema täht või number."
|
13
|
+
},
|
14
|
+
notblank: "See väärtus ei tohi olla tühi.",
|
15
|
+
required: "See väärtus on nõutud.",
|
16
|
+
pattern: "See väärtus ei sobi.",
|
17
|
+
min: "See väärtus peab olema suurem või võrdne %s.",
|
18
|
+
max: "See väärtus peab olema väiksem või võrdne %s.",
|
19
|
+
range: "See väärtus peab olema %s ja %s vahel.",
|
20
|
+
minlength: "See väärtus on liiga lühike. Peab olema vähemalt %s tähte.",
|
21
|
+
maxlength: "See väärtus ei tohi olla rohkem kui %s tähte.",
|
22
|
+
length: "See väärtuse pikkus ei sobi. Peab olema vahemikus %s - %s.",
|
23
|
+
mincheck: "Pead valima vähemalt %s valikut.",
|
24
|
+
maxcheck: "Maksimaalselt %s valikut.",
|
25
|
+
check: "Valik peab olema vahemikus %s ja %s .",
|
26
|
+
equalto: "See väärtus peab olema sama."
|
27
|
+
});
|
28
|
+
|
29
|
+
Parsley.setLocale('et');
|
@@ -0,0 +1,29 @@
|
|
1
|
+
// Validation errors messages for Parsley
|
2
|
+
// Load this after Parsley
|
3
|
+
|
4
|
+
Parsley.addMessages('tk', {
|
5
|
+
defaultMessage: "Bu maglumat nädogry.",
|
6
|
+
type: {
|
7
|
+
email: "Dogry e-poçta adresi ýazmaly.",
|
8
|
+
url: "Dogry web sahypa salgysy ýazmaly.",
|
9
|
+
number: "Dogry san ýazmaly.",
|
10
|
+
integer: "Dogry bitin san ýazmaly.",
|
11
|
+
digits: "San ýazmaly.",
|
12
|
+
alphanum: "San ýa-da harp ýazmaly."
|
13
|
+
},
|
14
|
+
notblank: "Bu ýeri boş goýmaly däl.",
|
15
|
+
required: "Bu ýeri doldurmak hökmany.",
|
16
|
+
pattern: "Bu maglumat nädogry.",
|
17
|
+
min: "Iň azyndan %s ýa-da ondan uly bolmaly.",
|
18
|
+
max: "Iň köp %s ýa-da ondan kiçi bolmaly.",
|
19
|
+
range: "Bu ýer %s we %s aralygynda san bolmaly.",
|
20
|
+
minlength: "Bu ýeriň uzynlygy iň azyndan %s harp ýa-da ondan köp bolmaly.",
|
21
|
+
maxlength: "Bu ýeriň uzynlygy iň köp %s harp ýa-da ondan az bolmaly.",
|
22
|
+
length: "Bu ýeriň uzynlygy %s we %s harp aralygynda bolmaly.",
|
23
|
+
mincheck: "Iň azyndan %s sanysyny saýlamaly.",
|
24
|
+
maxcheck: "Iň köp %s sanysyny saýlamaly.",
|
25
|
+
check: "Iň az %s, iň köp %s sanysyny saýlamaly.",
|
26
|
+
equalto: "Bu maglumat deň bolmaly."
|
27
|
+
});
|
28
|
+
|
29
|
+
Parsley.setLocale('tk');
|
@@ -1,6 +1,6 @@
|
|
1
1
|
/*!
|
2
2
|
* Parsley.js
|
3
|
-
* Version 2.
|
3
|
+
* Version 2.8.1 - built Sat, Feb 3rd 2018, 2:27 pm
|
4
4
|
* http://parsleyjs.org
|
5
5
|
* Guillaume Potier - <guillaume@wisembly.com>
|
6
6
|
* Marc-Andre Lafortune - <petroselinum@marc-andre.ca>
|
@@ -14,6 +14,8 @@ var _slice = Array.prototype.slice;
|
|
14
14
|
|
15
15
|
var _slicedToArray = (function () { function sliceIterator(arr, i) { var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i['return']) _i['return'](); } finally { if (_d) throw _e; } } return _arr; } return function (arr, i) { if (Array.isArray(arr)) { return arr; } else if (Symbol.iterator in Object(arr)) { return sliceIterator(arr, i); } else { throw new TypeError('Invalid attempt to destructure non-iterable instance'); } }; })();
|
16
16
|
|
17
|
+
var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };
|
18
|
+
|
17
19
|
function _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) arr2[i] = arr[i]; return arr2; } else { return Array.from(arr); } }
|
18
20
|
|
19
21
|
(function (global, factory) {
|
@@ -24,10 +26,10 @@ function _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr
|
|
24
26
|
var globalID = 1;
|
25
27
|
var pastWarnings = {};
|
26
28
|
|
27
|
-
var
|
29
|
+
var Utils = {
|
28
30
|
// Parsley DOM-API
|
29
31
|
// returns object from dom attributes and values
|
30
|
-
attr: function attr(
|
32
|
+
attr: function attr(element, namespace, obj) {
|
31
33
|
var i;
|
32
34
|
var attribute;
|
33
35
|
var attributes;
|
@@ -40,9 +42,9 @@ function _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr
|
|
40
42
|
}
|
41
43
|
}
|
42
44
|
|
43
|
-
if (
|
45
|
+
if (!element) return obj;
|
44
46
|
|
45
|
-
attributes =
|
47
|
+
attributes = element.attributes;
|
46
48
|
for (i = attributes.length; i--;) {
|
47
49
|
attribute = attributes[i];
|
48
50
|
|
@@ -54,12 +56,16 @@ function _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr
|
|
54
56
|
return obj;
|
55
57
|
},
|
56
58
|
|
57
|
-
checkAttr: function checkAttr(
|
58
|
-
return
|
59
|
+
checkAttr: function checkAttr(element, namespace, _checkAttr) {
|
60
|
+
return element.hasAttribute(namespace + _checkAttr);
|
61
|
+
},
|
62
|
+
|
63
|
+
setAttr: function setAttr(element, namespace, attr, value) {
|
64
|
+
element.setAttribute(this.dasherize(namespace + attr), String(value));
|
59
65
|
},
|
60
66
|
|
61
|
-
|
62
|
-
|
67
|
+
getType: function getType(element) {
|
68
|
+
return element.getAttribute('type') || 'text';
|
63
69
|
},
|
64
70
|
|
65
71
|
generateID: function generateID() {
|
@@ -67,12 +73,11 @@ function _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr
|
|
67
73
|
},
|
68
74
|
|
69
75
|
/** Third party functions **/
|
70
|
-
// Zepto deserialize function
|
71
76
|
deserializeValue: function deserializeValue(value) {
|
72
77
|
var num;
|
73
78
|
|
74
79
|
try {
|
75
|
-
return value ? value == "true" || (value == "false" ? false : value == "null" ? null : !isNaN(num = Number(value)) ? num : /^[\[\{]/.test(value) ?
|
80
|
+
return value ? value == "true" || (value == "false" ? false : value == "null" ? null : !isNaN(num = Number(value)) ? num : /^[\[\{]/.test(value) ? JSON.parse(value) : value) : value;
|
76
81
|
} catch (e) {
|
77
82
|
return value;
|
78
83
|
}
|
@@ -146,7 +151,7 @@ function _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr
|
|
146
151
|
return !/^\s*false\s*$/i.test(string);
|
147
152
|
},
|
148
153
|
object: function object(string) {
|
149
|
-
return
|
154
|
+
return Utils.deserializeValue(string);
|
150
155
|
},
|
151
156
|
regexp: function regexp(_regexp) {
|
152
157
|
var flags = '';
|
@@ -218,8 +223,6 @@ function _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr
|
|
218
223
|
_SubmitSelector: 'input[type="submit"], button:submit'
|
219
224
|
};
|
220
225
|
|
221
|
-
var Utils__default = Utils__Utils;
|
222
|
-
|
223
226
|
// All these options could be overriden and specified directly in DOM using
|
224
227
|
// `data-parsley-` default DOM-API
|
225
228
|
// eg: `inputs` can be set in DOM using `data-parsley-inputs="input, textarea"`
|
@@ -286,7 +289,7 @@ function _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr
|
|
286
289
|
};
|
287
290
|
|
288
291
|
var Base = function Base() {
|
289
|
-
this.__id__ =
|
292
|
+
this.__id__ = Utils.generateID();
|
290
293
|
};
|
291
294
|
|
292
295
|
Base.prototype = {
|
@@ -304,14 +307,14 @@ function _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr
|
|
304
307
|
},
|
305
308
|
|
306
309
|
actualizeOptions: function actualizeOptions() {
|
307
|
-
|
310
|
+
Utils.attr(this.element, this.options.namespace, this.domOptions);
|
308
311
|
if (this.parent && this.parent.actualizeOptions) this.parent.actualizeOptions();
|
309
312
|
return this;
|
310
313
|
},
|
311
314
|
|
312
315
|
_resetOptions: function _resetOptions(initOptions) {
|
313
|
-
this.domOptions =
|
314
|
-
this.options =
|
316
|
+
this.domOptions = Utils.objectCreate(this.parent.options);
|
317
|
+
this.options = Utils.objectCreate(this.domOptions);
|
315
318
|
// Shallow copy of ownProperties of initOptions:
|
316
319
|
for (var i in initOptions) {
|
317
320
|
if (initOptions.hasOwnProperty(i)) this.options[i] = initOptions[i];
|
@@ -377,19 +380,19 @@ function _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr
|
|
377
380
|
},
|
378
381
|
|
379
382
|
asyncIsValid: function asyncIsValid(group, force) {
|
380
|
-
|
383
|
+
Utils.warnOnce("asyncIsValid is deprecated; please use whenValid instead");
|
381
384
|
return this.whenValid({ group: group, force: force });
|
382
385
|
},
|
383
386
|
|
384
387
|
_findRelated: function _findRelated() {
|
385
|
-
return this.options.multiple ? this.parent
|
388
|
+
return this.options.multiple ? $(this.parent.element.querySelectorAll('[' + this.options.namespace + 'multiple="' + this.options.multiple + '"]')) : this.$element;
|
386
389
|
}
|
387
390
|
};
|
388
391
|
|
389
392
|
var convertArrayRequirement = function convertArrayRequirement(string, length) {
|
390
393
|
var m = string.match(/^\s*\[(.*)\]\s*$/);
|
391
394
|
if (!m) throw 'Requirement is not an array: "' + string + '"';
|
392
|
-
var values = m[1].split(',').map(
|
395
|
+
var values = m[1].split(',').map(Utils.trimString);
|
393
396
|
if (values.length !== length) throw 'Requirement has ' + values.length + ' values when ' + length + ' are needed';
|
394
397
|
return values;
|
395
398
|
};
|
@@ -400,10 +403,10 @@ function _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr
|
|
400
403
|
for (var key in requirementSpec) {
|
401
404
|
if (key) {
|
402
405
|
var value = extraOptionReader(key);
|
403
|
-
if ('string' === typeof value) value =
|
406
|
+
if ('string' === typeof value) value = Utils.parseRequirement(requirementSpec[key], value);
|
404
407
|
extra[key] = value;
|
405
408
|
} else {
|
406
|
-
main =
|
409
|
+
main = Utils.parseRequirement(requirementSpec[key], string);
|
407
410
|
}
|
408
411
|
}
|
409
412
|
return [main, extra];
|
@@ -426,13 +429,13 @@ function _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr
|
|
426
429
|
return this.fn(value, requirementFirstArg);
|
427
430
|
}
|
428
431
|
|
429
|
-
if (
|
432
|
+
if (Array.isArray(value)) {
|
430
433
|
if (!this.validateMultiple) throw 'Validator `' + this.name + '` does not handle multiple values';
|
431
434
|
return this.validateMultiple.apply(this, arguments);
|
432
435
|
} else {
|
433
436
|
var instance = arguments[arguments.length - 1];
|
434
437
|
if (this.validateDate && instance._isDateInput()) {
|
435
|
-
arguments[0] =
|
438
|
+
arguments[0] = Utils.parse.date(arguments[0]);
|
436
439
|
if (arguments[0] === null) return false;
|
437
440
|
return this.validateDate.apply(this, arguments);
|
438
441
|
}
|
@@ -454,17 +457,17 @@ function _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr
|
|
454
457
|
if ('string' !== typeof requirements) {
|
455
458
|
// Assume requirement already parsed
|
456
459
|
// but make sure we return an array
|
457
|
-
return
|
460
|
+
return Array.isArray(requirements) ? requirements : [requirements];
|
458
461
|
}
|
459
462
|
var type = this.requirementType;
|
460
|
-
if (
|
463
|
+
if (Array.isArray(type)) {
|
461
464
|
var values = convertArrayRequirement(requirements, type.length);
|
462
|
-
for (var i = 0; i < values.length; i++) values[i] =
|
465
|
+
for (var i = 0; i < values.length; i++) values[i] = Utils.parseRequirement(type[i], values[i]);
|
463
466
|
return values;
|
464
467
|
} else if ($.isPlainObject(type)) {
|
465
468
|
return convertExtraOptionRequirement(type, requirements, extraOptionReader);
|
466
469
|
} else {
|
467
|
-
return [
|
470
|
+
return [Utils.parseRequirement(type, requirements)];
|
468
471
|
}
|
469
472
|
},
|
470
473
|
// Defaults:
|
@@ -484,7 +487,7 @@ function _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr
|
|
484
487
|
};
|
485
488
|
|
486
489
|
var typeTesters = {
|
487
|
-
email: /^((([a-
|
490
|
+
email: /^((([a-zA-Z]|\d|[!#\$%&'\*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+(\.([a-zA-Z]|\d|[!#\$%&'\*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+)*)|((\x22)((((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(([\x01-\x08\x0b\x0c\x0e-\x1f\x7f]|\x21|[\x23-\x5b]|[\x5d-\x7e]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(\\([\x01-\x09\x0b\x0c\x0d-\x7f]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]))))*(((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(\x22)))@((([a-zA-Z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-zA-Z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-zA-Z]|\d|-|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-zA-Z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.)+(([a-zA-Z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-zA-Z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-zA-Z]|\d|-|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-zA-Z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))$/,
|
488
491
|
|
489
492
|
// Follow https://www.w3.org/TR/html5/infrastructure.html#floating-point-numbers
|
490
493
|
number: /^-?(\d*\.)?\d+(e[-+]?\d+)?$/i,
|
@@ -497,7 +500,7 @@ function _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr
|
|
497
500
|
|
498
501
|
date: {
|
499
502
|
test: function test(value) {
|
500
|
-
return
|
503
|
+
return Utils.parse.date(value) !== null;
|
501
504
|
}
|
502
505
|
},
|
503
506
|
|
@@ -518,15 +521,15 @@ function _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr
|
|
518
521
|
// (first & last IP address of each class)
|
519
522
|
"(?:[1-9]\\d?|1\\d\\d|2[01]\\d|22[0-3])" + "(?:\\.(?:1?\\d{1,2}|2[0-4]\\d|25[0-5])){2}" + "(?:\\.(?:[1-9]\\d?|1\\d\\d|2[0-4]\\d|25[0-4]))" + "|" +
|
520
523
|
// host name
|
521
|
-
'(?:(?:[a-
|
524
|
+
'(?:(?:[a-zA-Z\\u00a1-\\uffff0-9]-*)*[a-zA-Z\\u00a1-\\uffff0-9]+)' +
|
522
525
|
// domain name
|
523
|
-
'(?:\\.(?:[a-
|
526
|
+
'(?:\\.(?:[a-zA-Z\\u00a1-\\uffff0-9]-*)*[a-zA-Z\\u00a1-\\uffff0-9]+)*' +
|
524
527
|
// TLD identifier
|
525
|
-
'(?:\\.(?:[a-
|
528
|
+
'(?:\\.(?:[a-zA-Z\\u00a1-\\uffff]{2,}))' + ")" +
|
526
529
|
// port number
|
527
530
|
"(?::\\d{2,5})?" +
|
528
531
|
// resource path
|
529
|
-
"(?:/\\S*)?" + "$"
|
532
|
+
"(?:/\\S*)?" + "$")
|
530
533
|
};
|
531
534
|
typeTesters.range = typeTesters.number;
|
532
535
|
|
@@ -545,7 +548,7 @@ function _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr
|
|
545
548
|
|
546
549
|
// parseArguments('number', ['1', '2']) => [1, 2]
|
547
550
|
var ValidatorRegistry__parseArguments = function ValidatorRegistry__parseArguments(type, args) {
|
548
|
-
return args.map(
|
551
|
+
return args.map(Utils.parse[type]);
|
549
552
|
};
|
550
553
|
// operatorToValidator returns a validating function for an operator function, applied to the given type
|
551
554
|
var ValidatorRegistry__operatorToValidator = function ValidatorRegistry__operatorToValidator(type, operator) {
|
@@ -572,7 +575,7 @@ function _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr
|
|
572
575
|
init: function init(validators, catalog) {
|
573
576
|
this.catalog = catalog;
|
574
577
|
// Copy prototype's validators:
|
575
|
-
this.validators =
|
578
|
+
this.validators = _extends({}, this.validators);
|
576
579
|
|
577
580
|
for (var name in validators) this.addValidator(name, validators[name].fn, validators[name].priority);
|
578
581
|
|
@@ -628,23 +631,27 @@ function _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr
|
|
628
631
|
// Old API was addValidator(name, function, priority)
|
629
632
|
//
|
630
633
|
addValidator: function addValidator(name, arg1, arg2) {
|
631
|
-
if (this.validators[name])
|
632
|
-
|
634
|
+
if (this.validators[name]) Utils.warn('Validator "' + name + '" is already defined.');else if (Defaults.hasOwnProperty(name)) {
|
635
|
+
Utils.warn('"' + name + '" is a restricted keyword and is not a valid validator name.');
|
633
636
|
return;
|
634
637
|
}
|
635
638
|
return this._setValidator.apply(this, arguments);
|
636
639
|
},
|
637
640
|
|
641
|
+
hasValidator: function hasValidator(name) {
|
642
|
+
return !!this.validators[name];
|
643
|
+
},
|
644
|
+
|
638
645
|
updateValidator: function updateValidator(name, arg1, arg2) {
|
639
646
|
if (!this.validators[name]) {
|
640
|
-
|
647
|
+
Utils.warn('Validator "' + name + '" is not already defined.');
|
641
648
|
return this.addValidator.apply(this, arguments);
|
642
649
|
}
|
643
650
|
return this._setValidator.apply(this, arguments);
|
644
651
|
},
|
645
652
|
|
646
653
|
removeValidator: function removeValidator(name) {
|
647
|
-
if (!this.validators[name])
|
654
|
+
if (!this.validators[name]) Utils.warn('Validator "' + name + '" is not defined.');
|
648
655
|
|
649
656
|
delete this.validators[name];
|
650
657
|
|
@@ -853,14 +860,14 @@ function _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr
|
|
853
860
|
this.$element.on('submit.Parsley', function (evt) {
|
854
861
|
_this2.onSubmitValidate(evt);
|
855
862
|
});
|
856
|
-
this.$element.on('click.Parsley',
|
863
|
+
this.$element.on('click.Parsley', Utils._SubmitSelector, function (evt) {
|
857
864
|
_this2.onSubmitButton(evt);
|
858
865
|
});
|
859
866
|
|
860
867
|
// UI could be disabled
|
861
868
|
if (false === this.options.uiEnabled) return;
|
862
869
|
|
863
|
-
this
|
870
|
+
this.element.setAttribute('novalidate', '');
|
864
871
|
},
|
865
872
|
|
866
873
|
focus: function focus() {
|
@@ -1008,6 +1015,7 @@ function _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr
|
|
1008
1015
|
var assert = _ref5.assert;
|
1009
1016
|
|
1010
1017
|
this._insertErrorWrapper();
|
1018
|
+
this._ui.$errorClassHandler.attr('aria-describedby', this._ui.errorsWrapperId);
|
1011
1019
|
this._ui.$errorsWrapper.addClass('filled').append($(this.options.errorTemplate).addClass('parsley-' + name).html(message || this._getErrorMessage(assert)));
|
1012
1020
|
},
|
1013
1021
|
|
@@ -1019,6 +1027,7 @@ function _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr
|
|
1019
1027
|
},
|
1020
1028
|
|
1021
1029
|
_removeError: function _removeError(name) {
|
1030
|
+
this._ui.$errorClassHandler.removeAttr('aria-describedby');
|
1022
1031
|
this._ui.$errorsWrapper.removeClass('filled').find('.parsley-' + name).remove();
|
1023
1032
|
},
|
1024
1033
|
|
@@ -1037,7 +1046,7 @@ function _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr
|
|
1037
1046
|
var _ui = {};
|
1038
1047
|
|
1039
1048
|
// Give field its Parsley id in DOM
|
1040
|
-
this
|
1049
|
+
this.element.setAttribute(this.options.namespace + 'id', this.__id__);
|
1041
1050
|
|
1042
1051
|
/** Generate important UI elements and store them in this **/
|
1043
1052
|
// $errorClassHandler is the $element that woul have parsley-error and parsley-success classes
|
@@ -1057,37 +1066,50 @@ function _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr
|
|
1057
1066
|
|
1058
1067
|
// Determine which element will have `parsley-error` and `parsley-success` classes
|
1059
1068
|
_manageClassHandler: function _manageClassHandler() {
|
1060
|
-
//
|
1069
|
+
// Class handled could also be determined by function given in Parsley options
|
1061
1070
|
if ('string' === typeof this.options.classHandler && $(this.options.classHandler).length) return $(this.options.classHandler);
|
1062
1071
|
|
1063
1072
|
// Class handled could also be determined by function given in Parsley options
|
1064
|
-
var $
|
1073
|
+
var $handlerFunction = this.options.classHandler;
|
1074
|
+
|
1075
|
+
// It might also be the function name of a global function
|
1076
|
+
if ('string' === typeof this.options.classHandler && 'function' === typeof window[this.options.classHandler]) $handlerFunction = window[this.options.classHandler];
|
1065
1077
|
|
1066
|
-
|
1067
|
-
|
1078
|
+
if ('function' === typeof $handlerFunction) {
|
1079
|
+
var $handler = $handlerFunction.call(this, this);
|
1080
|
+
|
1081
|
+
// If this function returned a valid existing DOM element, go for it
|
1082
|
+
if ('undefined' !== typeof $handler && $handler.length) return $handler;
|
1083
|
+
} else if ('object' === typeof $handlerFunction && $handlerFunction instanceof jQuery && $handlerFunction.length) {
|
1084
|
+
return $handlerFunction;
|
1085
|
+
} else if ($handlerFunction) {
|
1086
|
+
Utils.warn('The class handler `' + $handlerFunction + '` does not exist in DOM nor as a global JS function');
|
1087
|
+
}
|
1068
1088
|
|
1069
1089
|
return this._inputHolder();
|
1070
1090
|
},
|
1071
1091
|
|
1072
1092
|
_inputHolder: function _inputHolder() {
|
1073
1093
|
// if simple element (input, texatrea, select...) it will perfectly host the classes and precede the error container
|
1074
|
-
if (!this.options.multiple || this
|
1094
|
+
if (!this.options.multiple || this.element.nodeName === 'SELECT') return this.$element;
|
1075
1095
|
|
1076
1096
|
// But if multiple element (radio, checkbox), that would be their parent
|
1077
1097
|
return this.$element.parent();
|
1078
1098
|
},
|
1079
1099
|
|
1080
1100
|
_insertErrorWrapper: function _insertErrorWrapper() {
|
1081
|
-
var $errorsContainer;
|
1101
|
+
var $errorsContainer = this.options.errorsContainer;
|
1082
1102
|
|
1083
1103
|
// Nothing to do if already inserted
|
1084
1104
|
if (0 !== this._ui.$errorsWrapper.parent().length) return this._ui.$errorsWrapper.parent();
|
1085
1105
|
|
1086
|
-
if ('string' === typeof
|
1087
|
-
if ($(
|
1088
|
-
}
|
1106
|
+
if ('string' === typeof $errorsContainer) {
|
1107
|
+
if ($($errorsContainer).length) return $($errorsContainer).append(this._ui.$errorsWrapper);else if ('function' === typeof window[$errorsContainer]) $errorsContainer = window[$errorsContainer];else Utils.warn('The errors container `' + $errorsContainer + '` does not exist in DOM nor as a global JS function');
|
1108
|
+
}
|
1109
|
+
|
1110
|
+
if ('function' === typeof $errorsContainer) $errorsContainer = $errorsContainer.call(this, this);
|
1089
1111
|
|
1090
|
-
if ('
|
1112
|
+
if ('object' === typeof $errorsContainer && $errorsContainer.length) return $errorsContainer.append(this._ui.$errorsWrapper);
|
1091
1113
|
|
1092
1114
|
return this._inputHolder().after(this._ui.$errorsWrapper);
|
1093
1115
|
},
|
@@ -1100,9 +1122,9 @@ function _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr
|
|
1100
1122
|
|
1101
1123
|
// Remove Parsley events already bound on this field
|
1102
1124
|
$toBind.off('.Parsley');
|
1103
|
-
if (this._failedOnce) $toBind.on(
|
1125
|
+
if (this._failedOnce) $toBind.on(Utils.namespaceEvents(this.options.triggerAfterFailure, 'Parsley'), function () {
|
1104
1126
|
_this3._validateIfNeeded();
|
1105
|
-
});else if (trigger =
|
1127
|
+
});else if (trigger = Utils.namespaceEvents(this.options.trigger, 'Parsley')) {
|
1106
1128
|
$toBind.on(trigger, function (event) {
|
1107
1129
|
_this3._validateIfNeeded(event);
|
1108
1130
|
});
|
@@ -1168,6 +1190,7 @@ function _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr
|
|
1168
1190
|
var Form = function Form(element, domOptions, options) {
|
1169
1191
|
this.__class__ = 'Form';
|
1170
1192
|
|
1193
|
+
this.element = element;
|
1171
1194
|
this.$element = $(element);
|
1172
1195
|
this.domOptions = domOptions;
|
1173
1196
|
this.options = options;
|
@@ -1187,10 +1210,12 @@ function _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr
|
|
1187
1210
|
if (true === event.parsley) return;
|
1188
1211
|
|
1189
1212
|
// If we didn't come here through a submit button, use the first one in the form
|
1190
|
-
var
|
1191
|
-
this.
|
1213
|
+
var submitSource = this._submitSource || this.$element.find(Utils._SubmitSelector)[0];
|
1214
|
+
this._submitSource = null;
|
1192
1215
|
this.$element.find('.parsley-synthetic-submit-button').prop('disabled', true);
|
1193
|
-
if (
|
1216
|
+
if (submitSource && null !== submitSource.getAttribute('formnovalidate')) return;
|
1217
|
+
|
1218
|
+
window.Parsley._remoteCache = {};
|
1194
1219
|
|
1195
1220
|
var promise = this.whenValidate({ event: event });
|
1196
1221
|
|
@@ -1202,30 +1227,30 @@ function _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr
|
|
1202
1227
|
event.stopImmediatePropagation();
|
1203
1228
|
event.preventDefault();
|
1204
1229
|
if ('pending' === promise.state()) promise.done(function () {
|
1205
|
-
_this5._submit(
|
1230
|
+
_this5._submit(submitSource);
|
1206
1231
|
});
|
1207
1232
|
}
|
1208
1233
|
},
|
1209
1234
|
|
1210
1235
|
onSubmitButton: function onSubmitButton(event) {
|
1211
|
-
this.
|
1236
|
+
this._submitSource = event.currentTarget;
|
1212
1237
|
},
|
1213
1238
|
// internal
|
1214
1239
|
// _submit submits the form, this time without going through the validations.
|
1215
1240
|
// Care must be taken to "fake" the actual submit button being clicked.
|
1216
|
-
_submit: function _submit(
|
1241
|
+
_submit: function _submit(submitSource) {
|
1217
1242
|
if (false === this._trigger('submit')) return;
|
1218
1243
|
// Add submit button's data
|
1219
|
-
if (
|
1244
|
+
if (submitSource) {
|
1220
1245
|
var $synthetic = this.$element.find('.parsley-synthetic-submit-button').prop('disabled', false);
|
1221
1246
|
if (0 === $synthetic.length) $synthetic = $('<input class="parsley-synthetic-submit-button" type="hidden">').appendTo(this.$element);
|
1222
1247
|
$synthetic.attr({
|
1223
|
-
name:
|
1224
|
-
value:
|
1248
|
+
name: submitSource.getAttribute('name'),
|
1249
|
+
value: submitSource.getAttribute('value')
|
1225
1250
|
});
|
1226
1251
|
}
|
1227
1252
|
|
1228
|
-
this.$element.trigger(
|
1253
|
+
this.$element.trigger(_extends($.Event('submit'), { parsley: true }));
|
1229
1254
|
},
|
1230
1255
|
|
1231
1256
|
// Performs validation on fields while triggering events.
|
@@ -1235,7 +1260,7 @@ function _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr
|
|
1235
1260
|
// Consider using `whenValidate` instead.
|
1236
1261
|
validate: function validate(options) {
|
1237
1262
|
if (arguments.length >= 1 && !$.isPlainObject(options)) {
|
1238
|
-
|
1263
|
+
Utils.warnOnce('Calling validate on a parsley form without passing arguments as an object is deprecated.');
|
1239
1264
|
|
1240
1265
|
var _arguments = _slice.call(arguments);
|
1241
1266
|
|
@@ -1249,7 +1274,7 @@ function _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr
|
|
1249
1274
|
},
|
1250
1275
|
|
1251
1276
|
whenValidate: function whenValidate() {
|
1252
|
-
var
|
1277
|
+
var _Utils$all$done$fail$always,
|
1253
1278
|
_this6 = this;
|
1254
1279
|
|
1255
1280
|
var _ref7 = arguments.length <= 0 || arguments[0] === undefined ? {} : arguments[0];
|
@@ -1260,8 +1285,8 @@ function _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr
|
|
1260
1285
|
|
1261
1286
|
this.submitEvent = event;
|
1262
1287
|
if (event) {
|
1263
|
-
this.submitEvent =
|
1264
|
-
|
1288
|
+
this.submitEvent = _extends({}, event, { preventDefault: function preventDefault() {
|
1289
|
+
Utils.warnOnce("Using `this.submitEvent.preventDefault()` is deprecated; instead, call `this.validationResult = false`");
|
1265
1290
|
_this6.validationResult = false;
|
1266
1291
|
} });
|
1267
1292
|
}
|
@@ -1279,7 +1304,7 @@ function _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr
|
|
1279
1304
|
});
|
1280
1305
|
});
|
1281
1306
|
|
1282
|
-
return (
|
1307
|
+
return (_Utils$all$done$fail$always = Utils.all(promises).done(function () {
|
1283
1308
|
_this6._trigger('success');
|
1284
1309
|
}).fail(function () {
|
1285
1310
|
_this6.validationResult = false;
|
@@ -1287,7 +1312,7 @@ function _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr
|
|
1287
1312
|
_this6._trigger('error');
|
1288
1313
|
}).always(function () {
|
1289
1314
|
_this6._trigger('validated');
|
1290
|
-
})).pipe.apply(
|
1315
|
+
})).pipe.apply(_Utils$all$done$fail$always, _toConsumableArray(this._pipeAccordingToValidationResult()));
|
1291
1316
|
},
|
1292
1317
|
|
1293
1318
|
// Iterate over refreshed fields, and stop on first failure.
|
@@ -1296,7 +1321,7 @@ function _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr
|
|
1296
1321
|
// Prefer using `whenValid` instead.
|
1297
1322
|
isValid: function isValid(options) {
|
1298
1323
|
if (arguments.length >= 1 && !$.isPlainObject(options)) {
|
1299
|
-
|
1324
|
+
Utils.warnOnce('Calling isValid on a parsley form without passing arguments as an object is deprecated.');
|
1300
1325
|
|
1301
1326
|
var _arguments2 = _slice.call(arguments);
|
1302
1327
|
|
@@ -1326,7 +1351,12 @@ function _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr
|
|
1326
1351
|
return field.whenValid({ group: group, force: force });
|
1327
1352
|
});
|
1328
1353
|
});
|
1329
|
-
return
|
1354
|
+
return Utils.all(promises);
|
1355
|
+
},
|
1356
|
+
|
1357
|
+
refresh: function refresh() {
|
1358
|
+
this._refreshFields();
|
1359
|
+
return this;
|
1330
1360
|
},
|
1331
1361
|
|
1332
1362
|
// Reset UI
|
@@ -1375,7 +1405,7 @@ function _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr
|
|
1375
1405
|
}
|
1376
1406
|
});
|
1377
1407
|
|
1378
|
-
$.each(
|
1408
|
+
$.each(Utils.difference(oldFields, _this8.fields), function (_, field) {
|
1379
1409
|
field.reset();
|
1380
1410
|
});
|
1381
1411
|
});
|
@@ -1411,13 +1441,15 @@ function _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr
|
|
1411
1441
|
var Constraint = function Constraint(parsleyField, name, requirements, priority, isDomConstraint) {
|
1412
1442
|
var validatorSpec = window.Parsley._validatorRegistry.validators[name];
|
1413
1443
|
var validator = new Validator(validatorSpec);
|
1444
|
+
priority = priority || parsleyField.options[name + 'Priority'] || validator.priority;
|
1445
|
+
isDomConstraint = true === isDomConstraint;
|
1414
1446
|
|
1415
|
-
|
1447
|
+
_extends(this, {
|
1416
1448
|
validator: validator,
|
1417
1449
|
name: name,
|
1418
1450
|
requirements: requirements,
|
1419
|
-
priority: priority
|
1420
|
-
isDomConstraint:
|
1451
|
+
priority: priority,
|
1452
|
+
isDomConstraint: isDomConstraint
|
1421
1453
|
});
|
1422
1454
|
this._parseRequirements(parsleyField.options);
|
1423
1455
|
};
|
@@ -1446,6 +1478,7 @@ function _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr
|
|
1446
1478
|
var Field = function Field(field, domOptions, options, parsleyFormInstance) {
|
1447
1479
|
this.__class__ = 'Field';
|
1448
1480
|
|
1481
|
+
this.element = field;
|
1449
1482
|
this.$element = $(field);
|
1450
1483
|
|
1451
1484
|
// Set parent if we have one
|
@@ -1474,7 +1507,7 @@ function _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr
|
|
1474
1507
|
// `null` if validation is not finished. Prefer using whenValidate
|
1475
1508
|
validate: function validate(options) {
|
1476
1509
|
if (arguments.length >= 1 && !$.isPlainObject(options)) {
|
1477
|
-
|
1510
|
+
Utils.warnOnce('Calling validate on a parsley field without passing arguments as an object is deprecated.');
|
1478
1511
|
options = { options: options };
|
1479
1512
|
}
|
1480
1513
|
var promise = this.whenValidate(options);
|
@@ -1503,7 +1536,7 @@ function _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr
|
|
1503
1536
|
var group = _ref9.group;
|
1504
1537
|
|
1505
1538
|
// do not validate a field if not the same as given validation group
|
1506
|
-
this.
|
1539
|
+
this.refresh();
|
1507
1540
|
if (group && !this._isInGroup(group)) return;
|
1508
1541
|
|
1509
1542
|
this.value = this.getValue();
|
@@ -1538,7 +1571,7 @@ function _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr
|
|
1538
1571
|
},
|
1539
1572
|
|
1540
1573
|
_isInGroup: function _isInGroup(group) {
|
1541
|
-
if (
|
1574
|
+
if (Array.isArray(this.options.group)) return -1 !== $.inArray(group, this.options.group);
|
1542
1575
|
return this.options.group === group;
|
1543
1576
|
},
|
1544
1577
|
|
@@ -1548,7 +1581,7 @@ function _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr
|
|
1548
1581
|
// See also `whenValid`.
|
1549
1582
|
isValid: function isValid(options) {
|
1550
1583
|
if (arguments.length >= 1 && !$.isPlainObject(options)) {
|
1551
|
-
|
1584
|
+
Utils.warnOnce('Calling isValid on a parsley field without passing arguments as an object is deprecated.');
|
1552
1585
|
|
1553
1586
|
var _arguments3 = _slice.call(arguments);
|
1554
1587
|
|
@@ -1580,7 +1613,7 @@ function _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr
|
|
1580
1613
|
var _refreshed = _ref10._refreshed;
|
1581
1614
|
|
1582
1615
|
// Recompute options and rebind constraints to have latest changes
|
1583
|
-
if (!_refreshed) this.
|
1616
|
+
if (!_refreshed) this.refresh();
|
1584
1617
|
// do not validate a field if not the same as given validation group
|
1585
1618
|
if (group && !this._isInGroup(group)) return;
|
1586
1619
|
|
@@ -1599,13 +1632,13 @@ function _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr
|
|
1599
1632
|
$.each(groupedConstraints, function (_, constraints) {
|
1600
1633
|
// Process one group of constraints at a time, we validate the constraints
|
1601
1634
|
// and combine the promises together.
|
1602
|
-
var promise =
|
1635
|
+
var promise = Utils.all($.map(constraints, function (constraint) {
|
1603
1636
|
return _this11._validateConstraint(value, constraint);
|
1604
1637
|
}));
|
1605
1638
|
promises.push(promise);
|
1606
1639
|
if (promise.state() === 'rejected') return false; // Interrupt processing if a group has already failed
|
1607
1640
|
});
|
1608
|
-
return
|
1641
|
+
return Utils.all(promises);
|
1609
1642
|
},
|
1610
1643
|
|
1611
1644
|
// @returns a promise
|
@@ -1616,7 +1649,7 @@ function _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr
|
|
1616
1649
|
// Map false to a failed promise
|
1617
1650
|
if (false === result) result = $.Deferred().reject();
|
1618
1651
|
// Make sure we return a promise and that we record failures
|
1619
|
-
return
|
1652
|
+
return Utils.all([result]).fail(function (errorMessage) {
|
1620
1653
|
if (!(_this12.validationResult instanceof Array)) _this12.validationResult = [];
|
1621
1654
|
_this12.validationResult.push({
|
1622
1655
|
assert: constraint,
|
@@ -1653,12 +1686,21 @@ function _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr
|
|
1653
1686
|
this._trigger('destroy');
|
1654
1687
|
},
|
1655
1688
|
|
1656
|
-
// Actualize options
|
1657
|
-
|
1658
|
-
|
1689
|
+
// Actualize options and rebind constraints
|
1690
|
+
refresh: function refresh() {
|
1691
|
+
this._refreshConstraints();
|
1692
|
+
return this;
|
1693
|
+
},
|
1694
|
+
|
1695
|
+
_refreshConstraints: function _refreshConstraints() {
|
1659
1696
|
return this.actualizeOptions()._bindConstraints();
|
1660
1697
|
},
|
1661
1698
|
|
1699
|
+
refreshConstraints: function refreshConstraints() {
|
1700
|
+
Utils.warnOnce("Parsley's refreshConstraints is deprecated. Please use refresh");
|
1701
|
+
return this.refresh();
|
1702
|
+
},
|
1703
|
+
|
1662
1704
|
/**
|
1663
1705
|
* Add a new constraint to a field
|
1664
1706
|
*
|
@@ -1725,39 +1767,39 @@ function _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr
|
|
1725
1767
|
// Bind specific HTML5 constraints to be HTML5 compliant
|
1726
1768
|
_bindHtml5Constraints: function _bindHtml5Constraints() {
|
1727
1769
|
// html5 required
|
1728
|
-
if (this
|
1770
|
+
if (null !== this.element.getAttribute('required')) this.addConstraint('required', true, undefined, true);
|
1729
1771
|
|
1730
1772
|
// html5 pattern
|
1731
|
-
if (
|
1773
|
+
if (null !== this.element.getAttribute('pattern')) this.addConstraint('pattern', this.element.getAttribute('pattern'), undefined, true);
|
1732
1774
|
|
1733
1775
|
// range
|
1734
|
-
|
1776
|
+
var min = this.element.getAttribute('min');
|
1777
|
+
var max = this.element.getAttribute('max');
|
1778
|
+
if (null !== min && null !== max) this.addConstraint('range', [min, max], undefined, true);
|
1735
1779
|
|
1736
1780
|
// HTML5 min
|
1737
|
-
else if (
|
1781
|
+
else if (null !== min) this.addConstraint('min', min, undefined, true);
|
1738
1782
|
|
1739
1783
|
// HTML5 max
|
1740
|
-
else if (
|
1784
|
+
else if (null !== max) this.addConstraint('max', max, undefined, true);
|
1741
1785
|
|
1742
1786
|
// length
|
1743
|
-
if (
|
1787
|
+
if (null !== this.element.getAttribute('minlength') && null !== this.element.getAttribute('maxlength')) this.addConstraint('length', [this.element.getAttribute('minlength'), this.element.getAttribute('maxlength')], undefined, true);
|
1744
1788
|
|
1745
1789
|
// HTML5 minlength
|
1746
|
-
else if (
|
1790
|
+
else if (null !== this.element.getAttribute('minlength')) this.addConstraint('minlength', this.element.getAttribute('minlength'), undefined, true);
|
1747
1791
|
|
1748
1792
|
// HTML5 maxlength
|
1749
|
-
else if (
|
1793
|
+
else if (null !== this.element.getAttribute('maxlength')) this.addConstraint('maxlength', this.element.getAttribute('maxlength'), undefined, true);
|
1750
1794
|
|
1751
1795
|
// html5 types
|
1752
|
-
var type = this
|
1753
|
-
|
1754
|
-
if ('undefined' === typeof type) return this;
|
1796
|
+
var type = Utils.getType(this.element);
|
1755
1797
|
|
1756
1798
|
// Small special case here for HTML5 number: integer validator if step attribute is undefined or an integer value, number otherwise
|
1757
1799
|
if ('number' === type) {
|
1758
1800
|
return this.addConstraint('type', ['number', {
|
1759
|
-
step: this
|
1760
|
-
base:
|
1801
|
+
step: this.element.getAttribute('step') || '1',
|
1802
|
+
base: min || this.element.getAttribute('value')
|
1761
1803
|
}], undefined, true);
|
1762
1804
|
// Regular other HTML5 supported types
|
1763
1805
|
} else if (/^(email|url|range|date)$/i.test(type)) {
|
@@ -1785,11 +1827,11 @@ function _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr
|
|
1785
1827
|
// Use `data-parsley-whitespace="squish"` to auto squish input value
|
1786
1828
|
// Use `data-parsley-whitespace="trim"` to auto trim input value
|
1787
1829
|
_handleWhitespace: function _handleWhitespace(value) {
|
1788
|
-
if (true === this.options.trimValue)
|
1830
|
+
if (true === this.options.trimValue) Utils.warnOnce('data-parsley-trim-value="true" is deprecated, please use data-parsley-whitespace="trim"');
|
1789
1831
|
|
1790
1832
|
if ('squish' === this.options.whitespace) value = value.replace(/\s{2,}/g, ' ');
|
1791
1833
|
|
1792
|
-
if ('trim' === this.options.whitespace || 'squish' === this.options.whitespace || true === this.options.trimValue) value =
|
1834
|
+
if ('trim' === this.options.whitespace || 'squish' === this.options.whitespace || true === this.options.trimValue) value = Utils.trimString(value);
|
1793
1835
|
|
1794
1836
|
return value;
|
1795
1837
|
},
|
@@ -1838,14 +1880,14 @@ function _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr
|
|
1838
1880
|
return this;
|
1839
1881
|
},
|
1840
1882
|
|
1841
|
-
// See `Field.
|
1842
|
-
|
1883
|
+
// See `Field._refreshConstraints()`
|
1884
|
+
_refreshConstraints: function _refreshConstraints() {
|
1843
1885
|
var fieldConstraints;
|
1844
1886
|
|
1845
1887
|
this.constraints = [];
|
1846
1888
|
|
1847
1889
|
// Select multiple special treatment
|
1848
|
-
if (this
|
1890
|
+
if (this.element.nodeName === 'SELECT') {
|
1849
1891
|
this.actualizeOptions()._bindConstraints();
|
1850
1892
|
|
1851
1893
|
return this;
|
@@ -1860,7 +1902,7 @@ function _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr
|
|
1860
1902
|
continue;
|
1861
1903
|
}
|
1862
1904
|
|
1863
|
-
fieldConstraints = this.$elements[i].data('FieldMultiple').
|
1905
|
+
fieldConstraints = this.$elements[i].data('FieldMultiple')._refreshConstraints().constraints;
|
1864
1906
|
|
1865
1907
|
for (var j = 0; j < fieldConstraints.length; j++) this.addConstraint(fieldConstraints[j].name, fieldConstraints[j].requirements, fieldConstraints[j].priority, fieldConstraints[j].isDomConstraint);
|
1866
1908
|
}
|
@@ -1874,21 +1916,24 @@ function _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr
|
|
1874
1916
|
if ('function' === typeof this.options.value) return this.options.value(this);else if ('undefined' !== typeof this.options.value) return this.options.value;
|
1875
1917
|
|
1876
1918
|
// Radio input case
|
1877
|
-
if (this
|
1919
|
+
if (this.element.nodeName === 'INPUT') {
|
1920
|
+
var type = Utils.getType(this.element);
|
1921
|
+
if (type === 'radio') return this._findRelated().filter(':checked').val() || '';
|
1878
1922
|
|
1879
|
-
|
1880
|
-
|
1881
|
-
|
1923
|
+
// checkbox input case
|
1924
|
+
if (type === 'checkbox') {
|
1925
|
+
var values = [];
|
1882
1926
|
|
1883
|
-
|
1884
|
-
|
1885
|
-
|
1927
|
+
this._findRelated().filter(':checked').each(function () {
|
1928
|
+
values.push($(this).val());
|
1929
|
+
});
|
1886
1930
|
|
1887
|
-
|
1931
|
+
return values;
|
1932
|
+
}
|
1888
1933
|
}
|
1889
1934
|
|
1890
1935
|
// Select multiple case
|
1891
|
-
if (this
|
1936
|
+
if (this.element.nodeName === 'SELECT' && null === this.$element.val()) return [];
|
1892
1937
|
|
1893
1938
|
// Default case that should never happen
|
1894
1939
|
return this.$element.val();
|
@@ -1902,6 +1947,7 @@ function _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr
|
|
1902
1947
|
};
|
1903
1948
|
|
1904
1949
|
var Factory = function Factory(element, options, parsleyFormInstance) {
|
1950
|
+
this.element = element;
|
1905
1951
|
this.$element = $(element);
|
1906
1952
|
|
1907
1953
|
// If the element has already been bound, returns its saved Parsley instance
|
@@ -1915,7 +1961,7 @@ function _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr
|
|
1915
1961
|
}
|
1916
1962
|
|
1917
1963
|
if ('object' === typeof options) {
|
1918
|
-
|
1964
|
+
_extends(savedparsleyFormInstance.options, options);
|
1919
1965
|
}
|
1920
1966
|
|
1921
1967
|
return savedparsleyFormInstance;
|
@@ -1933,21 +1979,22 @@ function _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr
|
|
1933
1979
|
Factory.prototype = {
|
1934
1980
|
init: function init(options) {
|
1935
1981
|
this.__class__ = 'Parsley';
|
1936
|
-
this.__version__ = '2.
|
1937
|
-
this.__id__ =
|
1982
|
+
this.__version__ = '2.8.1';
|
1983
|
+
this.__id__ = Utils.generateID();
|
1938
1984
|
|
1939
1985
|
// Pre-compute options
|
1940
1986
|
this._resetOptions(options);
|
1941
1987
|
|
1942
1988
|
// A Form instance is obviously a `<form>` element but also every node that is not an input and has the `data-parsley-validate` attribute
|
1943
|
-
if (this
|
1989
|
+
if (this.element.nodeName === 'FORM' || Utils.checkAttr(this.element, this.options.namespace, 'validate') && !this.$element.is(this.options.inputs)) return this.bind('parsleyForm');
|
1944
1990
|
|
1945
1991
|
// Every other element is bound as a `Field` or `FieldMultiple`
|
1946
1992
|
return this.isMultiple() ? this.handleMultiple() : this.bind('parsleyField');
|
1947
1993
|
},
|
1948
1994
|
|
1949
1995
|
isMultiple: function isMultiple() {
|
1950
|
-
|
1996
|
+
var type = Utils.getType(this.element);
|
1997
|
+
return type === 'radio' || type === 'checkbox' || this.element.nodeName === 'SELECT' && null !== this.element.getAttribute('multiple');
|
1951
1998
|
},
|
1952
1999
|
|
1953
2000
|
// Multiples fields are a real nightmare :(
|
@@ -1960,17 +2007,16 @@ function _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr
|
|
1960
2007
|
var parsleyMultipleInstance;
|
1961
2008
|
|
1962
2009
|
// Handle multiple name
|
1963
|
-
|
1964
|
-
else if ('undefined' !== typeof this.$element.attr('name') && this.$element.attr('name').length) this.options.multiple = name = this.$element.attr('name');else if ('undefined' !== typeof this.$element.attr('id') && this.$element.attr('id').length) this.options.multiple = this.$element.attr('id');
|
2010
|
+
this.options.multiple = this.options.multiple || (name = this.element.getAttribute('name')) || this.element.getAttribute('id');
|
1965
2011
|
|
1966
2012
|
// Special select multiple input
|
1967
|
-
if (this
|
2013
|
+
if (this.element.nodeName === 'SELECT' && null !== this.element.getAttribute('multiple')) {
|
1968
2014
|
this.options.multiple = this.options.multiple || this.__id__;
|
1969
2015
|
return this.bind('parsleyFieldMultiple');
|
1970
2016
|
|
1971
2017
|
// Else for radio / checkboxes, we need a `name` or `data-parsley-multiple` to properly bind it
|
1972
2018
|
} else if (!this.options.multiple) {
|
1973
|
-
|
2019
|
+
Utils.warn('To be bound by Parsley, a radio, a checkbox and a multiple select input must have either a name or a multiple option.', this.$element);
|
1974
2020
|
return this;
|
1975
2021
|
}
|
1976
2022
|
|
@@ -1978,9 +2024,10 @@ function _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr
|
|
1978
2024
|
this.options.multiple = this.options.multiple.replace(/(:|\.|\[|\]|\{|\}|\$)/g, '');
|
1979
2025
|
|
1980
2026
|
// Add proper `data-parsley-multiple` to siblings if we have a valid multiple name
|
1981
|
-
if (
|
2027
|
+
if (name) {
|
1982
2028
|
$('input[name="' + name + '"]').each(function (i, input) {
|
1983
|
-
|
2029
|
+
var type = Utils.getType(input);
|
2030
|
+
if (type === 'radio' || type === 'checkbox') input.setAttribute(_this13.options.namespace + 'multiple', _this13.options.multiple);
|
1984
2031
|
});
|
1985
2032
|
}
|
1986
2033
|
|
@@ -2011,19 +2058,19 @@ function _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr
|
|
2011
2058
|
|
2012
2059
|
switch (type) {
|
2013
2060
|
case 'parsleyForm':
|
2014
|
-
parsleyInstance = $.extend(new Form(this
|
2061
|
+
parsleyInstance = $.extend(new Form(this.element, this.domOptions, this.options), new Base(), window.ParsleyExtend)._bindFields();
|
2015
2062
|
break;
|
2016
2063
|
case 'parsleyField':
|
2017
|
-
parsleyInstance = $.extend(new parsley_field(this
|
2064
|
+
parsleyInstance = $.extend(new parsley_field(this.element, this.domOptions, this.options, this.parent), new Base(), window.ParsleyExtend);
|
2018
2065
|
break;
|
2019
2066
|
case 'parsleyFieldMultiple':
|
2020
|
-
parsleyInstance = $.extend(new parsley_field(this
|
2067
|
+
parsleyInstance = $.extend(new parsley_field(this.element, this.domOptions, this.options, this.parent), new Multiple(), new Base(), window.ParsleyExtend)._init();
|
2021
2068
|
break;
|
2022
2069
|
default:
|
2023
2070
|
throw new Error(type + 'is not a supported Parsley type');
|
2024
2071
|
}
|
2025
2072
|
|
2026
|
-
if (this.options.multiple)
|
2073
|
+
if (this.options.multiple) Utils.setAttr(this.element, this.options.namespace, 'multiple', this.options.multiple);
|
2027
2074
|
|
2028
2075
|
if ('undefined' !== typeof doNotStore) {
|
2029
2076
|
this.$element.data('FieldMultiple', parsleyInstance);
|
@@ -2047,23 +2094,24 @@ function _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr
|
|
2047
2094
|
throw "The loaded version of jQuery is too old. Please upgrade to 1.8.x or better.";
|
2048
2095
|
}
|
2049
2096
|
if (!vernums.forEach) {
|
2050
|
-
|
2097
|
+
Utils.warn('Parsley requires ES5 to run properly. Please include https://github.com/es-shims/es5-shim');
|
2051
2098
|
}
|
2052
2099
|
// Inherit `on`, `off` & `trigger` to Parsley:
|
2053
|
-
var Parsley =
|
2100
|
+
var Parsley = _extends(new Base(), {
|
2101
|
+
element: document,
|
2054
2102
|
$element: $(document),
|
2055
2103
|
actualizeOptions: null,
|
2056
2104
|
_resetOptions: null,
|
2057
2105
|
Factory: Factory,
|
2058
|
-
version: '2.
|
2106
|
+
version: '2.8.1'
|
2059
2107
|
});
|
2060
2108
|
|
2061
2109
|
// Supplement Field and Form with Base
|
2062
2110
|
// This way, the constructors will have access to those methods
|
2063
|
-
|
2064
|
-
|
2111
|
+
_extends(parsley_field.prototype, UI.Field, Base.prototype);
|
2112
|
+
_extends(Form.prototype, UI.Form, Base.prototype);
|
2065
2113
|
// Inherit actualizeOptions and _resetOptions:
|
2066
|
-
|
2114
|
+
_extends(Factory.prototype, Base.prototype);
|
2067
2115
|
|
2068
2116
|
// ### jQuery API
|
2069
2117
|
// `$('.elem').parsley(options)` or `$('.elem').psly(options)`
|
@@ -2079,13 +2127,11 @@ function _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr
|
|
2079
2127
|
}
|
2080
2128
|
|
2081
2129
|
// Return undefined if applied to non existing DOM element
|
2082
|
-
if (
|
2083
|
-
Utils__default.warn('You must bind Parsley on an existing element.');
|
2084
|
-
|
2130
|
+
if (this.length == 0) {
|
2085
2131
|
return;
|
2086
2132
|
}
|
2087
2133
|
|
2088
|
-
return new Factory(this, options);
|
2134
|
+
return new Factory(this[0], options);
|
2089
2135
|
};
|
2090
2136
|
|
2091
2137
|
// ### Field and Form extension
|
@@ -2094,18 +2140,18 @@ function _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr
|
|
2094
2140
|
|
2095
2141
|
// ### Parsley config
|
2096
2142
|
// Inherit from ParsleyDefault, and copy over any existing values
|
2097
|
-
Parsley.options =
|
2143
|
+
Parsley.options = _extends(Utils.objectCreate(Defaults), window.ParsleyConfig);
|
2098
2144
|
window.ParsleyConfig = Parsley.options; // Old way of accessing global options
|
2099
2145
|
|
2100
2146
|
// ### Globals
|
2101
2147
|
window.Parsley = window.psly = Parsley;
|
2102
|
-
Parsley.Utils =
|
2148
|
+
Parsley.Utils = Utils;
|
2103
2149
|
window.ParsleyUtils = {};
|
2104
|
-
$.each(
|
2150
|
+
$.each(Utils, function (key, value) {
|
2105
2151
|
if ('function' === typeof value) {
|
2106
2152
|
window.ParsleyUtils[key] = function () {
|
2107
|
-
|
2108
|
-
return
|
2153
|
+
Utils.warnOnce('Accessing `window.ParsleyUtils` is deprecated. Use `window.Parsley.Utils` instead.');
|
2154
|
+
return Utils[key].apply(Utils, arguments);
|
2109
2155
|
};
|
2110
2156
|
}
|
2111
2157
|
});
|
@@ -2113,12 +2159,14 @@ function _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr
|
|
2113
2159
|
// ### Define methods that forward to the registry, and deprecate all access except through window.Parsley
|
2114
2160
|
var registry = window.Parsley._validatorRegistry = new ValidatorRegistry(window.ParsleyConfig.validators, window.ParsleyConfig.i18n);
|
2115
2161
|
window.ParsleyValidator = {};
|
2116
|
-
$.each('setLocale addCatalog addMessage addMessages getErrorMessage formatMessage addValidator updateValidator removeValidator'.split(' '), function (i, method) {
|
2117
|
-
window.Parsley[method] =
|
2162
|
+
$.each('setLocale addCatalog addMessage addMessages getErrorMessage formatMessage addValidator updateValidator removeValidator hasValidator'.split(' '), function (i, method) {
|
2163
|
+
window.Parsley[method] = function () {
|
2164
|
+
return registry[method].apply(registry, arguments);
|
2165
|
+
};
|
2118
2166
|
window.ParsleyValidator[method] = function () {
|
2119
2167
|
var _window$Parsley;
|
2120
2168
|
|
2121
|
-
|
2169
|
+
Utils.warnOnce('Accessing the method \'' + method + '\' through Validator is deprecated. Simply call \'window.Parsley.' + method + '(...)\'');
|
2122
2170
|
return (_window$Parsley = window.Parsley)[method].apply(_window$Parsley, arguments);
|
2123
2171
|
};
|
2124
2172
|
});
|
@@ -2129,18 +2177,18 @@ function _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr
|
|
2129
2177
|
window.ParsleyUI = {
|
2130
2178
|
removeError: function removeError(instance, name, doNotUpdateClass) {
|
2131
2179
|
var updateClass = true !== doNotUpdateClass;
|
2132
|
-
|
2180
|
+
Utils.warnOnce('Accessing UI is deprecated. Call \'removeError\' on the instance directly. Please comment in issue 1073 as to your need to call this method.');
|
2133
2181
|
return instance.removeError(name, { updateClass: updateClass });
|
2134
2182
|
},
|
2135
2183
|
getErrorsMessages: function getErrorsMessages(instance) {
|
2136
|
-
|
2184
|
+
Utils.warnOnce('Accessing UI is deprecated. Call \'getErrorsMessages\' on the instance directly.');
|
2137
2185
|
return instance.getErrorsMessages();
|
2138
2186
|
}
|
2139
2187
|
};
|
2140
2188
|
$.each('addError updateError'.split(' '), function (i, method) {
|
2141
2189
|
window.ParsleyUI[method] = function (instance, name, message, assert, doNotUpdateClass) {
|
2142
2190
|
var updateClass = true !== doNotUpdateClass;
|
2143
|
-
|
2191
|
+
Utils.warnOnce('Accessing UI is deprecated. Call \'' + method + '\' on the instance directly. Please comment in issue 1073 as to your need to call this method.');
|
2144
2192
|
return instance[method](name, { message: message, assert: assert, updateClass: updateClass });
|
2145
2193
|
};
|
2146
2194
|
});
|
@@ -2156,7 +2204,7 @@ function _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr
|
|
2156
2204
|
|
2157
2205
|
var o = $({});
|
2158
2206
|
var deprecated = function deprecated() {
|
2159
|
-
|
2207
|
+
Utils.warnOnce("Parsley's pubsub module is deprecated; use the 'on' and 'off' methods on parsley instances or window.Parsley");
|
2160
2208
|
};
|
2161
2209
|
|
2162
2210
|
// Returns an event handler that calls `fn` with the arguments it expects
|
@@ -2296,7 +2344,7 @@ function _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr
|
|
2296
2344
|
if (url.indexOf('{value}') > -1) {
|
2297
2345
|
url = url.replace('{value}', encodeURIComponent(value));
|
2298
2346
|
} else {
|
2299
|
-
data[instance
|
2347
|
+
data[instance.element.getAttribute('name') || instance.element.getAttribute('id')] = value;
|
2300
2348
|
}
|
2301
2349
|
|
2302
2350
|
// Merge options passed in from the function with the ones in the attribute
|
@@ -2337,7 +2385,7 @@ function _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr
|
|
2337
2385
|
Parsley._remoteCache = {};
|
2338
2386
|
});
|
2339
2387
|
|
2340
|
-
|
2388
|
+
Base.prototype.addAsyncValidator = function () {
|
2341
2389
|
Utils.warnOnce('Accessing the method `addAsyncValidator` through an instance is deprecated. Simply call `Parsley.addAsyncValidator(...)`');
|
2342
2390
|
return Parsley.addAsyncValidator.apply(Parsley, arguments);
|
2343
2391
|
};
|
@@ -2386,7 +2434,7 @@ function _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr
|
|
2386
2434
|
|
2387
2435
|
// Slightly odd way construct our object. This way methods are force bound.
|
2388
2436
|
// Used to test for duplicate library.
|
2389
|
-
|
2437
|
+
_extends(this, {
|
2390
2438
|
|
2391
2439
|
// For browsers that do not support isTrusted, assumes event is native.
|
2392
2440
|
isNativeEvent: function isNativeEvent(evt) {
|