file-tree.jade 9.0 KB

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