126 lines
		
	
	
		
			4.1 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			126 lines
		
	
	
		
			4.1 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
| /*
 | |
|  * jQuery File Upload Validation Plugin
 | |
|  * https://github.com/blueimp/jQuery-File-Upload
 | |
|  *
 | |
|  * Copyright 2013, Sebastian Tschan
 | |
|  * https://blueimp.net
 | |
|  *
 | |
|  * Licensed under the MIT license:
 | |
|  * https://opensource.org/licenses/MIT
 | |
|  */
 | |
| 
 | |
| /* global define, require, window */
 | |
| 
 | |
| ;(function (factory) {
 | |
|     'use strict';
 | |
|     if (typeof define === 'function' && define.amd) {
 | |
|         // Register as an anonymous AMD module:
 | |
|         define([
 | |
|             'jquery',
 | |
|             './jquery.fileupload-process'
 | |
|         ], factory);
 | |
|     } else if (typeof exports === 'object') {
 | |
|         // Node/CommonJS:
 | |
|         factory(
 | |
|             require('jquery'),
 | |
|             require('./jquery.fileupload-process')
 | |
|         );
 | |
|     } else {
 | |
|         // Browser globals:
 | |
|         factory(
 | |
|             window.jQuery
 | |
|         );
 | |
|     }
 | |
| }(function ($) {
 | |
|     'use strict';
 | |
| 
 | |
|     // Append to the default processQueue:
 | |
|     $.blueimp.fileupload.prototype.options.processQueue.push(
 | |
|         {
 | |
|             action: 'validate',
 | |
|             // Always trigger this action,
 | |
|             // even if the previous action was rejected:
 | |
|             always: true,
 | |
|             // Options taken from the global options map:
 | |
|             acceptFileTypes: '@',
 | |
|             maxFileSize: '@',
 | |
|             minFileSize: '@',
 | |
|             maxNumberOfFiles: '@',
 | |
|             disabled: '@disableValidation'
 | |
|         }
 | |
|     );
 | |
| 
 | |
|     // The File Upload Validation plugin extends the fileupload widget
 | |
|     // with file validation functionality:
 | |
|     $.widget('blueimp.fileupload', $.blueimp.fileupload, {
 | |
| 
 | |
|         options: {
 | |
|             /*
 | |
|             // The regular expression for allowed file types, matches
 | |
|             // against either file type or file name:
 | |
|             acceptFileTypes: /(\.|\/)(gif|jpe?g|png)$/i,
 | |
|             // The maximum allowed file size in bytes:
 | |
|             maxFileSize: 10000000, // 10 MB
 | |
|             // The minimum allowed file size in bytes:
 | |
|             minFileSize: undefined, // No minimal file size
 | |
|             // The limit of files to be uploaded:
 | |
|             maxNumberOfFiles: 10,
 | |
|             */
 | |
| 
 | |
|             // Function returning the current number of files,
 | |
|             // has to be overriden for maxNumberOfFiles validation:
 | |
|             getNumberOfFiles: $.noop,
 | |
| 
 | |
|             // Error and info messages:
 | |
|             messages: {
 | |
|                 maxNumberOfFiles: 'Maximum number of files exceeded',
 | |
|                 acceptFileTypes: 'File type not allowed',
 | |
|                 maxFileSize: 'File is too large',
 | |
|                 minFileSize: 'File is too small'
 | |
|             }
 | |
|         },
 | |
| 
 | |
|         processActions: {
 | |
| 
 | |
|             validate: function (data, options) {
 | |
|                 if (options.disabled) {
 | |
|                     return data;
 | |
|                 }
 | |
|                 var dfd = $.Deferred(),
 | |
|                     settings = this.options,
 | |
|                     file = data.files[data.index],
 | |
|                     fileSize;
 | |
|                 if (options.minFileSize || options.maxFileSize) {
 | |
|                     fileSize = file.size;
 | |
|                 }
 | |
|                 if ($.type(options.maxNumberOfFiles) === 'number' &&
 | |
|                         (settings.getNumberOfFiles() || 0) + data.files.length >
 | |
|                             options.maxNumberOfFiles) {
 | |
|                     file.error = settings.i18n('maxNumberOfFiles');
 | |
|                 } else if (options.acceptFileTypes &&
 | |
|                         !(options.acceptFileTypes.test(file.type) ||
 | |
|                         options.acceptFileTypes.test(file.name))) {
 | |
|                     file.error = settings.i18n('acceptFileTypes');
 | |
|                 } else if (fileSize > options.maxFileSize) {
 | |
|                     file.error = settings.i18n('maxFileSize');
 | |
|                 } else if ($.type(fileSize) === 'number' &&
 | |
|                         fileSize < options.minFileSize) {
 | |
|                     file.error = settings.i18n('minFileSize');
 | |
|                 } else {
 | |
|                     delete file.error;
 | |
|                 }
 | |
|                 if (file.error || data.files.error) {
 | |
|                     data.files.error = true;
 | |
|                     dfd.rejectWith(this, [data]);
 | |
|                 } else {
 | |
|                     dfd.resolveWith(this, [data]);
 | |
|                 }
 | |
|                 return dfd.promise();
 | |
|             }
 | |
| 
 | |
|         }
 | |
| 
 | |
|     });
 | |
| 
 | |
| }));
 |