sidebar.jade 25 KB

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