Blame view

common/modules/file/assets/js/jquery.fileupload-validate.js 4.2 KB
4253cbec   root   first commit
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();

              }

  

          }

  

      });

  

  }));