parsley-rails 2.6.2.0 → 2.7.0.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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: a8ce555f8a50e842f18165146a8693ae81d3ad28
4
- data.tar.gz: bb90a75fa283e229da2e7cf5dfee771aab50a14a
3
+ metadata.gz: '06923dad38a181bc6d0ffe1934efe17577d7782e'
4
+ data.tar.gz: 1744e8262e18c968351cfc4104a3f130b87d04f4
5
5
  SHA512:
6
- metadata.gz: f3a9ca107c2dae87b918882351f874e65a56af838e9d764f9408cb06436af81fdbe60c331f75d063e5f7c5b72c76514ac16c826ff4fe9bcf915b07608b65e9f4
7
- data.tar.gz: 5a6659ec0f6c24494e926da0566fdc4f4b6cc40af2f7159ce137d4fc2d774c7ceddead89c12abbf010f47337bd78e88a6e211f576d5e7ae7684692bcedd8c491
6
+ metadata.gz: 7204ceefc835e8445859fdf09ea72944854e611885da4ff05181c63f5a0b9a2df8ce7841ea44011bba80961b1591afb945a146779d4528b627bea5627ee594cf
7
+ data.tar.gz: c29694f882374a1157aeda544ea4e4dfec2666edab0514aea2da4f63e6049b6c8cd9bab5bbf00351a9ce05c69643d7ac426d70feea3f8c6e880b3ded73897c1c
data/README.md CHANGED
@@ -22,7 +22,6 @@ Add the following to your `app/assets/javascripts/application.js`:
22
22
 
23
23
  To use a different i18n, add this right after:
24
24
 
25
- //= require parsley.remote
26
25
  //= require parsley.i18n.fr
27
26
 
28
27
  Finally, if you want to use the default CSS, add the following to your
@@ -54,3 +53,8 @@ is a patch level of the gem itself.
54
53
  3. Commit your changes (`git commit -am 'Add some feature'`)
55
54
  4. Push to the branch (`git push origin my-new-feature`)
56
55
  5. Create new Pull Request
56
+ Note that there's a script (./update.sh 2.6.5) for automatic update from the
57
+ official distribution. Unfortunately the files in the "extras" are not part of
58
+ the distribution and thus are not transpiled. And since I'm too lazy to
59
+ reliably script it, it's necessary to modify some of the files (`comparison.js`
60
+ as of now) and remove the offending lines.
@@ -1,5 +1,5 @@
1
1
  module Parsley
2
2
  module Rails
3
- VERSION = "2.6.2.0"
3
+ VERSION = "2.7.0.0"
4
4
  end
5
5
  end
data/update.sh CHANGED
@@ -20,10 +20,21 @@ wget -O $FILE_NAME $RELEASE_URL
20
20
  mkdir $EXTRACT_DIRECTORY
21
21
  tar xfz $FILE_NAME -C $EXTRACT_DIRECTORY
22
22
 
23
+ # Copy the base distribution
23
24
  cp "$RELEASE_PATH/dist/parsley.js" $VENDOR_JS_PATH
25
+ cp "$RELEASE_PATH/dist/parsley.js.map" $VENDOR_JS_PATH
24
26
  cp "$RELEASE_PATH/dist/parsley.min.js" $VENDOR_JS_PATH
27
+ cp "$RELEASE_PATH/dist/parsley.min.js.map" $VENDOR_JS_PATH
25
28
  cp "$RELEASE_PATH/src/parsley.css" $VENDOR_CSS_PATH
26
29
 
30
+ # Copy extras
31
+ cp "$RELEASE_PATH/src/extra/validator/comparison.js" "$VENDOR_JS_PATH/parsley.validator.comparison.js"
32
+ cp "$RELEASE_PATH/src/extra/validator/dateiso.js" "$VENDOR_JS_PATH/parsley.validator.dateiso.js"
33
+ cp "$RELEASE_PATH/src/extra/validator/luhn.js" "$VENDOR_JS_PATH/parsley.validator.luhn.js"
34
+ cp "$RELEASE_PATH/src/extra/validator/notequalto.js" "$VENDOR_JS_PATH/parsley.validator.notequalto.js"
35
+ cp "$RELEASE_PATH/src/extra/validator/words.js" "$VENDOR_JS_PATH/parsley.validator.words.js"
36
+
37
+ # Copy the i18n files
27
38
  for file in "$RELEASE_PATH/dist/i18n/"*; do
28
39
  base_name=$(basename "$file")
29
40
  final_name="parsley.i18n.$(echo $base_name)"
