AutorÃa | Ultima modificación | Ver Log |
(function ($) {
"use strict";
// This set of validators requires the File API, so if we'ere in a browser
// that isn't sufficiently "HTML5"-y, don't even bother creating them. It'll
// do no good, so we just automatically pass those tests.
var is_supported_browser = !!window.File,
fileSizeToBytes,
formatter = $.validator.format;
/**
* Converts a measure of data size from a given unit to bytes.
*
* @param number size
* A measure of data size, in the give unit
* @param string unit
* A unit of data. Valid inputs are "B", "KB", "MB", "GB", "TB"
*
* @return number|bool
* The number of bytes in the above size/unit combo. If an
* invalid unit is specified, false is returned
*/
fileSizeToBytes = (function () {
var units = ["B", "KB", "MB", "GB", "TB"];
return function (size, unit) {
var index_of_unit = units.indexOf(unit),
coverted_size;
if (index_of_unit === -1) {
coverted_size = false;
} else {
while (index_of_unit > 0) {
size *= 1024;
index_of_unit -= 1;
}
coverted_size = size;
}
return coverted_size;
};
}());
/**
* Validates that an uploaded file is of a given file type, tested
* by it's reported mime string.
*
* @param obj params
* An optional set of configuration parmeters. Supported options are:
* "types" : array (default ["text"])
* An array of file types. This types are loosely checked, so including
* "text" in this array of types will cause "text/plain" and "text/css"
* to both be excepted. If the selected file matches any of the strings
* in this array, validation passes.
*/
$.validator.addMethod(
"fileType",
function (value, element, params) {
var files,
types = params.types || ["text"],
is_valid = false;
if (!is_supported_browser || this.optional(element)) {
is_valid = true;
} else {
files = element.files;
if (files.length < 1) {
is_valid = false;
} else {
$.each(types, function (key, value) {
is_valid = is_valid || files[0].type.indexOf(value) !== -1;
});
}
}
return is_valid;
},
function (params, element) {
return formatter(
"File must be one of the following types: {0}.",
params.types.join(",")
);
}
);
/**
* Validates that a file selected for upload is at least a given
* file size.
*
* @param obj params
* An optional set of configuration parameters. Supported options are:
* "unit" : string (default "KB")
* The unit of measure of the file size limit is in. Valid inputs
* are "B", "KB", "MB" and "GB"
* "size" : number (default 100)
* The minimum size of the file, in the above units, that the file
* must be, to be accepted as "valid"
*/
$.validator.addMethod(
"minFileSize",
function (value, element, params) {
var files,
unit = params.unit || "KB",
size = params.size || 100,
min_file_size = fileSizeToBytes(size, unit),
is_valid = false;
if (!is_supported_browser || this.optional(element)) {
is_valid = true;
} else {
files = element.files;
if (files.length < 1) {
is_valid = false;
} else {
is_valid = files[0].size >= min_file_size;
}
}
return is_valid;
},
function (params, element) {
return formatter(
"File must be at least {0}{1} large.",
[params.size || 100, params.unit || "KB"]
);
}
);
/**
* Validates that a file selected for upload is no loarger than a given
* file size.
*
* @param obj params
* An optional set of configuration parameters. Supported options are:
* "unit" : string (default "KB")
* The unit of measure of the file size limit is in. Valid inputs
* are "B", "KB", "MB" and "GB"
* "size" : number (default 100)
* The maximum size of the file, in the above units, that the file
* can be to be accepted as "valid"
*/
$.validator.addMethod(
"maxFileSize",
function (value, element, params) {
var files,
unit = params.unit || "KB",
size = params.size || 100,
max_file_size = fileSizeToBytes(size, unit),
is_valid = false;
if (!is_supported_browser || this.optional(element)) {
is_valid = true;
} else {
files = element.files;
if (files.length < 1) {
is_valid = false;
} else {
is_valid = files[0].size <= max_file_size;
}
}
return is_valid;
},
function (params, element) {
return formatter(
"File cannot be larger than {0}{1}.",
[params.size || 100, params.unit || "KB"]
);
}
);
}(jQuery));