list.coffee 7.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298
  1. require [
  2. "tags"
  3. "moment"
  4. "event_tracking"
  5. "gui"
  6. "libs/underscore"
  7. "libs/fineuploader"
  8. "libs/jquery.storage"
  9. "UserDetailsUpdater"
  10. ], (tagsManager, moment)->
  11. $('.isoDate').each (i, d)->
  12. html = $(d)
  13. unparsedDate = html.text().trim()
  14. formatedDate = moment(unparsedDate).format("Do MMM YYYY, h:mm:ss a")
  15. html.text(formatedDate)
  16. refreshProjectFilter = ->
  17. words = $('#projectFilter').val().split(" ")
  18. words = _.filter words, (word)->
  19. word.length > 0
  20. projects = $('.project_entry')
  21. _.each projects, (project)->
  22. name = $(project).find(".projectName").text()
  23. tagsText = $(project).find(".project-tags").text()
  24. searchText = "#{name} #{tagsText}".toLowerCase()
  25. hide = false
  26. _.each words, (word)->
  27. if searchText.indexOf(word.toLowerCase()) == -1
  28. hide = true
  29. if hide
  30. $(project).hide()
  31. else
  32. $(project).show()
  33. $('#projectFilter').on "keyup", (e)->
  34. if(e.keyCode == 13)
  35. e.preventDefault()
  36. refreshProjectFilter()
  37. $('.search .icon-remove').on 'click', (e)->
  38. $('#projectFilter').val("").focus()
  39. refreshProjectFilter()
  40. $('body').on 'click', '.tag-label .text', (event)->
  41. event.preventDefault()
  42. event.stopPropagation()
  43. tag = $(event.target).text()
  44. $('input#projectFilter').val(tag).focus()
  45. refreshProjectFilter()
  46. $('.deleteProject').click (event)->
  47. event.preventDefault()
  48. $modal = $('#deleteEntityModal')
  49. $confirm = $modal.find('.confirm')
  50. $modal.modal({backdrop:true, show:true, keyboard:true})
  51. name = $(@).data("name")
  52. id = $(@).data("id")
  53. $modal.find(".name").text(name)
  54. href = this.href
  55. self = @
  56. $confirm.on 'click', (e) =>
  57. $.ajax
  58. url: href
  59. type:'DELETE'
  60. data:
  61. _csrf: $(@).data("csrf")
  62. success: (data)->
  63. $modal.modal('hide')
  64. if data.message
  65. new Message data
  66. else
  67. $("##{id}").fadeOut(1000)
  68. $modal.on 'hide', ->
  69. $confirm.off 'click'
  70. $modal.find('.cancel').click (e)->
  71. $modal.modal('hide')
  72. $('.archiveProject').click (event)->
  73. event.preventDefault()
  74. $modal = $('#archiveEntityModal')
  75. $confirm = $modal.find('.confirm')
  76. $modal.modal({backdrop:true, show:true, keyboard:true})
  77. name = $(@).data("name")
  78. id = $(@).data("id")
  79. $modal.find(".name").text(name)
  80. href = this.href
  81. self = @
  82. $confirm.on 'click', (e) =>
  83. $.ajax
  84. url: href
  85. type:'DELETE'
  86. data:
  87. _csrf: $(@).data("csrf")
  88. success: (data)->
  89. $modal.modal('hide')
  90. if data.message
  91. new Message data
  92. else
  93. $("##{id}").fadeOut(1000)
  94. $modal.on 'hide', ->
  95. $confirm.off 'click'
  96. $modal.find('.cancel').click (e)->
  97. $modal.modal('hide')
  98. $('.renameProject').click (event)->
  99. event.preventDefault()
  100. $modal = $('#renameProjectModal')
  101. $confirm = $modal.find('#confirmRename')
  102. $modal.modal({backdrop:true, show:true, keyboard:true})
  103. name = $(@).data("name")
  104. nameEl = $modal.find("#projectNewName").val(name)
  105. nameEl.select()
  106. href = this.href
  107. self = @
  108. window.r = @
  109. $confirm.on 'click', (e) =>
  110. newProjectName = nameEl.val()
  111. $.ajax
  112. url: href
  113. type:'POST'
  114. data:
  115. _csrf: $(@).data("csrf")
  116. newProjectName:newProjectName
  117. success: (data)->
  118. $modal.modal('hide')
  119. if data.message
  120. new Message data
  121. else
  122. $(self.parentNode.parentNode.parentNode.parentNode).find(".projectName").text(newProjectName)
  123. $(self.parentNode.parentNode).find("li a").each ()->
  124. $(this).data('name', newProjectName)
  125. $modal.on 'hide', ->
  126. $confirm.off 'click'
  127. $modal.find('.cancel').click (e)->
  128. $modal.modal('hide')
  129. $(".leaveProject").click (event) ->
  130. event.preventDefault()
  131. $modal = $('#leaveProjectModal')
  132. $confirm = $modal.find('.confirm')
  133. $modal.modal({backdrop:true, show:true, keyboard:true})
  134. name = $(@).data("name")
  135. id = $(@).data("id")
  136. nameEl = $modal.find(".name").text(name)
  137. href = this.href
  138. self = @
  139. $confirm.on 'click', (e)=>
  140. $.ajax
  141. url: href
  142. type: 'POST'
  143. data:
  144. _csrf: $(@).data("csrf")
  145. success: (data)->
  146. $modal.modal('hide')
  147. if data.message
  148. new Message data
  149. else
  150. $("##{id}").fadeOut(1000)
  151. $modal.on 'hide', ->
  152. $confirm.off 'click'
  153. $modal.find('.cancel').click (e)->
  154. $modal.modal('hide')
  155. $('.cloneProject').click (event)->
  156. event.preventDefault()
  157. $modal = $('#cloneProjectModal')
  158. $confirm = $('#confirmCloneProject')
  159. $modal.modal({backdrop:true, show:true, keyboard:true})
  160. $modal.find('input').val('').focus()
  161. href = this.href
  162. $confirm.click (e)=>
  163. $confirm.attr("disabled", true)
  164. $confirm.text("Cloning...")
  165. projectName = $modal.find('input').val()
  166. $.ajax
  167. url: href
  168. type:'POST'
  169. data:
  170. projectName: projectName
  171. _csrf: $(@).data("csrf")
  172. success: (data)->
  173. if data.redir?
  174. window.location = data.redir
  175. else if data.project_id?
  176. window.location = '/project/'+data.project_id
  177. $modal.on 'hide', ->
  178. $confirm.off 'click'
  179. $modal.find('.cancel').click (e)->
  180. $modal.modal('hide')
  181. $('.restoreProject').click (event) ->
  182. event.preventDefault()
  183. id = $(@).data("id")
  184. $.ajax
  185. url: @href
  186. type: 'POST'
  187. data:
  188. _csrf: $(@).data("csrf")
  189. success: (data)->
  190. $("##{id}").fadeOut(1000)
  191. newProject = (template, fileToOpen) ->
  192. $modal = $('#newProjectModal')
  193. $confirm = $('#confirmNewProject')
  194. $modal.modal({backdrop:true, show:true, keyboard:true})
  195. $modal.find('input').val('').focus()
  196. $confirm.click (e) =>
  197. $confirm.attr("disabled", true)
  198. $confirm.text("Creating...")
  199. projectName = $modal.find('input').val()?.trim()
  200. $.ajax
  201. url: '/project/new'
  202. type:'POST'
  203. data:{projectName: projectName, template: template, _csrf: $(@).data("csrf")}
  204. success: (data)->
  205. if data.message
  206. new Message data
  207. else
  208. window.location = '/project/'+data.project_id + (if fileToOpen? then ("#" + fileToOpen) else "")
  209. $modal.on 'hide', ->
  210. $confirm.off 'click'
  211. $modal.find('.cancel').click (e)->
  212. $modal.modal('hide')
  213. $('#blankNewProject').click (event)->
  214. newProject.call(@, 'none')
  215. $('#newProjectExample').click (event)->
  216. newProject.call(@, 'example')
  217. $('#newProjectVisual').click (event)->
  218. newProject.call(@, 'visual', 'main.tex')
  219. $('#uploadNewProject').click (event)->
  220. event.preventDefault()
  221. $modal = $('#projectUploadModal')
  222. $modal.modal({backdrop:true, show:true, keyboard:true})
  223. new qq.FineUploader
  224. element: document.getElementById('projectFileUpload')
  225. multiple: false
  226. disabledCancelForFormUploads: true
  227. validation:
  228. allowedExtensions: ["zip"]
  229. request:
  230. endpoint: "/project/new/upload"
  231. forceMultipart: true
  232. params:
  233. _csrf: $(@).data("csrf")
  234. callbacks:
  235. onComplete: (error, name, response)->
  236. if response.project_id?
  237. window.location = '/project/'+response.project_id
  238. text:
  239. waitingForResponse: "Creating project..."
  240. failUpload: "Upload failed. Is it a valid zip file?"
  241. uploadButton: "Select a .zip file"
  242. template: """
  243. <div class="qq-uploader">
  244. <div class="qq-upload-drop-area"><span>{dragZoneText}</span></div>
  245. <div class="qq-upload-button btn btn-primary btn-large">
  246. <div>{uploadButtonText}</div>
  247. </div>
  248. <span class="or btn-large"> or </span>
  249. <span class="drag-here btn-large">drag a .zip file</span>
  250. <span class="qq-drop-processing"><span>{dropProcessingText}</span><span class="qq-drop-processing-spinner"></span></span>
  251. <ul class="qq-upload-list"></ul>
  252. </div>
  253. """
  254. $modal.find('.cancel').click (e)->
  255. $modal.modal('hide')
  256. sysMsgKey = "dismiss-system-message-090114"
  257. if $.localStorage(sysMsgKey)
  258. $("#systemMessage").hide()
  259. else
  260. $("#systemMessage").show()
  261. $("a#dismissSystemMessage").on "click", (e) ->
  262. e.preventDefault()
  263. $("#systemMessage").hide()
  264. $.localStorage(sysMsgKey, true)