123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170 |
- /*
- * jQuery File Upload Processing Plugin
- * https://github.com/blueimp/jQuery-File-Upload
- *
- * Copyright 2012, Sebastian Tschan
- * https://blueimp.net
- *
- * Licensed under the MIT license:
- * https://opensource.org/licenses/MIT
- */
- /* global define, require */
- (function (factory) {
- 'use strict';
- if (typeof define === 'function' && define.amd) {
- // Register as an anonymous AMD module:
- define(['jquery', './jquery.fileupload'], factory);
- } else if (typeof exports === 'object') {
- // Node/CommonJS:
- factory(require('jquery'), require('./jquery.fileupload'));
- } else {
- // Browser globals:
- factory(window.jQuery);
- }
- })(function ($) {
- 'use strict';
- var originalAdd = $.blueimp.fileupload.prototype.options.add;
- // The File Upload Processing plugin extends the fileupload widget
- // with file processing functionality:
- $.widget('blueimp.fileupload', $.blueimp.fileupload, {
- options: {
- // The list of processing actions:
- processQueue: [
- /*
- {
- action: 'log',
- type: 'debug'
- }
- */
- ],
- add: function (e, data) {
- var $this = $(this);
- data.process(function () {
- return $this.fileupload('process', data);
- });
- originalAdd.call(this, e, data);
- }
- },
- processActions: {
- /*
- log: function (data, options) {
- console[options.type](
- 'Processing "' + data.files[data.index].name + '"'
- );
- }
- */
- },
- _processFile: function (data, originalData) {
- var that = this,
- // eslint-disable-next-line new-cap
- dfd = $.Deferred().resolveWith(that, [data]),
- chain = dfd.promise();
- this._trigger('process', null, data);
- $.each(data.processQueue, function (i, settings) {
- var func = function (data) {
- if (originalData.errorThrown) {
- // eslint-disable-next-line new-cap
- return $.Deferred().rejectWith(that, [originalData]).promise();
- }
- return that.processActions[settings.action].call(
- that,
- data,
- settings
- );
- };
- chain = chain[that._promisePipe](func, settings.always && func);
- });
- chain
- .done(function () {
- that._trigger('processdone', null, data);
- that._trigger('processalways', null, data);
- })
- .fail(function () {
- that._trigger('processfail', null, data);
- that._trigger('processalways', null, data);
- });
- return chain;
- },
- // Replaces the settings of each processQueue item that
- // are strings starting with an "@", using the remaining
- // substring as key for the option map,
- // e.g. "@autoUpload" is replaced with options.autoUpload:
- _transformProcessQueue: function (options) {
- var processQueue = [];
- $.each(options.processQueue, function () {
- var settings = {},
- action = this.action,
- prefix = this.prefix === true ? action : this.prefix;
- $.each(this, function (key, value) {
- if ($.type(value) === 'string' && value.charAt(0) === '@') {
- settings[key] =
- options[
- value.slice(1) ||
- (prefix
- ? prefix + key.charAt(0).toUpperCase() + key.slice(1)
- : key)
- ];
- } else {
- settings[key] = value;
- }
- });
- processQueue.push(settings);
- });
- options.processQueue = processQueue;
- },
- // Returns the number of files currently in the processing queue:
- processing: function () {
- return this._processing;
- },
- // Processes the files given as files property of the data parameter,
- // returns a Promise object that allows to bind callbacks:
- process: function (data) {
- var that = this,
- options = $.extend({}, this.options, data);
- if (options.processQueue && options.processQueue.length) {
- this._transformProcessQueue(options);
- if (this._processing === 0) {
- this._trigger('processstart');
- }
- $.each(data.files, function (index) {
- var opts = index ? $.extend({}, options) : options,
- func = function () {
- if (data.errorThrown) {
- // eslint-disable-next-line new-cap
- return $.Deferred().rejectWith(that, [data]).promise();
- }
- return that._processFile(opts, data);
- };
- opts.index = index;
- that._processing += 1;
- that._processingQueue = that._processingQueue[that._promisePipe](
- func,
- func
- ).always(function () {
- that._processing -= 1;
- if (that._processing === 0) {
- that._trigger('processstop');
- }
- });
- });
- }
- return this._processingQueue;
- },
- _create: function () {
- this._super();
- this._processing = 0;
- // eslint-disable-next-line new-cap
- this._processingQueue = $.Deferred().resolveWith(this).promise();
- }
- });
- });
|