Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- // you might need to change the lines where I use js-routes (the Router).
- // also it assumes that you have a variable authenticity_token defined
- function createUploader(buttonId, containerId, customCallbacks) {
- var defaultCallbacks = {
- ready: function(){
- $btn = $('#uploadContainer .btn').removeClass('disabled');
- $('#uploadContainer .btn span.text').text($btn.attr('ready'));
- },
- newFile: $.noop,
- fileRemoved: $.noop,
- preparationStarted: $.noop,
- uploadStarted: $.noop,
- uploadProgress: $.noop,
- uploadDone: $.noop,
- uploadDoneNotified: $.noop,
- error: $.noop
- };
- var callbacks = $.extend({}, defaultCallbacks, customCallbacks);
- var uploader = new plupload.Uploader({
- runtimes : 'flash',
- multipart: true,
- browse_button : buttonId,
- container: containerId,
- url: Router.authorize_upload_path(),
- flash_swf_url : '/flash/flex/plupload.swf',
- silverlight_xap_url : '/javascripts/plupload/plupload.silverlight.xap'
- });
- uploader.bind('Init', function(up, params) {
- up.authorizedQueueState = "INACTIVE";
- callbacks.ready();
- });
- uploader.bind('FilesAdded', function(up, files) {
- $.each(files, function(i, file) {
- callbacks.newFile(file);
- });
- setTimeout(function() {
- up.trigger('StartAuthorizedQueue');
- }, 0);
- });
- uploader.bind('PrepareUploadFile', function(up, file) {
- if(file.cancelled) {
- return true;
- }
- callbacks.preparationStarted(file);
- $.ajax({
- type: 'GET',
- url: Router.authorize_upload_path(),
- dataType: 'json',
- data: {
- authenticity_token: authenticity_token,
- file_size: file.size,
- file_name: file.name,
- },
- success: function(data) {
- if(!data.ok) {
- up.trigger('Error', {
- message: data.errors.join(', '),
- file: file
- });
- up.trigger('ContinueAuthorizedQueue');
- return;
- }
- if(file.cancelled) {
- up.trigger('ContinueAuthorizedQueue');
- return;
- }
- file.headers = data.headers;
- file.params = data.params;
- file.uploadTo = data.url;
- file.handle = data.file;
- setTimeout(function() {
- up.settings.headers = file.headers;
- up.settings.multipart_params = file.params;
- up.settings.url = file.uploadTo;
- up.trigger('UploadFile', file);
- }, 0);
- },
- error: function() {
- up.trigger('Error', {
- message: "Request failed.",
- file: file
- });
- up.trigger('ContinueAuthorizedQueue');
- }
- });
- });
- uploader.bind('StartAuthorizedQueue', function(up) {
- if(up.authorizedQueueState === "ACTIVE") {
- return;
- }
- if(typeof(up.fileIndex) === "undefined") {
- up.fileIndex = 0;
- }
- up.trigger('ContinueAuthorizedQueue');
- });
- uploader.bind('ContinueAuthorizedQueue', function(up) {
- if(up.fileIndex > up.files.length) {
- up.fileIndex = up.files.length;
- }
- if(up.fileIndex < up.files.length) {
- up.authorizedQueueState = "ACTIVE";
- up.trigger('PrepareUploadFile', up.files[up.fileIndex++]);
- } else {
- up.authorizedQueueState = "INACTIVE";
- }
- });
- uploader.bind('FilesRemoved', function(up, files) {
- $.each(files, function(i, file) {
- file.cancelled = true;
- callbacks.fileRemoved(file);
- });
- });
- uploader.bind('FileUploaded', function(up, file, response) {
- callbacks.uploadDone(file);
- $.ajax({
- url: Router.finalize_upload_path(),
- type: 'POST',
- dataType: 'xml',
- data: {
- authenticity_token: authenticity_token,
- file: file.handle
- },
- success: function(data) {
- file.notificationResponse = data;
- callbacks.uploadDoneNotified(file, data);
- up.trigger('ContinueAuthorizedQueue');
- }
- });
- });
- uploader.bind('UploadFile', function(up, file) {
- callbacks.uploadStarted(file);
- });
- uploader.bind('UploadProgress', function(up, file) {
- if(file.status === plupload.UPLOADING) {
- callbacks.uploadProgress(file);
- }
- });
- uploader.bind('Error', function(up, err) {
- callbacks.error(err, err.file);
- });
- uploader.init();
- return uploader;
- }
Add Comment
Please, Sign In to add comment