sidebar.jade 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356
  1. template(name="sidebar")
  2. .board-sidebar.sidebar(class="{{#if isOpen}}is-open{{/if}}")
  3. //a.sidebar-tongue.js-toggle-sidebar(
  4. // class="{{#if isTongueHidden}}is-hidden{{/if}}",
  5. // title="{{showTongueTitle}}")
  6. // i.fa.fa-navicon
  7. .sidebar-shadow
  8. .sidebar-content.sidebar-shortcuts
  9. a.board-header-btn.js-shortcuts
  10. i.fa.fa-keyboard-o
  11. span {{_ 'keyboard-shortcuts' }}
  12. .sidebar-content.js-board-sidebar-content.js-perfect-scrollbar
  13. //a.hide-btn.js-hide-sidebar
  14. // i.fa.fa-navicon
  15. unless isDefaultView
  16. h2
  17. a.fa.fa-chevron-left.js-back-home
  18. = getViewTitle
  19. +Template.dynamic(template=getViewTemplate)
  20. template(name='homeSidebar')
  21. +membersWidget
  22. hr
  23. +labelsWidget
  24. ul#cards.label-text-hidden
  25. a.flex.js-toggle-minicard-label-text
  26. span {{_ 'hide-minicard-label-text'}}
  27. b  
  28. .materialCheckBox(class="{{#if hiddenMinicardLabelText}}is-checked{{/if}}")
  29. hr
  30. unless currentUser.isNoComments
  31. h3
  32. i.fa.fa-comments-o
  33. | {{_ 'activities'}}
  34. +activities(mode="board")
  35. template(name="membersWidget")
  36. .board-widget.board-widget-members
  37. h3
  38. i.fa.fa-users
  39. | {{_ 'members'}}
  40. unless currentUser.isCommentOnly
  41. unless currentUser.isWorker
  42. a.board-header-btn.js-open-board-menu(title="{{_ 'boardMenuPopup-title'}}").right
  43. i.board-header-btn-icon.fa.fa-cog
  44. .board-widget-content
  45. each currentBoard.activeMembers
  46. +userAvatar(userId=this.userId showStatus=true)
  47. if isSandstorm
  48. if currentUser.isBoardMember
  49. a.member.add-member.sandstorm-powerbox-request-identity
  50. i.fa.fa-plus
  51. else if currentUser.isBoardAdmin
  52. a.member.add-member.js-manage-board-members
  53. i.fa.fa-plus
  54. .clearfix
  55. if isInvited
  56. hr
  57. p
  58. i.fa.fa-exclamation-circle
  59. | {{_ 'just-invited'}}
  60. button.js-member-invite-accept.primary {{_ 'accept'}}
  61. button.js-member-invite-decline {{_ 'decline'}}
  62. template(name="boardChangeColorPopup")
  63. .board-backgrounds-list.clearfix
  64. each backgroundColors
  65. .board-background-select.js-select-background
  66. span.background-box(class="board-color-{{this}}")
  67. span {{this}}
  68. if isSelected
  69. i.fa.fa-check
  70. template(name="boardSubtaskSettingsPopup")
  71. form.board-subtask-settings
  72. h3 {{_ 'show-parent-in-minicard'}}
  73. a#prefix-with-full-path.flex.js-field-show-parent-in-minicard(class="{{#if $eq presentParentTask 'prefix-with-full-path'}}is-checked{{/if}}")
  74. .materialCheckBox(class="{{#if $eq presentParentTask 'prefix-with-full-path'}}is-checked{{/if}}")
  75. span {{_ 'prefix-with-full-path'}}
  76. a#prefix-with-parent.flex.js-field-show-parent-in-minicard(class="{{#if $eq presentParentTask 'prefix-with-parent'}}is-checked{{/if}}")
  77. .materialCheckBox(class="{{#if $eq presentParentTask 'prefix-with-parent'}}is-checked{{/if}}")
  78. span {{_ 'prefix-with-parent'}}
  79. a#subtext-with-full-path.flex.js-field-show-parent-in-minicard(class="{{#if $eq presentParentTask 'subtext-with-full-path'}}is-checked{{/if}}")
  80. .materialCheckBox(class="{{#if $eq presentParentTask 'subtext-with-full-path'}}is-checked{{/if}}")
  81. span {{_ 'subtext-with-full-path'}}
  82. a#subtext-with-parent.flex.js-field-show-parent-in-minicard(class="{{#if $eq presentParentTask 'subtext-with-parent'}}is-checked{{/if}}")
  83. .materialCheckBox(class="{{#if $eq presentParentTask 'subtext-with-parent'}}is-checked{{/if}}")
  84. span {{_ 'subtext-with-parent'}}
  85. a#no-parent.flex.js-field-show-parent-in-minicard(class="{{#if $eq presentParentTask 'no-parent'}}is-checked{{/if}}")
  86. .materialCheckBox(class="{{#if $eq presentParentTask 'no-parent'}}is-checked{{/if}}")
  87. span {{_ 'no-parent'}}
  88. div
  89. hr
  90. div.check-div
  91. a.flex.js-field-has-subtasks(class="{{#if allowsSubtasks}}is-checked{{/if}}")
  92. .materialCheckBox(class="{{#if allowsSubtasks}}is-checked{{/if}}")
  93. span {{_ 'show-subtasks-field'}}
  94. label
  95. | {{_ 'deposit-subtasks-board'}}
  96. select.js-field-deposit-board(disabled="{{#unless allowsSubtasks}}disabled{{/unless}}")
  97. each boards
  98. if isBoardSelected
  99. option(value=_id selected="selected") {{title}}
  100. else
  101. option(value=_id) {{title}}
  102. if isNullBoardSelected
  103. option(value='null' selected="selected") {{_ 'custom-field-dropdown-none'}}
  104. else
  105. option(value='null') {{_ 'custom-field-dropdown-none'}}
  106. div
  107. hr
  108. label
  109. | {{_ 'deposit-subtasks-list'}}
  110. select.js-field-deposit-list(disabled="{{#unless hasLists}}disabled{{/unless}}")
  111. each lists
  112. if isListSelected
  113. option(value=_id selected="selected") {{title}}
  114. else
  115. option(value=_id) {{title}}
  116. template(name="chooseBoardSource")
  117. ul.pop-over-list
  118. li
  119. a(href="{{pathFor '/import/trello'}}") {{_ 'from-trello'}}
  120. li
  121. a(href="{{pathFor '/import/wekan'}}") {{_ 'from-wekan'}}
  122. template(name="archiveBoardPopup")
  123. p {{_ 'close-board-pop'}}
  124. button.js-confirm.negate.full(type="submit")
  125. i.fa.fa-archive
  126. | {{_ 'archive'}}
  127. template(name="outgoingWebhooksPopup")
  128. each integrations
  129. form.integration-form
  130. a.flex
  131. span {{_ 'disable-webhook'}}
  132. b  
  133. .materialCheckBox(class="{{#unless enabled}}is-checked{{/unless}}")
  134. input.js-outgoing-webhooks-title(placeholder="{{_ 'webhook-title'}}" type="text" name="title" value=title)
  135. input.js-outgoing-webhooks-url(type="text" name="url" value=url autofocus)
  136. input.js-outgoing-webhooks-token(placeholder="{{_ 'webhook-token' }}" type="text" value=token name="token")
  137. select.js-outgoing-webhooks-type(name="type")
  138. each _type in types
  139. if($eq _type this.type)
  140. option(value=_type selected="selected") {{_ _type}}
  141. else
  142. option(value=_type) {{_ _type}}
  143. input(type="hidden" value=this.type name="_type")
  144. input(type="hidden" value=_id name="id")
  145. input.primary.wide(type="submit" value="{{_ 'save'}}")
  146. form.integration-form
  147. input.js-outgoing-webhooks-title(placeholder="{{_ 'webhook-title'}}" type="text" name="title" autofocus)
  148. input.js-outgoing-webhooks-url(placeholder="{{_ 'URL' }}" type="text" name="url")
  149. input.js-outgoing-webhooks-token(placeholder="{{_ 'webhook-token' }}" type="text" name="token")
  150. select.js-outgoing-webhooks-type(name="type")
  151. each _type in types
  152. option(value=_type) {{_ _type}}
  153. input.primary.wide(type="submit" value="{{_ 'create'}}")
  154. template(name="boardMenuPopup")
  155. ul.pop-over-list
  156. li: a.js-custom-fields {{_ 'custom-fields'}}
  157. li
  158. a.js-open-archives
  159. i.fa.fa-archive
  160. | {{_ 'archived-items'}}
  161. if currentUser.isBoardAdmin
  162. li
  163. a.js-change-board-color
  164. i.fa.fa-paint-brush
  165. | {{_ 'board-change-color'}}
  166. //-
  167. XXX Language should be handled by sandstorm, but for now display a
  168. language selection link in the board menu. This link is normally present
  169. in the header bar that is not displayed on sandstorm.
  170. if isSandstorm
  171. li
  172. a.js-change-language
  173. i.fa.fa-flag
  174. | {{_ 'language'}}
  175. unless isSandstorm
  176. if currentUser.isBoardAdmin
  177. hr
  178. ul.pop-over-list
  179. li
  180. a(href="{{exportUrl}}", download="{{exportFilename}}")
  181. i.fa.fa-share-alt
  182. | {{_ 'export-board'}}
  183. li
  184. a.js-outgoing-webhooks
  185. i.fa.fa-globe
  186. | {{_ 'outgoing-webhooks'}}
  187. li
  188. a.js-subtask-settings
  189. i.fa.fa-sitemap
  190. | {{_ 'subtask-settings'}}
  191. unless currentBoard.isTemplatesBoard
  192. hr
  193. ul.pop-over-list
  194. li
  195. a.js-archive-board
  196. i.fa.fa-arrow-right
  197. i.fa.fa-archive
  198. | {{_ 'archive-board'}}
  199. if isSandstorm
  200. hr
  201. ul.pop-over-list
  202. li
  203. a(href="{{exportUrl}}", download="{{exportFilename}}")
  204. i.fa.fa-share-alt
  205. i.fa.fa-sign-out
  206. | {{_ 'export-board'}}
  207. li
  208. a.js-import-board
  209. i.fa.fa-share-alt
  210. i.fa.fa-sign-in
  211. | {{_ 'import-board-c'}}
  212. li
  213. a.js-archive-board
  214. i.fa.fa-arrow-right
  215. i.fa.fa-archive
  216. | {{_ 'archive-board'}}
  217. li
  218. a.js-outgoing-webhooks
  219. i.fa.fa-globe
  220. | {{_ 'outgoing-webhooks'}}
  221. hr
  222. ul.pop-over-list
  223. li
  224. a.js-subtask-settings
  225. i.fa.fa-sitemap
  226. | {{_ 'subtask-settings'}}
  227. template(name="labelsWidget")
  228. .board-widget.board-widget-labels
  229. h3
  230. i.fa.fa-tags
  231. | {{_ 'labels'}}
  232. .board-widget-content
  233. each currentBoard.labels
  234. a.card-label(class="card-label-{{color}}"
  235. class="{{#if currentUser.isNotCommentOnly}}{{#if currentUser.isNotWorker}}js-label{{/if}}{{/if}}")
  236. span.card-label-name
  237. +viewer
  238. = name
  239. if currentUser.isBoardAdmin
  240. a.card-label.add-label.js-add-label
  241. i.fa.fa-plus
  242. template(name="memberPopup")
  243. .board-member-menu
  244. .miniprofile-header
  245. +userAvatar(userId=user._id showEdit=true)
  246. .info
  247. h3
  248. .js-profile= user.profile.fullname
  249. p.quiet @#{user.username}
  250. if isInvited
  251. p
  252. i.fa.fa-exclamation-circle
  253. | {{_ 'not-accepted-yet'}}
  254. ul.pop-over-list
  255. li
  256. a.js-filter-member {{_ 'filter-cards'}}
  257. if currentUser.isBoardAdmin
  258. li
  259. a.js-change-role
  260. | {{_ 'change-permissions'}}
  261. span.quiet (#{memberType})
  262. unless currentUser.isWorker
  263. li
  264. if $eq currentUser._id userId
  265. a.js-leave-member {{_ 'leave-board'}}
  266. else if currentUser.isBoardAdmin
  267. a.js-remove-member {{_ 'remove-from-board'}}
  268. template(name="removeMemberPopup")
  269. p {{_ 'remove-member-pop' name=user.profile.fullname username=user.username boardTitle=board.title}}
  270. button.js-confirm.negate.full(type="submit") {{_ 'remove-member'}}
  271. template(name="leaveBoardPopup")
  272. p {{_ 'leave-board-pop' boardTitle=board.title}}
  273. button.js-confirm.negate.full(type="submit") {{_ 'leave-board'}}
  274. template(name="addMemberPopup")
  275. .js-search-member
  276. +esInput(index="users")
  277. if loading.get
  278. +spinner
  279. else if error.get
  280. .warning {{_ error.get}}
  281. else
  282. ul.pop-over-list
  283. +esEach(index="users")
  284. li.item.js-member-item(class="{{#if isBoardMember}}disabled{{/if}}")
  285. a.name.js-select-member(title="{{profile.fullname}} ({{username}})")
  286. +userAvatar(userId=_id esSearch=true)
  287. span.full-name
  288. = profile.fullname
  289. | (<span class="username">{{username}}</span>)
  290. if isBoardMember
  291. .quiet ({{_ 'joined'}})
  292. +ifEsIsSearching(index='users')
  293. +spinner
  294. +ifEsHasNoResults(index="users")
  295. .manage-member-section
  296. p.quiet {{_ 'no-results'}}
  297. button.js-email-invite.primary.full {{_ 'email-invite'}}
  298. template(name="changePermissionsPopup")
  299. ul.pop-over-list
  300. li
  301. a(class="{{#if isLastAdmin}}disabled{{else}}js-set-admin{{/if}}")
  302. | {{_ 'admin'}}
  303. if isAdmin
  304. i.fa.fa-check
  305. span.sub-name {{_ 'admin-desc'}}
  306. li
  307. a(class="{{#if isLastAdmin}}disabled{{else}}js-set-normal{{/if}}")
  308. | {{_ 'normal'}}
  309. if isNormal
  310. i.fa.fa-check
  311. span.sub-name {{_ 'normal-desc'}}
  312. li
  313. a(class="{{#if isLastAdmin}}disabled{{else}}js-set-no-comments{{/if}}")
  314. | {{_ 'no-comments'}}
  315. if isNoComments
  316. i.fa.fa-check
  317. span.sub-name {{_ 'no-comments-desc'}}
  318. li
  319. a(class="{{#if isLastAdmin}}disabled{{else}}js-set-comment-only{{/if}}")
  320. | {{_ 'comment-only'}}
  321. if isCommentOnly
  322. i.fa.fa-check
  323. span.sub-name {{_ 'comment-only-desc'}}
  324. li
  325. a(class="{{#if isLastAdmin}}disabled{{else}}js-set-worker{{/if}}")
  326. | {{_ 'worker'}}
  327. if isWorker
  328. i.fa.fa-check
  329. span.sub-name {{_ 'worker-desc'}}
  330. if isLastAdmin
  331. hr
  332. p.quiet.bottom {{_ 'last-admin-desc'}}