cardDetails.jade 22 KB

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