sidebar.jade 31 KB

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