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.
- checksums.yaml +4 -4
- data/README.md +11 -37
- data/app/assets/javascripts/brazil.dev.js +115 -0
- data/app/assets/javascripts/brazil.js +9 -0
- data/app/assets/javascripts/date.dev.js +81 -0
- data/app/assets/javascripts/date.js +9 -0
- data/app/assets/javascripts/file.dev.js +413 -0
- data/app/assets/javascripts/file.js +9 -0
- data/app/assets/javascripts/html5.dev.js +168 -0
- data/app/assets/javascripts/html5.js +9 -0
- data/app/assets/javascripts/jquery.form-validator.min.js +9 -0
- data/app/assets/javascripts/jsconf.dev.js +55 -0
- data/app/assets/javascripts/jsconf.js +9 -0
- data/app/assets/javascripts/lang/cz.dev.js +65 -0
- data/app/assets/javascripts/lang/cz.js +9 -0
- data/app/assets/javascripts/lang/de.dev.js +65 -0
- data/app/assets/javascripts/lang/de.js +9 -0
- data/app/assets/javascripts/lang/es.dev.js +62 -0
- data/app/assets/javascripts/lang/es.js +9 -0
- data/app/assets/javascripts/lang/fr.dev.js +62 -0
- data/app/assets/javascripts/lang/fr.js +9 -0
- data/app/assets/javascripts/lang/it.dev.js +62 -0
- data/app/assets/javascripts/lang/it.js +9 -0
- data/app/assets/javascripts/lang/pl.dev.js +65 -0
- data/app/assets/javascripts/lang/pl.js +9 -0
- data/app/assets/javascripts/lang/pt.dev.js +65 -0
- data/app/assets/javascripts/lang/pt.js +9 -0
- data/app/assets/javascripts/lang/ro.dev.js +65 -0
- data/app/assets/javascripts/lang/ro.js +9 -0
- data/app/assets/javascripts/lang/ru.dev.js +66 -0
- data/app/assets/javascripts/lang/ru.js +9 -0
- data/app/assets/javascripts/lang/sv.dev.js +63 -0
- data/app/assets/javascripts/lang/sv.js +9 -0
- data/app/assets/javascripts/location.dev.js +78 -0
- data/app/assets/javascripts/location.js +9 -0
- data/app/assets/javascripts/sanitize.dev.js +154 -0
- data/app/assets/javascripts/sanitize.js +9 -0
- data/app/assets/javascripts/security.dev.js +523 -0
- data/app/assets/javascripts/security.js +9 -0
- data/app/assets/javascripts/src/core-validators.js +343 -0
- data/app/assets/javascripts/src/dialogs.js +123 -0
- data/app/assets/javascripts/src/jquery-plugins.js +452 -0
- data/app/assets/javascripts/src/module-loader.js +150 -0
- data/app/assets/javascripts/src/setup.js +168 -0
- data/app/assets/javascripts/src/utils.js +840 -0
- data/app/assets/javascripts/sweden.dev.js +213 -0
- data/app/assets/javascripts/sweden.js +9 -0
- data/{vendor/assets/javascripts/dqs-jquery-form-validator → app/assets/javascripts}/theme-default.css +1 -0
- data/app/assets/javascripts/theme-default.min.css +1 -0
- data/app/assets/javascripts/toggleDisabled.dev.js +67 -0
- data/app/assets/javascripts/toggleDisabled.js +9 -0
- data/app/assets/javascripts/uk.dev.js +85 -0
- data/app/assets/javascripts/uk.js +9 -0
- data/lib/dqs/jquery/form/validator/rails/version.rb +1 -1
- metadata +56 -37
- data/vendor/assets/javascripts/dqs-jquery-form-validator/brazil.js +0 -9
- data/vendor/assets/javascripts/dqs-jquery-form-validator/date.js +0 -9
- data/vendor/assets/javascripts/dqs-jquery-form-validator/file.js +0 -9
- data/vendor/assets/javascripts/dqs-jquery-form-validator/html5.js +0 -9
- data/vendor/assets/javascripts/dqs-jquery-form-validator/jquery.form-validator.js +0 -2108
- data/vendor/assets/javascripts/dqs-jquery-form-validator/jquery.form-validator.min.js +0 -9
- data/vendor/assets/javascripts/dqs-jquery-form-validator/jsconf.js +0 -9
- data/vendor/assets/javascripts/dqs-jquery-form-validator/lang/ca.js +0 -9
- data/vendor/assets/javascripts/dqs-jquery-form-validator/lang/cz.js +0 -9
- data/vendor/assets/javascripts/dqs-jquery-form-validator/lang/de.js +0 -9
- data/vendor/assets/javascripts/dqs-jquery-form-validator/lang/dk.js +0 -9
- data/vendor/assets/javascripts/dqs-jquery-form-validator/lang/es.js +0 -9
- data/vendor/assets/javascripts/dqs-jquery-form-validator/lang/fr.js +0 -9
- data/vendor/assets/javascripts/dqs-jquery-form-validator/lang/it.js +0 -9
- data/vendor/assets/javascripts/dqs-jquery-form-validator/lang/nl.js +0 -9
- data/vendor/assets/javascripts/dqs-jquery-form-validator/lang/no.js +0 -9
- data/vendor/assets/javascripts/dqs-jquery-form-validator/lang/pl.js +0 -9
- data/vendor/assets/javascripts/dqs-jquery-form-validator/lang/pt.js +0 -9
- data/vendor/assets/javascripts/dqs-jquery-form-validator/lang/ro.js +0 -9
- data/vendor/assets/javascripts/dqs-jquery-form-validator/lang/ru.js +0 -9
- data/vendor/assets/javascripts/dqs-jquery-form-validator/lang/sv.js +0 -9
- data/vendor/assets/javascripts/dqs-jquery-form-validator/location.js +0 -9
- data/vendor/assets/javascripts/dqs-jquery-form-validator/logic.js +0 -9
- data/vendor/assets/javascripts/dqs-jquery-form-validator/poland.js +0 -9
- data/vendor/assets/javascripts/dqs-jquery-form-validator/sanitize.js +0 -9
- data/vendor/assets/javascripts/dqs-jquery-form-validator/security.js +0 -9
- data/vendor/assets/javascripts/dqs-jquery-form-validator/sepa.js +0 -9
- data/vendor/assets/javascripts/dqs-jquery-form-validator/sweden.js +0 -9
- data/vendor/assets/javascripts/dqs-jquery-form-validator/theme-default.min.css +0 -1
- data/vendor/assets/javascripts/dqs-jquery-form-validator/toggleDisabled.js +0 -9
- 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);
|