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,413 @@
1
+ /**
2
+ * jQuery Form Validator Module: File
3
+ * ------------------------------------------
4
+ * Created by Victor Jonsson <http://www.victorjonsson.se>
5
+ *
6
+ * The following validators will be added by this module:
7
+ * - mime type
8
+ * - file size
9
+ * - file extension
10
+ *
11
+ * @website http://formvalidator.net/#file-validators
12
+ * @license MIT
13
+ * @version 2.2.163
14
+ */
15
+ (function($, window) {
16
+
17
+ 'use strict';
18
+
19
+ var SUPPORTS_FILE_READER = typeof window.FileReader !== 'undefined',
20
+
21
+ /**
22
+ * @return {Array}
23
+ */
24
+ _getTypes = function($input) {
25
+ var allowedTypes = $.split( ($input.valAttr('allowing') || '').toLowerCase() );
26
+ if ($.inArray('jpg', allowedTypes) > -1 && $.inArray('jpeg', allowedTypes) === -1) {
27
+ allowedTypes.push('jpeg');
28
+ }
29
+ else if ($.inArray('jpeg', allowedTypes) > -1 && $.inArray('jpg', allowedTypes) === -1) {
30
+ allowedTypes.push('jpg');
31
+ }
32
+ return allowedTypes;
33
+ },
34
+
35
+ /**
36
+ * @param {Object} obj
37
+ * @param {String} key
38
+ * @param {String} insert
39
+ * @param {Object} lang
40
+ */
41
+ _generateErrorMsg = function(obj, key, insert, lang) {
42
+ var msg = lang[key] || '';
43
+ obj.errorMessageKey = ''; // only use message attached to this object
44
+ obj.errorMessage = msg.replace('\%s', insert);
45
+ },
46
+
47
+ /**
48
+ * @param {String} msg
49
+ */
50
+ _log = function(msg) {
51
+ if( window.console && window.console.log ) {
52
+ window.console.log(msg);
53
+ }
54
+ },
55
+
56
+ /**
57
+ * @param {String} imgPath
58
+ * @param {Function} successCallback
59
+ * @param {Function} errCallback
60
+ * @private
61
+ */
62
+ _loadImage = function(imgPath, successCallback, errCallback) {
63
+ var reader = new FileReader(),
64
+ image = new Image();
65
+
66
+ reader.readAsDataURL(imgPath);
67
+
68
+ reader.onload = function(fileObj) {
69
+
70
+ image.onload = function() {
71
+ $(window).trigger('imageValidation', [this]);
72
+ successCallback(this);
73
+ };
74
+
75
+ image.onerror= function() {
76
+ errCallback();
77
+ };
78
+
79
+ image.src = fileObj.target.result;
80
+
81
+ };
82
+ };
83
+
84
+ /*
85
+ * Validate mime type (falls back on validate_extension in older browsers)
86
+ */
87
+ $.formUtils.addValidator({
88
+ name : 'mime',
89
+ validatorFunction : function(str, $input, conf, language) {
90
+
91
+ if( SUPPORTS_FILE_READER ) {
92
+ var valid = true,
93
+ files = $input.get(0).files || [],
94
+ mime = '',
95
+ allowedTypes = _getTypes($input);
96
+
97
+ if( files.length ) {
98
+ $.each(files, function(i, file) {
99
+ valid = false;
100
+ mime = file.type || '';
101
+ $.each(allowedTypes, function(j, type) {
102
+ valid = mime.indexOf(type) > -1;
103
+ if( valid ) {
104
+ return false;
105
+ }
106
+ });
107
+ return valid;
108
+ });
109
+
110
+ if( !valid ) {
111
+ _log('Trying to upload a file with mime type '+mime+' which is not allowed');
112
+ _generateErrorMsg(this, 'wrongFileType', allowedTypes.join(', '), language);
113
+ }
114
+ }
115
+
116
+ return valid;
117
+
118
+ } else {
119
+ _log('FileReader not supported by browser, will check file extension');
120
+ return $.formUtils.validators.validate_extension.validatorFunction(str, $input, conf, language);
121
+ }
122
+ },
123
+ errorMessage : '',
124
+ errorMessageKey: 'wrongFileType'
125
+ });
126
+
127
+ /**
128
+ * Validate file extension
129
+ */
130
+ $.formUtils.addValidator({
131
+ name : 'extension',
132
+ validatorFunction : function(value, $input, conf, language) {
133
+ var valid = true,
134
+ _this = this,
135
+ allowedTypes = _getTypes($input);
136
+
137
+ $.each($input.get(0).files || [value], function(i, file) {
138
+ var val = typeof file === 'string' ? file : (file.value || file.fileName || file.name),
139
+ ext = val.substr( val.lastIndexOf('.')+1 );
140
+
141
+ if( $.inArray(ext.toLowerCase(), allowedTypes) === -1 ) {
142
+ valid = false;
143
+ _generateErrorMsg(_this, 'wrongFileType', allowedTypes.join(', '), language);
144
+ return false;
145
+ }
146
+ });
147
+
148
+ return valid;
149
+ },
150
+ errorMessage : '',
151
+ errorMessageKey: 'wrongFileType'
152
+ });
153
+
154
+ /**
155
+ * Validate file size
156
+ */
157
+ $.formUtils.addValidator({
158
+ name : 'size',
159
+ validatorFunction : function(val, $input, conf, language) {
160
+ var maxSize = $input.valAttr('max-size');
161
+ if( !maxSize ) {
162
+ _log('Input "'+$input.attr('name')+'" is missing data-validation-max-size attribute');
163
+ return true;
164
+ } else if( !SUPPORTS_FILE_READER ) {
165
+ return true; // no fallback available
166
+ }
167
+
168
+ var maxBytes = $.formUtils.convertSizeNameToBytes(maxSize),
169
+ valid = true;
170
+
171
+ $.each($input.get(0).files || [], function(i, file) {
172
+ valid = file.size <= maxBytes;
173
+ return valid;
174
+ });
175
+
176
+ if( !valid ) {
177
+ _generateErrorMsg(this, 'wrongFileSize', maxSize, language);
178
+ }
179
+ return valid;
180
+ },
181
+ errorMessage : '',
182
+ errorMessageKey: 'wrongFileSize'
183
+ });
184
+
185
+ /**
186
+ * Make this function accessible via formUtils for unit tests
187
+ * @param {String} sizeName
188
+ * @return {Number}
189
+ */
190
+ $.formUtils.convertSizeNameToBytes = function(sizeName) {
191
+ sizeName = sizeName.toUpperCase();
192
+ if( sizeName.substr(sizeName.length-1, 1) === 'M' ) {
193
+ return parseInt(sizeName.substr(0, sizeName.length-1), 10) * 1024 * 1024;
194
+ } else if( sizeName.substr(sizeName.length-2, 2) === 'MB' ) {
195
+ return parseInt(sizeName.substr(0, sizeName.length-2), 10) * 1024 * 1024;
196
+ } else if( sizeName.substr(sizeName.length-2, 2) === 'KB' ) {
197
+ return parseInt(sizeName.substr(0, sizeName.length-2), 10) * 1024;
198
+ } else if( sizeName.substr(sizeName.length-1, 1) === 'B' ) {
199
+ return parseInt(sizeName.substr(0, sizeName.length-1), 10);
200
+ } else {
201
+ return parseInt(sizeName, 10);
202
+ }
203
+ };
204
+
205
+ var disableFormSubmit = function() {
206
+ return false;
207
+ };
208
+
209
+ /**
210
+ * Attach dimension check onto formUtils only for unit testing purpose
211
+ * @param {HTMLImageElement} img
212
+ * @param {String} dimDeclaration
213
+ * @param {Boolean|String} Returns error message if image was invalid, false otherwise
214
+ */
215
+ $.formUtils.checkImageDimension = function(img, dimDeclaration, language) {
216
+ var error = false,
217
+ restrictedDim = {width:0, height:0},
218
+ getDimRestriction = function(dimDeclaration) {
219
+ dimDeclaration = dimDeclaration.replace('min', '').replace('max', '');
220
+ var chunks = dimDeclaration.split('x');
221
+ restrictedDim.width = chunks[0];
222
+ restrictedDim.height = chunks[1] ? chunks[1] : chunks[0];
223
+ },
224
+ minDeclaration = false,
225
+ maxDeclaration = false,
226
+ declarationParts = dimDeclaration.split('-');
227
+
228
+ if( declarationParts.length === 1 ) {
229
+ if( declarationParts[0].indexOf('min') === 0 ) {
230
+ minDeclaration = declarationParts[0];
231
+ } else {
232
+ maxDeclaration = declarationParts[0];
233
+ }
234
+ } else {
235
+ minDeclaration = declarationParts[0];
236
+ maxDeclaration = declarationParts[1];
237
+ }
238
+
239
+ if( minDeclaration ) {
240
+ // check min
241
+ getDimRestriction(minDeclaration);
242
+ if( img.width < restrictedDim.width || img.height < restrictedDim.height ) {
243
+ error = language.imageTooSmall + ' ('+language.min+' '+restrictedDim.width+'x'+restrictedDim.height+'px)';
244
+ }
245
+ }
246
+
247
+ if( !error && maxDeclaration ) {
248
+ // Check max
249
+ getDimRestriction(maxDeclaration);
250
+ if( img.width > restrictedDim.width || img.height > restrictedDim.height ) {
251
+ if( img.width > restrictedDim.width ) {
252
+ error = language.imageTooWide +' '+restrictedDim.width+'px';
253
+ } else {
254
+ error = language.imageTooTall +' '+restrictedDim.height+'px';
255
+ }
256
+ error += ' ('+language.max+' '+restrictedDim.width+'x'+restrictedDim.height+'px)';
257
+ }
258
+ }
259
+
260
+ return error;
261
+ };
262
+
263
+ /**
264
+ * Attach ratio validation onto formUtils only for unit testing purpose
265
+ * @param {HTMLImageElement} img
266
+ * @param {String} dimDeclaration
267
+ * @param {Boolean|String} Returns error message if image was invalid, false otherwise
268
+ */
269
+ $.formUtils.checkImageRatio = function(img, ratioDeclaration, language) {
270
+ var ratio = img.width / img.height,
271
+ calculateRatio = function(declaration) {
272
+ var dims = declaration.replace('max', '').replace('min', '').split(':');
273
+ return dims[0] / dims[1];
274
+ },
275
+ declarationParts = ratioDeclaration.split('-'),
276
+ isWithin = function(val, min, max) {
277
+ return val >= min && val <= max;
278
+ };
279
+
280
+ if ( declarationParts.length === 1 ) {
281
+ if ( ratio !== calculateRatio(declarationParts[0]) ) {
282
+ return language.imageRatioNotAccepted;
283
+ }
284
+ }
285
+ else if( declarationParts.length === 2 && !isWithin(ratio, calculateRatio(declarationParts[0]), calculateRatio(declarationParts[1])) ) {
286
+ return language.imageRatioNotAccepted;
287
+ }
288
+ return false;
289
+ };
290
+
291
+ /**
292
+ * Validate image dimension
293
+ */
294
+ $.formUtils.addValidator({
295
+ name : 'dimension',
296
+ validatorFunction : function(val, $input, conf, language, $form) {
297
+ var hasCorrectDim = false;
298
+ if( SUPPORTS_FILE_READER ) {
299
+ var file = $input.get(0).files || [];
300
+ hasCorrectDim = true;
301
+
302
+ if( $input.attr('data-validation').indexOf('mime') === -1) {
303
+ alert('You should validate file type being jpg, gif or png on input '+$input[0].name);
304
+ return false;
305
+ }
306
+ else if( file.length > 1 ) {
307
+ alert('Validating image dimensions does not support inputs allowing multiple files');
308
+ return false;
309
+ } else if( file.length === 0) {
310
+ return true;
311
+ }
312
+
313
+ if( $input.valAttr('has-valid-dim') ) {
314
+ return true;
315
+ }
316
+ else if( $input.valAttr('has-not-valid-dim') ) {
317
+ this.errorMessage = language.wrongFileDim + ' ' + $input.valAttr('has-not-valid-dim');
318
+ return false;
319
+ }
320
+ else if($.formUtils.eventType === 'keyup') {
321
+ return null;
322
+ }
323
+
324
+ var wasFormSubmit = false;
325
+
326
+ if( $.formUtils.isValidatingEntireForm ) {
327
+ wasFormSubmit = true;
328
+ $.formUtils.haltValidation = true;
329
+ $form
330
+ .bind('submit', disableFormSubmit)
331
+ .addClass('on-blur');
332
+ }
333
+
334
+ _loadImage(file[0], function(img) {
335
+ var error = false;
336
+
337
+ if ( $input.valAttr('dimension') ) {
338
+ error = $.formUtils.checkImageDimension(img, $input.valAttr('dimension'), language);
339
+ }
340
+
341
+ if ( !error && $input.valAttr('ratio') ) {
342
+ error = $.formUtils.checkImageRatio(img, $input.valAttr('ratio'), language);
343
+ }
344
+
345
+ // Set validation result flag on input
346
+ if( error ) {
347
+ $input.valAttr('has-not-valid-dim', error);
348
+ }
349
+ else {
350
+ $input.valAttr('has-valid-dim', 'true');
351
+ }
352
+
353
+ // Remove validation flag when input changed
354
+ if( !$input.valAttr('has-keyup-event') ) {
355
+ $input
356
+ .valAttr('has-keyup-event', '1')
357
+ .bind('keyup change', function(evt) {
358
+ if( evt.keyCode !== 9 && evt.keyCode !== 16 ) {
359
+ $(this)
360
+ .valAttr('has-not-valid-dim', false)
361
+ .valAttr('has-valid-dim', false);
362
+ }
363
+ });
364
+ }
365
+
366
+ if( wasFormSubmit ) {
367
+ $.formUtils.haltValidation = false;
368
+ $form
369
+ .removeClass('on-blur')
370
+ .get(0).onsubmit = function() {};
371
+
372
+ $form.unbind('submit', disableFormSubmit);
373
+ $form.trigger('submit'); // fire submit once more
374
+
375
+ } else {
376
+ $input.trigger('blur'); // triggers the validation once more
377
+ }
378
+
379
+ }, function(err) {
380
+ throw err;
381
+ });
382
+
383
+ return true;
384
+ }
385
+
386
+ return hasCorrectDim;
387
+ },
388
+ errorMessage : '',
389
+ errorMessageKey: '' // error message created dynamically
390
+ // errorMessageKey: 'wrongFileDim'
391
+ });
392
+
393
+ /*
394
+ * This event listener will remove error messages for file
395
+ * inputs when file changes
396
+ */
397
+ $(window).one('validatorsLoaded formValidationSetup', function(evt, $form) {
398
+ var $inputs;
399
+ if( $form ) {
400
+ $inputs = $form.find('input[type="file"]');
401
+ } else {
402
+ $inputs = $('input[type="file"]');
403
+ }
404
+
405
+ $inputs.filter('*[data-validation]').bind('change', function() {
406
+ $(this)
407
+ .removeClass('error')
408
+ .parent()
409
+ .find('.form-error').remove();
410
+ });
411
+ });
412
+
413
+ })(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";var c="undefined"!=typeof b.FileReader,d=function(b){var c=a.split((b.valAttr("allowing")||"").toLowerCase());return a.inArray("jpg",c)>-1&&-1===a.inArray("jpeg",c)?c.push("jpeg"):a.inArray("jpeg",c)>-1&&-1===a.inArray("jpg",c)&&c.push("jpg"),c},e=function(a,b,c,d){var e=d[b]||"";a.errorMessageKey="",a.errorMessage=e.replace("%s",c)},f=function(a){b.console&&b.console.log&&b.console.log(a)},g=function(c,d,e){var f=new FileReader,g=new Image;f.readAsDataURL(c),f.onload=function(c){g.onload=function(){a(b).trigger("imageValidation",[this]),d(this)},g.onerror=function(){e()},g.src=c.target.result}};a.formUtils.addValidator({name:"mime",validatorFunction:function(b,g,h,i){if(c){var j=!0,k=g.get(0).files||[],l="",m=d(g);return k.length&&(a.each(k,function(b,c){return j=!1,l=c.type||"",a.each(m,function(a,b){return j=l.indexOf(b)>-1,j?!1:void 0}),j}),j||(f("Trying to upload a file with mime type "+l+" which is not allowed"),e(this,"wrongFileType",m.join(", "),i))),j}return f("FileReader not supported by browser, will check file extension"),a.formUtils.validators.validate_extension.validatorFunction(b,g,h,i)},errorMessage:"",errorMessageKey:"wrongFileType"}),a.formUtils.addValidator({name:"extension",validatorFunction:function(b,c,f,g){var h=!0,i=this,j=d(c);return a.each(c.get(0).files||[b],function(b,c){var d="string"==typeof c?c:c.value||c.fileName||c.name,f=d.substr(d.lastIndexOf(".")+1);return-1===a.inArray(f.toLowerCase(),j)?(h=!1,e(i,"wrongFileType",j.join(", "),g),!1):void 0}),h},errorMessage:"",errorMessageKey:"wrongFileType"}),a.formUtils.addValidator({name:"size",validatorFunction:function(b,d,g,h){var i=d.valAttr("max-size");if(!i)return f('Input "'+d.attr("name")+'" is missing data-validation-max-size attribute'),!0;if(!c)return!0;var j=a.formUtils.convertSizeNameToBytes(i),k=!0;return a.each(d.get(0).files||[],function(a,b){return k=b.size<=j}),k||e(this,"wrongFileSize",i,h),k},errorMessage:"",errorMessageKey:"wrongFileSize"}),a.formUtils.convertSizeNameToBytes=function(a){return a=a.toUpperCase(),"M"===a.substr(a.length-1,1)?1024*parseInt(a.substr(0,a.length-1),10)*1024:"MB"===a.substr(a.length-2,2)?1024*parseInt(a.substr(0,a.length-2),10)*1024:"KB"===a.substr(a.length-2,2)?1024*parseInt(a.substr(0,a.length-2),10):"B"===a.substr(a.length-1,1)?parseInt(a.substr(0,a.length-1),10):parseInt(a,10)};var h=function(){return!1};a.formUtils.checkImageDimension=function(a,b,c){var d=!1,e={width:0,height:0},f=function(a){a=a.replace("min","").replace("max","");var b=a.split("x");e.width=b[0],e.height=b[1]?b[1]:b[0]},g=!1,h=!1,i=b.split("-");return 1===i.length?0===i[0].indexOf("min")?g=i[0]:h=i[0]:(g=i[0],h=i[1]),g&&(f(g),(a.width<e.width||a.height<e.height)&&(d=c.imageTooSmall+" ("+c.min+" "+e.width+"x"+e.height+"px)")),!d&&h&&(f(h),(a.width>e.width||a.height>e.height)&&(d=a.width>e.width?c.imageTooWide+" "+e.width+"px":c.imageTooTall+" "+e.height+"px",d+=" ("+c.max+" "+e.width+"x"+e.height+"px)")),d},a.formUtils.checkImageRatio=function(a,b,c){var d=a.width/a.height,e=function(a){var b=a.replace("max","").replace("min","").split(":");return b[0]/b[1]},f=b.split("-"),g=function(a,b,c){return a>=b&&c>=a};if(1===f.length){if(d!==e(f[0]))return c.imageRatioNotAccepted}else if(2===f.length&&!g(d,e(f[0]),e(f[1])))return c.imageRatioNotAccepted;return!1},a.formUtils.addValidator({name:"dimension",validatorFunction:function(b,d,e,f,i){var j=!1;if(c){var k=d.get(0).files||[];if(j=!0,-1===d.attr("data-validation").indexOf("mime"))return alert("You should validate file type being jpg, gif or png on input "+d[0].name),!1;if(k.length>1)return alert("Validating image dimensions does not support inputs allowing multiple files"),!1;if(0===k.length)return!0;if(d.valAttr("has-valid-dim"))return!0;if(d.valAttr("has-not-valid-dim"))return this.errorMessage=f.wrongFileDim+" "+d.valAttr("has-not-valid-dim"),!1;if("keyup"===a.formUtils.eventType)return null;var l=!1;return a.formUtils.isValidatingEntireForm&&(l=!0,a.formUtils.haltValidation=!0,i.bind("submit",h).addClass("on-blur")),g(k[0],function(b){var c=!1;d.valAttr("dimension")&&(c=a.formUtils.checkImageDimension(b,d.valAttr("dimension"),f)),!c&&d.valAttr("ratio")&&(c=a.formUtils.checkImageRatio(b,d.valAttr("ratio"),f)),c?d.valAttr("has-not-valid-dim",c):d.valAttr("has-valid-dim","true"),d.valAttr("has-keyup-event")||d.valAttr("has-keyup-event","1").bind("keyup change",function(b){9!==b.keyCode&&16!==b.keyCode&&a(this).valAttr("has-not-valid-dim",!1).valAttr("has-valid-dim",!1)}),l?(a.formUtils.haltValidation=!1,i.removeClass("on-blur").get(0).onsubmit=function(){},i.unbind("submit",h),i.trigger("submit")):d.trigger("blur")},function(a){throw a}),!0}return j},errorMessage:"",errorMessageKey:""}),a(b).one("validatorsLoaded formValidationSetup",function(b,c){var d;d=c?c.find('input[type="file"]'):a('input[type="file"]'),d.filter("*[data-validation]").bind("change",function(){a(this).removeClass("error").parent().find(".form-error").remove()})})}(jQuery,window);
@@ -0,0 +1,168 @@
1
+ /**
2
+ * jQuery Form Validator Module: html5
3
+ * ------------------------------------------
4
+ * Created by Victor Jonsson <http://www.victorjonsson.se>
5
+ *
6
+ * The following module will make this jQuery plugin serve as a
7
+ * html5 fallback. It makes older browsers support the following
8
+ * - validation when type="email"
9
+ * - validation when type="url"
10
+ * - validation when type="time"
11
+ * - validation when type="date"
12
+ * - validation when type="number" and max="" min=""
13
+ * - validation when pattern="REGEXP"
14
+ * - validation when using maxlength
15
+ * - Using datalist element for creating suggestions
16
+ * - placeholders
17
+ *
18
+ * @website http://formvalidator.net/
19
+ * @license MIT
20
+ * @version 2.2.157
21
+ */
22
+ (function($, window) {
23
+
24
+ 'use strict';
25
+
26
+ var SUPPORTS_PLACEHOLDER = 'placeholder' in document.createElement('INPUT'),
27
+ SUPPORTS_DATALIST = 'options' in document.createElement('DATALIST'),
28
+ hasLoadedDateModule = false,
29
+ setupValidationUsingHTML5Attr = function($form) {
30
+
31
+ $form.each(function() {
32
+ var $f = $(this),
33
+ $formInputs = $f.find('input,textarea,select'),
34
+ foundHtml5Rule = false;
35
+
36
+ $formInputs.each(function() {
37
+ var validation = [],
38
+ $input = $(this),
39
+ isRequired = $input.attr('required'),
40
+ attrs = {};
41
+
42
+ switch ( ($input.attr('type') || '').toLowerCase() ) {
43
+ case 'time':
44
+ validation.push('time');
45
+ if( !$.formUtils.validators.validate_date && !hasLoadedDateModule ) {
46
+ hasLoadedDateModule = true;
47
+ $.formUtils.loadModules('date');
48
+ }
49
+ break;
50
+ case 'url':
51
+ validation.push('url');
52
+ break;
53
+ case 'email':
54
+ validation.push('email');
55
+ break;
56
+ case 'date':
57
+ validation.push('date');
58
+ break;
59
+ case 'number':
60
+ validation.push('number');
61
+ var max = $input.attr('max'),
62
+ min = $input.attr('min');
63
+ if( min || max ) {
64
+ if ( !min ) {
65
+ min = '0';
66
+ }
67
+ if ( !max ) {
68
+ max = '9007199254740992'; // js max int
69
+ }
70
+
71
+ attrs['data-validation-allowing'] = 'range['+min+';'+max+']';
72
+ if( min.indexOf('-') === 0 || max.indexOf('-') === 0 ) {
73
+ attrs['data-validation-allowing'] += ',negative';
74
+ }
75
+ if( min.indexOf('.') > -1 || max.indexOf('.') > -1 ) {
76
+ attrs['data-validation-allowing'] += ',float';
77
+ }
78
+ }
79
+ break;
80
+ }
81
+
82
+ if( $input.attr('pattern') ) {
83
+ validation.push('custom');
84
+ attrs['data-validation-regexp'] = $input.attr('pattern');
85
+ }
86
+ if( $input.attr('maxlength') ) {
87
+ validation.push('length');
88
+ attrs['data-validation-length'] = 'max'+$input.attr('maxlength');
89
+ }
90
+
91
+ if( !SUPPORTS_DATALIST && $input.attr('list') ) {
92
+ var suggestions = [],
93
+ $list = $('#'+$input.attr('list'));
94
+
95
+ $list.find('option').each(function() {
96
+ suggestions.push($(this).text());
97
+ });
98
+
99
+ if( suggestions.length === 0 ) {
100
+ // IE fix
101
+ var opts = $.trim($('#'+$input.attr('list')).text()).split('\n');
102
+ $.each(opts, function(i, option) {
103
+ suggestions.push($.trim(option));
104
+ });
105
+ }
106
+
107
+ $list.remove();
108
+
109
+ $.formUtils.suggest( $input, suggestions );
110
+ }
111
+
112
+ if ( isRequired && validation.length === 0 ) {
113
+ validation.push('required');
114
+ }
115
+
116
+ if( validation.length ) {
117
+ if( !isRequired ) {
118
+ attrs['data-validation-optional'] = 'true';
119
+ }
120
+
121
+ foundHtml5Rule = true;
122
+
123
+ var validationRules = ($input.attr('data-validation') || '') +' '+ validation.join(' ');
124
+ $input.attr('data-validation', $.trim(validationRules));
125
+
126
+ $.each(attrs, function(attrName, attrVal) {
127
+ $input.attr(attrName, attrVal);
128
+ });
129
+ }
130
+ });
131
+
132
+ if( foundHtml5Rule ) {
133
+ $f.trigger('html5ValidationAttrsFound');
134
+ }
135
+
136
+ if( !SUPPORTS_PLACEHOLDER ) {
137
+ $formInputs.filter('input[placeholder]').each(function() {
138
+ this.defaultValue = this.getAttribute('placeholder');
139
+ $(this)
140
+ .bind('focus', function() {
141
+ if(this.value === this.defaultValue) {
142
+ this.value = '';
143
+ $(this).removeClass('showing-placeholder');
144
+ }
145
+ })
146
+ .bind('blur', function() {
147
+ if($.trim(this.value) === '') {
148
+ this.value = this.defaultValue;
149
+ $(this).addClass('showing-placeholder');
150
+ }
151
+ });
152
+ });
153
+ }
154
+
155
+ });
156
+ };
157
+
158
+ $(window).bind('validatorsLoaded formValidationSetup', function(evt, $form) {
159
+ if( !$form ) {
160
+ $form = $('form');
161
+ }
162
+ setupValidationUsingHTML5Attr($form);
163
+ });
164
+
165
+ // Make this method available outside the module
166
+ $.formUtils.setupValidationUsingHTML5Attr = setupValidationUsingHTML5Attr;
167
+
168
+ })(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";var c="placeholder"in document.createElement("INPUT"),d="options"in document.createElement("DATALIST"),e=!1,f=function(b){b.each(function(){var b=a(this),f=b.find("input,textarea,select"),g=!1;f.each(function(){var b=[],c=a(this),f=c.attr("required"),h={};switch((c.attr("type")||"").toLowerCase()){case"time":b.push("time"),a.formUtils.validators.validate_date||e||(e=!0,a.formUtils.loadModules("date"));break;case"url":b.push("url");break;case"email":b.push("email");break;case"date":b.push("date");break;case"number":b.push("number");var i=c.attr("max"),j=c.attr("min");(j||i)&&(j||(j="0"),i||(i="9007199254740992"),h["data-validation-allowing"]="range["+j+";"+i+"]",(0===j.indexOf("-")||0===i.indexOf("-"))&&(h["data-validation-allowing"]+=",negative"),(j.indexOf(".")>-1||i.indexOf(".")>-1)&&(h["data-validation-allowing"]+=",float"))}if(c.attr("pattern")&&(b.push("custom"),h["data-validation-regexp"]=c.attr("pattern")),c.attr("maxlength")&&(b.push("length"),h["data-validation-length"]="max"+c.attr("maxlength")),!d&&c.attr("list")){var k=[],l=a("#"+c.attr("list"));if(l.find("option").each(function(){k.push(a(this).text())}),0===k.length){var m=a.trim(a("#"+c.attr("list")).text()).split("\n");a.each(m,function(b,c){k.push(a.trim(c))})}l.remove(),a.formUtils.suggest(c,k)}if(f&&0===b.length&&b.push("required"),b.length){f||(h["data-validation-optional"]="true"),g=!0;var n=(c.attr("data-validation")||"")+" "+b.join(" ");c.attr("data-validation",a.trim(n)),a.each(h,function(a,b){c.attr(a,b)})}}),g&&b.trigger("html5ValidationAttrsFound"),c||f.filter("input[placeholder]").each(function(){this.defaultValue=this.getAttribute("placeholder"),a(this).bind("focus",function(){this.value===this.defaultValue&&(this.value="",a(this).removeClass("showing-placeholder"))}).bind("blur",function(){""===a.trim(this.value)&&(this.value=this.defaultValue,a(this).addClass("showing-placeholder"))})})})};a(b).bind("validatorsLoaded formValidationSetup",function(b,c){c||(c=a("form")),f(c)}),a.formUtils.setupValidationUsingHTML5Attr=f}(jQuery,window);