cardDetails.jade 12 KB

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