sidebar.jade 10 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298
  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-user
  39. | {{_ 'members'}}
  40. unless currentUser.isCommentOnly
  41. a.board-header-btn.js-open-board-menu(title="{{_ 'boardMenuPopup-title'}}").right
  42. i.board-header-btn-icon.fa.fa-cog
  43. .board-widget-content
  44. each currentBoard.activeMembers
  45. +userAvatar(userId=this.userId showStatus=true)
  46. if isSandstorm
  47. if currentUser.isBoardMember
  48. a.member.add-member.sandstorm-powerbox-request-identity
  49. i.fa.fa-plus
  50. else if currentUser.isBoardAdmin
  51. a.member.add-member.js-manage-board-members
  52. i.fa.fa-plus
  53. .clearfix
  54. if isInvited
  55. hr
  56. p
  57. i.fa.fa-exclamation-circle
  58. | {{_ 'just-invited'}}
  59. button.js-member-invite-accept.primary {{_ 'accept'}}
  60. button.js-member-invite-decline {{_ 'decline'}}
  61. template(name="boardChangeColorPopup")
  62. .board-backgrounds-list.clearfix
  63. each backgroundColors
  64. .board-background-select.js-select-background
  65. span.background-box(class="board-color-{{this}}")
  66. span {{this}}
  67. if isSelected
  68. i.fa.fa-check
  69. template(name="boardSubtaskSettingsPopup")
  70. form.board-subtask-settings
  71. h3 {{_ 'show-parent-in-minicard'}}
  72. a#prefix-with-full-path.flex.js-field-show-parent-in-minicard(class="{{#if $eq presentParentTask 'prefix-with-full-path'}}is-checked{{/if}}")
  73. .materialCheckBox(class="{{#if $eq presentParentTask 'prefix-with-full-path'}}is-checked{{/if}}")
  74. span {{_ 'prefix-with-full-path'}}
  75. a#prefix-with-parent.flex.js-field-show-parent-in-minicard(class="{{#if $eq presentParentTask 'prefix-with-parent'}}is-checked{{/if}}")
  76. .materialCheckBox(class="{{#if $eq presentParentTask 'prefix-with-parent'}}is-checked{{/if}}")
  77. span {{_ 'prefix-with-parent'}}
  78. a#subtext-with-full-path.flex.js-field-show-parent-in-minicard(class="{{#if $eq presentParentTask 'subtext-with-full-path'}}is-checked{{/if}}")
  79. .materialCheckBox(class="{{#if $eq presentParentTask 'subtext-with-full-path'}}is-checked{{/if}}")
  80. span {{_ 'subtext-with-full-path'}}
  81. a#subtext-with-parent.flex.js-field-show-parent-in-minicard(class="{{#if $eq presentParentTask 'subtext-with-parent'}}is-checked{{/if}}")
  82. .materialCheckBox(class="{{#if $eq presentParentTask 'subtext-with-parent'}}is-checked{{/if}}")
  83. span {{_ 'subtext-with-parent'}}
  84. a#no-parent.flex.js-field-show-parent-in-minicard(class="{{#if $eq presentParentTask 'no-parent'}}is-checked{{/if}}")
  85. .materialCheckBox(class="{{#if $eq presentParentTask 'no-parent'}}is-checked{{/if}}")
  86. span {{_ 'no-parent'}}
  87. div
  88. hr
  89. div.check-div
  90. a.flex.js-field-has-subtasks(class="{{#if allowsSubtasks}}is-checked{{/if}}")
  91. .materialCheckBox(class="{{#if allowsSubtasks}}is-checked{{/if}}")
  92. span {{_ 'show-subtasks-field'}}
  93. label
  94. | {{_ 'deposit-subtasks-board'}}
  95. select.js-field-deposit-board(disabled="{{#unless allowsSubtasks}}disabled{{/unless}}")
  96. each boards
  97. if isBoardSelected
  98. option(value=_id selected="selected") {{title}}
  99. else
  100. option(value=_id) {{title}}
  101. if isNullBoardSelected
  102. option(value='null' selected="selected") {{_ 'custom-field-dropdown-none'}}
  103. else
  104. option(value='null') {{_ 'custom-field-dropdown-none'}}
  105. div
  106. hr
  107. label
  108. | {{_ 'deposit-subtasks-list'}}
  109. select.js-field-deposit-list(disabled="{{#unless hasLists}}disabled{{/unless}}")
  110. each lists
  111. if isListSelected
  112. option(value=_id selected="selected") {{title}}
  113. else
  114. option(value=_id) {{title}}
  115. template(name="chooseBoardSource")
  116. ul.pop-over-list
  117. li
  118. a(href="{{pathFor '/import/trello'}}") {{_ 'from-trello'}}
  119. li
  120. a(href="{{pathFor '/import/wekan'}}") {{_ 'from-wekan'}}
  121. template(name="archiveBoardPopup")
  122. p {{_ 'close-board-pop'}}
  123. button.js-confirm.negate.full(type="submit") {{_ 'archive'}}
  124. template(name="outgoingWebhooksPopup")
  125. each integrations
  126. form.integration-form
  127. if title
  128. h4 {{title}}
  129. else
  130. h4 {{_ 'no-name'}}
  131. label
  132. | URL
  133. input.js-outgoing-webhooks-url(type="text" name="url" value=url)
  134. input(type="hidden" value=_id name="id")
  135. input.primary.wide(type="submit" value="{{_ 'save'}}")
  136. form.integration-form
  137. h4
  138. | {{_ 'new-outgoing-webhook'}}
  139. label
  140. | URL
  141. input.js-outgoing-webhooks-url(type="text" name="url" autofocus)
  142. input.primary.wide(type="submit" value="{{_ 'save'}}")
  143. template(name="boardMenuPopup")
  144. ul.pop-over-list
  145. li: a.js-custom-fields {{_ 'custom-fields'}}
  146. li: a.js-open-archives {{_ 'archived-items'}}
  147. if currentUser.isBoardAdmin
  148. li: a.js-change-board-color {{_ 'board-change-color'}}
  149. //-
  150. XXX Language should be handled by sandstorm, but for now display a
  151. language selection link in the board menu. This link is normally present
  152. in the header bar that is not displayed on sandstorm.
  153. if isSandstorm
  154. li: a.js-change-language {{_ 'language'}}
  155. unless isSandstorm
  156. if currentUser.isBoardAdmin
  157. hr
  158. ul.pop-over-list
  159. li: a(href="{{exportUrl}}", download="{{exportFilename}}") {{_ 'export-board'}}
  160. unless currentBoard.isTemplatesBoard
  161. li: a.js-archive-board {{_ 'archive-board'}}
  162. li: a.js-outgoing-webhooks {{_ 'outgoing-webhooks'}}
  163. hr
  164. ul.pop-over-list
  165. li: a.js-subtask-settings {{_ 'subtask-settings'}}
  166. if isSandstorm
  167. hr
  168. ul.pop-over-list
  169. li: a(href="{{exportUrl}}", download="{{exportFilename}}") {{_ 'export-board'}}
  170. li: a.js-import-board {{_ 'import-board-c'}}
  171. li: a.js-archive-board {{_ 'archive-board'}}
  172. li: a.js-outgoing-webhooks {{_ 'outgoing-webhooks'}}
  173. hr
  174. ul.pop-over-list
  175. li: a.js-subtask-settings {{_ 'subtask-settings'}}
  176. template(name="labelsWidget")
  177. .board-widget.board-widget-labels
  178. h3
  179. i.fa.fa-tags
  180. | {{_ 'labels'}}
  181. .board-widget-content
  182. each currentBoard.labels
  183. a.card-label(class="card-label-{{color}}"
  184. class="{{#if currentUser.isNotCommentOnly}}js-label{{/if}}")
  185. span.card-label-name
  186. +viewer
  187. = name
  188. if currentUser.isBoardAdmin
  189. a.card-label.add-label.js-add-label
  190. i.fa.fa-plus
  191. template(name="memberPopup")
  192. .board-member-menu
  193. .miniprofile-header
  194. +userAvatar(userId=user._id showEdit=true)
  195. .info
  196. h3
  197. .js-profile= user.profile.fullname
  198. p.quiet @#{user.username}
  199. if isInvited
  200. p
  201. i.fa.fa-exclamation-circle
  202. | {{_ 'not-accepted-yet'}}
  203. ul.pop-over-list
  204. li
  205. a.js-filter-member {{_ 'filter-cards'}}
  206. if currentUser.isBoardAdmin
  207. li
  208. a.js-change-role
  209. | {{_ 'change-permissions'}}
  210. span.quiet (#{memberType})
  211. li
  212. if $eq currentUser._id userId
  213. a.js-leave-member {{_ 'leave-board'}}
  214. else if currentUser.isBoardAdmin
  215. a.js-remove-member {{_ 'remove-from-board'}}
  216. template(name="removeMemberPopup")
  217. p {{_ 'remove-member-pop' name=user.profile.fullname username=user.username boardTitle=board.title}}
  218. button.js-confirm.negate.full(type="submit") {{_ 'remove-member'}}
  219. template(name="leaveBoardPopup")
  220. p {{_ 'leave-board-pop' boardTitle=board.title}}
  221. button.js-confirm.negate.full(type="submit") {{_ 'leave-board'}}
  222. template(name="addMemberPopup")
  223. .js-search-member
  224. +esInput(index="users")
  225. if loading.get
  226. +spinner
  227. else if error.get
  228. .warning {{_ error.get}}
  229. else
  230. ul.pop-over-list
  231. +esEach(index="users")
  232. li.item.js-member-item(class="{{#if isBoardMember}}disabled{{/if}}")
  233. a.name.js-select-member(title="{{profile.fullname}} ({{username}})")
  234. +userAvatar(userId=_id esSearch=true)
  235. span.full-name
  236. = profile.fullname
  237. | (<span class="username">{{username}}</span>)
  238. if isBoardMember
  239. .quiet ({{_ 'joined'}})
  240. +ifEsIsSearching(index='users')
  241. +spinner
  242. +ifEsHasNoResults(index="users")
  243. .manage-member-section
  244. p.quiet {{_ 'no-results'}}
  245. button.js-email-invite.primary.full {{_ 'email-invite'}}
  246. template(name="changePermissionsPopup")
  247. ul.pop-over-list
  248. li
  249. a(class="{{#if isLastAdmin}}disabled{{else}}js-set-admin{{/if}}")
  250. | {{_ 'admin'}}
  251. if isAdmin
  252. i.fa.fa-check
  253. span.sub-name {{_ 'admin-desc'}}
  254. li
  255. a(class="{{#if isLastAdmin}}disabled{{else}}js-set-normal{{/if}}")
  256. | {{_ 'normal'}}
  257. if isNormal
  258. i.fa.fa-check
  259. span.sub-name {{_ 'normal-desc'}}
  260. li
  261. a(class="{{#if isLastAdmin}}disabled{{else}}js-set-no-comments{{/if}}")
  262. | {{_ 'no-comments'}}
  263. if isNoComments
  264. i.fa.fa-check
  265. span.sub-name {{_ 'no-comments-desc'}}
  266. li
  267. a(class="{{#if isLastAdmin}}disabled{{else}}js-set-comment-only{{/if}}")
  268. | {{_ 'comment-only'}}
  269. if isCommentOnly
  270. i.fa.fa-check
  271. span.sub-name {{_ 'comment-only-desc'}}
  272. if isLastAdmin
  273. hr
  274. p.quiet.bottom {{_ 'last-admin-desc'}}