@@ -0,0 +1,13 @@
1
+ // Validation errors messages for Parsley
2
+ // Load this after Parsley
3
+
4
+ Parsley.addMessages('sk', {
5
+ dateiso: "Prosím zadajte dátum vo formáte RRRR-MM-DD.",
6
+ minwords: "Prosím zadajte hodnotu dlhú %s slov a viacej.",
7
+ maxwords: "Prosím zadajte hodnotu kratšiu ako %s slov.",
8
+ words: "Prosím zadajte hodnotu medzi %s a %s slov.",
9
+ gt: "Táto hodnota musí byť väčšia.",
10
+ gte: "Táto hodnota musí byť väčšia alebo rovná.",
11
+ lt: "Táto hodnota musí byť menšia.",
12
+ lte: "Táto hodnota musí byť menšia alebo rovná."
13
+ });
@@ -0,0 +1,29 @@
1
+ // Validation errors messages for Parsley
2
+ // Load this after Parsley
3
+
4
+ Parsley.addMessages('sk', {
5
+ defaultMessage: "Prosím zadajte správnu hodnotu.",
6
+ type: {
7
+ email: "Prosím zadajte správnu emailovú adresu.",
8
+ url: "Prosím zadajte platnú URL adresu.",
9
+ number: "Toto pole môže obsahovať len čísla",
10
+ integer: "Toto pole môže obsahovať len celé čísla",
11
+ digits: "Toto pole môže obsahovať len kladné celé čísla.",
12
+ alphanum: "Toto pole môže obsahovať len alfanumerické znaky."
13
+ },
14
+ notblank: "Toto pole nesmie byť prázdne.",
15
+ required: "Toto pole je povinné.",
16
+ pattern: "Toto pole je je neplatné.",
17
+ min: "Prosím zadajte hodnotu väčšiu alebo rovnú %s.",
18
+ max: "Prosím zadajte hodnotu menšiu alebo rovnú %s.",
19
+ range: "Prosím zadajte hodnotu v rozmedzí %s a %s",
20
+ minlength: "Prosím zadajte hodnotu dlhú %s znakov a viacej.",
21
+ maxlength: "Prosím zadajte hodnotu kratšiu ako %s znakov.",
22
+ length: "Prosím zadajte hodnotu medzi %s a %s znakov.",
23
+ mincheck: "Je nutné vybrať minimálne %s z možností.",
24
+ maxcheck: "Je nutné vybrať maximálne %s z možností.",
25
+ check: "Je nutné vybrať od %s do %s z možností.",
26
+ equalto: "Prosím zadajte rovnakú hodnotu."
27
+ });
28
+
29
+ Parsley.setLocale('sk');
@@ -0,0 +1,14 @@
1
+ // Extra validation errors messages for Parsley
2
+ // Load this after Parsley
3
+
4
+ Parsley.addMessages('sr', {
5
+ dateiso: "Unesite validan datum u formatu YYYY-MM-DD.",
6
+ minwords: "Potrebno je da unesete %s ili više reči.",
7
+ maxwords: "Moguće je uneti maksimalno %s reči.",
8
+ words: "Potrebno je da unesete između %s i %s reči.",
9
+ gt: "Ova vrednost mora da bude veća.",
10
+ gte: "Ova vrednost mora da bude veća ili jednaka.",
11
+ lt: "Ova vrednost mora da bude manja.",
12
+ lte: "Ova vrednost mora da bude manja ili jednaka.",
13
+ notequalto: "Sadržaj ovog polja mora biti različit."
14
+ });
@@ -0,0 +1,29 @@
1
+ // Validation errors messages for Parsley
2
+ // Load this after Parsley
3
+
4
+ Parsley.addMessages('sr', {
5
+ defaultMessage: "Uneta vrednost nije validna.",
6
+ type: {
7
+ email: "Unesite pravilnu email adresu.",
8
+ url: "Unesite pravilnu url adresu.",
9
+ number: "Unesite numeričku vrednost.",
10
+ integer: "Unesite ceo broj bez decimala.",
11
+ digits: "Unesite samo brojeve.",
12
+ alphanum: "Unesite samo alfanumeričke znake (slova i brojeve)."
13
+ },
14
+ notblank: "Ovo polje ne sme biti prazno.",
15
+ required: "Ovo polje je obavezno.",
16
+ pattern: "Uneta vrednost nije validna.",
17
+ min: "Vrednost mora biti veća ili jednaka %s.",
18
+ max: "Vrednost mora biti manja ili jednaka %s.",
19
+ range: "Vrednost mora biti između %s i %s.",
20
+ minlength: "Unos je prekratak. Mora imati najmanje %s znakova.",
21
+ maxlength: "Unos je predug. Može imati najviše %s znakova.",
22
+ length: "Dužina unosa je pogrešna. Broj znakova mora biti između %s i %s.",
23
+ mincheck: "Morate izabrati minimalno %s opcija.",
24
+ maxcheck: "Možete izabrati najviše %s opcija.",
25
+ check: "Broj izabranih opcija mora biti između %s i %s.",
26
+ equalto: "Unos mora biti jednak."
27
+ });
28
+
29
+ Parsley.setLocale('sr');
@@ -1,6 +1,6 @@
1
1
  /*!
2
2
  * Parsley.js
3
- * Version 2.6.2 - built Wed, Jan 4th 2017, 8:58 am
3
+ * Version 2.7.0 - built Wed, Mar 1st 2017, 3:53 pm
4
4
  * http://parsleyjs.org
5
5
  * Guillaume Potier - <guillaume@wisembly.com>
6
6
  * Marc-Andre Lafortune - <petroselinum@marc-andre.ca>
@@ -12,6 +12,8 @@
12
12
  //
13
13
  var _slice = Array.prototype.slice;
14
14
 
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
+
15
17
  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); } }
16
18
 
17
19
  (function (global, factory) {
@@ -22,7 +24,7 @@ function _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr
22
24
  var globalID = 1;
23
25
  var pastWarnings = {};
24
26
 
25
- var ParsleyUtils__ParsleyUtils = {
27
+ var Utils__Utils = {
26
28
  // Parsley DOM-API
27
29
  // returns object from dom attributes and values
28
30
  attr: function attr($element, namespace, obj) {
@@ -109,6 +111,70 @@ function _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr
109
111
  return string.replace(/^\s+|\s+$/g, '');
110
112
  },
111
113
 
114
+ parse: {
115
+ date: function date(string) {
116
+ var parsed = string.match(/^(\d{4,})-(\d\d)-(\d\d)$/);
117
+ if (!parsed) return null;
118
+
119
+ var _parsed$map = parsed.map(function (x) {
120
+ return parseInt(x, 10);
121
+ });
122
+
123
+ var _parsed$map2 = _slicedToArray(_parsed$map, 4);
124
+
125
+ var _ = _parsed$map2[0];
126
+ var year = _parsed$map2[1];
127
+ var month = _parsed$map2[2];
128
+ var day = _parsed$map2[3];
129
+
130
+ var date = new Date(year, month - 1, day);
131
+ if (date.getFullYear() !== year || date.getMonth() + 1 !== month || date.getDate() !== day) return null;
132
+ return date;
133
+ },
134
+ string: function string(_string) {
135
+ return _string;
136
+ },
137
+ integer: function integer(string) {
138
+ if (isNaN(string)) return null;
139
+ return parseInt(string, 10);
140
+ },
141
+ number: function number(string) {
142
+ if (isNaN(string)) throw null;
143
+ return parseFloat(string);
144
+ },
145
+ 'boolean': function _boolean(string) {
146
+ return !/^\s*false\s*$/i.test(string);
147
+ },
148
+ object: function object(string) {
149
+ return Utils__Utils.deserializeValue(string);
150
+ },
151
+ regexp: function regexp(_regexp) {
152
+ var flags = '';
153
+
154
+ // Test if RegExp is literal, if not, nothing to be done, otherwise, we need to isolate flags and pattern
155
+ if (/^\/.*\/(?:[gimy]*)$/.test(_regexp)) {
156
+ // Replace the regexp literal string with the first match group: ([gimy]*)
157
+ // If no flag is present, this will be a blank string
158
+ flags = _regexp.replace(/.*\/([gimy]*)$/, '$1');
159
+ // Again, replace the regexp literal string with the first match group:
160
+ // everything excluding the opening and closing slashes and the flags
161
+ _regexp = _regexp.replace(new RegExp('^/(.*?)/' + flags + '$'), '$1');
162
+ } else {
163
+ // Anchor regexp:
164
+ _regexp = '^' + _regexp + '$';
165
+ }
166
+ return new RegExp(_regexp, flags);
167
+ }
168
+ },
169
+
170
+ parseRequirement: function parseRequirement(requirementType, string) {
171
+ var converter = this.parse[requirementType || 'string'];
172
+ if (!converter) throw 'Unknown requirement specification: "' + requirementType + '"';
173
+ var converted = converter(string);
174
+ if (converted === null) throw 'Requirement is not a ' + requirementType + ': "' + string + '"';
175
+ return converted;
176
+ },
177
+
112
178
  namespaceEvents: function namespaceEvents(events, namespace) {
113
179
  events = this.trimString(events || '').split(/\s+/);
114
180
  if (!events[0]) return '';
@@ -152,14 +218,14 @@ function _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr
152
218
  _SubmitSelector: 'input[type="submit"], button:submit'
153
219
  };
154
220
 
155
- var ParsleyUtils__default = ParsleyUtils__ParsleyUtils;
221
+ var Utils__default = Utils__Utils;
156
222
 
157
223
  // All these options could be overriden and specified directly in DOM using
158
224
  // `data-parsley-` default DOM-API
159
225
  // eg: `inputs` can be set in DOM using `data-parsley-inputs="input, textarea"`
160
226
  // eg: `data-parsley-stop-on-first-failing-constraint="false"`
161
227
 
162
- var ParsleyDefaults = {
228
+ var Defaults = {
163
229
  // ### General
164
230
 
165
231
  // Default data-namespace for DOM API
@@ -206,11 +272,11 @@ function _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr
206
272
 
207
273
  // Return the `$element` that will receive these above success or error classes
208
274
  // Could also be (and given directly from DOM) a valid selector like `'#div'`
209
- classHandler: function classHandler(ParsleyField) {},
275
+ classHandler: function classHandler(Field) {},
210
276
 
211
277
  // Return the `$element` where errors will be appended
212
278
  // Could also be (and given directly from DOM) a valid selector like `'#div'`
213
- errorsContainer: function errorsContainer(ParsleyField) {},
279
+ errorsContainer: function errorsContainer(Field) {},
214
280
 
215
281
  // ul elem that would receive errors' list
216
282
  errorsWrapper: '<ul class="parsley-errors-list"></ul>',
@@ -219,11 +285,11 @@ function _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr
219
285
  errorTemplate: '<li></li>'
220
286
  };
221
287
 
222
- var ParsleyAbstract = function ParsleyAbstract() {
223
- this.__id__ = ParsleyUtils__default.generateID();
288
+ var Base = function Base() {
289
+ this.__id__ = Utils__default.generateID();
224
290
  };
225
291
 
226
- ParsleyAbstract.prototype = {
292
+ Base.prototype = {
227
293
  asyncSupport: true, // Deprecated
228
294
 
229
295
  _pipeAccordingToValidationResult: function _pipeAccordingToValidationResult() {
@@ -238,14 +304,14 @@ function _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr
238
304
  },
239
305
 
240
306
  actualizeOptions: function actualizeOptions() {
241
- ParsleyUtils__default.attr(this.$element, this.options.namespace, this.domOptions);
307
+ Utils__default.attr(this.$element, this.options.namespace, this.domOptions);
242
308
  if (this.parent && this.parent.actualizeOptions) this.parent.actualizeOptions();
243
309
  return this;
244
310
  },
245
311
 
246
312
  _resetOptions: function _resetOptions(initOptions) {
247
- this.domOptions = ParsleyUtils__default.objectCreate(this.parent.options);
248
- this.options = ParsleyUtils__default.objectCreate(this.domOptions);
313
+ this.domOptions = Utils__default.objectCreate(this.parent.options);
314
+ this.options = Utils__default.objectCreate(this.domOptions);
249
315
  // Shallow copy of ownProperties of initOptions:
250
316
  for (var i in initOptions) {
251
317
  if (initOptions.hasOwnProperty(i)) this.options[i] = initOptions[i];
@@ -310,41 +376,8 @@ function _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr
310
376
  return true;
311
377
  },
312
378
 
313
- // Reset UI
314
- reset: function reset() {
315
- // Field case: just emit a reset event for UI
316
- if ('ParsleyForm' !== this.__class__) {
317
- this._resetUI();
318
- return this._trigger('reset');
319
- }
320
-
321
- // Form case: emit a reset event for each field
322
- for (var i = 0; i < this.fields.length; i++) this.fields[i].reset();
323
-
324
- this._trigger('reset');
325
- },
326
-
327
- // Destroy Parsley instance (+ UI)
328
- destroy: function destroy() {
329
- // Field case: emit destroy event to clean UI and then destroy stored instance
330
- this._destroyUI();
331
- if ('ParsleyForm' !== this.__class__) {
332
- this.$element.removeData('Parsley');
333
- this.$element.removeData('ParsleyFieldMultiple');
334
- this._trigger('destroy');
335
-
336
- return;
337
- }
338
-
339
- // Form case: destroy all its fields and then destroy stored instance
340
- for (var i = 0; i < this.fields.length; i++) this.fields[i].destroy();
341
-
342
- this.$element.removeData('Parsley');
343
- this._trigger('destroy');
344
- },
345
-
346
379
  asyncIsValid: function asyncIsValid(group, force) {
347
- ParsleyUtils__default.warnOnce("asyncIsValid is deprecated; please use whenValid instead");
380
+ Utils__default.warnOnce("asyncIsValid is deprecated; please use whenValid instead");
348
381
  return this.whenValid({ group: group, force: force });
349
382
  },
350
383
 
@@ -353,73 +386,24 @@ function _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr
353
386
  }
354
387
  };
355
388
 
356
- var requirementConverters = {
357
- string: function string(_string) {
358
- return _string;
359
- },
360
- integer: function integer(string) {
361
- if (isNaN(string)) throw 'Requirement is not an integer: "' + string + '"';
362
- return parseInt(string, 10);
363
- },
364
- number: function number(string) {
365
- if (isNaN(string)) throw 'Requirement is not a number: "' + string + '"';
366
- return parseFloat(string);
367
- },
368
- reference: function reference(string) {
369
- // Unused for now
370
- var result = $(string);
371
- if (result.length === 0) throw 'No such reference: "' + string + '"';
372
- return result;
373
- },
374
- boolean: function boolean(string) {
375
- return string !== 'false';
376
- },
377
- object: function object(string) {
378
- return ParsleyUtils__default.deserializeValue(string);
379
- },
380
- regexp: function regexp(_regexp) {
381
- var flags = '';
382
-
383
- // Test if RegExp is literal, if not, nothing to be done, otherwise, we need to isolate flags and pattern
384
- if (/^\/.*\/(?:[gimy]*)$/.test(_regexp)) {
385
- // Replace the regexp literal string with the first match group: ([gimy]*)
386
- // If no flag is present, this will be a blank string
387
- flags = _regexp.replace(/.*\/([gimy]*)$/, '$1');
388
- // Again, replace the regexp literal string with the first match group:
389
- // everything excluding the opening and closing slashes and the flags
390
- _regexp = _regexp.replace(new RegExp('^/(.*?)/' + flags + '$'), '$1');
391
- } else {
392
- // Anchor regexp:
393
- _regexp = '^' + _regexp + '$';
394
- }
395
- return new RegExp(_regexp, flags);
396
- }
397
- };
398
-
399
389
  var convertArrayRequirement = function convertArrayRequirement(string, length) {
400
390
  var m = string.match(/^\s*\[(.*)\]\s*$/);
401
391
  if (!m) throw 'Requirement is not an array: "' + string + '"';
402
- var values = m[1].split(',').map(ParsleyUtils__default.trimString);
392
+ var values = m[1].split(',').map(Utils__default.trimString);
403
393
  if (values.length !== length) throw 'Requirement has ' + values.length + ' values when ' + length + ' are needed';
404
394
  return values;
405
395
  };
406
396
 
407
- var convertRequirement = function convertRequirement(requirementType, string) {
408
- var converter = requirementConverters[requirementType || 'string'];
409
- if (!converter) throw 'Unknown requirement specification: "' + requirementType + '"';
410
- return converter(string);
411
- };
412
-
413
397
  var convertExtraOptionRequirement = function convertExtraOptionRequirement(requirementSpec, string, extraOptionReader) {
414
398
  var main = null;
415
399
  var extra = {};
416
400
  for (var key in requirementSpec) {
417
401
  if (key) {
418
402
  var value = extraOptionReader(key);
419
- if ('string' === typeof value) value = convertRequirement(requirementSpec[key], value);
403
+ if ('string' === typeof value) value = Utils__default.parseRequirement(requirementSpec[key], value);
420
404
  extra[key] = value;
421
405
  } else {
422
- main = convertRequirement(requirementSpec[key], string);
406
+ main = Utils__default.parseRequirement(requirementSpec[key], string);
423
407
  }
424
408
  }
425
409
  return [main, extra];
@@ -427,11 +411,11 @@ function _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr
427
411
 
428
412
  // A Validator needs to implement the methods `validate` and `parseRequirements`
429
413
 
430
- var ParsleyValidator = function ParsleyValidator(spec) {
414
+ var Validator = function Validator(spec) {
431
415
  $.extend(true, this, spec);
432
416
  };
433
417
 
434
- ParsleyValidator.prototype = {
418
+ Validator.prototype = {
435
419
  // Returns `true` iff the given `value` is valid according the given requirements.
436
420
  validate: function validate(value, requirementFirstArg) {
437
421
  if (this.fn) {
@@ -439,13 +423,19 @@ function _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr
439
423
 
440
424
  if (arguments.length > 3) // If more args then value, requirement, instance...
441
425
  requirementFirstArg = [].slice.call(arguments, 1, -1); // Skip first arg (value) and last (instance), combining the rest
442
- return this.fn.call(this, value, requirementFirstArg);
426
+ return this.fn(value, requirementFirstArg);
443
427
  }
444
428
 
445
429
  if ($.isArray(value)) {
446
430
  if (!this.validateMultiple) throw 'Validator `' + this.name + '` does not handle multiple values';
447
431
  return this.validateMultiple.apply(this, arguments);
448
432
  } else {
433
+ var instance = arguments[arguments.length - 1];
434
+ if (this.validateDate && instance._isDateInput()) {
435
+ arguments[0] = Utils__default.parse.date(arguments[0]);
436
+ if (arguments[0] === null) return false;
437
+ return this.validateDate.apply(this, arguments);
438
+ }
449
439
  if (this.validateNumber) {
450
440
  if (isNaN(value)) return false;
451
441
  arguments[0] = parseFloat(arguments[0]);
@@ -469,12 +459,12 @@ function _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr
469
459
  var type = this.requirementType;
470
460
  if ($.isArray(type)) {
471
461
  var values = convertArrayRequirement(requirements, type.length);
472
- for (var i = 0; i < values.length; i++) values[i] = convertRequirement(type[i], values[i]);
462
+ for (var i = 0; i < values.length; i++) values[i] = Utils__default.parseRequirement(type[i], values[i]);
473
463
  return values;
474
464
  } else if ($.isPlainObject(type)) {
475
465
  return convertExtraOptionRequirement(type, requirements, extraOptionReader);
476
466
  } else {
477
- return [convertRequirement(type, requirements)];
467
+ return [Utils__default.parseRequirement(type, requirements)];
478
468
  }
479
469
  },
480
470
  // Defaults:
@@ -484,8 +474,8 @@ function _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr
484
474
 
485
475
  };
486
476
 
487
- var ParsleyValidatorRegistry = function ParsleyValidatorRegistry(validators, catalog) {
488
- this.__class__ = 'ParsleyValidatorRegistry';
477
+ var ValidatorRegistry = function ValidatorRegistry(validators, catalog) {
478
+ this.__class__ = 'ValidatorRegistry';
489
479
 
490
480
  // Default Parsley locale is en
491
481
  this.locale = 'en';
@@ -493,7 +483,7 @@ function _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr
493
483
  this.init(validators || {}, catalog || {});
494
484
  };
495
485
 
496
- var typeRegexes = {
486
+ var typeTesters = {
497
487
  email: /^((([a-z]|\d|[!#\$%&'\*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+(\.([a-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-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.)+(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))$/i,
498
488
 
499
489
  // Follow https://www.w3.org/TR/html5/infrastructure.html#floating-point-numbers
@@ -505,6 +495,12 @@ function _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr
505
495
 
506
496
  alphanum: /^\w+$/i,
507
497
 
498
+ date: {
499
+ test: function test(value) {
500
+ return Utils__default.parse.date(value) !== null;
501
+ }
502
+ },
503
+
508
504
  url: new RegExp("^" +
509
505
  // protocol identifier
510
506
  "(?:(?:https?|ftp)://)?" + // ** mod: make scheme optional
@@ -532,7 +528,7 @@ function _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr
532
528
  // resource path
533
529
  "(?:/\\S*)?" + "$", 'i')
534
530
  };
535
- typeRegexes.range = typeRegexes.number;
531
+ typeTesters.range = typeTesters.number;
536
532
 
537
533
  // See http://stackoverflow.com/a/10454560/8279
538
534
  var decimalPlaces = function decimalPlaces(num) {
@@ -547,7 +543,32 @@ function _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr
547
543
  match[2] ? +match[2] : 0));
548
544
  };
549
545
 
550
- ParsleyValidatorRegistry.prototype = {
546
+ // parseArguments('number', ['1', '2']) => [1, 2]
547
+ var ValidatorRegistry__parseArguments = function ValidatorRegistry__parseArguments(type, args) {
548
+ return args.map(Utils__default.parse[type]);
549
+ };
550
+ // operatorToValidator returns a validating function for an operator function, applied to the given type
551
+ var ValidatorRegistry__operatorToValidator = function ValidatorRegistry__operatorToValidator(type, operator) {
552
+ return function (value) {
553
+ for (var _len = arguments.length, requirementsAndInput = Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {
554
+ requirementsAndInput[_key - 1] = arguments[_key];
555
+ }
556
+
557
+ requirementsAndInput.pop(); // Get rid of `input` argument
558
+ return operator.apply(undefined, [value].concat(_toConsumableArray(ValidatorRegistry__parseArguments(type, requirementsAndInput))));
559
+ };
560
+ };
561
+
562
+ var ValidatorRegistry__comparisonOperator = function ValidatorRegistry__comparisonOperator(operator) {
563
+ return {
564
+ validateDate: ValidatorRegistry__operatorToValidator('date', operator),
565
+ validateNumber: ValidatorRegistry__operatorToValidator('number', operator),
566
+ requirementType: operator.length <= 2 ? 'string' : ['string', 'string'], // Support operators with a 1 or 2 requirement(s)
567
+ priority: 30
568
+ };
569
+ };
570
+
571
+ ValidatorRegistry.prototype = {
551
572
  init: function init(validators, catalog) {
552
573
  this.catalog = catalog;
553
574
  // Copy prototype's validators:
@@ -607,8 +628,8 @@ function _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr
607
628
  // Old API was addValidator(name, function, priority)
608
629
  //
609
630
  addValidator: function addValidator(name, arg1, arg2) {
610
- if (this.validators[name]) ParsleyUtils__default.warn('Validator "' + name + '" is already defined.');else if (ParsleyDefaults.hasOwnProperty(name)) {
611
- ParsleyUtils__default.warn('"' + name + '" is a restricted keyword and is not a valid validator name.');
631
+ if (this.validators[name]) Utils__default.warn('Validator "' + name + '" is already defined.');else if (Defaults.hasOwnProperty(name)) {
632
+ Utils__default.warn('"' + name + '" is a restricted keyword and is not a valid validator name.');
612
633
  return;
613
634
  }
614
635
  return this._setValidator.apply(this, arguments);
@@ -616,14 +637,14 @@ function _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr
616
637
 
617
638
  updateValidator: function updateValidator(name, arg1, arg2) {
618
639
  if (!this.validators[name]) {
619
- ParsleyUtils__default.warn('Validator "' + name + '" is not already defined.');
640
+ Utils__default.warn('Validator "' + name + '" is not already defined.');
620
641
  return this.addValidator.apply(this, arguments);
621
642
  }
622
643
  return this._setValidator.apply(this, arguments);
623
644
  },
624
645
 
625
646
  removeValidator: function removeValidator(name) {
626
- if (!this.validators[name]) ParsleyUtils__default.warn('Validator "' + name + '" is not defined.');
647
+ if (!this.validators[name]) Utils__default.warn('Validator "' + name + '" is not defined.');
627
648
 
628
649
  delete this.validators[name];
629
650
 
@@ -639,7 +660,7 @@ function _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr
639
660
  };
640
661
  }
641
662
  if (!validator.validate) {
642
- validator = new ParsleyValidator(validator);
663
+ validator = new Validator(validator);
643
664
  }
644
665
  this.validators[name] = validator;
645
666
 
@@ -705,11 +726,11 @@ function _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr
705
726
  var _ref$base = _ref.base;
706
727
  var base = _ref$base === undefined ? 0 : _ref$base;
707
728
 
708
- var regex = typeRegexes[type];
709
- if (!regex) {
729
+ var tester = typeTesters[type];
730
+ if (!tester) {
710
731
  throw new Error('validator type `' + type + '` is not supported');
711
732
  }
712
- if (!regex.test(value)) return false;
733
+ if (!tester.test(value)) return false;
713
734
  if ('number' === type) {
714
735
  if (!/^any$/i.test(step || '')) {
715
736
  var nb = Number(value);
@@ -781,27 +802,15 @@ function _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr
781
802
  requirementType: ['integer', 'integer'],
782
803
  priority: 30
783
804
  },
784
- min: {
785
- validateNumber: function validateNumber(value, requirement) {
786
- return value >= requirement;
787
- },
788
- requirementType: 'number',
789
- priority: 30
790
- },
791
- max: {
792
- validateNumber: function validateNumber(value, requirement) {
793
- return value <= requirement;
794
- },
795
- requirementType: 'number',
796
- priority: 30
797
- },
798
- range: {
799
- validateNumber: function validateNumber(value, min, max) {
800
- return value >= min && value <= max;
801
- },
802
- requirementType: ['number', 'number'],
803
- priority: 30
804
- },
805
+ min: ValidatorRegistry__comparisonOperator(function (value, requirement) {
806
+ return value >= requirement;
807
+ }),
808
+ max: ValidatorRegistry__comparisonOperator(function (value, requirement) {
809
+ return value <= requirement;
810
+ }),
811
+ range: ValidatorRegistry__comparisonOperator(function (value, min, max) {
812
+ return value >= min && value <= max;
813
+ }),
805
814
  equalto: {
806
815
  validateString: function validateString(value, refOrValue) {
807
816
  var $reference = $(refOrValue);
@@ -812,7 +821,7 @@ function _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr
812
821
  }
813
822
  };
814
823
 
815
- var ParsleyUI = {};
824
+ var UI = {};
816
825
 
817
826
  var diffResults = function diffResults(newResult, oldResult, deep) {
818
827
  var added = [];
@@ -836,7 +845,7 @@ function _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr
836
845
  };
837
846
  };
838
847
 
839
- ParsleyUI.Form = {
848
+ UI.Form = {
840
849
 
841
850
  _actualizeTriggers: function _actualizeTriggers() {
842
851
  var _this2 = this;
@@ -844,7 +853,7 @@ function _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr
844
853
  this.$element.on('submit.Parsley', function (evt) {
845
854
  _this2.onSubmitValidate(evt);
846
855
  });
847
- this.$element.on('click.Parsley', ParsleyUtils__default._SubmitSelector, function (evt) {
856
+ this.$element.on('click.Parsley', Utils__default._SubmitSelector, function (evt) {
848
857
  _this2.onSubmitButton(evt);
849
858
  });
850
859
 
@@ -879,7 +888,7 @@ function _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr
879
888
 
880
889
  };
881
890
 
882
- ParsleyUI.Field = {
891
+ UI.Field = {
883
892
 
884
893
  _reflowUI: function _reflowUI() {
885
894
  this._buildUI();
@@ -1075,7 +1084,7 @@ function _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr
1075
1084
  if (0 !== this._ui.$errorsWrapper.parent().length) return this._ui.$errorsWrapper.parent();
1076
1085
 
1077
1086
  if ('string' === typeof this.options.errorsContainer) {
1078
- if ($(this.options.errorsContainer).length) return $(this.options.errorsContainer).append(this._ui.$errorsWrapper);else ParsleyUtils__default.warn('The errors container `' + this.options.errorsContainer + '` does not exist in DOM');
1087
+ if ($(this.options.errorsContainer).length) return $(this.options.errorsContainer).append(this._ui.$errorsWrapper);else Utils__default.warn('The errors container `' + this.options.errorsContainer + '` does not exist in DOM');
1079
1088
  } else if ('function' === typeof this.options.errorsContainer) $errorsContainer = this.options.errorsContainer.call(this, this);
1080
1089
 
1081
1090
  if ('undefined' !== typeof $errorsContainer && $errorsContainer.length) return $errorsContainer.append(this._ui.$errorsWrapper);
@@ -1091,9 +1100,9 @@ function _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr
1091
1100
 
1092
1101
  // Remove Parsley events already bound on this field
1093
1102
  $toBind.off('.Parsley');
1094
- if (this._failedOnce) $toBind.on(ParsleyUtils__default.namespaceEvents(this.options.triggerAfterFailure, 'Parsley'), function () {
1103
+ if (this._failedOnce) $toBind.on(Utils__default.namespaceEvents(this.options.triggerAfterFailure, 'Parsley'), function () {
1095
1104
  _this3._validateIfNeeded();
1096
- });else if (trigger = ParsleyUtils__default.namespaceEvents(this.options.trigger, 'Parsley')) {
1105
+ });else if (trigger = Utils__default.namespaceEvents(this.options.trigger, 'Parsley')) {
1097
1106
  $toBind.on(trigger, function (event) {
1098
1107
  _this3._validateIfNeeded(event);
1099
1108
  });
@@ -1156,8 +1165,8 @@ function _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr
1156
1165
  }
1157
1166
  };
1158
1167
 
1159
- var ParsleyForm = function ParsleyForm(element, domOptions, options) {
1160
- this.__class__ = 'ParsleyForm';
1168
+ var Form = function Form(element, domOptions, options) {
1169
+ this.__class__ = 'Form';
1161
1170
 
1162
1171
  this.$element = $(element);
1163
1172
  this.domOptions = domOptions;
@@ -1168,9 +1177,9 @@ function _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr
1168
1177
  this.validationResult = null;
1169
1178
  };
1170
1179
 
1171
- var ParsleyForm__statusMapping = { pending: null, resolved: true, rejected: false };
1180
+ var Form__statusMapping = { pending: null, resolved: true, rejected: false };
1172
1181
 
1173
- ParsleyForm.prototype = {
1182
+ Form.prototype = {
1174
1183
  onSubmitValidate: function onSubmitValidate(event) {
1175
1184
  var _this5 = this;
1176
1185
 
@@ -1178,7 +1187,7 @@ function _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr
1178
1187
  if (true === event.parsley) return;
1179
1188
 
1180
1189
  // If we didn't come here through a submit button, use the first one in the form
1181
- var $submitSource = this._$submitSource || this.$element.find(ParsleyUtils__default._SubmitSelector).first();
1190
+ var $submitSource = this._$submitSource || this.$element.find(Utils__default._SubmitSelector).first();
1182
1191
  this._$submitSource = null;
1183
1192
  this.$element.find('.parsley-synthetic-submit-button').prop('disabled', true);
1184
1193
  if ($submitSource.is('[formnovalidate]')) return;
@@ -1226,7 +1235,7 @@ function _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr
1226
1235
  // Consider using `whenValidate` instead.
1227
1236
  validate: function validate(options) {
1228
1237
  if (arguments.length >= 1 && !$.isPlainObject(options)) {
1229
- ParsleyUtils__default.warnOnce('Calling validate on a parsley form without passing arguments as an object is deprecated.');
1238
+ Utils__default.warnOnce('Calling validate on a parsley form without passing arguments as an object is deprecated.');
1230
1239
 
1231
1240
  var _arguments = _slice.call(arguments);
1232
1241
 
@@ -1236,11 +1245,11 @@ function _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr
1236
1245
 
1237
1246
  options = { group: group, force: force, event: event };
1238
1247
  }
1239
- return ParsleyForm__statusMapping[this.whenValidate(options).state()];
1248
+ return Form__statusMapping[this.whenValidate(options).state()];
1240
1249
  },
1241
1250
 
1242
1251
  whenValidate: function whenValidate() {
1243
- var _ParsleyUtils__default$all$done$fail$always,
1252
+ var _Utils__default$all$done$fail$always,
1244
1253
  _this6 = this;
1245
1254
 
1246
1255
  var _ref7 = arguments.length <= 0 || arguments[0] === undefined ? {} : arguments[0];
@@ -1252,7 +1261,7 @@ function _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr
1252
1261
  this.submitEvent = event;
1253
1262
  if (event) {
1254
1263
  this.submitEvent = $.extend({}, event, { preventDefault: function preventDefault() {
1255
- ParsleyUtils__default.warnOnce("Using `this.submitEvent.preventDefault()` is deprecated; instead, call `this.validationResult = false`");
1264
+ Utils__default.warnOnce("Using `this.submitEvent.preventDefault()` is deprecated; instead, call `this.validationResult = false`");
1256
1265
  _this6.validationResult = false;
1257
1266
  } });
1258
1267
  }
@@ -1270,7 +1279,7 @@ function _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr
1270
1279
  });
1271
1280
  });
1272
1281
 
1273
- return (_ParsleyUtils__default$all$done$fail$always = ParsleyUtils__default.all(promises).done(function () {
1282
+ return (_Utils__default$all$done$fail$always = Utils__default.all(promises).done(function () {
1274
1283
  _this6._trigger('success');
1275
1284
  }).fail(function () {
1276
1285
  _this6.validationResult = false;
@@ -1278,7 +1287,7 @@ function _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr
1278
1287
  _this6._trigger('error');
1279
1288
  }).always(function () {
1280
1289
  _this6._trigger('validated');
1281
- })).pipe.apply(_ParsleyUtils__default$all$done$fail$always, _toConsumableArray(this._pipeAccordingToValidationResult()));
1290
+ })).pipe.apply(_Utils__default$all$done$fail$always, _toConsumableArray(this._pipeAccordingToValidationResult()));
1282
1291
  },
1283
1292
 
1284
1293
  // Iterate over refreshed fields, and stop on first failure.
@@ -1287,7 +1296,7 @@ function _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr
1287
1296
  // Prefer using `whenValid` instead.
1288
1297
  isValid: function isValid(options) {
1289
1298
  if (arguments.length >= 1 && !$.isPlainObject(options)) {
1290
- ParsleyUtils__default.warnOnce('Calling isValid on a parsley form without passing arguments as an object is deprecated.');
1299
+ Utils__default.warnOnce('Calling isValid on a parsley form without passing arguments as an object is deprecated.');
1291
1300
 
1292
1301
  var _arguments2 = _slice.call(arguments);
1293
1302
 
@@ -1296,7 +1305,7 @@ function _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr
1296
1305
 
1297
1306
  options = { group: group, force: force };
1298
1307
  }
1299
- return ParsleyForm__statusMapping[this.whenValid(options).state()];
1308
+ return Form__statusMapping[this.whenValid(options).state()];
1300
1309
  },
1301
1310
 
1302
1311
  // Iterate over refreshed fields and validate them.
@@ -1317,7 +1326,27 @@ function _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr
1317
1326
  return field.whenValid({ group: group, force: force });
1318
1327
  });
1319
1328
  });
1320
- return ParsleyUtils__default.all(promises);
1329
+ return Utils__default.all(promises);
1330
+ },
1331
+
1332
+ // Reset UI
1333
+ reset: function reset() {
1334
+ // Form case: emit a reset event for each field
1335
+ for (var i = 0; i < this.fields.length; i++) this.fields[i].reset();
1336
+
1337
+ this._trigger('reset');
1338
+ },
1339
+
1340
+ // Destroy Parsley instance (+ UI)
1341
+ destroy: function destroy() {
1342
+ // Field case: emit destroy event to clean UI and then destroy stored instance
1343
+ this._destroyUI();
1344
+
1345
+ // Form case: destroy all its fields and then destroy stored instance
1346
+ for (var i = 0; i < this.fields.length; i++) this.fields[i].destroy();
1347
+
1348
+ this.$element.removeData('Parsley');
1349
+ this._trigger('destroy');
1321
1350
  },
1322
1351
 
1323
1352
  _refreshFields: function _refreshFields() {
@@ -1336,15 +1365,18 @@ function _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr
1336
1365
  _this8.$element.find(_this8.options.inputs).not(_this8.options.excluded).each(function (_, element) {
1337
1366
  var fieldInstance = new window.Parsley.Factory(element, {}, _this8);
1338
1367
 
1339
- // Only add valid and not excluded `ParsleyField` and `ParsleyFieldMultiple` children
1340
- if (('ParsleyField' === fieldInstance.__class__ || 'ParsleyFieldMultiple' === fieldInstance.__class__) && true !== fieldInstance.options.excluded) if ('undefined' === typeof _this8.fieldsMappedById[fieldInstance.__class__ + '-' + fieldInstance.__id__]) {
1341
- _this8.fieldsMappedById[fieldInstance.__class__ + '-' + fieldInstance.__id__] = fieldInstance;
1342
- _this8.fields.push(fieldInstance);
1368
+ // Only add valid and not excluded `Field` and `FieldMultiple` children
1369
+ if (('Field' === fieldInstance.__class__ || 'FieldMultiple' === fieldInstance.__class__) && true !== fieldInstance.options.excluded) {
1370
+ var uniqueId = fieldInstance.__class__ + '-' + fieldInstance.__id__;
1371
+ if ('undefined' === typeof _this8.fieldsMappedById[uniqueId]) {
1372
+ _this8.fieldsMappedById[uniqueId] = fieldInstance;
1373
+ _this8.fields.push(fieldInstance);
1374
+ }
1343
1375
  }
1344
1376
  });
1345
1377
 
1346
- $.each(ParsleyUtils__default.difference(oldFields, _this8.fields), function (_, field) {
1347
- field._trigger('reset');
1378
+ $.each(Utils__default.difference(oldFields, _this8.fields), function (_, field) {
1379
+ field.reset();
1348
1380
  });
1349
1381
  });
1350
1382
  return this;
@@ -1376,11 +1408,9 @@ function _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr
1376
1408
 
1377
1409
  };
1378
1410
 
1379
- var ConstraintFactory = function ConstraintFactory(parsleyField, name, requirements, priority, isDomConstraint) {
1380
- if (!/ParsleyField/.test(parsleyField.__class__)) throw new Error('ParsleyField or ParsleyFieldMultiple instance expected');
1381
-
1411
+ var Constraint = function Constraint(parsleyField, name, requirements, priority, isDomConstraint) {
1382
1412
  var validatorSpec = window.Parsley._validatorRegistry.validators[name];
1383
- var validator = new ParsleyValidator(validatorSpec);
1413
+ var validator = new Validator(validatorSpec);
1384
1414
 
1385
1415
  $.extend(this, {
1386
1416
  validator: validator,
@@ -1397,7 +1427,7 @@ function _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr
1397
1427
  return cap + str.slice(1);
1398
1428
  };
1399
1429
 
1400
- ConstraintFactory.prototype = {
1430
+ Constraint.prototype = {
1401
1431
  validate: function validate(value, instance) {
1402
1432
  var _validator;
1403
1433
 
@@ -1413,8 +1443,8 @@ function _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr
1413
1443
  }
1414
1444
  };
1415
1445
 
1416
- var ParsleyField = function ParsleyField(field, domOptions, options, parsleyFormInstance) {
1417
- this.__class__ = 'ParsleyField';
1446
+ var Field = function Field(field, domOptions, options, parsleyFormInstance) {
1447
+ this.__class__ = 'Field';
1418
1448
 
1419
1449
  this.$element = $(field);
1420
1450
 
@@ -1437,14 +1467,14 @@ function _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr
1437
1467
 
1438
1468
  var parsley_field__statusMapping = { pending: null, resolved: true, rejected: false };
1439
1469
 
1440
- ParsleyField.prototype = {
1470
+ Field.prototype = {
1441
1471
  // # Public API
1442
- // Validate field and trigger some events for mainly `ParsleyUI`
1472
+ // Validate field and trigger some events for mainly `UI`
1443
1473
  // @returns `true`, an array of the validators that failed, or
1444
1474
  // `null` if validation is not finished. Prefer using whenValidate
1445
1475
  validate: function validate(options) {
1446
1476
  if (arguments.length >= 1 && !$.isPlainObject(options)) {
1447
- ParsleyUtils__default.warnOnce('Calling validate on a parsley field without passing arguments as an object is deprecated.');
1477
+ Utils__default.warnOnce('Calling validate on a parsley field without passing arguments as an object is deprecated.');
1448
1478
  options = { options: options };
1449
1479
  }
1450
1480
  var promise = this.whenValidate(options);
@@ -1460,7 +1490,7 @@ function _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr
1460
1490
  }
1461
1491
  },
1462
1492
 
1463
- // Validate field and trigger some events for mainly `ParsleyUI`
1493
+ // Validate field and trigger some events for mainly `UI`
1464
1494
  // @returns a promise that succeeds only when all validations do
1465
1495
  // or `undefined` if field is not in the given `group`.
1466
1496
  whenValidate: function whenValidate() {
@@ -1518,7 +1548,7 @@ function _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr
1518
1548
  // See also `whenValid`.
1519
1549
  isValid: function isValid(options) {
1520
1550
  if (arguments.length >= 1 && !$.isPlainObject(options)) {
1521
- ParsleyUtils__default.warnOnce('Calling isValid on a parsley field without passing arguments as an object is deprecated.');
1551
+ Utils__default.warnOnce('Calling isValid on a parsley field without passing arguments as an object is deprecated.');
1522
1552
 
1523
1553
  var _arguments3 = _slice.call(arguments);
1524
1554
 
@@ -1569,13 +1599,13 @@ function _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr
1569
1599
  $.each(groupedConstraints, function (_, constraints) {
1570
1600
  // Process one group of constraints at a time, we validate the constraints
1571
1601
  // and combine the promises together.
1572
- var promise = ParsleyUtils__default.all($.map(constraints, function (constraint) {
1602
+ var promise = Utils__default.all($.map(constraints, function (constraint) {
1573
1603
  return _this11._validateConstraint(value, constraint);
1574
1604
  }));
1575
1605
  promises.push(promise);
1576
1606
  if (promise.state() === 'rejected') return false; // Interrupt processing if a group has already failed
1577
1607
  });
1578
- return ParsleyUtils__default.all(promises);
1608
+ return Utils__default.all(promises);
1579
1609
  },
1580
1610
 
1581
1611
  // @returns a promise
@@ -1586,7 +1616,7 @@ function _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr
1586
1616
  // Map false to a failed promise
1587
1617
  if (false === result) result = $.Deferred().reject();
1588
1618
  // Make sure we return a promise and that we record failures
1589
- return ParsleyUtils__default.all([result]).fail(function (errorMessage) {
1619
+ return Utils__default.all([result]).fail(function (errorMessage) {
1590
1620
  if (!(_this12.validationResult instanceof Array)) _this12.validationResult = [];
1591
1621
  _this12.validationResult.push({
1592
1622
  assert: constraint,
@@ -1608,6 +1638,21 @@ function _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr
1608
1638
  return this._handleWhitespace(value);
1609
1639
  },
1610
1640
 
1641
+ // Reset UI
1642
+ reset: function reset() {
1643
+ this._resetUI();
1644
+ return this._trigger('reset');
1645
+ },
1646
+
1647
+ // Destroy Parsley instance (+ UI)
1648
+ destroy: function destroy() {
1649
+ // Field case: emit destroy event to clean UI and then destroy stored instance
1650
+ this._destroyUI();
1651
+ this.$element.removeData('Parsley');
1652
+ this.$element.removeData('FieldMultiple');
1653
+ this._trigger('destroy');
1654
+ },
1655
+
1611
1656
  // Actualize options that could have change since previous validation
1612
1657
  // Re-bind accordingly constraints (could be some new, removed or updated)
1613
1658
  refreshConstraints: function refreshConstraints() {
@@ -1625,7 +1670,7 @@ function _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr
1625
1670
  addConstraint: function addConstraint(name, requirements, priority, isDomConstraint) {
1626
1671
 
1627
1672
  if (window.Parsley._validatorRegistry.validators[name]) {
1628
- var constraint = new ConstraintFactory(this, name, requirements, priority, isDomConstraint);
1673
+ var constraint = new Constraint(this, name, requirements, priority, isDomConstraint);
1629
1674
 
1630
1675
  // if constraint already exist, delete it and push new version
1631
1676
  if ('undefined' !== this.constraintsByName[constraint.name]) this.removeConstraint(constraint.name);
@@ -1686,13 +1731,13 @@ function _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr
1686
1731
  if ('string' === typeof this.$element.attr('pattern')) this.addConstraint('pattern', this.$element.attr('pattern'), undefined, true);
1687
1732
 
1688
1733
  // range
1689
- if (this.$element.attr('type') !== 'date' && 'undefined' !== typeof this.$element.attr('min') && 'undefined' !== typeof this.$element.attr('max')) this.addConstraint('range', [this.$element.attr('min'), this.$element.attr('max')], undefined, true);
1734
+ if ('undefined' !== typeof this.$element.attr('min') && 'undefined' !== typeof this.$element.attr('max')) this.addConstraint('range', [this.$element.attr('min'), this.$element.attr('max')], undefined, true);
1690
1735
 
1691
1736
  // HTML5 min
1692
- else if (this.$element.attr('type') !== 'date' && 'undefined' !== typeof this.$element.attr('min')) this.addConstraint('min', this.$element.attr('min'), undefined, true);
1737
+ else if ('undefined' !== typeof this.$element.attr('min')) this.addConstraint('min', this.$element.attr('min'), undefined, true);
1693
1738
 
1694
1739
  // HTML5 max
1695
- else if (this.$element.attr('type') !== 'date' && 'undefined' !== typeof this.$element.attr('max')) this.addConstraint('max', this.$element.attr('max'), undefined, true);
1740
+ else if ('undefined' !== typeof this.$element.attr('max')) this.addConstraint('max', this.$element.attr('max'), undefined, true);
1696
1741
 
1697
1742
  // length
1698
1743
  if ('undefined' !== typeof this.$element.attr('minlength') && 'undefined' !== typeof this.$element.attr('maxlength')) this.addConstraint('length', [this.$element.attr('minlength'), this.$element.attr('maxlength')], undefined, true);
@@ -1715,7 +1760,7 @@ function _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr
1715
1760
  base: this.$element.attr('min') || this.$element.attr('value')
1716
1761
  }], undefined, true);
1717
1762
  // Regular other HTML5 supported types
1718
- } else if (/^(email|url|range)$/i.test(type)) {
1763
+ } else if (/^(email|url|range|date)$/i.test(type)) {
1719
1764
  return this.addConstraint('type', type, undefined, true);
1720
1765
  }
1721
1766
  return this;
@@ -1740,15 +1785,20 @@ function _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr
1740
1785
  // Use `data-parsley-whitespace="squish"` to auto squish input value
1741
1786
  // Use `data-parsley-whitespace="trim"` to auto trim input value
1742
1787
  _handleWhitespace: function _handleWhitespace(value) {
1743
- if (true === this.options.trimValue) ParsleyUtils__default.warnOnce('data-parsley-trim-value="true" is deprecated, please use data-parsley-whitespace="trim"');
1788
+ if (true === this.options.trimValue) Utils__default.warnOnce('data-parsley-trim-value="true" is deprecated, please use data-parsley-whitespace="trim"');
1744
1789
 
1745
1790
  if ('squish' === this.options.whitespace) value = value.replace(/\s{2,}/g, ' ');
1746
1791
 
1747
- if ('trim' === this.options.whitespace || 'squish' === this.options.whitespace || true === this.options.trimValue) value = ParsleyUtils__default.trimString(value);
1792
+ if ('trim' === this.options.whitespace || 'squish' === this.options.whitespace || true === this.options.trimValue) value = Utils__default.trimString(value);
1748
1793
 
1749
1794
  return value;
1750
1795
  },
1751
1796
 
1797
+ _isDateInput: function _isDateInput() {
1798
+ var c = this.constraintsByName.type;
1799
+ return c && c.requirements === 'date';
1800
+ },
1801
+
1752
1802
  // Internal only.
1753
1803
  // Returns the constraints, grouped by descending priority.
1754
1804
  // The result is thus an array of arrays of constraints.
@@ -1774,13 +1824,13 @@ function _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr
1774
1824
 
1775
1825
  };
1776
1826
 
1777
- var parsley_field = ParsleyField;
1827
+ var parsley_field = Field;
1778
1828
 
1779
- var ParsleyMultiple = function ParsleyMultiple() {
1780
- this.__class__ = 'ParsleyFieldMultiple';
1829
+ var Multiple = function Multiple() {
1830
+ this.__class__ = 'FieldMultiple';
1781
1831
  };
1782
1832
 
1783
- ParsleyMultiple.prototype = {
1833
+ Multiple.prototype = {
1784
1834
  // Add new `$element` sibling for multiple field
1785
1835
  addElement: function addElement($element) {
1786
1836
  this.$elements.push($element);
@@ -1788,7 +1838,7 @@ function _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr
1788
1838
  return this;
1789
1839
  },
1790
1840
 
1791
- // See `ParsleyField.refreshConstraints()`
1841
+ // See `Field.refreshConstraints()`
1792
1842
  refreshConstraints: function refreshConstraints() {
1793
1843
  var fieldConstraints;
1794
1844
 
@@ -1810,7 +1860,7 @@ function _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr
1810
1860
  continue;
1811
1861
  }
1812
1862
 
1813
- fieldConstraints = this.$elements[i].data('ParsleyFieldMultiple').refreshConstraints().constraints;
1863
+ fieldConstraints = this.$elements[i].data('FieldMultiple').refreshConstraints().constraints;
1814
1864
 
1815
1865
  for (var j = 0; j < fieldConstraints.length; j++) this.addConstraint(fieldConstraints[j].name, fieldConstraints[j].requirements, fieldConstraints[j].priority, fieldConstraints[j].isDomConstraint);
1816
1866
  }
@@ -1818,7 +1868,7 @@ function _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr
1818
1868
  return this;
1819
1869
  },
1820
1870
 
1821
- // See `ParsleyField.getValue()`
1871
+ // See `Field.getValue()`
1822
1872
  getValue: function getValue() {
1823
1873
  // Value could be overriden in DOM
1824
1874
  if ('function' === typeof this.options.value) return this.options.value(this);else if ('undefined' !== typeof this.options.value) return this.options.value;
@@ -1851,14 +1901,14 @@ function _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr
1851
1901
  }
1852
1902
  };
1853
1903
 
1854
- var ParsleyFactory = function ParsleyFactory(element, options, parsleyFormInstance) {
1904
+ var Factory = function Factory(element, options, parsleyFormInstance) {
1855
1905
  this.$element = $(element);
1856
1906
 
1857
1907
  // If the element has already been bound, returns its saved Parsley instance
1858
1908
  var savedparsleyFormInstance = this.$element.data('Parsley');
1859
1909
  if (savedparsleyFormInstance) {
1860
1910
 
1861
- // If the saved instance has been bound without a ParsleyForm parent and there is one given in this call, add it
1911
+ // If the saved instance has been bound without a Form parent and there is one given in this call, add it
1862
1912
  if ('undefined' !== typeof parsleyFormInstance && savedparsleyFormInstance.parent === window.Parsley) {
1863
1913
  savedparsleyFormInstance.parent = parsleyFormInstance;
1864
1914
  savedparsleyFormInstance._resetOptions(savedparsleyFormInstance.options);
@@ -1874,25 +1924,25 @@ function _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr
1874
1924
  // Parsley must be instantiated with a DOM element or jQuery $element
1875
1925
  if (!this.$element.length) throw new Error('You must bind Parsley on an existing element.');
1876
1926
 
1877
- if ('undefined' !== typeof parsleyFormInstance && 'ParsleyForm' !== parsleyFormInstance.__class__) throw new Error('Parent instance must be a ParsleyForm instance');
1927
+ if ('undefined' !== typeof parsleyFormInstance && 'Form' !== parsleyFormInstance.__class__) throw new Error('Parent instance must be a Form instance');
1878
1928
 
1879
1929
  this.parent = parsleyFormInstance || window.Parsley;
1880
1930
  return this.init(options);
1881
1931
  };
1882
1932
 
1883
- ParsleyFactory.prototype = {
1933
+ Factory.prototype = {
1884
1934
  init: function init(options) {
1885
1935
  this.__class__ = 'Parsley';
1886
- this.__version__ = '2.6.2';
1887
- this.__id__ = ParsleyUtils__default.generateID();
1936
+ this.__version__ = '2.7.0';
1937
+ this.__id__ = Utils__default.generateID();
1888
1938
 
1889
1939
  // Pre-compute options
1890
1940
  this._resetOptions(options);
1891
1941
 
1892
- // A ParsleyForm instance is obviously a `<form>` element but also every node that is not an input and has the `data-parsley-validate` attribute
1893
- if (this.$element.is('form') || ParsleyUtils__default.checkAttr(this.$element, this.options.namespace, 'validate') && !this.$element.is(this.options.inputs)) return this.bind('parsleyForm');
1942
+ // 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.$element.is('form') || Utils__default.checkAttr(this.$element, this.options.namespace, 'validate') && !this.$element.is(this.options.inputs)) return this.bind('parsleyForm');
1894
1944
 
1895
- // Every other element is bound as a `ParsleyField` or `ParsleyFieldMultiple`
1945
+ // Every other element is bound as a `Field` or `FieldMultiple`
1896
1946
  return this.isMultiple() ? this.handleMultiple() : this.bind('parsleyField');
1897
1947
  },
1898
1948
 
@@ -1920,7 +1970,7 @@ function _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr
1920
1970
 
1921
1971
  // Else for radio / checkboxes, we need a `name` or `data-parsley-multiple` to properly bind it
1922
1972
  } else if (!this.options.multiple) {
1923
- ParsleyUtils__default.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);
1973
+ Utils__default.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);
1924
1974
  return this;
1925
1975
  }
1926
1976
 
@@ -1940,7 +1990,7 @@ function _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr
1940
1990
  parsleyMultipleInstance = $($previouslyRelated.get(i)).data('Parsley');
1941
1991
  if ('undefined' !== typeof parsleyMultipleInstance) {
1942
1992
 
1943
- if (!this.$element.data('ParsleyFieldMultiple')) {
1993
+ if (!this.$element.data('FieldMultiple')) {
1944
1994
  parsleyMultipleInstance.addElement(this.$element);
1945
1995
  }
1946
1996
 
@@ -1948,35 +1998,35 @@ function _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr
1948
1998
  }
1949
1999
  }
1950
2000
 
1951
- // Create a secret ParsleyField instance for every multiple field. It will be stored in `data('ParsleyFieldMultiple')`
1952
- // And will be useful later to access classic `ParsleyField` stuff while being in a `ParsleyFieldMultiple` instance
2001
+ // Create a secret Field instance for every multiple field. It will be stored in `data('FieldMultiple')`
2002
+ // And will be useful later to access classic `Field` stuff while being in a `FieldMultiple` instance
1953
2003
  this.bind('parsleyField', true);
1954
2004
 
1955
2005
  return parsleyMultipleInstance || this.bind('parsleyFieldMultiple');
1956
2006
  },
1957
2007
 
1958
- // Return proper `ParsleyForm`, `ParsleyField` or `ParsleyFieldMultiple`
2008
+ // Return proper `Form`, `Field` or `FieldMultiple`
1959
2009
  bind: function bind(type, doNotStore) {
1960
2010
  var parsleyInstance;
1961
2011
 
1962
2012
  switch (type) {
1963
2013
  case 'parsleyForm':
1964
- parsleyInstance = $.extend(new ParsleyForm(this.$element, this.domOptions, this.options), new ParsleyAbstract(), window.ParsleyExtend)._bindFields();
2014
+ parsleyInstance = $.extend(new Form(this.$element, this.domOptions, this.options), new Base(), window.ParsleyExtend)._bindFields();
1965
2015
  break;
1966
2016
  case 'parsleyField':
1967
- parsleyInstance = $.extend(new parsley_field(this.$element, this.domOptions, this.options, this.parent), new ParsleyAbstract(), window.ParsleyExtend);
2017
+ parsleyInstance = $.extend(new parsley_field(this.$element, this.domOptions, this.options, this.parent), new Base(), window.ParsleyExtend);
1968
2018
  break;
1969
2019
  case 'parsleyFieldMultiple':
1970
- parsleyInstance = $.extend(new parsley_field(this.$element, this.domOptions, this.options, this.parent), new ParsleyMultiple(), new ParsleyAbstract(), window.ParsleyExtend)._init();
2020
+ parsleyInstance = $.extend(new parsley_field(this.$element, this.domOptions, this.options, this.parent), new Multiple(), new Base(), window.ParsleyExtend)._init();
1971
2021
  break;
1972
2022
  default:
1973
2023
  throw new Error(type + 'is not a supported Parsley type');
1974
2024
  }
1975
2025
 
1976
- if (this.options.multiple) ParsleyUtils__default.setAttr(this.$element, this.options.namespace, 'multiple', this.options.multiple);
2026
+ if (this.options.multiple) Utils__default.setAttr(this.$element, this.options.namespace, 'multiple', this.options.multiple);
1977
2027
 
1978
2028
  if ('undefined' !== typeof doNotStore) {
1979
- this.$element.data('ParsleyFieldMultiple', parsleyInstance);
2029
+ this.$element.data('FieldMultiple', parsleyInstance);
1980
2030
 
1981
2031
  return parsleyInstance;
1982
2032
  }
@@ -1984,7 +2034,7 @@ function _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr
1984
2034
  // Store the freshly bound instance in a DOM element for later access using jQuery `data()`
1985
2035
  this.$element.data('Parsley', parsleyInstance);
1986
2036
 
1987
- // Tell the world we have a new ParsleyForm or ParsleyField instance!
2037
+ // Tell the world we have a new Form or Field instance!
1988
2038
  parsleyInstance._actualizeTriggers();
1989
2039
  parsleyInstance._trigger('init');
1990
2040
 
@@ -1997,23 +2047,23 @@ function _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr
1997
2047
  throw "The loaded version of jQuery is too old. Please upgrade to 1.8.x or better.";
1998
2048
  }
1999
2049
  if (!vernums.forEach) {
2000
- ParsleyUtils__default.warn('Parsley requires ES5 to run properly. Please include https://github.com/es-shims/es5-shim');
2050
+ Utils__default.warn('Parsley requires ES5 to run properly. Please include https://github.com/es-shims/es5-shim');
2001
2051
  }
2002
2052
  // Inherit `on`, `off` & `trigger` to Parsley:
2003
- var Parsley = $.extend(new ParsleyAbstract(), {
2053
+ var Parsley = $.extend(new Base(), {
2004
2054
  $element: $(document),
2005
2055
  actualizeOptions: null,
2006
2056
  _resetOptions: null,
2007
- Factory: ParsleyFactory,
2008
- version: '2.6.2'
2057
+ Factory: Factory,
2058
+ version: '2.7.0'
2009
2059
  });
2010
2060
 
2011
- // Supplement ParsleyField and Form with ParsleyAbstract
2061
+ // Supplement Field and Form with Base
2012
2062
  // This way, the constructors will have access to those methods
2013
- $.extend(parsley_field.prototype, ParsleyUI.Field, ParsleyAbstract.prototype);
2014
- $.extend(ParsleyForm.prototype, ParsleyUI.Form, ParsleyAbstract.prototype);
2063
+ $.extend(parsley_field.prototype, UI.Field, Base.prototype);
2064
+ $.extend(Form.prototype, UI.Form, Base.prototype);
2015
2065
  // Inherit actualizeOptions and _resetOptions:
2016
- $.extend(ParsleyFactory.prototype, ParsleyAbstract.prototype);
2066
+ $.extend(Factory.prototype, Base.prototype);
2017
2067
 
2018
2068
  // ### jQuery API
2019
2069
  // `$('.elem').parsley(options)` or `$('.elem').psly(options)`
@@ -2030,58 +2080,67 @@ function _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr
2030
2080
 
2031
2081
  // Return undefined if applied to non existing DOM element
2032
2082
  if (!$(this).length) {
2033
- ParsleyUtils__default.warn('You must bind Parsley on an existing element.');
2083
+ Utils__default.warn('You must bind Parsley on an existing element.');
2034
2084
 
2035
2085
  return;
2036
2086
  }
2037
2087
 
2038
- return new ParsleyFactory(this, options);
2088
+ return new Factory(this, options);
2039
2089
  };
2040
2090
 
2041
- // ### ParsleyField and ParsleyForm extension
2091
+ // ### Field and Form extension
2042
2092
  // Ensure the extension is now defined if it wasn't previously
2043
2093
  if ('undefined' === typeof window.ParsleyExtend) window.ParsleyExtend = {};
2044
2094
 
2045
2095
  // ### Parsley config
2046
2096
  // Inherit from ParsleyDefault, and copy over any existing values
2047
- Parsley.options = $.extend(ParsleyUtils__default.objectCreate(ParsleyDefaults), window.ParsleyConfig);
2097
+ Parsley.options = $.extend(Utils__default.objectCreate(Defaults), window.ParsleyConfig);
2048
2098
  window.ParsleyConfig = Parsley.options; // Old way of accessing global options
2049
2099
 
2050
2100
  // ### Globals
2051
2101
  window.Parsley = window.psly = Parsley;
2052
- window.ParsleyUtils = ParsleyUtils__default;
2102
+ Parsley.Utils = Utils__default;
2103
+ window.ParsleyUtils = {};
2104
+ $.each(Utils__default, function (key, value) {
2105
+ if ('function' === typeof value) {
2106
+ window.ParsleyUtils[key] = function () {
2107
+ Utils__default.warnOnce('Accessing `window.ParsleyUtils` is deprecated. Use `window.Parsley.Utils` instead.');
2108
+ return Utils__default[key].apply(Utils__default, arguments);
2109
+ };
2110
+ }
2111
+ });
2053
2112
 
2054
2113
  // ### Define methods that forward to the registry, and deprecate all access except through window.Parsley
2055
- var registry = window.Parsley._validatorRegistry = new ParsleyValidatorRegistry(window.ParsleyConfig.validators, window.ParsleyConfig.i18n);
2114
+ var registry = window.Parsley._validatorRegistry = new ValidatorRegistry(window.ParsleyConfig.validators, window.ParsleyConfig.i18n);
2056
2115
  window.ParsleyValidator = {};
2057
2116
  $.each('setLocale addCatalog addMessage addMessages getErrorMessage formatMessage addValidator updateValidator removeValidator'.split(' '), function (i, method) {
2058
2117
  window.Parsley[method] = $.proxy(registry, method);
2059
2118
  window.ParsleyValidator[method] = function () {
2060
2119
  var _window$Parsley;
2061
2120
 
2062
- ParsleyUtils__default.warnOnce('Accessing the method \'' + method + '\' through ParsleyValidator is deprecated. Simply call \'window.Parsley.' + method + '(...)\'');
2121
+ Utils__default.warnOnce('Accessing the method \'' + method + '\' through Validator is deprecated. Simply call \'window.Parsley.' + method + '(...)\'');
2063
2122
  return (_window$Parsley = window.Parsley)[method].apply(_window$Parsley, arguments);
2064
2123
  };
2065
2124
  });
2066
2125
 
2067
- // ### ParsleyUI
2126
+ // ### UI
2068
2127
  // Deprecated global object
2069
- window.Parsley.UI = ParsleyUI;
2128
+ window.Parsley.UI = UI;
2070
2129
  window.ParsleyUI = {
2071
2130
  removeError: function removeError(instance, name, doNotUpdateClass) {
2072
2131
  var updateClass = true !== doNotUpdateClass;
2073
- ParsleyUtils__default.warnOnce('Accessing ParsleyUI is deprecated. Call \'removeError\' on the instance directly. Please comment in issue 1073 as to your need to call this method.');
2132
+ Utils__default.warnOnce('Accessing UI is deprecated. Call \'removeError\' on the instance directly. Please comment in issue 1073 as to your need to call this method.');
2074
2133
  return instance.removeError(name, { updateClass: updateClass });
2075
2134
  },
2076
2135
  getErrorsMessages: function getErrorsMessages(instance) {
2077
- ParsleyUtils__default.warnOnce('Accessing ParsleyUI is deprecated. Call \'getErrorsMessages\' on the instance directly.');
2136
+ Utils__default.warnOnce('Accessing UI is deprecated. Call \'getErrorsMessages\' on the instance directly.');
2078
2137
  return instance.getErrorsMessages();
2079
2138
  }
2080
2139
  };
2081
2140
  $.each('addError updateError'.split(' '), function (i, method) {
2082
2141
  window.ParsleyUI[method] = function (instance, name, message, assert, doNotUpdateClass) {
2083
2142
  var updateClass = true !== doNotUpdateClass;
2084
- ParsleyUtils__default.warnOnce('Accessing ParsleyUI is deprecated. Call \'' + method + '\' on the instance directly. Please comment in issue 1073 as to your need to call this method.');
2143
+ Utils__default.warnOnce('Accessing UI is deprecated. Call \'' + method + '\' on the instance directly. Please comment in issue 1073 as to your need to call this method.');
2085
2144
  return instance[method](name, { message: message, assert: assert, updateClass: updateClass });
2086
2145
  };
2087
2146
  });
@@ -2097,7 +2156,7 @@ function _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr
2097
2156
 
2098
2157
  var o = $({});
2099
2158
  var deprecated = function deprecated() {
2100
- ParsleyUtils__default.warnOnce("Parsley's pubsub module is deprecated; use the 'on' and 'off' methods on parsley instances or window.Parsley");
2159
+ Utils__default.warnOnce("Parsley's pubsub module is deprecated; use the 'on' and 'off' methods on parsley instances or window.Parsley");
2101
2160
  };
2102
2161
 
2103
2162
  // Returns an event handler that calls `fn` with the arguments it expects
@@ -2136,7 +2195,7 @@ function _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr
2136
2195
 
2137
2196
  $.listenTo = function (instance, name, fn) {
2138
2197
  deprecated();
2139
- if (!(instance instanceof parsley_field) && !(instance instanceof ParsleyForm)) throw new Error('Must give Parsley instance');
2198
+ if (!(instance instanceof parsley_field) && !(instance instanceof Form)) throw new Error('Must give Parsley instance');
2140
2199
 
2141
2200
  if ('string' !== typeof name || 'function' !== typeof fn) throw new Error('Wrong parameters');
2142
2201
 
@@ -2151,7 +2210,7 @@ function _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr
2151
2210
 
2152
2211
  $.unsubscribeTo = function (instance, name) {
2153
2212
  deprecated();
2154
- if (!(instance instanceof parsley_field) && !(instance instanceof ParsleyForm)) throw new Error('Must give Parsley instance');
2213
+ if (!(instance instanceof parsley_field) && !(instance instanceof Form)) throw new Error('Must give Parsley instance');
2155
2214
  instance.off(eventName(name));
2156
2215
  };
2157
2216
 
@@ -2171,7 +2230,7 @@ function _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr
2171
2230
  var _instance;
2172
2231
 
2173
2232
  deprecated();
2174
- var instanceGiven = instance instanceof parsley_field || instance instanceof ParsleyForm;
2233
+ var instanceGiven = instance instanceof parsley_field || instance instanceof Form;
2175
2234
  var args = Array.prototype.slice.call(arguments, instanceGiven ? 2 : 1);
2176
2235
  args.unshift(eventName(name));
2177
2236
  if (!instanceGiven) {
@@ -2279,7 +2338,7 @@ function _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr
2279
2338
  });
2280
2339
 
2281
2340
  window.ParsleyExtend.addAsyncValidator = function () {
2282
- ParsleyUtils.warnOnce('Accessing the method `addAsyncValidator` through an instance is deprecated. Simply call `Parsley.addAsyncValidator(...)`');
2341
+ Utils.warnOnce('Accessing the method `addAsyncValidator` through an instance is deprecated. Simply call `Parsley.addAsyncValidator(...)`');
2283
2342
  return Parsley.addAsyncValidator.apply(Parsley, arguments);
2284
2343
  };
2285
2344