dqs-jquery-form-validator-rails 2.2.8 → 2.2.163p1

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.
Files changed (86) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +11 -37
  3. data/app/assets/javascripts/brazil.dev.js +115 -0
  4. data/app/assets/javascripts/brazil.js +9 -0
  5. data/app/assets/javascripts/date.dev.js +81 -0
  6. data/app/assets/javascripts/date.js +9 -0
  7. data/app/assets/javascripts/file.dev.js +413 -0
  8. data/app/assets/javascripts/file.js +9 -0
  9. data/app/assets/javascripts/html5.dev.js +168 -0
  10. data/app/assets/javascripts/html5.js +9 -0
  11. data/app/assets/javascripts/jquery.form-validator.min.js +9 -0
  12. data/app/assets/javascripts/jsconf.dev.js +55 -0
  13. data/app/assets/javascripts/jsconf.js +9 -0
  14. data/app/assets/javascripts/lang/cz.dev.js +65 -0
  15. data/app/assets/javascripts/lang/cz.js +9 -0
  16. data/app/assets/javascripts/lang/de.dev.js +65 -0
  17. data/app/assets/javascripts/lang/de.js +9 -0
  18. data/app/assets/javascripts/lang/es.dev.js +62 -0
  19. data/app/assets/javascripts/lang/es.js +9 -0
  20. data/app/assets/javascripts/lang/fr.dev.js +62 -0
  21. data/app/assets/javascripts/lang/fr.js +9 -0
  22. data/app/assets/javascripts/lang/it.dev.js +62 -0
  23. data/app/assets/javascripts/lang/it.js +9 -0
  24. data/app/assets/javascripts/lang/pl.dev.js +65 -0
  25. data/app/assets/javascripts/lang/pl.js +9 -0
  26. data/app/assets/javascripts/lang/pt.dev.js +65 -0
  27. data/app/assets/javascripts/lang/pt.js +9 -0
  28. data/app/assets/javascripts/lang/ro.dev.js +65 -0
  29. data/app/assets/javascripts/lang/ro.js +9 -0
  30. data/app/assets/javascripts/lang/ru.dev.js +66 -0
  31. data/app/assets/javascripts/lang/ru.js +9 -0
  32. data/app/assets/javascripts/lang/sv.dev.js +63 -0
  33. data/app/assets/javascripts/lang/sv.js +9 -0
  34. data/app/assets/javascripts/location.dev.js +78 -0
  35. data/app/assets/javascripts/location.js +9 -0
  36. data/app/assets/javascripts/sanitize.dev.js +154 -0
  37. data/app/assets/javascripts/sanitize.js +9 -0
  38. data/app/assets/javascripts/security.dev.js +523 -0
  39. data/app/assets/javascripts/security.js +9 -0
  40. data/app/assets/javascripts/src/core-validators.js +343 -0
  41. data/app/assets/javascripts/src/dialogs.js +123 -0
  42. data/app/assets/javascripts/src/jquery-plugins.js +452 -0
  43. data/app/assets/javascripts/src/module-loader.js +150 -0
  44. data/app/assets/javascripts/src/setup.js +168 -0
  45. data/app/assets/javascripts/src/utils.js +840 -0
  46. data/app/assets/javascripts/sweden.dev.js +213 -0
  47. data/app/assets/javascripts/sweden.js +9 -0
  48. data/{vendor/assets/javascripts/dqs-jquery-form-validator → app/assets/javascripts}/theme-default.css +1 -0
  49. data/app/assets/javascripts/theme-default.min.css +1 -0
  50. data/app/assets/javascripts/toggleDisabled.dev.js +67 -0
  51. data/app/assets/javascripts/toggleDisabled.js +9 -0
  52. data/app/assets/javascripts/uk.dev.js +85 -0
  53. data/app/assets/javascripts/uk.js +9 -0
  54. data/lib/dqs/jquery/form/validator/rails/version.rb +1 -1
  55. metadata +56 -37
  56. data/vendor/assets/javascripts/dqs-jquery-form-validator/brazil.js +0 -9
  57. data/vendor/assets/javascripts/dqs-jquery-form-validator/date.js +0 -9
  58. data/vendor/assets/javascripts/dqs-jquery-form-validator/file.js +0 -9
  59. data/vendor/assets/javascripts/dqs-jquery-form-validator/html5.js +0 -9
  60. data/vendor/assets/javascripts/dqs-jquery-form-validator/jquery.form-validator.js +0 -2108
  61. data/vendor/assets/javascripts/dqs-jquery-form-validator/jquery.form-validator.min.js +0 -9
  62. data/vendor/assets/javascripts/dqs-jquery-form-validator/jsconf.js +0 -9
  63. data/vendor/assets/javascripts/dqs-jquery-form-validator/lang/ca.js +0 -9
  64. data/vendor/assets/javascripts/dqs-jquery-form-validator/lang/cz.js +0 -9
  65. data/vendor/assets/javascripts/dqs-jquery-form-validator/lang/de.js +0 -9
  66. data/vendor/assets/javascripts/dqs-jquery-form-validator/lang/dk.js +0 -9
  67. data/vendor/assets/javascripts/dqs-jquery-form-validator/lang/es.js +0 -9
  68. data/vendor/assets/javascripts/dqs-jquery-form-validator/lang/fr.js +0 -9
  69. data/vendor/assets/javascripts/dqs-jquery-form-validator/lang/it.js +0 -9
  70. data/vendor/assets/javascripts/dqs-jquery-form-validator/lang/nl.js +0 -9
  71. data/vendor/assets/javascripts/dqs-jquery-form-validator/lang/no.js +0 -9
  72. data/vendor/assets/javascripts/dqs-jquery-form-validator/lang/pl.js +0 -9
  73. data/vendor/assets/javascripts/dqs-jquery-form-validator/lang/pt.js +0 -9
  74. data/vendor/assets/javascripts/dqs-jquery-form-validator/lang/ro.js +0 -9
  75. data/vendor/assets/javascripts/dqs-jquery-form-validator/lang/ru.js +0 -9
  76. data/vendor/assets/javascripts/dqs-jquery-form-validator/lang/sv.js +0 -9
  77. data/vendor/assets/javascripts/dqs-jquery-form-validator/location.js +0 -9
  78. data/vendor/assets/javascripts/dqs-jquery-form-validator/logic.js +0 -9
  79. data/vendor/assets/javascripts/dqs-jquery-form-validator/poland.js +0 -9
  80. data/vendor/assets/javascripts/dqs-jquery-form-validator/sanitize.js +0 -9
  81. data/vendor/assets/javascripts/dqs-jquery-form-validator/security.js +0 -9
  82. data/vendor/assets/javascripts/dqs-jquery-form-validator/sepa.js +0 -9
  83. data/vendor/assets/javascripts/dqs-jquery-form-validator/sweden.js +0 -9
  84. data/vendor/assets/javascripts/dqs-jquery-form-validator/theme-default.min.css +0 -1
  85. data/vendor/assets/javascripts/dqs-jquery-form-validator/toggleDisabled.js +0 -9
  86. data/vendor/assets/javascripts/dqs-jquery-form-validator/uk.js +0 -9
