PageSourceSearch

https://phyresse.org/static/js/jquery.fileupload-process.js

js phyresse.org collected 2026-09-28 09:16:04 UTC 5,986 bytes, 172 lines download raw bytes

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

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.