cardDetails.jade 11 KB

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