@@ -0,0 +1,523 @@
1
+ /**
2
+ * jQuery Form Validator Module: Security
3
+ * ------------------------------------------
4
+ * Created by Victor Jonsson <http://victorjonsson.se>
5
+ *
6
+ * This module adds validators typically used in registration forms.
7
+ * This module adds the following validators:
8
+ * - spamcheck
9
+ * - confirmation
10
+ * - strength
11
+ * - backend
12
+ * - credit card
13
+ * - cvv
14
+ *
15
+ * @website http://formvalidator.net/#security-validators
16
+ * @license MIT
17
+ * @version 2.2.163
18
+ */
19
+ (function($, window) {
20
+
21
+ 'use strict';
22
+
23
+ /*
24
+ * Simple spam check
25
+ */
26
+ $.formUtils.addValidator({
27
+ name : 'spamcheck',
28
+ validatorFunction : function(val, $el) {
29
+ var attr = $el.valAttr('captcha');
30
+ return attr === val;
31
+ },
32
+ errorMessage : '',
33
+ errorMessageKey: 'badSecurityAnswer'
34
+ });
35
+
36
+
37
+ /*
38
+ * Validate confirmation
39
+ */
40
+ $.formUtils.addValidator({
41
+ name : 'confirmation',
42
+ validatorFunction : function(value, $el, config, language, $form) {
43
+ var conf = '',
44
+ confInputName = $el.valAttr('confirm') || ($el.attr('name') + '_confirmation'),
45
+ $confInput = $form.find('[name="' +confInputName+ '"]').eq(0);
46
+
47
+ if ( $confInput ) {
48
+ conf = $confInput.val();
49
+ if( config.validateOnBlur && !$confInput[0].hasValidationCallback ) {
50
+ $confInput[0].hasValidationCallback = true;
51
+ var keyUpCallback = function() {
52
+ $el.validate();
53
+ };
54
+ $confInput.on('keyup', keyUpCallback);
55
+ $form.one('formValidationSetup', function() {
56
+ $confInput[0].hasValidationCallback = false;
57
+ $confInput.off('keyup', keyUpCallback);
58
+ });
59
+ }
60
+ } else {
61
+ alert('Could not find an input with name "'+confInputName+'"');
62
+ }
63
+
64
+ return value === conf;
65
+ },
66
+ errorMessage : '',
67
+ errorMessageKey: 'notConfirmed'
68
+ });
69
+
70
+ var creditCards = {
71
+ 'amex' : [15,15],
72
+ 'diners_club' : [14,14],
73
+ 'cjb' : [16,16],
74
+ 'laser' : [16,19],
75
+ 'visa' : [16,16],
76
+ 'mastercard' : [16,16],
77
+ 'maestro' : [12,19],
78
+ 'discover' : [16,16]
79
+ },
80
+ checkOnlyAmex = false,
81
+ allowsAmex = false;
82
+
83
+ /*
84
+ * Credit card
85
+ */
86
+ $.formUtils.addValidator({
87
+ name : 'creditcard',
88
+ validatorFunction : function(value, $el) {
89
+ var allowing = $.split( $el.valAttr('allowing') || '' );
90
+
91
+ // Setup for cvv validation
92
+ allowsAmex = $.inArray('amex', allowing) > -1;
93
+ checkOnlyAmex = allowsAmex && allowing.length === 1;
94
+
95
+ // Correct length
96
+ if( allowing.length > 0 ) {
97
+ var hasValidLength = false;
98
+ $.each(allowing, function(i, cardName) {
99
+ if( cardName in creditCards) {
100
+ if( value.length >= creditCards[cardName][0] && value.length <= creditCards[cardName][1]) {
101
+ hasValidLength = true;
102
+ return false;
103
+ }
104
+ } else if( window.console ) {
105
+ console.warn('Use of unknown credit card "'+cardName+'"');
106
+ }
107
+ });
108
+
109
+ if ( !hasValidLength ) {
110
+ return false;
111
+ }
112
+ }
113
+
114
+ // only numbers
115
+ if ( value.replace(new RegExp('[0-9]', 'g'), '') !== '' ) {
116
+ return false;
117
+ }
118
+
119
+ // http://en.wikipedia.org/wiki/Luhn_algorithm
120
+ // http://www.brainjar.com/js/validation/default2.asp
121
+ var checkSum = 0;
122
+ $.each(value.split('').reverse(), function(i, digit) {
123
+ digit = parseInt(digit, 10);
124
+ if( i%2 === 0 ) {
125
+ checkSum += digit;
126
+ } else {
127
+ digit *= 2;
128
+ if (digit < 10) {
129
+ checkSum += digit;
130
+ } else {
131
+ checkSum += digit - 9;
132
+ }
133
+ }
134
+ });
135
+ return checkSum % 10 === 0;
136
+ },
137
+ errorMessage : '',
138
+ errorMessageKey: 'badCreditCard'
139
+ });
140
+
141
+
142
+ /*
143
+ * Credit card number
144
+ */
145
+ $.formUtils.addValidator({
146
+ name : 'cvv',
147
+ validatorFunction : function(val) {
148
+ if( val.replace(/[0-9]/g, '') === '' ) {
149
+ val = val + '';
150
+ if( checkOnlyAmex ) {
151
+ return val.length === 4;
152
+ } else if( allowsAmex ) {
153
+ return val.length === 3 || val.length === 4;
154
+ } else {
155
+ return val.length === 3;
156
+ }
157
+ }
158
+ return false;
159
+ },
160
+ errorMessage : '',
161
+ errorMessageKey: 'badCVV'
162
+ });
163
+
164
+ /*
165
+ * Validate password strength
166
+ */
167
+ $.formUtils.addValidator({
168
+ name : 'strength',
169
+ validatorFunction : function(val, $el) {
170
+ var requiredStrength = $el.valAttr('strength') || 2;
171
+ if (requiredStrength && requiredStrength > 3) {
172
+ requiredStrength = 3;
173
+ }
174
+
175
+ return $.formUtils.validators.validate_strength.calculatePasswordStrength(val) >= requiredStrength;
176
+ },
177
+ errorMessage : '',
178
+ errorMessageKey: 'badStrength',
179
+
180
+ /**
181
+ * Code more or less borrowed from jQuery plugin "Password Strength Meter"
182
+ * written by Darren Mason (djmason9@gmail.com), myPocket technologies (www.mypocket-technologies.com)
183
+ * @param {String} password
184
+ * @return {Number}
185
+ */
186
+ calculatePasswordStrength : function(password) {
187
+
188
+ if (password.length < 4) {
189
+ return 0;
190
+ }
191
+
192
+ var score = 0;
193
+
194
+ var checkRepetition = function (pLen, str) {
195
+ var res = '';
196
+ for (var i = 0; i < str.length; i++) {
197
+ var repeated = true;
198
+
199
+ for (var j = 0; j < pLen && (j + i + pLen) < str.length; j++) {
200
+ repeated = repeated && (str.charAt(j + i) === str.charAt(j + i + pLen));
201
+ }
202
+ if (j < pLen) {
203
+ repeated = false;
204
+ }
205
+ if (repeated) {
206
+ i += pLen - 1;
207
+ repeated = false;
208
+ }
209
+ else {
210
+ res += str.charAt(i);
211
+ }
212
+ }
213
+ return res;
214
+ };
215
+
216
+ //password length
217
+ score += password.length * 4;
218
+ score += ( checkRepetition(1, password).length - password.length ) * 1;
219
+ score += ( checkRepetition(2, password).length - password.length ) * 1;
220
+ score += ( checkRepetition(3, password).length - password.length ) * 1;
221
+ score += ( checkRepetition(4, password).length - password.length ) * 1;
222
+
223
+ //password has 3 numbers
224
+ if (password.match(/(.*[0-9].*[0-9].*[0-9])/)) {
225
+ score += 5;
226
+ }
227
+
228
+ //password has 2 symbols
229
+ if (password.match(/(.*[!,@,#,$,%,^,&,*,?,_,~].*[!,@,#,$,%,^,&,*,?,_,~])/)) {
230
+ score += 5;
231
+ }
232
+
233
+ //password has Upper and Lower chars
234
+ if (password.match(/([a-z].*[A-Z])|([A-Z].*[a-z])/)) {
235
+ score += 10;
236
+ }
237
+
238
+ //password has number and chars
239
+ if (password.match(/([a-zA-Z])/) && password.match(/([0-9])/)) {
240
+ score += 15;
241
+ }
242
+ //
243
+ //password has number and symbol
244
+ if (password.match(/([!,@,#,$,%,^,&,*,?,_,~])/) && password.match(/([0-9])/)) {
245
+ score += 15;
246
+ }
247
+
248
+ //password has char and symbol
249
+ if (password.match(/([!,@,#,$,%,^,&,*,?,_,~])/) && password.match(/([a-zA-Z])/)) {
250
+ score += 15;
251
+ }
252
+
253
+ //password is just a numbers or chars
254
+ if (password.match(/^\w+$/) || password.match(/^\d+$/)) {
255
+ score -= 10;
256
+ }
257
+
258
+ //verifying 0 < score < 100
259
+ if (score < 0) {
260
+ score = 0;
261
+ }
262
+ if (score > 100) {
263
+ score = 100;
264
+ }
265
+
266
+ if (score < 20) {
267
+ return 0;
268
+ }
269
+ else if (score < 40) {
270
+ return 1;
271
+ }
272
+ else if(score <= 60) {
273
+ return 2;
274
+ }
275
+ else {
276
+ return 3;
277
+ }
278
+ },
279
+
280
+ strengthDisplay : function($el, options) {
281
+ var config = {
282
+ fontSize: '12pt',
283
+ padding: '4px',
284
+ bad : 'Very bad',
285
+ weak : 'Weak',
286
+ good : 'Good',
287
+ strong : 'Strong'
288
+ };
289
+
290
+ if (options) {
291
+ $.extend(config, options);
292
+ }
293
+
294
+ $el.bind('keyup', function() {
295
+ var val = $(this).val(),
296
+ $parent = typeof config.parent === 'undefined' ? $(this).parent() : $(config.parent),
297
+ $displayContainer = $parent.find('.strength-meter'),
298
+ strength = $.formUtils.validators.validate_strength.calculatePasswordStrength(val),
299
+ css = {
300
+ background: 'pink',
301
+ color : '#FF0000',
302
+ fontWeight : 'bold',
303
+ border : 'red solid 1px',
304
+ borderWidth : '0px 0px 4px',
305
+ display : 'inline-block',
306
+ fontSize : config.fontSize,
307
+ padding : config.padding
308
+ },
309
+ text = config.bad;
310
+
311
+ if($displayContainer.length === 0) {
312
+ $displayContainer = $('<span></span>');
313
+ $displayContainer
314
+ .addClass('strength-meter')
315
+ .appendTo($parent);
316
+ }
317
+
318
+ if( !val ) {
319
+ $displayContainer.hide();
320
+ } else {
321
+ $displayContainer.show();
322
+ }
323
+
324
+ if(strength === 1) {
325
+ text = config.weak;
326
+ }
327
+ else if(strength === 2) {
328
+ css.background = 'lightyellow';
329
+ css.borderColor = 'yellow';
330
+ css.color = 'goldenrod';
331
+ text = config.good;
332
+ }
333
+ else if(strength >= 3) {
334
+ css.background = 'lightgreen';
335
+ css.borderColor = 'darkgreen';
336
+ css.color = 'darkgreen';
337
+ text = config.strong;
338
+ }
339
+
340
+ $displayContainer
341
+ .css(css)
342
+ .text(text);
343
+ });
344
+ }
345
+ });
346
+
347
+ var requestServer = function(serverURL, $element, val, conf, callback) {
348
+ var reqParams = $element.valAttr('req-params') || $element.data('validation-req-params') || {},
349
+ handleResponse = function(response, callback) {
350
+ if(response.valid) {
351
+ $element.valAttr('backend-valid', 'true');
352
+ }
353
+ else {
354
+ $element.valAttr('backend-invalid', 'true');
355
+ if (response.message) {
356
+ $element.attr(conf.validationErrorMsgAttribute, response.message);
357
+ }
358
+ }
359
+
360
+ if( !$element.valAttr('has-keyup-event') ) {
361
+ $element
362
+ .valAttr('has-keyup-event', '1')
363
+ .bind('keyup change', function(evt) {
364
+ if( evt.keyCode !== 9 && evt.keyCode !== 16 ) {
365
+ $(this)
366
+ .valAttr('backend-valid', false)
367
+ .valAttr('backend-invalid', false);
368
+ }
369
+ });
370
+ }
371
+
372
+ callback();
373
+ };
374
+
375
+ if ( !reqParams ) {
376
+ reqParams = {};
377
+ }
378
+ if ( typeof reqParams === 'string' ) {
379
+ reqParams = $.parseJSON(reqParams);
380
+ }
381
+ reqParams[$element.valAttr('param-name') || $element.attr('name')] = val;
382
+
383
+ $.ajax({
384
+ url : serverURL,
385
+ type : 'POST',
386
+ cache : false,
387
+ data : reqParams,
388
+ dataType : 'json',
389
+ error : function(error) {
390
+ handleResponse({valid: false, message:'Connection failed with status: ' + error.statusText}, callback);
391
+ return false;
392
+ },
393
+ success : function(response) {
394
+ handleResponse(response, callback);
395
+ }
396
+ });
397
+ },
398
+ disableFormSubmit = function() {
399
+ return false;
400
+ };
401
+
402
+ /*
403
+ * Server validation
404
+ * Flow (form submission):
405
+ * 1) Check if the value already has been validated on the server. If so, display the validation
406
+ * result and continue the validation process, otherwise continue to step 2
407
+ * 2) Return false as if the value is invalid and set $.formUtils.haltValidation to true
408
+ * 3) Disable form submission on the form being validated
409
+ * 4) Request the server with value and input name and add class 'validating-server-side' to the form
410
+ * 5) When the server responds an attribute will be added to the element
411
+ * telling the validator that the input has a valid/invalid value and enable form submission
412
+ * 6) Run form submission again (back to step 1)
413
+ */
414
+ $.formUtils.addValidator({
415
+ name : 'server',
416
+ validatorFunction : function(val, $el, conf, lang, $form) {
417
+
418
+ var backendValid = $el.valAttr('backend-valid'),
419
+ backendInvalid = $el.valAttr('backend-invalid'),
420
+ serverURL = document.location.href;
421
+
422
+ if($el.valAttr('url')) {
423
+ serverURL = $el.valAttr('url');
424
+ } else if('serverURL' in conf) {
425
+ serverURL = conf.backendUrl;
426
+ }
427
+
428
+ if (backendValid) {
429
+ return true;
430
+ }
431
+ else if (backendInvalid) {
432
+ return false;
433
+ }
434
+ else if($.formUtils.eventType === 'keyup' && !$.formUtils.isValidatingEntireForm) {
435
+ return null;
436
+ }
437
+
438
+ if ($.formUtils.isValidatingEntireForm) {
439
+ $form
440
+ .bind('submit', disableFormSubmit)
441
+ .addClass('validating-server-side')
442
+ .addClass('on-blur');
443
+
444
+ $el.addClass('validating-server-side');
445
+ $.formUtils.haltValidation = true;
446
+
447
+ requestServer(serverURL, $el, val, conf, function() {
448
+
449
+ $form
450
+ .removeClass('validating-server-side')
451
+ .removeClass('on-blur')
452
+ .get(0).onsubmit = function() {};
453
+
454
+ $form.unbind('submit', disableFormSubmit);
455
+ $el.removeClass('validating-server-side');
456
+
457
+ $el.valAttr('value-length', val.length);
458
+
459
+ // fire submission again!
460
+ $.formUtils.haltValidation = false;
461
+ $form.trigger('submit');
462
+ });
463
+
464
+ return null;
465
+
466
+ } else {
467
+ // validation on blur
468
+ $form.addClass('validating-server-side');
469
+ $el.addClass('validating-server-side');
470
+ requestServer(serverURL, $el, val, conf, function() {
471
+ $form.removeClass('validating-server-side');
472
+ $el.removeClass('validating-server-side');
473
+ $el.trigger('blur');
474
+ });
475
+ return null;
476
+ }
477
+ },
478
+ errorMessage : '',
479
+ errorMessageKey: 'badBackend',
480
+ validateOnKeyUp : false
481
+ });
482
+
483
+
484
+ /*
485
+ * Check for only letters and numbers
486
+ *
487
+ * http://www.slovo.info/testuni.htm
488
+ */
489
+ $.formUtils.addValidator({
490
+ name : 'letternumeric',
491
+ validatorFunction : function(val, $el, config, language) {
492
+ var patternStart = '^([a-zA-Z0-9\xAA\xB5\xBA\xC0-\xD6\xD8-\xF6\xF8-\u02C1\u02C6-\u02D1\u02E0-\u02E4\u02EC\u02EE\u0370-\u0374\u0376\u0377\u037A-\u037D\u0386\u0388-\u038A\u038C\u038E-\u03A1\u03A3-\u03F5\u03F7-\u0481\u048A-\u0527\u0531-\u0556\u0559\u0561-\u0587\u05D0-\u05EA\u05F0-\u05F2\u0620-\u064A\u066E\u066F\u0671-\u06D3\u06D5\u06E5\u06E6\u06EE\u06EF\u06FA-\u06FC\u06FF\u0710\u0712-\u072F\u074D-\u07A5\u07B1\u07CA-\u07EA\u07F4\u07F5\u07FA\u0800-\u0815\u081A\u0824\u0828\u0840-\u0858\u08A0\u08A2-\u08AC\u0904-\u0939\u093D\u0950\u0958-\u0961\u0971-\u0977\u0979-\u097F\u0985-\u098C\u098F\u0990\u0993-\u09A8\u09AA-\u09B0\u09B2\u09B6-\u09B9\u09BD\u09CE\u09DC\u09DD\u09DF-\u09E1\u09F0\u09F1\u0A05-\u0A0A\u0A0F\u0A10\u0A13-\u0A28\u0A2A-\u0A30\u0A32\u0A33\u0A35\u0A36\u0A38\u0A39\u0A59-\u0A5C\u0A5E\u0A72-\u0A74\u0A85-\u0A8D\u0A8F-\u0A91\u0A93-\u0AA8\u0AAA-\u0AB0\u0AB2\u0AB3\u0AB5-\u0AB9\u0ABD\u0AD0\u0AE0\u0AE1\u0B05-\u0B0C\u0B0F\u0B10\u0B13-\u0B28\u0B2A-\u0B30\u0B32\u0B33\u0B35-\u0B39\u0B3D\u0B5C\u0B5D\u0B5F-\u0B61\u0B71\u0B83\u0B85-\u0B8A\u0B8E-\u0B90\u0B92-\u0B95\u0B99\u0B9A\u0B9C\u0B9E\u0B9F\u0BA3\u0BA4\u0BA8-\u0BAA\u0BAE-\u0BB9\u0BD0\u0C05-\u0C0C\u0C0E-\u0C10\u0C12-\u0C28\u0C2A-\u0C33\u0C35-\u0C39\u0C3D\u0C58\u0C59\u0C60\u0C61\u0C85-\u0C8C\u0C8E-\u0C90\u0C92-\u0CA8\u0CAA-\u0CB3\u0CB5-\u0CB9\u0CBD\u0CDE\u0CE0\u0CE1\u0CF1\u0CF2\u0D05-\u0D0C\u0D0E-\u0D10\u0D12-\u0D3A\u0D3D\u0D4E\u0D60\u0D61\u0D7A-\u0D7F\u0D85-\u0D96\u0D9A-\u0DB1\u0DB3-\u0DBB\u0DBD\u0DC0-\u0DC6\u0E01-\u0E30\u0E32\u0E33\u0E40-\u0E46\u0E81\u0E82\u0E84\u0E87\u0E88\u0E8A\u0E8D\u0E94-\u0E97\u0E99-\u0E9F\u0EA1-\u0EA3\u0EA5\u0EA7\u0EAA\u0EAB\u0EAD-\u0EB0\u0EB2\u0EB3\u0EBD\u0EC0-\u0EC4\u0EC6\u0EDC-\u0EDF\u0F00\u0F40-\u0F47\u0F49-\u0F6C\u0F88-\u0F8C\u1000-\u102A\u103F\u1050-\u1055\u105A-\u105D\u1061\u1065\u1066\u106E-\u1070\u1075-\u1081\u108E\u10A0-\u10C5\u10C7\u10CD\u10D0-\u10FA\u10FC-\u1248\u124A-\u124D\u1250-\u1256\u1258\u125A-\u125D\u1260-\u1288\u128A-\u128D\u1290-\u12B0\u12B2-\u12B5\u12B8-\u12BE\u12C0\u12C2-\u12C5\u12C8-\u12D6\u12D8-\u1310\u1312-\u1315\u1318-\u135A\u1380-\u138F\u13A0-\u13F4\u1401-\u166C\u166F-\u167F\u1681-\u169A\u16A0-\u16EA\u1700-\u170C\u170E-\u1711\u1720-\u1731\u1740-\u1751\u1760-\u176C\u176E-\u1770\u1780-\u17B3\u17D7\u17DC\u1820-\u1877\u1880-\u18A8\u18AA\u18B0-\u18F5\u1900-\u191C\u1950-\u196D\u1970-\u1974\u1980-\u19AB\u19C1-\u19C7\u1A00-\u1A16\u1A20-\u1A54\u1AA7\u1B05-\u1B33\u1B45-\u1B4B\u1B83-\u1BA0\u1BAE\u1BAF\u1BBA-\u1BE5\u1C00-\u1C23\u1C4D-\u1C4F\u1C5A-\u1C7D\u1CE9-\u1CEC\u1CEE-\u1CF1\u1CF5\u1CF6\u1D00-\u1DBF\u1E00-\u1F15\u1F18-\u1F1D\u1F20-\u1F45\u1F48-\u1F4D\u1F50-\u1F57\u1F59\u1F5B\u1F5D\u1F5F-\u1F7D\u1F80-\u1FB4\u1FB6-\u1FBC\u1FBE\u1FC2-\u1FC4\u1FC6-\u1FCC\u1FD0-\u1FD3\u1FD6-\u1FDB\u1FE0-\u1FEC\u1FF2-\u1FF4\u1FF6-\u1FFC\u2071\u207F\u2090-\u209C\u2102\u2107\u210A-\u2113\u2115\u2119-\u211D\u2124\u2126\u2128\u212A-\u212D\u212F-\u2139\u213C-\u213F\u2145-\u2149\u214E\u2183\u2184\u2C00-\u2C2E\u2C30-\u2C5E\u2C60-\u2CE4\u2CEB-\u2CEE\u2CF2\u2CF3\u2D00-\u2D25\u2D27\u2D2D\u2D30-\u2D67\u2D6F\u2D80-\u2D96\u2DA0-\u2DA6\u2DA8-\u2DAE\u2DB0-\u2DB6\u2DB8-\u2DBE\u2DC0-\u2DC6\u2DC8-\u2DCE\u2DD0-\u2DD6\u2DD8-\u2DDE\u2E2F\u3005\u3006\u3031-\u3035\u303B\u303C\u3041-\u3096\u309D-\u309F\u30A1-\u30FA\u30FC-\u30FF\u3105-\u312D\u3131-\u318E\u31A0-\u31BA\u31F0-\u31FF\u3400-\u4DB5\u4E00-\u9FCC\uA000-\uA48C\uA4D0-\uA4FD\uA500-\uA60C\uA610-\uA61F\uA62A\uA62B\uA640-\uA66E\uA67F-\uA697\uA6A0-\uA6E5\uA717-\uA71F\uA722-\uA788\uA78B-\uA78E\uA790-\uA793\uA7A0-\uA7AA\uA7F8-\uA801\uA803-\uA805\uA807-\uA80A\uA80C-\uA822\uA840-\uA873\uA882-\uA8B3\uA8F2-\uA8F7\uA8FB\uA90A-\uA925\uA930-\uA946\uA960-\uA97C\uA984-\uA9B2\uA9CF\uAA00-\uAA28\uAA40-\uAA42\uAA44-\uAA4B\uAA60-\uAA76\uAA7A\uAA80-\uAAAF\uAAB1\uAAB5\uAAB6\uAAB9-\uAABD\uAAC0\uAAC2\uAADB-\uAADD\uAAE0-\uAAEA\uAAF2-\uAAF4\uAB01-\uAB06\uAB09-\uAB0E\uAB11-\uAB16\uAB20-\uAB26\uAB28-\uAB2E\uABC0-\uABE2\uAC00-\uD7A3\uD7B0-\uD7C6\uD7CB-\uD7FB\uF900-\uFA6D\uFA70-\uFAD9\uFB00-\uFB06\uFB13-\uFB17\uFB1D\uFB1F-\uFB28\uFB2A-\uFB36\uFB38-\uFB3C\uFB3E\uFB40\uFB41\uFB43\uFB44\uFB46-\uFBB1\uFBD3-\uFD3D\uFD50-\uFD8F\uFD92-\uFDC7\uFDF0-\uFDFB\uFE70-\uFE74\uFE76-\uFEFC\uFF21-\uFF3A\uFF41-\uFF5A\uFF66-\uFFBE\uFFC2-\uFFC7\uFFCA-\uFFCF\uFFD2-\uFFD7\uFFDA-\uFFDC',
493
+ patternEnd = ']+)$',
494
+ additionalChars = $el.valAttr('allowing'),
495
+ pattern = '';
496
+
497
+ if (additionalChars) {
498
+ pattern = patternStart + additionalChars + patternEnd;
499
+ var extra = additionalChars.replace(/\\/g, '');
500
+ if (extra.indexOf(' ') > -1) {
501
+ extra = extra.replace(' ', '');
502
+ extra += language.andSpaces || $.formUtils.LANG.andSpaces;
503
+ }
504
+ this.errorMessage = language.badAlphaNumeric + language.badAlphaNumericExtra + extra;
505
+ } else {
506
+ pattern = patternStart + patternEnd;
507
+ this.errorMessage = language.badAlphaNumeric;
508
+ }
509
+
510
+ return new RegExp(pattern).test(val);
511
+ },
512
+ errorMessage : '',
513
+ errorMessageKey: 'requiredFields'
514
+ });
515
+
516
+
517
+
518
+ $.fn.displayPasswordStrength = function(conf) {
519
+ new $.formUtils.validators.validate_strength.strengthDisplay(this, conf);
520
+ return this;
521
+ };
522
+
523
+ })(jQuery, window);
@@ -0,0 +1,9 @@
1
+ /**
2
+ * JQUERY-FORM-VALIDATOR
3
+ *
4
+ * @version 2.2.163
5
+ * @website http://formvalidator.net/
6
+ * @author Victor Jonsson, http://victorjonsson.se
7
+ * @license MIT
8
+ */
9
+ !function(a,b){"use strict";a.formUtils.addValidator({name:"spamcheck",validatorFunction:function(a,b){var c=b.valAttr("captcha");return c===a},errorMessage:"",errorMessageKey:"badSecurityAnswer"}),a.formUtils.addValidator({name:"confirmation",validatorFunction:function(a,b,c,d,e){var f="",g=b.valAttr("confirm")||b.attr("name")+"_confirmation",h=e.find('[name="'+g+'"]').eq(0);if(h){if(f=h.val(),c.validateOnBlur&&!h[0].hasValidationCallback){h[0].hasValidationCallback=!0;var i=function(){b.validate()};h.on("keyup",i),e.one("formValidationSetup",function(){h[0].hasValidationCallback=!1,h.off("keyup",i)})}}else alert('Could not find an input with name "'+g+'"');return a===f},errorMessage:"",errorMessageKey:"notConfirmed"});var c={amex:[15,15],diners_club:[14,14],cjb:[16,16],laser:[16,19],visa:[16,16],mastercard:[16,16],maestro:[12,19],discover:[16,16]},d=!1,e=!1;a.formUtils.addValidator({name:"creditcard",validatorFunction:function(f,g){var h=a.split(g.valAttr("allowing")||"");if(e=a.inArray("amex",h)>-1,d=e&&1===h.length,h.length>0){var i=!1;if(a.each(h,function(a,d){if(d in c){if(f.length>=c[d][0]&&f.length<=c[d][1])return i=!0,!1}else b.console&&console.warn('Use of unknown credit card "'+d+'"')}),!i)return!1}if(""!==f.replace(new RegExp("[0-9]","g"),""))return!1;var j=0;return a.each(f.split("").reverse(),function(a,b){b=parseInt(b,10),a%2===0?j+=b:(b*=2,j+=10>b?b:b-9)}),j%10===0},errorMessage:"",errorMessageKey:"badCreditCard"}),a.formUtils.addValidator({name:"cvv",validatorFunction:function(a){return""===a.replace(/[0-9]/g,"")?(a+="",d?4===a.length:e?3===a.length||4===a.length:3===a.length):!1},errorMessage:"",errorMessageKey:"badCVV"}),a.formUtils.addValidator({name:"strength",validatorFunction:function(b,c){var d=c.valAttr("strength")||2;return d&&d>3&&(d=3),a.formUtils.validators.validate_strength.calculatePasswordStrength(b)>=d},errorMessage:"",errorMessageKey:"badStrength",calculatePasswordStrength:function(a){if(a.length<4)return 0;var b=0,c=function(a,b){for(var c="",d=0;d<b.length;d++){for(var e=!0,f=0;a>f&&f+d+a<b.length;f++)e=e&&b.charAt(f+d)===b.charAt(f+d+a);a>f&&(e=!1),e?(d+=a-1,e=!1):c+=b.charAt(d)}return c};return b+=4*a.length,b+=1*(c(1,a).length-a.length),b+=1*(c(2,a).length-a.length),b+=1*(c(3,a).length-a.length),b+=1*(c(4,a).length-a.length),a.match(/(.*[0-9].*[0-9].*[0-9])/)&&(b+=5),a.match(/(.*[!,@,#,$,%,^,&,*,?,_,~].*[!,@,#,$,%,^,&,*,?,_,~])/)&&(b+=5),a.match(/([a-z].*[A-Z])|([A-Z].*[a-z])/)&&(b+=10),a.match(/([a-zA-Z])/)&&a.match(/([0-9])/)&&(b+=15),a.match(/([!,@,#,$,%,^,&,*,?,_,~])/)&&a.match(/([0-9])/)&&(b+=15),a.match(/([!,@,#,$,%,^,&,*,?,_,~])/)&&a.match(/([a-zA-Z])/)&&(b+=15),(a.match(/^\w+$/)||a.match(/^\d+$/))&&(b-=10),0>b&&(b=0),b>100&&(b=100),20>b?0:40>b?1:60>=b?2:3},strengthDisplay:function(b,c){var d={fontSize:"12pt",padding:"4px",bad:"Very bad",weak:"Weak",good:"Good",strong:"Strong"};c&&a.extend(d,c),b.bind("keyup",function(){var b=a(this).val(),c="undefined"==typeof d.parent?a(this).parent():a(d.parent),e=c.find(".strength-meter"),f=a.formUtils.validators.validate_strength.calculatePasswordStrength(b),g={background:"pink",color:"#FF0000",fontWeight:"bold",border:"red solid 1px",borderWidth:"0px 0px 4px",display:"inline-block",fontSize:d.fontSize,padding:d.padding},h=d.bad;0===e.length&&(e=a("<span></span>"),e.addClass("strength-meter").appendTo(c)),b?e.show():e.hide(),1===f?h=d.weak:2===f?(g.background="lightyellow",g.borderColor="yellow",g.color="goldenrod",h=d.good):f>=3&&(g.background="lightgreen",g.borderColor="darkgreen",g.color="darkgreen",h=d.strong),e.css(g).text(h)})}});var f=function(b,c,d,e,f){var g=c.valAttr("req-params")||c.data("validation-req-params")||{},h=function(b,d){b.valid?c.valAttr("backend-valid","true"):(c.valAttr("backend-invalid","true"),b.message&&c.attr(e.validationErrorMsgAttribute,b.message)),c.valAttr("has-keyup-event")||c.valAttr("has-keyup-event","1").bind("keyup change",function(b){9!==b.keyCode&&16!==b.keyCode&&a(this).valAttr("backend-valid",!1).valAttr("backend-invalid",!1)}),d()};g||(g={}),"string"==typeof g&&(g=a.parseJSON(g)),g[c.valAttr("param-name")||c.attr("name")]=d,a.ajax({url:b,type:"POST",cache:!1,data:g,dataType:"json",error:function(a){return h({valid:!1,message:"Connection failed with status: "+a.statusText},f),!1},success:function(a){h(a,f)}})},g=function(){return!1};a.formUtils.addValidator({name:"server",validatorFunction:function(b,c,d,e,h){var i=c.valAttr("backend-valid"),j=c.valAttr("backend-invalid"),k=document.location.href;return c.valAttr("url")?k=c.valAttr("url"):"serverURL"in d&&(k=d.backendUrl),i?!0:j?!1:"keyup"!==a.formUtils.eventType||a.formUtils.isValidatingEntireForm?a.formUtils.isValidatingEntireForm?(h.bind("submit",g).addClass("validating-server-side").addClass("on-blur"),c.addClass("validating-server-side"),a.formUtils.haltValidation=!0,f(k,c,b,d,function(){h.removeClass("validating-server-side").removeClass("on-blur").get(0).onsubmit=function(){},h.unbind("submit",g),c.removeClass("validating-server-side"),c.valAttr("value-length",b.length),a.formUtils.haltValidation=!1,h.trigger("submit")}),null):(h.addClass("validating-server-side"),c.addClass("validating-server-side"),f(k,c,b,d,function(){h.removeClass("validating-server-side"),c.removeClass("validating-server-side"),c.trigger("blur")}),null):null},errorMessage:"",errorMessageKey:"badBackend",validateOnKeyUp:!1}),a.formUtils.addValidator({name:"letternumeric",validatorFunction:function(b,c,d,e){var f="^([a-zA-Z0-9ªµºÀ-ÖØ-öø-ˁˆ-ˑˠ-ˤˬˮͰ-ʹͶͷͺ-ͽΆΈ-ΊΌΎ-ΡΣ-ϵϷ-ҁҊ-ԧԱ-Ֆՙա-ևא-תװ-ײؠ-يٮٯٱ-ۓەۥۦۮۯۺ-ۼۿܐܒ-ܯݍ-ޥޱߊ-ߪߴߵߺࠀ-ࠕࠚࠤࠨࡀ-ࡘࢠࢢ-ࢬऄ-हऽॐक़-ॡॱ-ॷॹ-ॿঅ-ঌএঐও-নপ-রলশ-হঽৎড়ঢ়য়-ৡৰৱਅ-ਊਏਐਓ-ਨਪ-ਰਲਲ਼ਵਸ਼ਸਹਖ਼-ੜਫ਼ੲ-ੴઅ-ઍએ-ઑઓ-નપ-રલળવ-હઽૐૠૡଅ-ଌଏଐଓ-ନପ-ରଲଳଵ-ହଽଡ଼ଢ଼ୟ-ୡୱஃஅ-ஊஎ-ஐஒ-கஙசஜஞடணதந-பம-ஹௐఅ-ఌఎ-ఐఒ-నప-ళవ-హఽౘౙౠౡಅ-ಌಎ-ಐಒ-ನಪ-ಳವ-ಹಽೞೠೡೱೲഅ-ഌഎ-ഐഒ-ഺഽൎൠൡൺ-ൿඅ-ඖක-නඳ-රලව-ෆก-ะาำเ-ๆກຂຄງຈຊຍດ-ທນ-ຟມ-ຣລວສຫອ-ະາຳຽເ-ໄໆໜ-ໟༀཀ-ཇཉ-ཬྈ-ྌက-ဪဿၐ-ၕၚ-ၝၡၥၦၮ-ၰၵ-ႁႎႠ-ჅჇჍა-ჺჼ-ቈቊ-ቍቐ-ቖቘቚ-ቝበ-ኈኊ-ኍነ-ኰኲ-ኵኸ-ኾዀዂ-ዅወ-ዖዘ-ጐጒ-ጕጘ-ፚᎀ-ᎏᎠ-Ᏼᐁ-ᙬᙯ-ᙿᚁ-ᚚᚠ-ᛪᜀ-ᜌᜎ-ᜑᜠ-ᜱᝀ-ᝑᝠ-ᝬᝮ-ᝰក-ឳៗៜᠠ-ᡷᢀ-ᢨᢪᢰ-ᣵᤀ-ᤜᥐ-ᥭᥰ-ᥴᦀ-ᦫᧁ-ᧇᨀ-ᨖᨠ-ᩔᪧᬅ-ᬳᭅ-ᭋᮃ-ᮠᮮᮯᮺ-ᯥᰀ-ᰣᱍ-ᱏᱚ-ᱽᳩ-ᳬᳮ-ᳱᳵᳶᴀ-ᶿḀ-ἕἘ-Ἕἠ-ὅὈ-Ὅὐ-ὗὙὛὝὟ-ώᾀ-ᾴᾶ-ᾼιῂ-ῄῆ-ῌῐ-ΐῖ-Ίῠ-Ῥῲ-ῴῶ-ῼⁱⁿₐ-ₜℂℇℊ-ℓℕℙ-ℝℤΩℨK-ℭℯ-ℹℼ-ℿⅅ-ⅉⅎↃↄⰀ-Ⱞⰰ-ⱞⱠ-ⳤⳫ-ⳮⳲⳳⴀ-ⴥⴧⴭⴰ-ⵧⵯⶀ-ⶖⶠ-ⶦⶨ-ⶮⶰ-ⶶⶸ-ⶾⷀ-ⷆⷈ-ⷎⷐ-ⷖⷘ-ⷞⸯ々〆〱-〵〻〼ぁ-ゖゝ-ゟァ-ヺー-ヿㄅ-ㄭㄱ-ㆎㆠ-ㆺㇰ-ㇿ㐀-䶵一-鿌ꀀ-ꒌꓐ-ꓽꔀ-ꘌꘐ-ꘟꘪꘫꙀ-ꙮꙿ-ꚗꚠ-ꛥꜗ-ꜟꜢ-ꞈꞋ-ꞎꞐ-ꞓꞠ-Ɦꟸ-ꠁꠃ-ꠅꠇ-ꠊꠌ-ꠢꡀ-ꡳꢂ-ꢳꣲ-ꣷꣻꤊ-ꤥꤰ-ꥆꥠ-ꥼꦄ-ꦲꧏꨀ-ꨨꩀ-ꩂꩄ-ꩋꩠ-ꩶꩺꪀ-ꪯꪱꪵꪶꪹ-ꪽꫀꫂꫛ-ꫝꫠ-ꫪꫲ-ꫴꬁ-ꬆꬉ-ꬎꬑ-ꬖꬠ-ꬦꬨ-ꬮꯀ-ꯢ가-힣ힰ-ퟆퟋ-ퟻ豈-舘並-龎ff-stﬓ-ﬗיִײַ-ﬨשׁ-זּטּ-לּמּנּסּףּפּצּ-ﮱﯓ-ﴽﵐ-ﶏﶒ-ﷇﷰ-ﷻﹰ-ﹴﹶ-ﻼA-Za-zヲ-하-ᅦᅧ-ᅬᅭ-ᅲᅳ-ᅵ",g="]+)$",h=c.valAttr("allowing"),i="";if(h){i=f+h+g;var j=h.replace(/\\/g,"");j.indexOf(" ")>-1&&(j=j.replace(" ",""),j+=e.andSpaces||a.formUtils.LANG.andSpaces),this.errorMessage=e.badAlphaNumeric+e.badAlphaNumericExtra+j}else i=f+g,this.errorMessage=e.badAlphaNumeric;return new RegExp(i).test(b)},errorMessage:"",errorMessageKey:"requiredFields"}),a.fn.displayPasswordStrength=function(b){return new a.formUtils.validators.validate_strength.strengthDisplay(this,b),this}}(jQuery,window);