PageSourceSearch

https://tourer.it/js/file_upload/js/jquery.fileupload-process.js

js tourer.it collected 2026-09-24 21:42:55 UTC 6,161 bytes, 178 lines download raw bytes

1/*
2 * jQuery File Upload Processing Plugin
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 * https://opensource.org/licenses/MIT
10 */
11
12/* jshint nomen:false */
13/* global define, require, window */
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            './jquery.fileupload'
22        ], factory);
23    } else if (typeof exports === 'object') {
24        // Node/CommonJS:
25        factory(
26            require('jquery'),
27            require('./jquery.fileupload')
28        );
29    } else {
30        // Browser globals:
31        factory(
32            window.jQuery
33        );
34    }
35}(function ($) {
36    'use strict';
37
38    var originalAdd = $.blueimp.fileupload.prototype.options.add;
39
40    // The File Upload Processing plugin extends the fileupload widget
41    // with file processing functionality:
42    $.widget('blueimp.fileupload', $.blueimp.fileupload, {
43
44        options: {
45            // The list of processing actions:
46            processQueue: [
47                /*
48                {
49                    action: 'log',
50                    type: 'debug'
51                }
52                */
53            ],
54            add: function (e, data) {
55                var $this = $(this);
56                data.process(function () {
57                    return $this.fileupload('process', data);
58                });
59                originalAdd.call(this, e, data);
60            }
61        },
62
63        processActions: {
64            /*
65            log: function (data, options) {
66                console[options.type](
67                    'Processing "' + data.files[data.index].name + '"'
68                );
69            }
70            */
71        },
72
73        _processFile: function (data, originalData) {
74            var that = this,
75                dfd = $.Deferred().resolveWith(that, [data]),
76                chain = dfd.promise();
77            this._trigger('process', null, data);
78            $.each(data.processQueue, function (i, settings) {
79                var func = function (data) {
80                    if (originalData.errorThrown) {
81                        return $.Deferred()
82                                .rejectWith(that, [originalData]).promise();
83                    }
84                    return that.processActions[settings.action].call(
85                        that,
86                        data,
87                        settings
88                    );
89                };
90                chain = chain.then(func, settings.always && func);
91            });
92            chain
93                .done(function () {
94                    that._trigger('processdone', null, data);
95                    that._trigger('processalways', null, data);
96                })
97                .fail(function () {
98                    that._trigger('processfail', null, data);
99                    that._trigger('processalways', null, data);
100                });
101            return chain;
102        },
103
104        // Replaces the settings of each processQueue item that
105        // are strings starting with an "@", using the remaining
106        // substring as key for the option map,
107        // e.g. "@autoUpload" is replaced with options.autoUpload:
108        _transformProcessQueue: function (options) {
109            var processQueue = [];
110            $.each(options.processQueue, function () {
111                var settings = {},
112                    action = this.action,
113                    prefix = this.prefix === true ? action : this.prefix;
114                $.each(this, function (key, value) {
115                    if ($.type(value) === 'string' &&
116                            value.charAt(0) === '@') {
117                        settings[key] = options[
118                            value.slice(1) || (prefix ? prefix +
119                                key.charAt(0).toUpperCase() + key.slice(1) : key)
120                        ];
121                    } else {
122                        settings[key] = value;
123                    }
124
125                });
126                processQueue.push(settings);
127            });
128            options.processQueue = processQueue;
129        },
130
131        // Returns the number of files currently in the processsing queue:
132        processing: function () {
133            return this._processing;
134        },
135
136        // Processes the files given as files property of the data parameter,
137        // returns a Promise object that allows to bind callbacks:
138        process: function (data) {
139            var that = this,
140                options = $.extend({}, this.options, data);
141            if (options.processQueue && options.processQueue.length) {
142                this._transformProcessQueue(options);
143                if (this._processing === 0) {
144                    this._trigger('processstart');
145                }
146                $.each(data.files, function (index) {
147                    var opts = index ? $.extend({}, options) : options,
148                        func = function () {
149                            if (data.errorThrown) {
150                                return $.Deferred()
151                                        .rejectWith(that, [data]).promise();
152                            }
153                            return that._processFile(opts, data);
154                        };
155                    opts.index = index;
156                    that._processing += 1;
157                    that._processingQueue = that._processingQueue.then(func, func)
158                        .always(function () {
159                            that._processing -= 1;
160                            if (that._processing === 0) {
161                                that._trigger('processstop');
162                            }
163                        });
164                });
165            }
166            return this._processingQueue;
167        },
168
169        _create: function () {
170            this._super();
171            this._processing = 0;
172            this._processingQueue = $.Deferred().resolveWith(this)
173                .promise();
174        }
175
176    });
177
178}));

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.