Guest User

Untitled

a guest
Jul 18th, 2018
71
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.22 KB | None | 0 0
  1. // you might need to change the lines where I use js-routes (the Router).
  2. // also it assumes that you have a variable authenticity_token defined
  3.  
  4. function createUploader(buttonId, containerId, customCallbacks) {
  5.  
  6. var defaultCallbacks = {
  7. ready: function(){
  8. $btn = $('#uploadContainer .btn').removeClass('disabled');
  9. $('#uploadContainer .btn span.text').text($btn.attr('ready'));
  10. },
  11. newFile: $.noop,
  12. fileRemoved: $.noop,
  13. preparationStarted: $.noop,
  14. uploadStarted: $.noop,
  15. uploadProgress: $.noop,
  16. uploadDone: $.noop,
  17. uploadDoneNotified: $.noop,
  18. error: $.noop
  19. };
  20.  
  21. var callbacks = $.extend({}, defaultCallbacks, customCallbacks);
  22.  
  23. var uploader = new plupload.Uploader({
  24. runtimes : 'flash',
  25. multipart: true,
  26. browse_button : buttonId,
  27. container: containerId,
  28. url: Router.authorize_upload_path(),
  29. flash_swf_url : '/flash/flex/plupload.swf',
  30. silverlight_xap_url : '/javascripts/plupload/plupload.silverlight.xap'
  31. });
  32.  
  33. uploader.bind('Init', function(up, params) {
  34. up.authorizedQueueState = "INACTIVE";
  35. callbacks.ready();
  36. });
  37.  
  38. uploader.bind('FilesAdded', function(up, files) {
  39. $.each(files, function(i, file) {
  40. callbacks.newFile(file);
  41. });
  42.  
  43. setTimeout(function() {
  44. up.trigger('StartAuthorizedQueue');
  45. }, 0);
  46. });
  47.  
  48. uploader.bind('PrepareUploadFile', function(up, file) {
  49. if(file.cancelled) {
  50. return true;
  51. }
  52.  
  53. callbacks.preparationStarted(file);
  54.  
  55. $.ajax({
  56. type: 'GET',
  57. url: Router.authorize_upload_path(),
  58. dataType: 'json',
  59. data: {
  60. authenticity_token: authenticity_token,
  61. file_size: file.size,
  62. file_name: file.name,
  63. },
  64. success: function(data) {
  65. if(!data.ok) {
  66. up.trigger('Error', {
  67. message: data.errors.join(', '),
  68. file: file
  69. });
  70. up.trigger('ContinueAuthorizedQueue');
  71. return;
  72. }
  73.  
  74. if(file.cancelled) {
  75. up.trigger('ContinueAuthorizedQueue');
  76. return;
  77. }
  78.  
  79. file.headers = data.headers;
  80. file.params = data.params;
  81. file.uploadTo = data.url;
  82. file.handle = data.file;
  83.  
  84. setTimeout(function() {
  85. up.settings.headers = file.headers;
  86. up.settings.multipart_params = file.params;
  87. up.settings.url = file.uploadTo;
  88. up.trigger('UploadFile', file);
  89. }, 0);
  90. },
  91. error: function() {
  92. up.trigger('Error', {
  93. message: "Request failed.",
  94. file: file
  95. });
  96. up.trigger('ContinueAuthorizedQueue');
  97. }
  98. });
  99. });
  100.  
  101. uploader.bind('StartAuthorizedQueue', function(up) {
  102. if(up.authorizedQueueState === "ACTIVE") {
  103. return;
  104. }
  105.  
  106. if(typeof(up.fileIndex) === "undefined") {
  107. up.fileIndex = 0;
  108. }
  109.  
  110. up.trigger('ContinueAuthorizedQueue');
  111. });
  112.  
  113. uploader.bind('ContinueAuthorizedQueue', function(up) {
  114. if(up.fileIndex > up.files.length) {
  115. up.fileIndex = up.files.length;
  116. }
  117.  
  118. if(up.fileIndex < up.files.length) {
  119. up.authorizedQueueState = "ACTIVE";
  120. up.trigger('PrepareUploadFile', up.files[up.fileIndex++]);
  121. } else {
  122. up.authorizedQueueState = "INACTIVE";
  123. }
  124. });
  125.  
  126. uploader.bind('FilesRemoved', function(up, files) {
  127. $.each(files, function(i, file) {
  128. file.cancelled = true;
  129. callbacks.fileRemoved(file);
  130. });
  131. });
  132.  
  133. uploader.bind('FileUploaded', function(up, file, response) {
  134. callbacks.uploadDone(file);
  135.  
  136. $.ajax({
  137. url: Router.finalize_upload_path(),
  138. type: 'POST',
  139. dataType: 'xml',
  140. data: {
  141. authenticity_token: authenticity_token,
  142. file: file.handle
  143. },
  144. success: function(data) {
  145. file.notificationResponse = data;
  146. callbacks.uploadDoneNotified(file, data);
  147. up.trigger('ContinueAuthorizedQueue');
  148. }
  149. });
  150. });
  151.  
  152. uploader.bind('UploadFile', function(up, file) {
  153. callbacks.uploadStarted(file);
  154. });
  155.  
  156. uploader.bind('UploadProgress', function(up, file) {
  157. if(file.status === plupload.UPLOADING) {
  158. callbacks.uploadProgress(file);
  159. }
  160. });
  161.  
  162. uploader.bind('Error', function(up, err) {
  163. callbacks.error(err, err.file);
  164. });
  165.  
  166. uploader.init();
  167.  
  168. return uploader;
  169. }
Add Comment
Please, Sign In to add comment