cardDetails.jade 22 KB

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