| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172 | /* * jQuery File Upload Processing Plugin 1.3.0 * https://github.com/blueimp/jQuery-File-Upload * * Copyright 2012, Sebastian Tschan * https://blueimp.net * * Licensed under the MIT license: * http://www.opensource.org/licenses/MIT *//* jshint nomen:false *//* global define, window */(function (factory) {    'use strict';    if (typeof define === 'function' && define.amd) {        // Register as an anonymous AMD module:        define([            'jquery',            './jquery.fileupload'        ], factory);    } 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,                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) {                        return $.Deferred()                                .rejectWith(that, [originalData]).promise();                    }                    return that.processActions[settings.action].call(                        that,                        data,                        settings                    );                };                chain = chain.pipe(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 processsing 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) {                                return $.Deferred()                                        .rejectWith(that, [data]).promise();                            }                            return that._processFile(opts, data);                        };                    opts.index = index;                    that._processing += 1;                    that._processingQueue = that._processingQueue.pipe(func, func)                        .always(function () {                            that._processing -= 1;                            if (that._processing === 0) {                                that._trigger('processstop');                            }                        });                });            }            return this._processingQueue;        },        _create: function () {            this._super();            this._processing = 0;            this._processingQueue = $.Deferred().resolveWith(this)                .promise();        }    });}));
 |