sidebar.jade 24 KB

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