cardDetails.jade 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340
  1. template(name="cardDetails")
  2. section.card-details.js-card-details.js-perfect-scrollbar: .card-details-canvas
  3. .card-details-header
  4. +inlinedForm(classNames="js-card-details-title")
  5. +editCardTitleForm
  6. else
  7. a.fa.fa-times-thin.close-card-details.js-close-card-details
  8. if currentUser.isBoardMember
  9. a.fa.fa-navicon.card-details-menu.js-open-card-details-menu
  10. h2.card-details-title.js-card-title(
  11. class="{{#if canModifyCard}}js-open-inlined-form is-editable{{/if}}")
  12. +viewer
  13. = getTitle
  14. if isWatching
  15. i.fa.fa-eye.card-details-watch
  16. .card-details-path
  17. each parentList
  18. |   >  
  19. a.js-parent-card(href=linkForCard) {{title}}
  20. // else
  21. {{_ 'top-level-card'}}
  22. if isLinkedCard
  23. h3.linked-card-location
  24. +viewer
  25. | {{getBoardTitle}} > {{getTitle}}
  26. if getArchived
  27. if isLinkedBoard
  28. p.warning {{_ 'board-archived'}}
  29. else
  30. p.warning {{_ 'card-archived'}}
  31. .card-details-items
  32. .card-details-item.card-details-item-received
  33. h3.card-details-item-title {{_ 'card-received'}}
  34. if getReceived
  35. +cardReceivedDate
  36. else
  37. if canModifyCard
  38. a.js-received-date {{_ 'add'}}
  39. .card-details-item.card-details-item-start
  40. h3.card-details-item-title {{_ 'card-start'}}
  41. if getStart
  42. +cardStartDate
  43. else
  44. if canModifyCard
  45. a.js-start-date {{_ 'add'}}
  46. .card-details-item.card-details-item-due
  47. h3.card-details-item-title {{_ 'card-due'}}
  48. if getDue
  49. +cardDueDate
  50. else
  51. if canModifyCard
  52. a.js-due-date {{_ 'add'}}
  53. .card-details-item.card-details-item-end
  54. h3.card-details-item-title {{_ 'card-end'}}
  55. if getEnd
  56. +cardEndDate
  57. else
  58. if canModifyCard
  59. a.js-end-date {{_ 'add'}}
  60. .card-details-items
  61. .card-details-item.card-details-item-members
  62. h3.card-details-item-title {{_ 'members'}}
  63. each getMembers
  64. +userAvatar(userId=this cardId=../_id)
  65. | {{! XXX Hack to hide syntaxic coloration /// }}
  66. if canModifyCard
  67. a.member.add-member.card-details-item-add-button.js-add-members(title="{{_ 'card-members-title'}}")
  68. i.fa.fa-plus
  69. .card-details-item.card-details-item-labels
  70. h3.card-details-item-title {{_ 'labels'}}
  71. a(class="{{#if canModifyCard}}js-add-labels{{else}}is-disabled{{/if}}" title="{{_ 'card-labels-title'}}")
  72. each labels
  73. span.card-label(class="card-label-{{color}}" title=name)= name
  74. if canModifyCard
  75. a.card-label.add-label.js-add-labels(title="{{_ 'card-labels-title'}}")
  76. i.fa.fa-plus
  77. .card-details-items
  78. each customFieldsWD
  79. .card-details-item.card-details-item-customfield
  80. h3.card-details-item-title
  81. = definition.name
  82. +cardCustomField
  83. .card-details-items
  84. if getSpentTime
  85. .card-details-item.card-details-item-spent
  86. if getIsOvertime
  87. h3.card-details-item-title {{_ 'overtime-hours'}}
  88. else
  89. h3.card-details-item-title {{_ 'spent-time-hours'}}
  90. +cardSpentTime
  91. //- XXX We should use "editable" to avoid repetiting ourselves
  92. if canModifyCard
  93. h3.card-details-item-title {{_ 'description'}}
  94. +inlinedCardDescription(classNames="card-description js-card-description")
  95. +editor(autofocus=true)
  96. | {{getUnsavedValue 'cardDescription' _id getDescription}}
  97. .edit-controls.clearfix
  98. button.primary(type="submit") {{_ 'save'}}
  99. a.fa.fa-times-thin.js-close-inlined-form
  100. else
  101. a.js-open-inlined-form
  102. if getDescription
  103. +viewer
  104. = getDescription
  105. else
  106. | {{_ 'edit'}}
  107. if (hasUnsavedValue 'cardDescription' _id)
  108. p.quiet
  109. | {{_ 'unsaved-description'}}
  110. a.js-open-inlined-form {{_ 'view-it'}}
  111. = ' - '
  112. a.js-close-inlined-form {{_ 'discard'}}
  113. else if getDescription
  114. h3.card-details-item-title {{_ 'description'}}
  115. +viewer
  116. = getDescription
  117. .card-details-items
  118. .card-details-item.card-details-item-name
  119. h3.card-details-item-title {{_ 'requested-by'}}
  120. if canModifyCard
  121. +inlinedForm(classNames="js-card-details-requester")
  122. +editCardRequesterForm
  123. else
  124. a.js-open-inlined-form
  125. if getRequestedBy
  126. +viewer
  127. = getRequestedBy
  128. else
  129. | {{_ 'add'}}
  130. else if getRequestedBy
  131. +viewer
  132. = getRequestedBy
  133. .card-details-item.card-details-item-name
  134. h3.card-details-item-title {{_ 'assigned-by'}}
  135. if canModifyCard
  136. +inlinedForm(classNames="js-card-details-assigner")
  137. +editCardAssignerForm
  138. else
  139. a.js-open-inlined-form
  140. if getAssignedBy
  141. +viewer
  142. = getAssignedBy
  143. else
  144. | {{_ 'add'}}
  145. else if getRequestedBy
  146. +viewer
  147. = getAssignedBy
  148. hr
  149. +checklists(cardId = _id)
  150. if currentBoard.allowsSubtasks
  151. hr
  152. +subtasks(cardId = _id)
  153. hr
  154. h3
  155. i.fa.fa-paperclip
  156. | {{_ 'attachments'}}
  157. +attachmentsGalery
  158. hr
  159. unless currentUser.isNoComments
  160. .activity-title
  161. h3 {{ _ 'activity'}}
  162. if currentUser.isBoardMember
  163. .material-toggle-switch
  164. span.toggle-switch-title {{_ 'hide-system-messages'}}
  165. if hiddenSystemMessages
  166. input.toggle-switch(type="checkbox" id="toggleButton" checked="checked")
  167. else
  168. input.toggle-switch(type="checkbox" id="toggleButton")
  169. label.toggle-label(for="toggleButton")
  170. if currentUser.isBoardMember
  171. unless currentUser.isNoComments
  172. +commentForm
  173. unless currentUser.isNoComments
  174. if isLoaded.get
  175. if isLinkedCard
  176. +activities(card=this mode="linkedcard")
  177. else if isLinkedBoard
  178. +activities(card=this mode="linkedboard")
  179. else
  180. +activities(card=this mode="card")
  181. template(name="editCardTitleForm")
  182. textarea.js-edit-card-title(rows='1' autofocus)
  183. = getTitle
  184. .edit-controls.clearfix
  185. button.primary.confirm.js-submit-edit-card-title-form(type="submit") {{_ 'save'}}
  186. a.fa.fa-times-thin.js-close-inlined-form
  187. template(name="editCardRequesterForm")
  188. input.js-edit-card-requester(type='text' autofocus value=getRequestedBy)
  189. .edit-controls.clearfix
  190. button.primary.confirm.js-submit-edit-card-requester-form(type="submit") {{_ 'save'}}
  191. a.fa.fa-times-thin.js-close-inlined-form
  192. template(name="editCardAssignerForm")
  193. input.js-edit-card-assigner(type='text' autofocus value=getAssignedBy)
  194. .edit-controls.clearfix
  195. button.primary.confirm.js-submit-edit-card-assigner-form(type="submit") {{_ 'save'}}
  196. a.fa.fa-times-thin.js-close-inlined-form
  197. template(name="cardDetailsActionsPopup")
  198. ul.pop-over-list
  199. li: a.js-toggle-watch-card {{#if isWatching}}{{_ 'unwatch'}}{{else}}{{_ 'watch'}}{{/if}}
  200. if canModifyCard
  201. hr
  202. ul.pop-over-list
  203. li: a.js-members {{_ 'card-edit-members'}}
  204. li: a.js-labels {{_ 'card-edit-labels'}}
  205. li: a.js-attachments {{_ 'card-edit-attachments'}}
  206. li: a.js-custom-fields {{_ 'card-edit-custom-fields'}}
  207. li: a.js-received-date {{_ 'editCardReceivedDatePopup-title'}}
  208. li: a.js-start-date {{_ 'editCardStartDatePopup-title'}}
  209. li: a.js-due-date {{_ 'editCardDueDatePopup-title'}}
  210. li: a.js-end-date {{_ 'editCardEndDatePopup-title'}}
  211. li: a.js-spent-time {{_ 'editCardSpentTimePopup-title'}}
  212. hr
  213. ul.pop-over-list
  214. li: a.js-move-card-to-top {{_ 'moveCardToTop-title'}}
  215. li: a.js-move-card-to-bottom {{_ 'moveCardToBottom-title'}}
  216. hr
  217. ul.pop-over-list
  218. li: a.js-move-card {{_ 'moveCardPopup-title'}}
  219. li: a.js-copy-card {{_ 'copyCardPopup-title'}}
  220. li: a.js-copy-checklist-cards {{_ 'copyChecklistToManyCardsPopup-title'}}
  221. unless archived
  222. li: a.js-archive {{_ 'archive-card'}}
  223. li: a.js-more {{_ 'cardMorePopup-title'}}
  224. template(name="moveCardPopup")
  225. +boardsAndLists
  226. template(name="copyCardPopup")
  227. label(for='copy-card-title') {{_ 'title'}}:
  228. textarea#copy-card-title.minicard-composer-textarea.js-card-title(autofocus)
  229. = getTitle
  230. +boardsAndLists
  231. template(name="copyChecklistToManyCardsPopup")
  232. label(for='copy-checklist-cards-title') {{_ 'copyChecklistToManyCardsPopup-instructions'}}:
  233. textarea#copy-card-title.minicard-composer-textarea.js-card-title(autofocus)
  234. | {{_ 'copyChecklistToManyCardsPopup-format'}}
  235. +boardsAndLists
  236. template(name="boardsAndLists")
  237. label {{_ 'boards'}}:
  238. select.js-select-boards
  239. each boards
  240. if $eq _id currentBoard._id
  241. option(value="{{_id}}" selected) {{_ 'current'}}
  242. else
  243. option(value="{{_id}}") {{title}}
  244. label {{_ 'swimlanes'}}:
  245. select.js-select-swimlanes
  246. each swimlanes
  247. option(value="{{_id}}") {{title}}
  248. label {{_ 'lists'}}:
  249. select.js-select-lists
  250. each aBoardLists
  251. option(value="{{_id}}") {{title}}
  252. .edit-controls.clearfix
  253. button.primary.confirm.js-done {{_ 'done'}}
  254. template(name="cardMembersPopup")
  255. ul.pop-over-list.js-card-member-list
  256. each board.activeMembers
  257. li.item(class="{{#if isCardMember}}active{{/if}}")
  258. a.name.js-select-member(href="#")
  259. +userAvatar(userId=user._id)
  260. span.full-name
  261. = user.profile.fullname
  262. | (<span class="username">{{ user.username }}</span>)
  263. if isCardMember
  264. i.fa.fa-check
  265. template(name="cardMorePopup")
  266. p.quiet
  267. span.clearfix
  268. span {{_ 'link-card'}}
  269. = ' '
  270. i.fa.colorful(class="{{#if board.isPublic}}fa-globe{{else}}fa-lock{{/if}}")
  271. input.inline-input(type="text" id="cardURL" readonly value="{{ absoluteUrl }}")
  272. button.js-copy-card-link-to-clipboard(class="btn") {{_ 'copy-card-link-to-clipboard'}}
  273. span.clearfix
  274. br
  275. h2 {{_ 'change-card-parent'}}
  276. label {{_ 'source-board'}}:
  277. select.js-field-parent-board
  278. each boards
  279. if isParentBoard
  280. option(value="{{_id}}" selected) {{title}}
  281. else
  282. option(value="{{_id}}") {{title}}
  283. if isTopLevel
  284. option(value="none" selected) {{_ 'custom-field-dropdown-none'}}
  285. else
  286. option(value="none") {{_ 'custom-field-dropdown-none'}}
  287. label {{_ 'parent-card'}}:
  288. select.js-field-parent-card
  289. if isTopLevel
  290. option(value="none" selected) {{_ 'custom-field-dropdown-none'}}
  291. else
  292. each cards
  293. if isParentCard
  294. option(value="{{_id}}" selected) {{title}}
  295. else
  296. option(value="{{_id}}") {{title}}
  297. option(value="none") {{_ 'custom-field-dropdown-none'}}
  298. br
  299. | {{_ 'added'}}
  300. span.date(title=card.createdAt) {{ moment createdAt 'LLL' }}
  301. a.js-delete(title="{{_ 'card-delete-notice'}}") {{_ 'delete'}}
  302. template(name="cardDeletePopup")
  303. p {{_ "card-delete-pop"}}
  304. unless archived
  305. p {{_ "card-delete-suggest-archive"}}
  306. button.js-confirm.negate.full(type="submit") {{_ 'delete'}}