PageSourceSearch

https://my.sequoiasoft.com/akuiteo.clients/js/lib/fileupload/jquery.fileupload-fp.js?build=null

js sequoiasoft.com collected 2026-10-08 20:29:30 UTC 8,401 bytes, 219 lines download raw bytes

1/*
2 * jQuery File Upload File Processing Plugin 1.0
3 * https://github.com/blueimp/jQuery-File-Upload
4 *
5 * Copyright 2012, Sebastian Tschan
6 * https://blueimp.net
7 *
8 * Licensed under the MIT license:
9 * http://www.opensource.org/licenses/MIT
10 */
11
12/*jslint nomen: true, unparam: true, regexp: true */
13/*global define, window, document */
14
15(function (factory) {
16    'use strict';
17    if (typeof define === 'function' && define.amd) {
18        // Register as an anonymous AMD module:
19        define([
20            'jquery',
21            'load-image',
22            'canvas-to-blob',
23            './jquery.fileupload'
24        ], factory);
25    } else {
26        // Browser globals:
27        factory(
28            window.jQuery,
29            window.loadImage
30        );
31    }
32}(function ($, loadImage) {
33    'use strict';
34
35    // The File Upload IP version extends the basic fileupload widget
36    // with file processing functionality:
37    $.widget('blueimpFP.fileupload', $.blueimp.fileupload, {
38
39        options: {
40            // The list of file processing actions:
41            process: [
42            /*
43                {
44                    action: 'load',
45                    fileTypes: /^image\/(gif|jpeg|png)$/,
46                    maxFileSize: 20000000 // 20MB
47                },
48                {
49                    action: 'resize',
50                    maxWidth: 1920,
51                    maxHeight: 1200,
52                    minWidth: 800,
53                    minHeight: 600
54                },
55                {
56                    action: 'save'
57                }
58            */
59            ],
60
61            // The add callback is invoked as soon as files are added to the
62            // fileupload widget (via file input selection, drag & drop or add
63            // API call). See the basic file upload widget for more information:
64            add: function (e, data) {
65                $(this).fileupload('process', data).done(function () {
66                    data.submit();
67                });
68            }
69        },
70
71        processActions: {
72            // Loads the image given via data.files and data.index
73            // as canvas element.
74            // Accepts the options fileTypes (regular expression)
75            // and maxFileSize (integer) to limit the files to load:
76            load: function (data, options) {
77                var that = this,
78                    file = data.files[data.index],
79                    dfd = $.Deferred();
80                if (window.HTMLCanvasElement &&
81                        window.HTMLCanvasElement.prototype.toBlob &&
82                        ($.type(options.maxFileSize) !== 'number' ||
83                            file.size < options.maxFileSize) &&
84                        (!options.fileTypes ||
85                            options.fileTypes.test(file.type))) {
86                    loadImage(
87                        file,
88                        function (canvas) {
89                            data.canvas = canvas;
90                            dfd.resolveWith(that, [data]);
91                        },
92                        {canvas: true}
93                    );
94                } else {
95                    dfd.rejectWith(that, [data]);
96                }
97                return dfd.promise();
98            },
99            // Resizes the image given as data.canvas and updates
100            // data.canvas with the resized image.
101            // Accepts the options maxWidth, maxHeight, minWidth and
102            // minHeight to scale the given image:
103            resize: function (data, options) {
104                if (data.canvas) {
105                    var canvas = loadImage.scale(data.canvas, options);
106                    if (canvas.width !== data.canvas.width ||
107                            canvas.height !== data.canvas.height) {
108                        data.canvas = canvas;
109                        data.processed = true;
110                    }
111                }
112                return data;
113            },
114            // Saves the processed image given as data.canvas
115            // inplace at data.index of data.files:
116            save: function (data, options) {
117                // Do nothing if no processing has happened:
118                if (!data.canvas || !data.processed) {
119                    return data;
120                }
121                var that = this,
122                    file = data.files[data.index],
123                    name = file.name,
124                    dfd = $.Deferred(),
125                    callback = function (blob) {
126                        if (!blob.name) {
127                            if (file.type === blob.type) {
128                                blob.name = file.name;
129                            } else if (file.name) {
130                                blob.name = file.name.replace(
131                                    /\..+$/,
132                                    '.' + blob.type.substr(6)
133                                );
134                            }
135                        }
136                        // Store the created blob at the position
137                        // of the original file in the files list:
138                        data.files[data.index] = blob;
139                        dfd.resolveWith(that, [data]);
140                    };
141                // Use canvas.mozGetAsFile directly, to retain the filename, as
142                // Gecko doesn't support the filename option for FormData.append:
143                if (data.canvas.mozGetAsFile) {
144                    callback(data.canvas.mozGetAsFile(
145                        (/^image\/(jpeg|png)$/.test(file.type) && name) ||
146                            ((name && name.replace(/\..+$/, '')) ||
147                                'blob') + '.png',
148                        file.type
149                    ));
150                } else {
151                    data.canvas.toBlob(callback, file.type);
152                }
153                return dfd.promise();
154            }
155        },
156
157        // Resizes the file at the given index and stores the created blob at
158        // the original position of the files list, returns a Promise object:
159        _processFile: function (files, index, options) {
160            var that = this,
161                dfd = $.Deferred().resolveWith(that, [{
162                    files: files,
163                    index: index
164                }]),
165                chain = dfd.promise();
166            that._processing += 1;
167            $.each(options.process, function (i, settings) {
168                chain = chain.pipe(function (data) {
169                    return that.processActions[settings.action]
170                        .call(this, data, settings);
171                });
172            });
173            chain.always(function () {
174                that._processing -= 1;
175                if (that._processing === 0) {
176                    that.element
177                        .removeClass('fileupload-processing');
178                }
179            });
180            if (that._processing === 1) {
181                that.element.addClass('fileupload-processing');
182            }
183            return chain;
184        },
185
186        // Processes the files given as files property of the data parameter,
187        // returns a Promise object that allows to bind a done handler, which
188        // will be invoked after processing all files (inplace) is done:
189        process: function (data) {
190            var that = this,
191                options = $.extend({}, this.options, data);
192            if (options.process && options.process.length &&
193                    this._isXHRUpload(options)) {
194                $.each(data.files, function (index, file) {
195                    that._processingQueue = that._processingQueue.pipe(
196                        function () {
197                            var dfd = $.Deferred();
198                            that._processFile(data.files, index, options)
199                                .always(function () {
200                                    dfd.resolveWith(that);
201                                });
202                            return dfd.promise();
203                        }
204                    );
205                });
206            }
207            return this._processingQueue;
208        },
209
210        _create: function () {
211            $.blueimp.fileupload.prototype._create.call(this);
212            this._processing = 0;
213            this._processingQueue = $.Deferred().resolveWith(this)
214                .promise();
215        }
216
217    });
218
219}));

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.