sidebar.jade 25 KB

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