Вход Регистрация
Файл: file-upload/js/jquery.fileupload-fp.js
Строк: 232
<?php
/*
 * jQuery File Upload File Processing Plugin 1.2.1
 * 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
 */

/*jslint nomen: true, unparam: true, regexp: true */
/*global define, window, document */

(function (factory) {
    
'use strict';
    if (
typeof define === 'function' && define.amd) {
        
// Register as an anonymous AMD module:
        
define([
            
'jquery',
            
'load-image',
            
'canvas-to-blob',
            
'./jquery.fileupload'
        
], factory);
    } else {
        
// Browser globals:
        
factory(
            
window.jQuery,
            
window.loadImage
        
);
    }
}(function ($, 
loadImage) {
    
'use strict';

    
// The File Upload FP version extends the fileupload widget
    // with file processing functionality:
    
$.widget('blueimp.fileupload', $.blueimp.fileupload, {

        
options: {
            
// The list of file processing actions:
            
process: [
            
/*
                {
                    action: 'load',
                    fileTypes: /^image/(gif|jpeg|png)$/,
                    maxFileSize: 20000000 // 20MB
                },
                {
                    action: 'resize',
                    maxWidth: 1920,
                    maxHeight: 1200,
                    minWidth: 800,
                    minHeight: 600
                },
                {
                    action: 'save'
                }
            */
            
],

            
// The add callback is invoked as soon as files are added to the
            // fileupload widget (via file input selection, drag & drop or add
            // API call). See the basic file upload widget for more information:
            
add: function (edata) {
                $(
this).fileupload('process'data).done(function () {
                    
data.submit();
                });
            }
        },

        
processActions: {
            
// Loads the image given via data.files and data.index
            // as img element if the browser supports canvas.
            // Accepts the options fileTypes (regular expression)
            // and maxFileSize (integer) to limit the files to load:
            
load: function (dataoptions) {
                var 
that this,
                    
file data.files[data.index],
                    
dfd = $.Deferred();
                if (
window.HTMLCanvasElement &&
                        
window.HTMLCanvasElement.prototype.toBlob &&
                        ($.
type(options.maxFileSize) !== 'number' ||
                            
file.size options.maxFileSize) &&
                        (!
options.fileTypes ||
                            
options.fileTypes.test(file.type))) {
                    
loadImage(
                        
file,
                        function (
img) {
                            if (!
img.src) {
                                return 
dfd.rejectWith(that, [data]);
                            }
                            
data.img img;
                            
dfd.resolveWith(that, [data]);
                        }
                    );
                } else {
                    
dfd.rejectWith(that, [data]);
                }
                return 
dfd.promise();
            },
            
// Resizes the image given as data.img and updates
            // data.canvas with the resized image as canvas element.
            // Accepts the options maxWidth, maxHeight, minWidth and
            // minHeight to scale the given image:
            
resize: function (dataoptions) {
                var 
img data.img,
                    
canvas;
                
options = $.extend({canvastrue}, options);
                if (
img) {
                    
canvas loadImage.scale(imgoptions);
                    if (
canvas.width !== img.width ||
                            
canvas.height !== img.height) {
                        
data.canvas canvas;
                    }
                }
                return 
data;
            },
            
// Saves the processed image given as data.canvas
            // inplace at data.index of data.files:
            
save: function (dataoptions) {
                
// Do nothing if no processing has happened:
                
if (!data.canvas) {
                    return 
data;
                }
                var 
that this,
                    
file data.files[data.index],
                    
name file.name,
                    
dfd = $.Deferred(),
                    
callback = function (blob) {
                        if (!
blob.name) {
                            if (
file.type === blob.type) {
                                
blob.name file.name;
                            } else if (
file.name) {
                                
blob.name file.name.replace(
                                    /..+$/,
                                    
'.' blob.type.substr(6)
                                );
                            }
                        }
                        
// Store the created blob at the position
                        // of the original file in the files list:
                        
data.files[data.index] = blob;
                        
dfd.resolveWith(that, [data]);
                    };
                
// Use canvas.mozGetAsFile directly, to retain the filename, as
                // Gecko doesn't support the filename option for FormData.append:
                
if (data.canvas.mozGetAsFile) {
                    
callback(data.canvas.mozGetAsFile(
                        (/^
image/(jpeg|png)$/.test(file.type) && name) ||
                            ((
name && name.replace(/..+$/, '')) ||
                                
'blob') + '.png',
                        
file.type
                    
));
                } else {
                    
data.canvas.toBlob(callbackfile.type);
                }
                return 
dfd.promise();
            }
        },

        
// Resizes the file at the given index and stores the created blob at
        // the original position of the files list, returns a Promise object:
        
_processFile: function (filesindexoptions) {
            var 
that this,
                
dfd = $.Deferred().resolveWith(that, [{
                    
filesfiles,
                    
indexindex
                
}]),
                
chain dfd.promise();
            
that._processing += 1;
            $.
each(options.process, function (isettings) {
                
chain chain.pipe(function (data) {
                    return 
that.processActions[settings.action]
                        .
call(thisdatasettings);
                });
            });
            
chain.always(function () {
                
that._processing -= 1;
                if (
that._processing === 0) {
                    
that.element
                        
.removeClass('fileupload-processing');
                }
            });
            if (
that._processing === 1) {
                
that.element.addClass('fileupload-processing');
            }
            return 
chain;
        },

        
// Processes the files given as files property of the data parameter,
        // returns a Promise object that allows to bind a done handler, which
        // will be invoked after processing all files (inplace) is done:
        
process: function (data) {
            var 
that this,
                
options = $.extend({}, this.optionsdata);
            if (
options.process && options.process.length &&
                    
this._isXHRUpload(options)) {
                $.
each(data.files, function (indexfile) {
                    
that._processingQueue that._processingQueue.pipe(
                        function () {
                            var 
dfd = $.Deferred();
                            
that._processFile(data.filesindexoptions)
                                .
always(function () {
                                    
dfd.resolveWith(that);
                                });
                            return 
dfd.promise();
                        }
                    );
                });
            }
            return 
this._processingQueue;
        },

        
_create: function () {
            
this._super();
            
this._processing 0;
            
this._processingQueue = $.Deferred().resolveWith(this)
                .
promise();
        }

    });

}));
?>
Онлайн: 0
Реклама