sidebar.jade 26 KB

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