Blame view

common/modules/file/assets/js/jquery.fileupload-validate.js 4.08 KB
a8370482   Alexander Karnovsky   init project
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
  /*
   * jQuery File Upload Validation Plugin
   * https://github.com/blueimp/jQuery-File-Upload
   *
   * Copyright 2013, Sebastian Tschan
   * https://blueimp.net
   *
   * Licensed under the MIT license:
   * http://www.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'));
      } 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();
              }
  
          }
  
      });
  
  }));