FileUploadManager.coffee 1.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263
  1. define [
  2. "utils/Modal"
  3. "libs/fineuploader"
  4. ], (Modal) ->
  5. class FileUploadManager
  6. constructor: (@ide) ->
  7. @ide.on "afterJoinProject", () =>
  8. if @ide.isAllowedToDoIt "readAndWrite"
  9. $('button#upload-file').click (e)=>
  10. @showUploadDialog()
  11. showUploadDialog: (folder_id, callback = (error, entity_ids) ->) ->
  12. uploaderEl = $("<div/>")
  13. modal = new Modal
  14. title: "Upload file"
  15. el: uploaderEl
  16. buttons: [{
  17. text: "Close"
  18. }]
  19. uploadCount = 0
  20. entity_ids = []
  21. new qq.FineUploader
  22. element: uploaderEl[0]
  23. disabledCancelForFormUploads: true
  24. maxConnections: 1
  25. request:
  26. endpoint: "/Project/#{@ide.project.id}/upload"
  27. params:
  28. folder_id: folder_id
  29. _csrf: csrfToken
  30. paramsInBody: false
  31. forceMultipart: true
  32. callbacks:
  33. onUpload: () -> uploadCount++
  34. onComplete: (error, name, response) ->
  35. setTimeout (() ->
  36. uploadCount--
  37. entity_ids.push response.entity_id
  38. if uploadCount == 0 and response? and response.success
  39. modal.remove()
  40. callback null, entity_ids
  41. ), 250
  42. text:
  43. waitingForResponse: "Inserting file..."
  44. failUpload: "Upload failed, sorry :("
  45. uploadButton: "Select file(s)"
  46. template: """
  47. <div class="qq-uploader">
  48. <div class="qq-upload-drop-area"><span>{dragZoneText}</span></div>
  49. <div class="qq-upload-button btn btn-primary btn-large">
  50. <div>{uploadButtonText}</div>
  51. </div>
  52. <span class="or btn-large"> or </span>
  53. <span class="drag-here btn-large">drag file(s)</span>
  54. <span class="qq-drop-processing"><span>{dropProcessingText}</span><span class="qq-drop-processing-spinner"></span></span>
  55. <div class="help">Hint: Press and hold the Control (Ctrl) key to select multiple files</div>
  56. <ul class="qq-upload-list"></ul>
  57. </div>
  58. """
  59. $(".qq-uploader input").addClass("js-file-uploader")