cardDetails.jade 21 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625
  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. unless isMiniScreen
  8. a.fa.fa-times-thin.close-card-details.js-close-card-details
  9. if currentUser.isBoardMember
  10. a.fa.fa-navicon.card-details-menu.js-open-card-details-menu
  11. input.inline-input(type="text" id="cardURL_copy" value="{{ absoluteUrl }}")
  12. a.fa.fa-link.card-copy-button.js-copy-link(
  13. class="fa-link"
  14. title="{{_ 'copy-card-link-to-clipboard'}}"
  15. value="{{ absoluteUrl }}"
  16. )
  17. if isMiniScreen
  18. a.fa.fa-times-thin.close-card-details-mobile-web.js-close-card-details
  19. if currentUser.isBoardMember
  20. a.fa.fa-navicon.card-details-menu-mobile-web.js-open-card-details-menu
  21. a.fa.fa-link.card-copy-mobile-button
  22. h2.card-details-title.js-card-title(
  23. class="{{#if canModifyCard}}js-open-inlined-form is-editable{{/if}}")
  24. +viewer
  25. = getTitle
  26. if isWatching
  27. i.card-details-watch.fa.fa-eye
  28. .card-details-path
  29. each parentList
  30. |   >  
  31. a.js-parent-card(href=linkForCard) {{title}}
  32. // else
  33. {{_ 'top-level-card'}}
  34. if isLinkedCard
  35. a.linked-card-location.js-go-to-linked-card
  36. +viewer
  37. | {{getBoardTitle}} > {{getTitle}}
  38. if getArchived
  39. if isLinkedBoard
  40. p.warning {{_ 'board-archived'}}
  41. else
  42. p.warning {{_ 'card-archived'}}
  43. .card-details-items
  44. if currentBoard.allowsReceivedDate
  45. .card-details-item.card-details-item-received
  46. h3
  47. i.fa.fa-sign-out
  48. card-details-item-title {{_ 'card-received'}}
  49. if getReceived
  50. +cardReceivedDate
  51. else
  52. if canModifyCard
  53. unless currentUser.isWorker
  54. a.card-label.add-label.js-received-date
  55. i.fa.fa-plus
  56. if currentBoard.allowsStartDate
  57. .card-details-item.card-details-item-start
  58. h3
  59. i.fa.fa-hourglass-start
  60. card-details-item-title {{_ 'card-start'}}
  61. if getStart
  62. +cardStartDate
  63. else
  64. if canModifyCard
  65. unless currentUser.isWorker
  66. a.card-label.add-label.js-start-date
  67. i.fa.fa-plus
  68. if currentBoard.allowsDueDate
  69. .card-details-item.card-details-item-due
  70. h3
  71. i.fa.fa-sign-in
  72. card-details-item-title {{_ 'card-due'}}
  73. if getDue
  74. +cardDueDate
  75. else
  76. if canModifyCard
  77. unless currentUser.isWorker
  78. a.card-label.add-label.js-due-date
  79. i.fa.fa-plus
  80. if currentBoard.allowsEndDate
  81. .card-details-item.card-details-item-end
  82. h3
  83. i.fa.fa-hourglass-end
  84. card-details-item-title {{_ 'card-end'}}
  85. if getEnd
  86. +cardEndDate
  87. else
  88. if canModifyCard
  89. unless currentUser.isWorker
  90. a.card-label.add-label.js-end-date
  91. i.fa.fa-plus
  92. //.card-details-items
  93. if currentBoard.allowsMembers
  94. .card-details-item.card-details-item-members
  95. h3
  96. i.fa.fa-users
  97. card-details-item-title {{_ 'members'}}
  98. each getMembers
  99. +userAvatar(userId=this cardId=../_id)
  100. | {{! XXX Hack to hide syntaxic coloration /// }}
  101. if canModifyCard
  102. unless currentUser.isWorker
  103. a.member.add-member.card-details-item-add-button.js-add-members(title="{{_ 'card-members-title'}}")
  104. i.fa.fa-plus
  105. //if assigneeSelected
  106. if currentBoard.allowsAssignee
  107. .card-details-item.card-details-item-assignees
  108. h3
  109. i.fa.fa-user
  110. card-details-item-title {{_ 'assignee'}}
  111. each getAssignees
  112. +userAvatarAssignee(userId=this cardId=../_id)
  113. | {{! XXX Hack to hide syntaxic coloration /// }}
  114. if canModifyCard
  115. a.assignee.add-assignee.card-details-item-add-button.js-add-assignees(title="{{_ 'assignee'}}")
  116. i.fa.fa-plus
  117. if currentUser.isWorker
  118. unless assigneeSelected
  119. a.assignee.add-assignee.card-details-item-add-button.js-add-assignees(title="{{_ 'assignee'}}")
  120. i.fa.fa-plus
  121. if currentBoard.allowsLabels
  122. .card-details-item.card-details-item-labels
  123. h3
  124. i.fa.fa-tags
  125. card-details-item-title {{_ 'labels'}}
  126. a(class="{{#if canModifyCard}}js-add-labels{{else}}is-disabled{{/if}}" title="{{_ 'card-labels-title'}}")
  127. each labels
  128. span.card-label(class="card-label-{{color}}" title=name)
  129. +viewer
  130. = name
  131. if canModifyCard
  132. unless currentUser.isWorker
  133. a.card-label.add-label.js-add-labels(title="{{_ 'card-labels-title'}}")
  134. i.fa.fa-plus
  135. //.card-details-items
  136. each customFieldsWD
  137. .card-details-item.card-details-item-customfield
  138. h3.card-details-item-title
  139. +viewer
  140. = definition.name
  141. +cardCustomField
  142. //.card-details-items
  143. if getSpentTime
  144. .card-details-item.card-details-item-spent
  145. if getIsOvertime
  146. h3.card-details-item-title {{_ 'overtime-hours'}}
  147. else
  148. h3.card-details-item-title {{_ 'spent-time-hours'}}
  149. +cardSpentTime
  150. //.card-details-items
  151. if currentBoard.allowsRequestedBy
  152. .card-details-item.card-details-item-name
  153. h3
  154. i.fa.fa-shopping-cart
  155. card-details-item-title {{_ 'requested-by'}}
  156. if canModifyCard
  157. unless currentUser.isWorker
  158. +inlinedForm(classNames="js-card-details-requester")
  159. +editCardRequesterForm
  160. else
  161. a.js-open-inlined-form
  162. if getRequestedBy
  163. +viewer
  164. = getRequestedBy
  165. else
  166. | {{_ 'add'}}
  167. else if getRequestedBy
  168. +viewer
  169. = getRequestedBy
  170. if currentBoard.allowsAssignedBy
  171. .card-details-item.card-details-item-name
  172. h3
  173. i.fa.fa-user-plus
  174. card-details-item-title {{_ 'assigned-by'}}
  175. if canModifyCard
  176. unless currentUser.isWorker
  177. +inlinedForm(classNames="js-card-details-assigner")
  178. +editCardAssignerForm
  179. else
  180. a.js-open-inlined-form
  181. if getAssignedBy
  182. +viewer
  183. = getAssignedBy
  184. else
  185. | {{_ 'add'}}
  186. else if getRequestedBy
  187. +viewer
  188. = getAssignedBy
  189. if getVoteQuestion
  190. hr
  191. .vote-title
  192. div.flex
  193. h3
  194. i.fa.fa-thumbs-up
  195. | {{_ 'vote-question'}}
  196. if getVoteEnd
  197. +voteEndDate
  198. .vote-result
  199. if votePublic
  200. a.card-label.card-label-green.js-show-positive-votes {{ voteCountPositive }}
  201. a.card-label.card-label-red.js-show-negative-votes {{ voteCountNegative }}
  202. else
  203. .card-label.card-label-green {{ voteCountPositive }}
  204. .card-label.card-label-red {{ voteCountNegative }}
  205. unless ($and currentBoard.isPublic voteAllowNonBoardMembers )
  206. .card-label.card-label-gray {{ voteCount }} {{_ 'r-of' }} {{ currentBoard.activeMembers.length }}
  207. +viewer
  208. = getVoteQuestion
  209. if showVotingButtons
  210. button.card-details-green.js-vote.js-vote-positive(class="{{#if voteState}}voted{{/if}}")
  211. if voteState
  212. i.fa.fa-thumbs-up
  213. | {{_ 'vote-for-it'}}
  214. button.card-details-red.js-vote.js-vote-negative(class="{{#if $eq voteState false}}voted{{/if}}")
  215. if $eq voteState false
  216. i.fa.fa-thumbs-down
  217. | {{_ 'vote-against'}}
  218. //- XXX We should use "editable" to avoid repetiting ourselves
  219. if canModifyCard
  220. unless currentUser.isWorker
  221. if currentBoard.allowsDescriptionTitle
  222. hr
  223. h3
  224. i.fa.fa-align-left
  225. card-details-item-title {{_ 'description'}}
  226. if currentBoard.allowsDescriptionText
  227. +inlinedCardDescription(classNames="card-description js-card-description")
  228. +editor(autofocus=true)
  229. | {{getUnsavedValue 'cardDescription' _id getDescription}}
  230. .edit-controls.clearfix
  231. button.primary(type="submit") {{_ 'save'}}
  232. a.fa.fa-times-thin.js-close-inlined-form
  233. else
  234. if currentBoard.allowsDescriptionText
  235. a.js-open-inlined-form
  236. if getDescription
  237. +viewer
  238. = getDescription
  239. else
  240. | {{_ 'edit'}}
  241. if (hasUnsavedValue 'cardDescription' _id)
  242. p.quiet
  243. | {{_ 'unsaved-description'}}
  244. a.js-open-inlined-form {{_ 'view-it'}}
  245. = ' - '
  246. a.js-close-inlined-form {{_ 'discard'}}
  247. else if getDescription
  248. if currentBoard.allowsDescriptionTitle
  249. hr
  250. h3.card-details-item-title {{_ 'description'}}
  251. if currentBoard.allowsDescriptionText
  252. +viewer
  253. = getDescription
  254. .card-checklist-attachmentGalerys
  255. .card-checklist-attachmentGalery.card-checklists
  256. if currentBoard.allowsChecklists
  257. hr
  258. +checklists(cardId = _id)
  259. if currentBoard.allowsSubtasks
  260. hr
  261. +subtasks(cardId = _id)
  262. if currentBoard.allowsAttachments
  263. hr
  264. h3
  265. i.fa.fa-paperclip
  266. | {{_ 'attachments'}}
  267. .card-checklist-attachmentGalery.card-attachmentGalery
  268. +attachmentsGalery
  269. hr
  270. unless currentUser.isNoComments
  271. .activity-title
  272. h3
  273. i.fa.fa-history
  274. | {{ _ 'activity'}}
  275. if currentUser.isBoardMember
  276. .material-toggle-switch
  277. span.toggle-switch-title {{_ 'hide-system-messages'}}
  278. if hiddenSystemMessages
  279. input.toggle-switch(type="checkbox" id="toggleButton" checked="checked")
  280. else
  281. input.toggle-switch(type="checkbox" id="toggleButton")
  282. label.toggle-label(for="toggleButton")
  283. if currentBoard.allowsComments
  284. if currentUser.isBoardMember
  285. unless currentUser.isNoComments
  286. +commentForm
  287. unless currentUser.isNoComments
  288. if isLoaded.get
  289. if isLinkedCard
  290. +activities(card=this mode="linkedcard")
  291. else if isLinkedBoard
  292. +activities(card=this mode="linkedboard")
  293. else
  294. +activities(card=this mode="card")
  295. template(name="editCardTitleForm")
  296. textarea.js-edit-card-title(rows='1' autofocus dir="auto")
  297. = getTitle
  298. .edit-controls.clearfix
  299. button.primary.confirm.js-submit-edit-card-title-form(type="submit") {{_ 'save'}}
  300. a.fa.fa-times-thin.js-close-inlined-form
  301. template(name="editCardRequesterForm")
  302. input.js-edit-card-requester(type='text' autofocus value=getRequestedBy dir="auto")
  303. .edit-controls.clearfix
  304. button.primary.confirm.js-submit-edit-card-requester-form(type="submit") {{_ 'save'}}
  305. a.fa.fa-times-thin.js-close-inlined-form
  306. template(name="editCardAssignerForm")
  307. input.js-edit-card-assigner(type='text' autofocus value=getAssignedBy dir="auto")
  308. .edit-controls.clearfix
  309. button.primary.confirm.js-submit-edit-card-assigner-form(type="submit") {{_ 'save'}}
  310. a.fa.fa-times-thin.js-close-inlined-form
  311. template(name="cardDetailsActionsPopup")
  312. ul.pop-over-list
  313. li
  314. a.js-toggle-watch-card
  315. if isWatching
  316. i.fa.fa-eye
  317. | {{_ 'unwatch'}}
  318. else
  319. i.fa.fa-eye-slash
  320. | {{_ 'watch'}}
  321. if canModifyCard
  322. unless currentUser.isWorker
  323. hr
  324. ul.pop-over-list
  325. //li: a.js-members {{_ 'card-edit-members'}}
  326. //li: a.js-labels {{_ 'card-edit-labels'}}
  327. //li: a.js-attachments {{_ 'card-edit-attachments'}}
  328. li
  329. a.js-start-voting
  330. i.fa.fa-thumbs-up
  331. | {{_ 'card-edit-voting'}}
  332. li
  333. a.js-custom-fields
  334. i.fa.fa-list-alt
  335. | {{_ 'card-edit-custom-fields'}}
  336. //li: a.js-received-date {{_ 'editCardReceivedDatePopup-title'}}
  337. //li: a.js-start-date {{_ 'editCardStartDatePopup-title'}}
  338. //li: a.js-due-date {{_ 'editCardDueDatePopup-title'}}
  339. //li: a.js-end-date {{_ 'editCardEndDatePopup-title'}}
  340. li
  341. a.js-spent-time
  342. i.fa.fa-clock-o
  343. | {{_ 'editCardSpentTimePopup-title'}}
  344. li
  345. a.js-set-card-color
  346. i.fa.fa-paint-brush
  347. | {{_ 'setCardColorPopup-title'}}
  348. hr
  349. ul.pop-over-list
  350. li
  351. a.js-move-card-to-top
  352. i.fa.fa-arrow-up
  353. | {{_ 'moveCardToTop-title'}}
  354. li
  355. a.js-move-card-to-bottom
  356. i.fa.fa-arrow-down
  357. | {{_ 'moveCardToBottom-title'}}
  358. unless currentUser.isWorker
  359. hr
  360. ul.pop-over-list
  361. li
  362. a.js-move-card
  363. i.fa.fa-arrow-right
  364. | {{_ 'moveCardPopup-title'}}
  365. li
  366. a.js-copy-card
  367. i.fa.fa-copy
  368. | {{_ 'copyCardPopup-title'}}
  369. hr
  370. ul.pop-over-list
  371. li
  372. a.js-copy-checklist-cards
  373. i.fa.fa-list
  374. i.fa.fa-copy
  375. | {{_ 'copyChecklistToManyCardsPopup-title'}}
  376. unless archived
  377. hr
  378. ul.pop-over-list
  379. li
  380. a.js-archive
  381. i.fa.fa-arrow-right
  382. i.fa.fa-archive
  383. | {{_ 'archive-card'}}
  384. hr
  385. ul.pop-over-list
  386. li
  387. a.js-more
  388. i.fa.fa-link
  389. | {{_ 'cardMorePopup-title'}}
  390. template(name="moveCardPopup")
  391. +boardsAndLists
  392. template(name="copyCardPopup")
  393. label(for='copy-card-title') {{_ 'title'}}:
  394. textarea#copy-card-title.minicard-composer-textarea.js-card-title(autofocus)
  395. = getTitle
  396. +boardsAndLists
  397. template(name="copyChecklistToManyCardsPopup")
  398. label(for='copy-checklist-cards-title') {{_ 'copyChecklistToManyCardsPopup-instructions'}}:
  399. textarea#copy-card-title.minicard-composer-textarea.js-card-title(autofocus)
  400. | {{_ 'copyChecklistToManyCardsPopup-format'}}
  401. +boardsAndLists
  402. template(name="boardsAndLists")
  403. label {{_ 'boards'}}:
  404. select.js-select-boards(autofocus)
  405. each boards
  406. if $eq _id currentBoard._id
  407. option(value="{{_id}}" selected) {{_ 'current'}}
  408. else
  409. option(value="{{_id}}") {{title}}
  410. label {{_ 'swimlanes'}}:
  411. select.js-select-swimlanes
  412. each swimlanes
  413. option(value="{{_id}}") {{title}}
  414. label {{_ 'lists'}}:
  415. select.js-select-lists
  416. each aBoardLists
  417. option(value="{{_id}}") {{title}}
  418. .edit-controls.clearfix
  419. button.primary.confirm.js-done {{_ 'done'}}
  420. template(name="cardMembersPopup")
  421. ul.pop-over-list.js-card-member-list
  422. each board.activeMembers
  423. li.item(class="{{#if isCardMember}}active{{/if}}")
  424. a.name.js-select-member(href="#")
  425. +userAvatar(userId=user._id)
  426. span.full-name
  427. = user.profile.fullname
  428. | (<span class="username">{{ user.username }}</span>)
  429. if isCardMember
  430. i.fa.fa-check
  431. template(name="cardAssigneesPopup")
  432. unless currentUser.isWorker
  433. ul.pop-over-list.js-card-assignee-list
  434. each board.activeMembers
  435. li.item(class="{{#if isCardAssignee}}active{{/if}}")
  436. a.name.js-select-assignee(href="#")
  437. +userAvatar(userId=user._id)
  438. span.full-name
  439. = user.profile.fullname
  440. | (<span class="username">{{ user.username }}</span>)
  441. if isCardAssignee
  442. i.fa.fa-check
  443. if currentUser.isWorker
  444. ul.pop-over-list.js-card-assignee-list
  445. li.item(class="{{#if currentUser.isCardAssignee}}active{{/if}}")
  446. a.name.js-select-assignee(href="#")
  447. +userAvatar(userId=currentUser._id)
  448. span.full-name
  449. = currentUser.profile.fullname
  450. | (<span class="username">{{ currentUser.username }}</span>)
  451. if currentUser.isCardAssignee
  452. i.fa.fa-check
  453. template(name="userAvatarAssignee")
  454. a.assignee.js-assignee(title="{{userData.profile.fullname}} ({{userData.username}})")
  455. if userData.profile.avatarUrl
  456. img.avatar.avatar-image(src="{{userData.profile.avatarUrl}}")
  457. else
  458. +userAvatarAssigneeInitials(userId=userData._id)
  459. if showStatus
  460. span.assignee-presence-status(class=presenceStatusClassName)
  461. span.member-type(class=memberType)
  462. unless isSandstorm
  463. if showEdit
  464. if $eq currentUser._id userData._id
  465. a.edit-avatar.js-change-avatar
  466. i.fa.fa-pencil
  467. template(name="cardAssigneePopup")
  468. .board-assignee-menu
  469. .mini-profile-info
  470. +userAvatar(userId=user._id showEdit=true)
  471. .info
  472. h3= user.profile.fullname
  473. p.quiet @{{ user.username }}
  474. ul.pop-over-list
  475. if currentUser.isNotCommentOnly
  476. unless currentUser.isWorker
  477. li: a.js-remove-assignee {{_ 'remove-member-from-card'}}
  478. unless currentUser.isWorker
  479. if $eq currentUser._id user._id
  480. with currentUser
  481. li: a.js-edit-profile {{_ 'edit-profile'}}
  482. template(name="userAvatarAssigneeInitials")
  483. svg.avatar.avatar-assignee-initials(viewBox="0 0 {{viewPortWidth}} 15")
  484. text(x="50%" y="13" text-anchor="middle")= initials
  485. template(name="cardMorePopup")
  486. p.quiet
  487. span.clearfix
  488. span {{_ 'link-card'}}
  489. = ' '
  490. i.fa.colorful(class="{{#if board.isPublic}}fa-globe{{else}}fa-lock{{/if}}")
  491. input.inline-input(type="text" id="cardURL" readonly value="{{ absoluteUrl }}" autofocus="autofocus")
  492. button.js-copy-card-link-to-clipboard(class="btn" id="clipboard") {{_ 'copy-card-link-to-clipboard'}}
  493. span.clearfix
  494. br
  495. h2 {{_ 'change-card-parent'}}
  496. label {{_ 'source-board'}}:
  497. select.js-field-parent-board
  498. if isTopLevel
  499. option(value="none" selected) {{_ 'custom-field-dropdown-none'}}
  500. else
  501. option(value="none") {{_ 'custom-field-dropdown-none'}}
  502. each boards
  503. if isParentBoard
  504. option(value="{{_id}}" selected) {{title}}
  505. else
  506. option(value="{{_id}}") {{title}}
  507. label {{_ 'parent-card'}}:
  508. select.js-field-parent-card
  509. if isTopLevel
  510. option(value="none" selected) {{_ 'custom-field-dropdown-none'}}
  511. else
  512. option(value="none") {{_ 'custom-field-dropdown-none'}}
  513. each cards
  514. if isParentCard
  515. option(value="{{_id}}" selected) {{title}}
  516. else
  517. option(value="{{_id}}") {{title}}
  518. br
  519. | {{_ 'added'}}
  520. span.date(title=card.createdAt) {{ moment createdAt 'LLL' }}
  521. a.js-delete(title="{{_ 'card-delete-notice'}}") {{_ 'delete'}}
  522. template(name="setCardColorPopup")
  523. form.edit-label
  524. .palette-colors: each colors
  525. unless $eq color 'white'
  526. span.card-label.palette-color.js-palette-color(class="card-details-{{color}}")
  527. if(isSelected color)
  528. i.fa.fa-check
  529. button.primary.confirm.js-submit {{_ 'save'}}
  530. button.js-remove-color.negate.wide.right {{_ 'unset-color'}}
  531. template(name="cardDeletePopup")
  532. p {{_ "card-delete-pop"}}
  533. unless archived
  534. p {{_ "card-delete-suggest-archive"}}
  535. button.js-confirm.negate.full(type="submit") {{_ 'delete'}}
  536. template(name="deleteVotePopup")
  537. p {{_ "vote-delete-pop"}}
  538. button.js-confirm.negate.full(type="submit") {{_ 'delete'}}
  539. template(name="cardStartVotingPopup")
  540. form.edit-vote-question
  541. .fields
  542. label(for="vote") {{_ 'vote-question'}}
  543. input.js-vote-field#vote(type="text" name="vote" value="{{getVoteQuestion}}" autofocus disabled="{{#if getVoteQuestion}}disabled{{/if}}")
  544. .check-div
  545. a.flex(class="{{#if getVoteQuestion}}is-disabled{{else}}js-toggle-vote-allow-non-members{{/if}}")
  546. .materialCheckBox#vote-allow-non-members(name="vote-allow-non-members" class="{{#if voteAllowNonBoardMembers}}is-checked{{/if}}")
  547. span {{_ 'allowNonBoardMembers'}}
  548. .check-div
  549. a.flex(class="{{#if getVoteQuestion}}is-disabled{{else}}js-toggle-vote-public{{/if}}")
  550. .materialCheckBox#vote-public(name="vote-public" class="{{#if votePublic}}is-checked{{/if}}")
  551. span {{_ 'vote-public'}}
  552. .check-div.flex
  553. i.fa.fa-hourglass-end
  554. a.js-end-date
  555. span
  556. | {{_ 'card-end'}}
  557. unless getVoteEnd
  558. i.fa.fa-plus
  559. if getVoteEnd
  560. +voteEndDate
  561. button.primary.js-submit {{_ 'save'}}
  562. if getVoteQuestion
  563. button.js-remove-vote.negate.wide.right {{_ 'delete'}}
  564. template(name="positiveVoteMembersPopup")
  565. ul.pop-over-list.js-card-member-list
  566. each m in voteMemberPositive
  567. li.item
  568. a.name
  569. +userAvatar(userId=m._id)
  570. span.full-name
  571. = m.profile.fullname
  572. | (<span class="username">{{ m.username }}</span>)
  573. template(name="negativeVoteMembersPopup")
  574. ul.pop-over-list.js-card-member-list
  575. each m in voteMemberNegative
  576. li.item
  577. a.name
  578. +userAvatar(userId=m._id)
  579. span.full-name
  580. = m.profile.fullname
  581. | (<span class="username">{{ m.username }}</span>)