FileTreeController.coffee 6.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242
  1. define [
  2. "base"
  3. ], (App) ->
  4. App.controller "FileTreeController", ["$scope", "$modal", "ide", "$rootScope", ($scope, $modal, ide, $rootScope) ->
  5. $scope.openNewDocModal = () ->
  6. $modal.open(
  7. templateUrl: "newDocModalTemplate"
  8. controller: "NewDocModalController"
  9. resolve: {
  10. parent_folder: () -> ide.fileTreeManager.getCurrentFolder()
  11. }
  12. )
  13. $scope.openNewFolderModal = () ->
  14. $modal.open(
  15. templateUrl: "newFolderModalTemplate"
  16. controller: "NewFolderModalController"
  17. resolve: {
  18. parent_folder: () -> ide.fileTreeManager.getCurrentFolder()
  19. }
  20. )
  21. $scope.openUploadFileModal = () ->
  22. $modal.open(
  23. templateUrl: "uploadFileModalTemplate"
  24. controller: "UploadFileModalController"
  25. scope: $scope
  26. resolve: {
  27. parent_folder: () -> ide.fileTreeManager.getCurrentFolder()
  28. }
  29. )
  30. $scope.openLinkedFileModal = window.openLinkedFileModal = () ->
  31. $modal.open(
  32. templateUrl: "linkedFileModalTemplate"
  33. controller: "LinkedFileModalController"
  34. scope: $scope
  35. resolve: {
  36. parent_folder: () -> ide.fileTreeManager.getCurrentFolder()
  37. }
  38. )
  39. $scope.orderByFoldersFirst = (entity) ->
  40. return '0' if entity?.type == "folder"
  41. return '1'
  42. $scope.startRenamingSelected = () ->
  43. $scope.$broadcast "rename:selected"
  44. $scope.openDeleteModalForSelected = () ->
  45. $scope.$broadcast "delete:selected"
  46. ]
  47. App.controller "NewDocModalController", [
  48. "$scope", "ide", "$modalInstance", "$timeout", "parent_folder",
  49. ($scope, ide, $modalInstance, $timeout, parent_folder) ->
  50. $scope.inputs =
  51. name: "name.tex"
  52. $scope.state =
  53. inflight: false
  54. $modalInstance.opened.then () ->
  55. $timeout () ->
  56. $scope.$broadcast "open"
  57. , 200
  58. $scope.create = () ->
  59. name = $scope.inputs.name
  60. if !name? or name.length == 0
  61. return
  62. $scope.state.inflight = true
  63. ide.fileTreeManager
  64. .createDoc(name, parent_folder)
  65. .then () ->
  66. $scope.state.inflight = false
  67. $modalInstance.close()
  68. .catch (response)->
  69. { data } = response
  70. $scope.error = data
  71. $scope.state.inflight = false
  72. $scope.cancel = () ->
  73. $modalInstance.dismiss('cancel')
  74. ]
  75. App.controller "NewFolderModalController", [
  76. "$scope", "ide", "$modalInstance", "$timeout", "parent_folder",
  77. ($scope, ide, $modalInstance, $timeout, parent_folder) ->
  78. $scope.inputs =
  79. name: "name"
  80. $scope.state =
  81. inflight: false
  82. $modalInstance.opened.then () ->
  83. $timeout () ->
  84. $scope.$broadcast "open"
  85. , 200
  86. $scope.create = () ->
  87. name = $scope.inputs.name
  88. if !name? or name.length == 0
  89. return
  90. $scope.state.inflight = true
  91. ide.fileTreeManager
  92. .createFolder(name, parent_folder)
  93. .then () ->
  94. $scope.state.inflight = false
  95. $modalInstance.close()
  96. .catch (response)->
  97. { data } = response
  98. $scope.error = data
  99. $scope.state.inflight = false
  100. $scope.cancel = () ->
  101. $modalInstance.dismiss('cancel')
  102. ]
  103. App.controller "UploadFileModalController", [
  104. "$scope", "$rootScope", "ide", "$modalInstance", "$timeout", "parent_folder", "$window"
  105. ($scope, $rootScope, ide, $modalInstance, $timeout, parent_folder, $window) ->
  106. $scope.parent_folder_id = parent_folder?.id
  107. $scope.tooManyFiles = false
  108. $scope.rateLimitHit = false
  109. $scope.secondsToRedirect = 10
  110. $scope.notLoggedIn = false
  111. $scope.conflicts = []
  112. $scope.control = {}
  113. needToLogBackIn = ->
  114. $scope.notLoggedIn = true
  115. decreseTimeout = ->
  116. $timeout (() ->
  117. if $scope.secondsToRedirect == 0
  118. $window.location.href = "/login?redir=/project/#{ide.project_id}"
  119. else
  120. decreseTimeout()
  121. $scope.secondsToRedirect = $scope.secondsToRedirect - 1
  122. ), 1000
  123. decreseTimeout()
  124. $scope.max_files = 40
  125. $scope.onComplete = (error, name, response) ->
  126. $timeout (() ->
  127. uploadCount--
  128. if response.success
  129. $rootScope.$broadcast 'file:upload:complete', response
  130. if uploadCount == 0 and response? and response.success
  131. $modalInstance.close("done")
  132. ), 250
  133. $scope.onValidateBatch = (files)->
  134. if files.length > $scope.max_files
  135. $timeout (() ->
  136. $scope.tooManyFiles = true
  137. ), 1
  138. return false
  139. else
  140. return true
  141. $scope.onError = (id, name, reason)->
  142. console.log(id, name, reason)
  143. if reason.indexOf("429") != -1
  144. $scope.rateLimitHit = true
  145. else if reason.indexOf("403") != -1
  146. needToLogBackIn()
  147. _uploadTimer = null
  148. uploadIfNoConflicts = () ->
  149. if $scope.conflicts.length == 0
  150. $scope.doUpload()
  151. uploadCount = 0
  152. $scope.onSubmit = (id, name) ->
  153. uploadCount++
  154. if ide.fileTreeManager.existsInFolder($scope.parent_folder_id, name)
  155. $scope.conflicts.push name
  156. $scope.$apply()
  157. if !_uploadTimer?
  158. _uploadTimer = setTimeout () ->
  159. _uploadTimer = null
  160. uploadIfNoConflicts()
  161. , 0
  162. return true
  163. $scope.onCancel = (id, name) ->
  164. uploadCount--
  165. index = $scope.conflicts.indexOf(name)
  166. if index > -1
  167. $scope.conflicts.splice(index, 1)
  168. $scope.$apply()
  169. uploadIfNoConflicts()
  170. $scope.doUpload = () ->
  171. $scope.control?.q?.uploadStoredFiles()
  172. $scope.cancel = () ->
  173. $modalInstance.dismiss('cancel')
  174. ]
  175. App.controller "LinkedFileModalController", [
  176. "$scope", "ide", "$modalInstance", "$timeout", "parent_folder",
  177. ($scope, ide, $modalInstance, $timeout, parent_folder) ->
  178. $scope.inputs =
  179. name: ""
  180. url: ""
  181. $scope.nameChangedByUser = false
  182. $scope.state =
  183. inflight: false
  184. $modalInstance.opened.then () ->
  185. $timeout () ->
  186. $scope.$broadcast "open"
  187. , 200
  188. $scope.$watch "inputs.url", (url) ->
  189. if url? and url != "" and !$scope.nameChangedByUser
  190. url = url.replace("://", "") # Ignore http:// etc
  191. parts = url.split("/").reverse()
  192. if parts.length > 1 # Wait for at one /
  193. $scope.inputs.name = parts[0]
  194. $scope.create = () ->
  195. {name, url} = $scope.inputs
  196. if !name? or name.length == 0
  197. return
  198. if !url? or url.length == 0
  199. return
  200. $scope.state.inflight = true
  201. ide.fileTreeManager
  202. .createLinkedFile(name, parent_folder, 'url', {url})
  203. .then () ->
  204. $scope.state.inflight = false
  205. $modalInstance.close()
  206. .catch (response)->
  207. { data } = response
  208. $scope.error = data
  209. $scope.state.inflight = false
  210. $scope.cancel = () ->
  211. $modalInstance.dismiss('cancel')
  212. ]