sidebar.jade 24 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659
  1. template(name="sidebar")
  2. .board-sidebar.sidebar(class="{{#if isOpen}}is-open{{/if}}")
  3. //a.sidebar-tongue.js-toggle-sidebar(
  4. // class="{{#if isTongueHidden}}is-hidden{{/if}}",
  5. // title="{{showTongueTitle}}")
  6. // i.fa.fa-navicon
  7. .sidebar-shadow
  8. a.sidebar-xmark.js-close-sidebar ✕
  9. .sidebar-content.js-board-sidebar-content
  10. //a.hide-btn.js-hide-sidebar
  11. // i.fa.fa-navicon
  12. unless isDefaultView
  13. h2
  14. a.fa.fa-chevron-left.js-back-home
  15. = getViewTitle
  16. +Template.dynamic(template=getViewTemplate)
  17. template(name='homeSidebar')
  18. hr
  19. +membersWidget
  20. hr
  21. +labelsWidget
  22. ul#cards.label-text-hidden
  23. a.flex.js-toggle-minicard-label-text(title="{{_ 'hide-minicard-label-text'}}")
  24. span {{_ 'hide-minicard-label-text'}}
  25. b  
  26. .materialCheckBox(class="{{#if hiddenMinicardLabelText}}is-checked{{/if}}")
  27. hr
  28. unless currentUser.isNoComments
  29. h3
  30. i.fa.fa-comments-o
  31. | {{_ 'activities'}}
  32. +activities(mode="board")
  33. template(name="membersWidget")
  34. unless currentUser.isCommentOnly
  35. unless currentUser.isWorker
  36. h3
  37. a.board-header-btn.js-open-board-menu(title="{{_ 'boardMenuPopup-title'}}")
  38. i.board-header-btn-icon.fa.fa-cog
  39. | {{_ 'boardMenuPopup-title'}}
  40. .board-widget.board-widget-members
  41. .sidebar-shortcuts
  42. a.board-header-btn.js-shortcuts(title="{{_ 'keyboard-shortcuts' }}")
  43. i.fa.fa-keyboard-o
  44. span {{_ 'keyboard-shortcuts' }}
  45. hr
  46. h3
  47. i.fa.fa-users
  48. | {{_ 'members'}}
  49. +basicTabs(tabs=tabs)
  50. +tabContent(slug="people")
  51. unless currentUser.isWorker
  52. p.quiet
  53. .board-widget-content
  54. each currentBoard.activeMembers
  55. +userAvatar(userId=this.userId showStatus=true)
  56. if isSandstorm
  57. if currentUser.isBoardMember
  58. a.member.add-member.sandstorm-powerbox-request-identity(title="{{_ 'add-members'}}")
  59. i.fa.fa-plus
  60. else if currentUser.isBoardAdmin
  61. a.member.add-member.js-manage-board-members(title="{{_ 'add-members'}}")
  62. i.fa.fa-plus
  63. .clearfix
  64. if isInvited
  65. hr
  66. p
  67. i.fa.fa-exclamation-circle
  68. | {{_ 'just-invited'}}
  69. button.js-member-invite-accept.primary {{_ 'accept'}}
  70. button.js-member-invite-decline {{_ 'decline'}}
  71. +tabContent(slug='organizations')
  72. unless currentUser.isWorker
  73. p.quiet
  74. if AtLeastOneOrgWasCreated
  75. .board-widget.board-widget-members
  76. .board-widget-content
  77. +boardOrgGeneral
  78. .clearfix
  79. +tabContent(slug="teams")
  80. unless currentUser.isWorker
  81. p.quiet
  82. if AtLeastOneTeamWasCreated
  83. .board-widget.board-widget-members
  84. .board-widget-content
  85. +boardTeamGeneral
  86. .clearfix
  87. template(name="boardOrgGeneral")
  88. table
  89. tbody
  90. tr
  91. th
  92. | {{_ 'add-organizations'}}
  93. br
  94. i.addOrganizationsLabel
  95. | {{_ 'to-create-organizations-contact-admin'}}
  96. br
  97. i.addOrganizationsLabel
  98. | {{_ 'add-organizations-label'}}
  99. th
  100. if currentUser.isBoardAdmin
  101. a.member.orgOrTeamMember.add-member.js-manage-board-addOrg(title="{{_ 'add-members'}}")
  102. i.addTeamFaPlus.fa.fa-plus
  103. .divaddfaplusminus
  104. | {{_ 'add'}}
  105. each org in currentBoard.activeOrgs
  106. +boardOrgRow(orgId=org.orgId)
  107. template(name="boardTeamGeneral")
  108. table
  109. tbody
  110. tr
  111. th
  112. | {{_ 'add-teams'}}
  113. br
  114. i.addTeamsLabel
  115. | {{_ 'to-create-teams-contact-admin'}}
  116. br
  117. i.addTeamsLabel
  118. | {{_ 'add-teams-label'}}
  119. th
  120. if currentUser.isBoardAdmin
  121. a.member.orgOrTeamMember.add-member.js-manage-board-addTeam(title="{{_ 'add-members'}}")
  122. i.addTeamFaPlus.fa.fa-plus
  123. .divaddfaplusminus
  124. | {{_ 'add'}}
  125. each currentBoard.activeTeams
  126. +boardTeamRow(teamId=this.teamId)
  127. template(name="boardChangeColorPopup")
  128. .board-backgrounds-list.clearfix
  129. each backgroundColors
  130. .board-background-select.js-select-background
  131. span.background-box(class="board-color-{{this}}")
  132. span {{this}}
  133. if isSelected
  134. i.fa.fa-check
  135. template(name="boardChangeBackgroundImagePopup")
  136. form
  137. label
  138. | {{_ 'board-background-image-url'}}
  139. input.js-board-background-image-url(type="text" value="{{backgroundImageURL}}" autofocus)
  140. div.buttonsContainer
  141. input.primary.wide(type="submit" value="{{_ 'save'}}")
  142. template(name="boardInfoOnMyBoardsPopup")
  143. form.board-info-on-my-boards
  144. h3 {{_ 'show-at-all-boards-page'}}
  145. unless currentSetting.hideCardCounterList
  146. div.check-div
  147. a.flex.js-field-has-cardcounterlist(class="{{#if allowsCardCounterList}}is-checked{{/if}}")
  148. .materialCheckBox(class="{{#if allowsCardCounterList}}is-checked{{/if}}")
  149. span
  150. i.fa.fa-sign-out
  151. | {{_ 'show-card-counter-per-list'}}
  152. unless currentSetting.hideBoardMemberList
  153. div.check-div
  154. a.flex.js-field-has-boardmemberlist(class="{{#if allowsBoardMemberList}}is-checked{{/if}}")
  155. .materialCheckBox(class="{{#if allowsBoardMemberList}}is-checked{{/if}}")
  156. span
  157. i.fa.fa-hourglass-start
  158. | {{_ 'show-board_members-avatar'}}
  159. template(name="boardCardSettingsPopup")
  160. form.board-card-settings
  161. h3 {{_ 'show-on-card'}}
  162. div.check-div
  163. a.flex.js-field-has-receiveddate(class="{{#if allowsReceivedDate}}is-checked{{/if}}")
  164. .materialCheckBox(class="{{#if allowsReceivedDate}}is-checked{{/if}}")
  165. span
  166. i.fa.fa-sign-out
  167. | {{_ 'card-received'}}
  168. div.check-div
  169. a.flex.js-field-has-startdate(class="{{#if allowsStartDate}}is-checked{{/if}}")
  170. .materialCheckBox(class="{{#if allowsStartDate}}is-checked{{/if}}")
  171. span
  172. i.fa.fa-hourglass-start
  173. | {{_ 'card-start'}}
  174. div.check-div
  175. a.flex.js-field-has-duedate(class="{{#if allowsDueDate}}is-checked{{/if}}")
  176. .materialCheckBox(class="{{#if allowsDueDate}}is-checked{{/if}}")
  177. span
  178. i.fa.fa-sign-in
  179. | {{_ 'card-due'}}
  180. div.check-div
  181. a.flex.js-field-has-enddate(class="{{#if allowsEndDate}}is-checked{{/if}}")
  182. .materialCheckBox(class="{{#if allowsEndDate}}is-checked{{/if}}")
  183. span
  184. i.fa.fa-hourglass-end
  185. | {{_ 'card-end'}}
  186. div.check-div
  187. a.flex.js-field-has-members(class="{{#if allowsMembers}}is-checked{{/if}}")
  188. .materialCheckBox(class="{{#if allowsMembers}}is-checked{{/if}}")
  189. span
  190. i.fa.fa-users
  191. | {{_ 'members'}}
  192. div.check-div
  193. a.flex.js-field-has-creator(class="{{#if allowsCreator}}is-checked{{/if}}")
  194. .materialCheckBox(class="{{#if allowsCreator}}is-checked{{/if}}")
  195. span
  196. i.fa.fa-user
  197. | {{_ 'creator'}}
  198. div.check-div
  199. a.flex.js-field-has-assignee(class="{{#if allowsAssignee}}is-checked{{/if}}")
  200. .materialCheckBox(class="{{#if allowsAssignee}}is-checked{{/if}}")
  201. span
  202. i.fa.fa-user
  203. | {{_ 'assignee'}}
  204. div.check-div
  205. a.flex.js-field-has-assigned-by(class="{{#if allowsAssignedBy}}is-checked{{/if}}")
  206. .materialCheckBox(class="{{#if allowsAssignedBy}}is-checked{{/if}}")
  207. span
  208. i.fa.fa-shopping-cart
  209. | {{_ 'assigned-by'}}
  210. div.check-div
  211. a.flex.js-field-has-requested-by(class="{{#if allowsRequestedBy}}is-checked{{/if}}")
  212. .materialCheckBox(class="{{#if allowsRequestedBy}}is-checked{{/if}}")
  213. span
  214. i.fa.fa-user-plus
  215. | {{_ 'requested-by'}}
  216. div.check-div
  217. a.flex.js-field-has-card-sorting-by-number(class="{{#if allowsCardSortingByNumber}}is-checked{{/if}}")
  218. .materialCheckBox(class="{{#if allowsCardSortingByNumber}}is-checked{{/if}}")
  219. span
  220. i.fa.fa-sort
  221. | {{_ 'card-sorting-by-number'}}
  222. div.check-div
  223. a.flex.js-field-has-card-show-lists(class="{{#if allowsShowLists}}is-checked{{/if}}")
  224. .materialCheckBox(class="{{#if allowsShowLists}}is-checked{{/if}}")
  225. span
  226. i.fa.fa-list
  227. | {{_ 'card-show-lists'}}
  228. div.check-div
  229. a.flex.js-field-has-labels(class="{{#if allowsLabels}}is-checked{{/if}}")
  230. .materialCheckBox(class="{{#if allowsLabels}}is-checked{{/if}}")
  231. span
  232. i.fa.fa-tags
  233. | {{_ 'labels'}}
  234. div.check-div
  235. a.flex.js-field-has-card-number(class="{{#if allowsCardNumber}}is-checked{{/if}}")
  236. .materialCheckBox(class="{{#if allowsCardNumber}}is-checked{{/if}}")
  237. span
  238. i.fa.fa-hashtag
  239. | {{_ 'card'}}
  240. | {{_ 'number'}}
  241. div.check-div
  242. a.flex.js-field-has-description-title(class="{{#if allowsDescriptionTitle}}is-checked{{/if}}")
  243. .materialCheckBox(class="{{#if allowsDescriptionTitle}}is-checked{{/if}}")
  244. span
  245. i.fa.fa-align-left
  246. | {{_ 'description'}}
  247. | {{_ 'title'}}
  248. div.check-div
  249. a.flex.js-field-has-description-text(class="{{#if allowsDescriptionText}}is-checked{{/if}}")
  250. .materialCheckBox(class="{{#if allowsDescriptionText}}is-checked{{/if}}")
  251. span
  252. i.fa.fa-align-left
  253. | {{_ 'description'}}
  254. | {{_ 'custom-field-text'}}
  255. div.check-div
  256. a.flex.js-field-has-checklists(class="{{#if allowsChecklists}}is-checked{{/if}}")
  257. .materialCheckBox(class="{{#if allowsChecklists}}is-checked{{/if}}")
  258. span
  259. i.fa.fa-check
  260. | {{_ 'checklists'}}
  261. div.check-div
  262. a.flex.js-field-has-subtasks(class="{{#if allowsSubtasks}}is-checked{{/if}}")
  263. .materialCheckBox(class="{{#if allowsSubtasks}}is-checked{{/if}}")
  264. span
  265. i.fa.fa-sitemap
  266. | {{_ 'subtasks'}}
  267. div.check-div
  268. a.flex.js-field-has-attachments(class="{{#if allowsAttachments}}is-checked{{/if}}")
  269. .materialCheckBox(class="{{#if allowsAttachments}}is-checked{{/if}}")
  270. span
  271. i.fa.fa-paperclip
  272. | {{_ 'attachments'}}
  273. //div.check-div
  274. // a.flex.js-field-has-comments(class="{{#if allowsComments}}is-checked{{/if}}")
  275. // .materialCheckBox(class="{{#if allowsComments}}is-checked{{/if}}")
  276. // span
  277. // i.fa.fa-comment-o
  278. // | {{_ 'comment'}}
  279. //div.check-div
  280. // a.flex.js-field-has-activities(class="{{#if allowsActivities}}is-checked{{/if}}")
  281. // .materialCheckBox(class="{{#if allowsActivities}}is-checked{{/if}}")
  282. // span
  283. // i.fa.fa-history
  284. // | {{_ 'activities'}}
  285. template(name="boardMinicardSettingsPopup")
  286. form.board-minicard-settings
  287. h3 {{_ 'show-on-minicard'}}
  288. div.check-div
  289. a.flex.js-field-has-description-text-on-minicard(class="{{#if allowsDescriptionTextOnMinicard}}is-checked{{/if}}")
  290. .materialCheckBox(class="{{#if allowsDescriptionTextOnMinicard}}is-checked{{/if}}")
  291. span
  292. i.fa.fa-align-left
  293. | {{_ 'description-on-minicard'}}
  294. div.check-div
  295. a.flex.js-field-has-cover-attachment-on-minicard(class="{{#if allowsCoverAttachmentOnMinicard}}is-checked{{/if}}")
  296. .materialCheckBox(class="{{#if allowsCoverAttachmentOnMinicard}}is-checked{{/if}}")
  297. span
  298. i.fa.fa-book
  299. i.fa.fa-picture-o
  300. | {{_ 'cover-attachment-on-minicard'}}
  301. div.check-div
  302. a.flex.js-field-has-badge-attachment-on-minicard(class="{{#if allowsBadgeAttachmentOnMinicard}}is-checked{{/if}}")
  303. .materialCheckBox(class="{{#if allowsBadgeAttachmentOnMinicard}}is-checked{{/if}}")
  304. span
  305. i.fa.fa-paperclip
  306. | {{_ 'badge-attachment-on-minicard'}}
  307. div.check-div
  308. a.flex.js-field-has-card-sorting-by-number-on-minicard(class="{{#if allowsCardSortingByNumberOnMinicard}}is-checked{{/if}}")
  309. .materialCheckBox(class="{{#if allowsCardSortingByNumberOnMinicard}}is-checked{{/if}}")
  310. span
  311. i.fa.fa-sort
  312. | {{_ 'card-sorting-by-number-on-minicard'}}
  313. template(name="boardSubtaskSettingsPopup")
  314. form.board-subtask-settings
  315. h3 {{_ 'show-parent-in-minicard'}}
  316. a#prefix-with-full-path.flex.js-field-show-parent-in-minicard(class="{{#if $eq presentParentTask 'prefix-with-full-path'}}is-checked{{/if}}")
  317. .materialCheckBox(class="{{#if $eq presentParentTask 'prefix-with-full-path'}}is-checked{{/if}}")
  318. span {{_ 'prefix-with-full-path'}}
  319. a#prefix-with-parent.flex.js-field-show-parent-in-minicard(class="{{#if $eq presentParentTask 'prefix-with-parent'}}is-checked{{/if}}")
  320. .materialCheckBox(class="{{#if $eq presentParentTask 'prefix-with-parent'}}is-checked{{/if}}")
  321. span {{_ 'prefix-with-parent'}}
  322. a#subtext-with-full-path.flex.js-field-show-parent-in-minicard(class="{{#if $eq presentParentTask 'subtext-with-full-path'}}is-checked{{/if}}")
  323. .materialCheckBox(class="{{#if $eq presentParentTask 'subtext-with-full-path'}}is-checked{{/if}}")
  324. span {{_ 'subtext-with-full-path'}}
  325. a#subtext-with-parent.flex.js-field-show-parent-in-minicard(class="{{#if $eq presentParentTask 'subtext-with-parent'}}is-checked{{/if}}")
  326. .materialCheckBox(class="{{#if $eq presentParentTask 'subtext-with-parent'}}is-checked{{/if}}")
  327. span {{_ 'subtext-with-parent'}}
  328. a#no-parent.flex.js-field-show-parent-in-minicard(class="{{#if $eq presentParentTask 'no-parent'}}is-checked{{/if}}")
  329. .materialCheckBox(class="{{#if $eq presentParentTask 'no-parent'}}is-checked{{/if}}")
  330. span {{_ 'no-parent'}}
  331. div
  332. hr
  333. div.check-div
  334. a.flex.js-field-has-subtasks(class="{{#if allowsSubtasks}}is-checked{{/if}}")
  335. .materialCheckBox(class="{{#if allowsSubtasks}}is-checked{{/if}}")
  336. span {{_ 'show-subtasks-field'}}
  337. label
  338. | {{_ 'deposit-subtasks-board'}}
  339. select.js-field-deposit-board(disabled="{{#unless allowsSubtasks}}disabled{{/unless}}")
  340. each boards
  341. if isBoardSelected
  342. option(value=_id selected="selected") {{title}}
  343. else
  344. option(value=_id) {{title}}
  345. if isNullBoardSelected
  346. option(value='null' selected="selected") {{_ 'custom-field-dropdown-none'}}
  347. else
  348. option(value='null') {{_ 'custom-field-dropdown-none'}}
  349. div
  350. hr
  351. label
  352. | {{_ 'deposit-subtasks-list'}}
  353. select.js-field-deposit-list(disabled="{{#unless hasLists}}disabled{{/unless}}")
  354. each lists
  355. if isListSelected
  356. option(value=_id selected="selected") {{title}}
  357. else
  358. option(value=_id) {{title}}
  359. template(name="chooseBoardSource")
  360. ul.pop-over-list
  361. li
  362. a(href="{{pathFor '/import/trello'}}") {{_ 'from-trello'}}
  363. li
  364. a(href="{{pathFor '/import/wekan'}}") {{_ 'from-wekan'}}
  365. li
  366. a(href="{{pathFor '/import/csv'}}") {{_ 'from-csv'}}
  367. template(name="archiveBoardPopup")
  368. p {{_ 'close-board-pop'}}
  369. button.js-confirm.negate.full(type="submit")
  370. i.fa.fa-archive
  371. | {{_ 'archive'}}
  372. template(name="outgoingWebhooksPopup")
  373. each integrations
  374. form.integration-form
  375. a.flex
  376. span {{_ 'disable-webhook'}}
  377. b  
  378. .materialCheckBox(class="{{#unless enabled}}is-checked{{/unless}}")
  379. input.js-outgoing-webhooks-title(placeholder="{{_ 'webhook-title'}}" type="text" name="title" value=title)
  380. input.js-outgoing-webhooks-url(type="text" name="url" value=url)
  381. input.js-outgoing-webhooks-token(placeholder="{{_ 'webhook-token' }}" type="text" value=token name="token")
  382. select.js-outgoing-webhooks-type(name="type")
  383. each _type in types
  384. if($eq _type this.type)
  385. option(value=_type selected="selected") {{_ _type}}
  386. else
  387. option(value=_type) {{_ _type}}
  388. input(type="hidden" value=this.type name="_type")
  389. input(type="hidden" value=_id name="id")
  390. input.primary.wide(type="submit" value="{{_ 'save'}}")
  391. form.integration-form
  392. input.js-outgoing-webhooks-title(placeholder="{{_ 'webhook-title'}}" type="text" name="title")
  393. input.js-outgoing-webhooks-url(placeholder="{{_ 'URL' }}" type="text" name="url")
  394. input.js-outgoing-webhooks-token(placeholder="{{_ 'webhook-token' }}" type="text" name="token")
  395. select.js-outgoing-webhooks-type(name="type")
  396. each _type in types
  397. option(value=_type) {{_ _type}}
  398. input.primary.wide(type="submit" value="{{_ 'create'}}")
  399. template(name="boardMenuPopup")
  400. ul.pop-over-list
  401. if currentUser.isBoardAdmin
  402. li
  403. a.js-open-rules-view(title="{{_ 'rules'}}")
  404. i.fa.fa-magic
  405. | {{_ 'rules'}}
  406. if currentUser.isBoardAdmin
  407. li
  408. a.js-custom-fields
  409. i.fa.fa-list-alt
  410. | {{_ 'custom-fields'}}
  411. li
  412. a.js-open-archives
  413. i.fa.fa-archive
  414. | {{_ 'archived-items'}}
  415. if currentUser.isBoardAdmin
  416. li
  417. a.js-change-board-color
  418. i.fa.fa-paint-brush
  419. | {{_ 'board-change-color'}}
  420. li
  421. a.js-change-background-image
  422. i.fa.fa-picture-o
  423. | {{_ 'board-change-background-image'}}
  424. if currentUser.isBoardAdmin
  425. unless currentSetting.hideBoardMemberList
  426. unless currentSetting.hideCardCounterList
  427. li
  428. a.js-board-info-on-my-boards(title="{{_ 'board-info-on-my-boards'}}")
  429. i.fa.fa-id-card-o
  430. | {{_ 'board-info-on-my-boards'}}
  431. hr
  432. ul.pop-over-list
  433. if withApi
  434. li
  435. a.js-export-board
  436. i.fa.fa-share-alt
  437. | {{_ 'export-board'}}
  438. if currentUser.isBoardAdmin
  439. li
  440. a.js-outgoing-webhooks
  441. i.fa.fa-globe
  442. | {{_ 'outgoing-webhooks'}}
  443. li
  444. a.js-card-settings
  445. i.fa.fa-id-card-o
  446. | {{_ 'card-settings'}}
  447. li
  448. a.js-minicard-settings
  449. i.fa.fa-id-card-o
  450. | {{_ 'minicard-settings'}}
  451. li
  452. a.js-subtask-settings
  453. i.fa.fa-sitemap
  454. | {{_ 'subtask-settings'}}
  455. unless currentBoard.isTemplatesBoard
  456. if currentUser.isBoardAdmin
  457. hr
  458. ul.pop-over-list
  459. li
  460. a.js-archive-board
  461. i.fa.fa-arrow-right
  462. i.fa.fa-archive
  463. | {{_ 'archive-board'}}
  464. template(name="exportBoard")
  465. ul.pop-over-list
  466. li
  467. a.download-json-link(href="{{exportUrl}}", download="{{exportJsonFilename}}")
  468. i.fa.fa-share-alt
  469. | {{_ 'export-board-json'}}
  470. li
  471. a(href="{{exportUrlExcel}}", download="{{exportFilenameExcel}}")
  472. i.fa.fa-share-alt
  473. | {{_ 'export-board-excel'}}
  474. li
  475. a(href="{{exportCsvUrl}}", download="{{exportCsvFilename}}")
  476. i.fa.fa-share-alt
  477. | {{_ 'export-board-csv'}} ,
  478. li
  479. a(href="{{exportScsvUrl}}", download="{{exportCsvFilename}}")
  480. i.fa.fa-share-alt
  481. | {{_ 'export-board-csv'}} ;
  482. li
  483. a(href="{{exportTsvUrl}}", download="{{exportTsvFilename}}")
  484. i.fa.fa-share-alt
  485. | {{_ 'export-board-tsv'}}
  486. li
  487. a.html-export-board
  488. i.fa.fa-archive
  489. | {{_ 'export-board-html'}}
  490. template(name="labelsWidget")
  491. .board-widget.board-widget-labels
  492. h3
  493. i.fa.fa-tags
  494. | {{_ 'labels'}}
  495. .board-widget-content
  496. each currentBoard.labels
  497. a.card-label(class="card-label-{{color}}"
  498. class="{{#if currentUser.isNotCommentOnly}}{{#if currentUser.isNotWorker}}js-label{{/if}}{{/if}}")
  499. span.card-label-name
  500. +viewer
  501. = name
  502. if currentUser.isBoardAdmin
  503. a.card-label.add-label.js-add-label(title="{{_ 'label-create'}}")
  504. i.fa.fa-plus
  505. template(name="memberPopup")
  506. .board-member-menu
  507. .miniprofile-header
  508. +userAvatar(userId=user._id showEdit=true)
  509. .info
  510. h3
  511. .js-profile= user.profile.fullname
  512. p.quiet @#{user.username}
  513. if isInvited
  514. p
  515. i.fa.fa-exclamation-circle
  516. | {{_ 'not-accepted-yet'}}
  517. ul.pop-over-list
  518. li
  519. a.js-filter-member {{_ 'filter-cards'}}
  520. if currentUser.isBoardAdmin
  521. li
  522. a.js-change-role
  523. | {{_ 'change-permissions'}}
  524. span.quiet (#{memberType})
  525. unless currentUser.isWorker
  526. li
  527. if $eq currentUser._id userId
  528. a.js-leave-member {{_ 'leave-board'}}
  529. else if currentUser.isBoardAdmin
  530. a.js-remove-member {{_ 'remove-from-board'}}
  531. template(name="removeMemberPopup")
  532. p {{_ 'remove-member-pop' name=user.profile.fullname username=user.username boardTitle=board.title}}
  533. button.js-confirm.negate.full(type="submit") {{_ 'remove-member'}}
  534. template(name="leaveBoardPopup")
  535. p {{_ 'leave-board-pop' boardTitle=board.title}}
  536. button.js-confirm.negate.full(type="submit") {{_ 'leave-board'}}
  537. template(name="addBoardOrgPopup")
  538. select.js-boardOrgs#jsBoardOrgs
  539. option(value="-1") {{_ 'organizations'}} :
  540. each value in orgsDatas
  541. option(value="{{value._id}}") {{value.orgDisplayName}}
  542. template(name="removeBoardOrgPopup")
  543. form
  544. input.hide#hideOrgId(type="text" value=org._id)
  545. label
  546. | {{_ 'remove-organization-from-board'}}
  547. br
  548. hr
  549. div.buttonsContainer
  550. input.primary.wide.leaveBoardBtn#leaveBoardBtn(type="submit" value="{{_ 'confirm-btn'}}")
  551. input.primary.wide.cancelLeaveBoardBtn#cancelLeaveBoardBtn(type="submit" value="{{_ 'cancel'}}")
  552. template(name="addBoardTeamPopup")
  553. select.js-boardTeams#jsBoardTeams
  554. option(value="-1") {{_ 'teams'}} :
  555. each value in teamsDatas
  556. option(value="{{value._id}}") {{_ value.teamDisplayName}}
  557. template(name="removeBoardTeamPopup")
  558. form
  559. input.hide#hideTeamId(type="text" value=team._id)
  560. label
  561. | {{_ 'remove-team-from-table'}}
  562. br
  563. hr
  564. div.buttonsContainer
  565. input.primary.wide.leaveBoardBtn#leaveBoardTeamBtn(type="submit" value="{{_ 'confirm-btn'}}")
  566. input.primary.wide.cancelLeaveBoardBtn#cancelLeaveBoardTeamBtn(type="submit" value="{{_ 'cancel'}}")
  567. template(name="addMemberPopup")
  568. .js-search-member
  569. +EasySearch.Input(index=searchIndex)
  570. if loading.get
  571. +spinner
  572. else if error.get
  573. .warning {{_ error.get}}
  574. else
  575. ul.pop-over-list
  576. +EasySearch.Each(index=searchIndex)
  577. li.item.js-member-item(class="{{#if isBoardMember}}disabled{{/if}}")
  578. a.name.js-select-member(title="{{profile.fullname}} ({{username}})")
  579. +userAvatar(userId=__originalId)
  580. span.full-name
  581. = profile.fullname
  582. | (<span class="username">{{username}}</span>)
  583. if isBoardMember
  584. .quiet ({{_ 'joined'}})
  585. +EasySearch.IfSearching(index=searchIndex)
  586. +spinner
  587. +EasySearch.IfNoResults(index=searchIndex)
  588. .manage-member-section
  589. p.quiet {{_ 'no-results'}}
  590. button.js-email-invite.primary.full {{_ 'email-invite'}}
  591. template(name="changePermissionsPopup")
  592. ul.pop-over-list
  593. li
  594. a(class="{{#if isLastAdmin}}disabled{{else}}js-set-admin{{/if}}")
  595. | {{_ 'admin'}}
  596. if isAdmin
  597. i.fa.fa-check
  598. span.sub-name {{_ 'admin-desc'}}
  599. li
  600. a(class="{{#if isLastAdmin}}disabled{{else}}js-set-normal{{/if}}")
  601. | {{_ 'normal'}}
  602. if isNormal
  603. i.fa.fa-check
  604. span.sub-name {{_ 'normal-desc'}}
  605. li
  606. a(class="{{#if isLastAdmin}}disabled{{else}}js-set-no-comments{{/if}}")
  607. | {{_ 'no-comments'}}
  608. if isNoComments
  609. i.fa.fa-check
  610. span.sub-name {{_ 'no-comments-desc'}}
  611. li
  612. a(class="{{#if isLastAdmin}}disabled{{else}}js-set-comment-only{{/if}}")
  613. | {{_ 'comment-only'}}
  614. if isCommentOnly
  615. i.fa.fa-check
  616. span.sub-name {{_ 'comment-only-desc'}}
  617. li
  618. a(class="{{#if isLastAdmin}}disabled{{else}}js-set-worker{{/if}}")
  619. | {{_ 'worker'}}
  620. if isWorker
  621. i.fa.fa-check
  622. span.sub-name {{_ 'worker-desc'}}
  623. if isLastAdmin
  624. hr
  625. p.quiet.bottom {{_ 'last-admin-desc'}}