file-tree.jade 10 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395
  1. aside#file-tree(ng-controller="FileTreeController").full-size
  2. .toolbar.toolbar-small.toolbar-alt(ng-if="permissions.write")
  3. a(
  4. href,
  5. ng-click="openNewDocModal()",
  6. tooltip-html="'#{translate('new_file').replace(' ', '<br>')}'",
  7. tooltip-placement="bottom"
  8. )
  9. i.fa.fa-file
  10. a(
  11. href,
  12. ng-click="openNewFolderModal()",
  13. tooltip-html="'#{translate('new_folder').replace(' ', '<br>')}'",
  14. tooltip-placement="bottom"
  15. )
  16. i.fa.fa-folder
  17. a(
  18. href,
  19. ng-click="openUploadFileModal()",
  20. tooltip="#{translate('upload')}",
  21. tooltip-placement="bottom"
  22. )
  23. i.fa.fa-upload
  24. .toolbar-right
  25. a(
  26. href,
  27. ng-click="startRenamingSelected()",
  28. tooltip="#{translate('rename')}",
  29. tooltip-placement="bottom"
  30. )
  31. i.fa.fa-pencil
  32. a(
  33. href,
  34. ng-click="openDeleteModalForSelected()",
  35. tooltip="#{translate('delete')}",
  36. tooltip-placement="bottom",
  37. tooltip-append-to-body="true"
  38. )
  39. i.fa.fa-trash-o
  40. .file-tree-inner(
  41. ng-if="rootFolder",
  42. ng-controller="FileTreeRootFolderController",
  43. ng-class="{ 'no-toolbar': !permissions.write }"
  44. )
  45. div(ng-show="ui.pdfLayout == 'flat' && (ui.view == 'editor' || ui.view == 'pdf' || ui.view == 'file')")
  46. ul.list-unstyled.file-tree-list
  47. li(
  48. ng-class="{ 'selected': ui.view == 'pdf' }"
  49. ng-controller="PdfViewToggleController"
  50. )
  51. .entity
  52. .entity-name(
  53. ng-click="togglePdfView()"
  54. )
  55. i.fa.fa-fw.toggle
  56. i.fa.fa-fw.fa-file-pdf-o
  57. | PDF
  58. ul.list-unstyled.file-tree-list(
  59. droppable="permissions.write"
  60. accept=".entity-name"
  61. on-drop-callback="onDrop"
  62. )
  63. file-entity(
  64. entity="entity",
  65. permissions="permissions",
  66. ng-repeat="entity in rootFolder.children | orderBy:[orderByFoldersFirst, 'name']"
  67. )
  68. div(ng-show="deletedDocs.length > 0 && ui.view == 'track-changes'")
  69. h3 #{translate("deleted_files")}
  70. ul.list-unstyled.file-tree-list.deleted-docs
  71. li(
  72. ng-class="{ 'selected': entity.selected }",
  73. ng-repeat="entity in deletedDocs | orderBy:'name'",
  74. ng-controller="FileTreeEntityController"
  75. )
  76. .entity
  77. .entity-name(
  78. ng-click="select()"
  79. )
  80. //- Just a spacer to align with folders
  81. i.fa.fa-fw.toggle
  82. i.fa.fa-fw.fa-file
  83. span {{ entity.name }}
  84. script(type='text/ng-template', id='entityListItemTemplate')
  85. li(
  86. ng-class="{ 'selected': entity.selected }",
  87. ng-controller="FileTreeEntityController"
  88. )
  89. .entity(ng-if="entity.type != 'folder'")
  90. .entity-name(
  91. ng-click="select()"
  92. ng-dblclick="permissions.write && startRenaming()"
  93. draggable="permissions.write"
  94. context-menu
  95. data-target="context-menu-{{ entity.id }}"
  96. context-menu-container="body"
  97. context-menu-disabled="!permissions.write"
  98. )
  99. //- Just a spacer to align with folders
  100. i.fa.fa-fw.toggle(ng-if="entity.type != 'folder'")
  101. i.fa.fa-fw.fa-file(ng-if="entity.type == 'doc'")
  102. i.fa.fa-fw.fa-image(ng-if="entity.type == 'file'")
  103. span(
  104. ng-hide="entity.renaming"
  105. ) {{ entity.name }}
  106. span.rename-input
  107. input(
  108. ng-if="permissions.write",
  109. ng-show="entity.renaming",
  110. ng-model="inputs.name",
  111. ng-blur="finishRenaming()",
  112. select-name-when="entity.renaming",
  113. on-enter="finishRenaming()"
  114. )
  115. span.dropdown(
  116. dropdown,
  117. ng-show="entity.selected",
  118. ng-if="permissions.write"
  119. )
  120. a.dropdown-toggle(href, dropdown-toggle)
  121. i.fa.fa-chevron-down
  122. ul.dropdown-menu.dropdown-menu-right
  123. li
  124. a(
  125. href
  126. ng-click="startRenaming()"
  127. right-click="startRenaming()"
  128. ) #{translate("rename")}
  129. li
  130. a(
  131. href
  132. ng-click="openDeleteModal()"
  133. right-click="openDeleteModal()"
  134. ) #{translate("delete")}
  135. div.dropdown.context-menu(
  136. id="context-menu-{{ entity.id }}",
  137. ng-if="permissions.write"
  138. )
  139. ul.dropdown-menu
  140. li
  141. a(
  142. href
  143. ng-click="startRenaming()"
  144. right-click="startRenaming()"
  145. ) #{translate("rename")}
  146. li
  147. a(
  148. href
  149. ng-click="openDeleteModal()"
  150. right-click="openDeleteModal()"
  151. ) #{translate("delete")}
  152. .entity(ng-if="entity.type == 'folder'", ng-controller="FileTreeFolderController")
  153. .entity-name(
  154. ng-click="select()"
  155. ng-dblclick="permissions.write && startRenaming()"
  156. draggable="permissions.write"
  157. droppable="permissions.write"
  158. accept=".entity-name"
  159. on-drop-callback="onDrop"
  160. )
  161. div(
  162. context-menu
  163. data-target="context-menu-{{ entity.id }}"
  164. context-menu-container="body"
  165. context-menu-disabled="!permissions.write"
  166. )
  167. i.fa.fa-fw.toggle(
  168. ng-if="entity.type == 'folder'"
  169. ng-class="{'fa-chevron-right': !expanded, 'fa-chevron-down': expanded}"
  170. ng-click="toggleExpanded()"
  171. )
  172. i.fa.fa-fw(
  173. ng-if="entity.type == 'folder'"
  174. ng-class="{\
  175. 'fa-folder': !expanded, \
  176. 'fa-folder-open': expanded \
  177. }"
  178. ng-click="select()"
  179. )
  180. span(
  181. ng-hide="entity.renaming"
  182. ) {{ entity.name }}
  183. span.rename-input
  184. input(
  185. ng-if="permissions.write",
  186. ng-show="entity.renaming",
  187. ng-model="inputs.name",
  188. ng-blur="finishRenaming()",
  189. select-name-when="entity.renaming",
  190. on-enter="finishRenaming()"
  191. )
  192. span.dropdown(
  193. dropdown,
  194. ng-if="permissions.write"
  195. ng-show="entity.selected"
  196. )
  197. a.dropdown-toggle(href, dropdown-toggle)
  198. i.fa.fa-chevron-down
  199. ul.dropdown-menu.dropdown-menu-right
  200. li
  201. a(
  202. href
  203. ng-click="startRenaming()"
  204. right-click="startRenaming()"
  205. ) #{translate("rename")}
  206. li
  207. a(
  208. href
  209. ng-click="openDeleteModal()"
  210. right-click="openDeleteModal()"
  211. ) #{translate("delete")}
  212. li.divider
  213. li
  214. a(
  215. href
  216. ng-click="openNewDocModal()"
  217. right-click="openNewDocModal()"
  218. ) #{translate("new_file")}
  219. li
  220. a(
  221. href
  222. ng-click="openNewFolderModal()"
  223. right-click="openNewFolderModal()"
  224. ) #{translate("new_folder")}
  225. li
  226. a(
  227. href
  228. ng-click="openUploadFileModal()"
  229. right-click="openUploadFileModal()"
  230. ) #{translate("upload_file")}
  231. .dropdown.context-menu(
  232. ng-if="permissions.write"
  233. id="context-menu-{{ entity.id }}"
  234. )
  235. ul.dropdown-menu
  236. li
  237. a(
  238. href
  239. ng-click="startRenaming()"
  240. right-click="startRenaming()"
  241. ) #{translate("rename")}
  242. li
  243. a(
  244. href
  245. ng-click="openDeleteModal()"
  246. right-click="openDeleteModal()"
  247. ) #{translate("delete")}
  248. li.divider
  249. li
  250. a(
  251. href
  252. ng-click="openNewDocModal()"
  253. right-click="openNewDocModal()"
  254. ) #{translate("new_file")}
  255. li
  256. a(
  257. href
  258. ng-click="openNewFolderModal()"
  259. right-click="openNewFolderModal()"
  260. ) #{translate("new_folder")}
  261. li
  262. a(
  263. href
  264. ng-click="openUploadFileModal()"
  265. right-click="openUploadFileModal()"
  266. ) #{translate("upload_file")}
  267. ul.list-unstyled(
  268. ng-if="entity.type == 'folder'"
  269. ng-show="expanded"
  270. droppable="permissions.write"
  271. accept=".entity-name"
  272. on-drop-callback="onDrop"
  273. )
  274. file-entity(
  275. entity="child",
  276. permissions="permissions",
  277. ng-repeat="child in entity.children | orderBy:[orderByFoldersFirst, 'name']"
  278. )
  279. script(type='text/ng-template', id='newDocModalTemplate')
  280. .modal-header
  281. h3 #{translate("new_file")}
  282. .modal-body
  283. form(novalidate, name="newDocForm")
  284. input.form-control(
  285. type="text",
  286. placeholder="File Name",
  287. required,
  288. ng-model="inputs.name",
  289. on-enter="create()",
  290. select-name-on="open"
  291. )
  292. .modal-footer
  293. button.btn.btn-default(
  294. ng-disabled="state.inflight"
  295. ng-click="cancel()"
  296. ) #{translate("cancel")}
  297. button.btn.btn-primary(
  298. ng-disabled="newDocForm.$invalid || state.inflight"
  299. ng-click="create()"
  300. )
  301. span(ng-hide="state.inflight") #{translate("create")}
  302. span(ng-show="state.inflight") #{translate("creating")}...
  303. script(type='text/ng-template', id='newFolderModalTemplate')
  304. .modal-header
  305. h3 #{translate("new_folder")}
  306. .modal-body
  307. form(novalidate, name="newFolderForm")
  308. input.form-control(
  309. type="text",
  310. placeholder="Folder Name",
  311. required,
  312. ng-model="inputs.name",
  313. on-enter="create()",
  314. select-name-on="open"
  315. )
  316. .modal-footer
  317. button.btn.btn-default(
  318. ng-disabled="state.inflight"
  319. ng-click="cancel()"
  320. ) #{translate("cancel")}
  321. button.btn.btn-primary(
  322. ng-disabled="newFolderForm.$invalid || state.inflight"
  323. ng-click="create()"
  324. )
  325. span(ng-hide="state.inflight") #{translate("create")}
  326. span(ng-show="state.inflight") #{translate("creating")}...
  327. script(type="text/ng-template", id="uploadFileModalTemplate")
  328. .modal-header
  329. h3 #{translate("upload_files")}
  330. .alert.alert-warning.small.modal-alert(ng-if="tooManyFiles") #{translate("maximum_files_uploaded_together", {max:"{{max_files}}"})}
  331. .alert.alert-warning.small.modal-alert(ng-if="rateLimitHit") #{translate("too_many_files_uploaded_throttled_short_period")}
  332. .alert.alert-warning.small.modal-alert(ng-if="notLoggedIn") #{translate("session_expired_redirecting_to_login", {seconds:"{{secondsToRedirect}}"})}
  333. .modal-body(
  334. fine-upload
  335. endpoint="/project/{{ project_id }}/upload"
  336. waiting-for-response-text="{{inserting_files}}"
  337. failed-upload-text="{{upload_failed_sorry}}"
  338. upload-button-text="{{select_files}}"
  339. drag-area-text="{{drag_files}}"
  340. hint-text="{{hint_press_and_hold_control_key}}"
  341. multiple="true"
  342. on-complete-callback="onComplete"
  343. on-upload-callback="onUpload"
  344. on-validate-batch="onValidateBatch"
  345. on-error-callback="onError"
  346. params="{'folder_id': parent_folder_id}"
  347. )
  348. span #{translate("upload_files")}
  349. .modal-footer
  350. button.btn.btn-default(ng-click="cancel()") #{translate("cancel")}
  351. script(type='text/ng-template', id='deleteEntityModalTemplate')
  352. .modal-header
  353. h3 #{translate("delete")} {{ entity.name }}
  354. .modal-body
  355. p !{translate("sure_you_want_to_delete")}
  356. .modal-footer
  357. button.btn.btn-default(
  358. ng-disabled="state.inflight"
  359. ng-click="cancel()"
  360. ) #{translate("cancel")}
  361. button.btn.btn-danger(
  362. ng-disabled="state.inflight"
  363. ng-click="delete()"
  364. )
  365. span(ng-hide="state.inflight") #{translate("delete")}
  366. span(ng-show="state.inflight") #{translate("deleting")}...