settingBody.jade 16 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369
  1. template(name="setting")
  2. .setting-content
  3. unless currentUser.isAdmin
  4. | {{_ 'error-notAuthorized'}}
  5. else
  6. .content-title
  7. i.fa.fa-cog
  8. span {{_ 'settings'}}
  9. .content-body
  10. .side-menu
  11. if attachmentSettings.get
  12. ul
  13. li
  14. a.js-back-to-main-settings
  15. i.fa.fa-arrow-left
  16. | {{_ 'back-to-settings'}}
  17. li
  18. a.js-attachment-storage-settings(data-id="storage-settings")
  19. i.fa.fa-cog
  20. | {{_ 'attachment-storage-settings'}}
  21. li
  22. a.js-attachment-migration(data-id="attachment-migration")
  23. i.fa.fa-arrow-right
  24. | {{_ 'attachment-migration'}}
  25. li
  26. a.js-attachment-monitoring(data-id="attachment-monitoring")
  27. i.fa.fa-chart-line
  28. | {{_ 'attachment-monitoring'}}
  29. else if cronSettings.get
  30. ul
  31. li
  32. a.js-back-to-main-settings
  33. i.fa.fa-arrow-left
  34. | {{_ 'back-to-settings'}}
  35. li
  36. a.js-cron-migrations(data-id="cron-migrations")
  37. i.fa.fa-database
  38. | {{_ 'cron-migrations'}}
  39. li
  40. a.js-cron-board-operations(data-id="cron-board-operations")
  41. i.fa.fa-tasks
  42. | {{_ 'board-operations'}}
  43. li
  44. a.js-cron-jobs(data-id="cron-jobs")
  45. i.fa.fa-clock-o
  46. | {{_ 'cron-jobs'}}
  47. li
  48. a.js-cron-add(data-id="cron-add")
  49. i.fa.fa-plus
  50. | {{_ 'add-cron-job'}}
  51. else
  52. ul
  53. li.active
  54. a.js-setting-menu(data-id="registration-setting")
  55. i.fa.fa-sign-in
  56. | {{_ 'registration'}}
  57. unless isSandstorm
  58. li
  59. a.js-setting-menu(data-id="email-setting")
  60. i.fa.fa-envelope
  61. | {{_ 'email'}}
  62. li
  63. a.js-setting-menu(data-id="account-setting")
  64. i.fa.fa-users
  65. | {{_ 'accounts'}}
  66. li
  67. a.js-setting-menu(data-id="tableVisibilityMode-setting")
  68. i.fa.fa-eye
  69. | {{_ 'tableVisibilityMode'}}
  70. li
  71. a.js-setting-menu(data-id="announcement-setting")
  72. i.fa.fa-bullhorn
  73. | {{_ 'admin-announcement'}}
  74. li
  75. a.js-setting-menu(data-id="accessibility-setting")
  76. i.fa.fa-universal-access
  77. | {{_ 'accessibility'}}
  78. li
  79. a.js-setting-menu(data-id="layout-setting")
  80. i.fa.fa-object-group
  81. | {{_ 'layout'}}
  82. li
  83. a.js-setting-menu(data-id="webhook-setting")
  84. i.fa.fa-globe
  85. | {{_ 'global-webhook'}}
  86. li
  87. a.js-setting-menu(data-id="attachment-settings")
  88. i.fa.fa-paperclip
  89. | {{_ 'attachment-settings'}}
  90. li
  91. a.js-setting-menu(data-id="cron-settings")
  92. i.fa.fa-clock-o
  93. | {{_ 'cron-settings'}}
  94. .main-body
  95. if loading.get
  96. +spinner
  97. else if attachmentSettings.get
  98. +attachmentSettings
  99. else if cronSettings.get
  100. +cronSettings
  101. else if generalSetting.get
  102. +general
  103. else if emailSetting.get
  104. unless isSandstorm
  105. +email
  106. else if accountSetting.get
  107. +accountSettings
  108. else if tableVisibilityModeSetting.get
  109. +tableVisibilityModeSettings
  110. else if announcementSetting.get
  111. +announcementSettings
  112. else if accessibilitySetting.get
  113. +accessibilitySettings
  114. else if layoutSetting.get
  115. +layoutSettings
  116. else if webhookSetting.get
  117. +webhookSettings
  118. template(name="webhookSettings")
  119. span
  120. +outgoingWebhooksPopup
  121. template(name="general")
  122. ul#registration-setting.setting-detail
  123. li
  124. a.flex.js-toggle-forgot-password
  125. .materialCheckBox(class="{{#if currentSetting.disableForgotPassword}}is-checked{{/if}}")
  126. span {{_ 'disable-forgot-password'}}
  127. li
  128. a.flex.js-toggle-registration
  129. .materialCheckBox(class="{{#if currentSetting.disableRegistration}}is-checked{{/if}}")
  130. span {{_ 'disable-self-registration'}}
  131. li
  132. .invite-people(class="{{#if currentSetting.disableRegistration}}{{else}}hide{{/if}}")
  133. ul
  134. li
  135. .title {{_ 'invite-people'}}
  136. textarea#email-to-invite.wekan-form-control(rows='5', placeholder="{{_ 'email-addresses'}}")
  137. li
  138. .title {{_ 'to-boards'}}
  139. .bg-white
  140. each boards
  141. a.option.flex.js-toggle-board-choose(id= _id)
  142. .materialCheckBox(data-id= _id)
  143. span= title
  144. li
  145. button.js-email-invite.primary {{_ 'invite'}}
  146. template(name='email')
  147. ul#email-setting.setting-detail
  148. //if isSandstorm
  149. // li.smtp-form
  150. // .title {{_ 'smtp-host'}}
  151. // .description {{_ 'smtp-host-description'}}
  152. // .form-group
  153. // input.wekan-form-control#mail-server-host(type="text", placeholder="smtp.domain.com" value="{{currentSetting.mailServer.host}}")
  154. // li.smtp-form
  155. // .title {{_ 'smtp-port'}}
  156. // .description {{_ 'smtp-port-description'}}
  157. // .form-group
  158. // input.wekan-form-control#mail-server-port(type="text", placeholder="25" value="{{currentSetting.mailServer.port}}")
  159. // li.smtp-form
  160. // .title {{_ 'smtp-username'}}
  161. // .form-group
  162. // input.wekan-form-control#mail-server-u"accounts-allowUserNameChange": "Allow Username Change",sername(type="text", placeholder="{{_ 'username'}}" value="{{currentSetting.mailServer.username}}")
  163. // li.smtp-form
  164. // .title {{_ 'smtp-password'}}
  165. // .form-group
  166. // input.wekan-form-control#mail-server-password(type="password", placeholder="{{_ 'password'}}" value="")
  167. // li.smtp-form
  168. // .title {{_ 'smtp-tls'}}
  169. // .form-group
  170. // a.flex.js-toggle-tls
  171. // .materialCheckBox#mail-server-tls(class="{{#if currentSetting.mailServer.enableTLS}}is-checked{{/if}}")
  172. //
  173. // span {{_ 'smtp-tls-description'}}
  174. //
  175. // li.smtp-form
  176. // .title {{_ 'send-from'}}
  177. // .form-group
  178. // input.wekan-form-control#mail-server-from(type="email", placeholder="no-reply@domain.com" value="{{currentSetting.mailServer.from}}")
  179. //
  180. // li
  181. // button.js-save.primary {{_ 'save'}}
  182. li
  183. button.js-send-smtp-test-email.primary {{_ 'send-smtp-test'}}
  184. template(name='tableVisibilityModeSettings')
  185. ul#tableVisibilityMode-setting.setting-detail
  186. li.tableVisibilityMode-form
  187. .title {{_ 'tableVisibilityMode-allowPrivateOnly'}}
  188. .form-group.flex
  189. input.wekan-form-control#accounts-allowPrivateOnly(type="radio" name="allowPrivateOnly" value="true" checked="{{#if allowPrivateOnly}}checked{{/if}}")
  190. label {{_ 'yes'}}
  191. input.wekan-form-control#accounts-allowPrivateOnly(type="radio" name="allowPrivateOnly" value="false" checked="{{#unless allowPrivateOnly}}checked{{/unless}}")
  192. label {{_ 'no'}}
  193. button.js-tableVisibilityMode-save.primary {{_ 'save'}}
  194. template(name='accountSettings')
  195. ul#account-setting.setting-detail
  196. li.accounts-form
  197. .title {{_ 'accounts-allowEmailChange'}}
  198. .form-group.flex
  199. input.wekan-form-control#accounts-allowEmailChange(type="radio" name="allowEmailChange" value="true" checked="{{#if allowEmailChange}}checked{{/if}}")
  200. label {{_ 'yes'}}
  201. input.wekan-form-control#accounts-allowEmailChange(type="radio" name="allowEmailChange" value="false" checked="{{#unless allowEmailChange}}checked{{/unless}}")
  202. label {{_ 'no'}}
  203. .title {{_ 'accounts-allowUserNameChange'}}
  204. .form-group.flex
  205. input.wekan-form-control#accounts-allowUserNameChange(type="radio" name="allowUserNameChange" value="true" checked="{{#if allowUserNameChange}}checked{{/if}}")
  206. label {{_ 'yes'}}
  207. input.wekan-form-control#accounts-allowUserNameChange(type="radio" name="allowUserNameChange" value="false" checked="{{#unless allowUserNameChange}}checked{{/unless}}")
  208. label {{_ 'no'}}
  209. .title {{_ 'accounts-allowUserDelete'}}
  210. .form-group.flex
  211. input.wekan-form-control#accounts-allowUserDelete(type="radio" name="allowUserDelete" value="true" checked="{{#if allowUserDelete}}checked{{/if}}")
  212. label {{_ 'yes'}}
  213. input.wekan-form-control#accounts-allowUserDelete(type="radio" name="allowUserDelete" value="false" checked="{{#unless allowUserDelete}}checked{{/unless}}")
  214. label {{_ 'no'}}
  215. button.js-accounts-save.primary {{_ 'save'}}
  216. // Brute force lockout settings moved to People/Locked Users section
  217. template(name='announcementSettings')
  218. ul#announcement-setting.setting-detail
  219. li
  220. a.flex.js-toggle-activemessage
  221. .materialCheckBox(class="{{#if currentAnnouncements.enabled}}is-checked{{/if}}")
  222. span {{_ 'admin-announcement-active'}}
  223. li
  224. .admin-announcement(class="{{#if currentAnnouncements.enabled}}{{else}}hide{{/if}}")
  225. ul
  226. li
  227. .title {{_ 'admin-announcement-title'}}
  228. textarea#admin-announcement.wekan-form-control= currentAnnouncements.body
  229. li
  230. button.js-announcement-save.primary {{_ 'save'}}
  231. template(name='accessibilitySettings')
  232. ul#accessibility-setting.setting-detail
  233. li
  234. a(href="/accessibility" style="text-decoration: underline; color: blue;") {{_ 'accessibility'}}
  235. li
  236. a.flex.js-toggle-accessibility
  237. .materialCheckBox(class="{{#if currentAccessibility.enabled}}is-checked{{/if}}")
  238. span {{_ 'accessibility-page-enabled'}}
  239. li
  240. .accessibility-content(class="{{#if currentAccessibility.enabled}}{{else}}hide{{/if}}")
  241. ul
  242. li
  243. .title {{_ 'accessibility-title'}}
  244. textarea#admin-accessibility-title.wekan-form-control= currentAccessibility.title
  245. li
  246. .title {{_ 'accessibility-content'}}
  247. textarea#admin-accessibility-content.wekan-form-control= currentAccessibility.body
  248. li
  249. button.js-accessibility-save.primary {{_ 'save'}}
  250. template(name='layoutSettings')
  251. ul#layout-setting.setting-detail
  252. li
  253. button.js-all-boards-hide-activities.primary {{_ 'hide-activities-of-all-boards'}}
  254. li.layout-form
  255. .title {{_ 'oidc-button-text'}}
  256. .form-group
  257. input.wekan-form-control#oidcBtnTextvalue(type="text", placeholder="" value="{{currentSetting.oidcBtnText}}")
  258. li.layout-form
  259. .title {{_ 'can-invite-if-same-mailDomainName'}}
  260. .form-group
  261. input.wekan-form-control#mailDomainNamevalue(type="text", placeholder="" value="{{currentSetting.mailDomainName}}")
  262. li.layout-form
  263. .title {{_ 'custom-legal-notice-link-url'}}
  264. .form-group
  265. input.wekan-form-control#legalNoticevalue(type="text", placeholder="" value="{{currentSetting.legalNotice}}")
  266. li.layout-form
  267. .title {{_ 'display-authentication-method'}}
  268. .form-group.flex
  269. input.wekan-form-control#display-authentication-method(type="radio" name="displayAuthenticationMethod" value="true" checked="{{#if currentSetting.displayAuthenticationMethod}}checked{{/if}}")
  270. label {{_ 'yes'}}
  271. input.wekan-form-control#display-authentication-method(type="radio" name="displayAuthenticationMethod" value="false" checked="{{#unless currentSetting.displayAuthenticationMethod}}checked{{/unless}}")
  272. label {{_ 'no'}}
  273. li.layout-form
  274. .title {{_ 'default-authentication-method'}}
  275. +selectAuthenticationMethod(authenticationMethod=currentSetting.defaultAuthenticationMethod)
  276. li.layout-form
  277. .title {{_ 'wait-spinner'}}
  278. +selectSpinnerName(spinnerName=currentSetting.spinnerName)
  279. li.layout-form
  280. .title {{_ 'custom-product-name'}}
  281. .form-group
  282. input.wekan-form-control#product-name(type="text", placeholder="" value="{{currentSetting.productName}}")
  283. li.layout-form
  284. .title {{_ 'hide-logo'}}
  285. .form-group.flex
  286. input.wekan-form-control#hide-logo(type="radio" name="hideLogo" value="true" checked="{{#if currentSetting.hideLogo}}checked{{/if}}")
  287. label {{_ 'yes'}}
  288. input.wekan-form-control#hide-logo(type="radio" name="hideLogo" value="false" checked="{{#unless currentSetting.hideLogo}}checked{{/unless}}")
  289. label {{_ 'no'}}
  290. li.layout-form
  291. .title {{_ 'custom-login-logo-image-url'}}
  292. .form-group
  293. input.wekan-form-control#custom-login-logo-image-url(type="text", placeholder="" value="{{currentSetting.customLoginLogoImageUrl}}")
  294. li.layout-form
  295. .title {{_ 'custom-login-logo-link-url'}}
  296. .form-group
  297. input.wekan-form-control#custom-login-logo-link-url(type="text", placeholder="" value="{{currentSetting.customLoginLogoLinkUrl}}")
  298. li.layout-form
  299. .title {{_ 'custom-help-link-url'}}
  300. .form-group
  301. input.wekan-form-control#custom-help-link-url(type="text", placeholder="" value="{{currentSetting.customHelpLinkUrl}}")
  302. li.layout-form
  303. .title {{_ 'text-below-custom-login-logo'}}
  304. .form-group
  305. textarea#text-below-custom-login-logo.wekan-form-control= currentSetting.textBelowCustomLoginLogo
  306. li.layout-form
  307. .title {{_ 'custom-top-left-corner-logo-image-url'}}
  308. .form-group
  309. input.wekan-form-control#custom-top-left-corner-logo-image-url(type="text", placeholder="" value="{{currentSetting.customTopLeftCornerLogoImageUrl}}")
  310. li.layout-form
  311. .title {{_ 'custom-top-left-corner-logo-link-url'}}
  312. .form-group
  313. input.wekan-form-control#custom-top-left-corner-logo-link-url(type="text", placeholder="" value="{{currentSetting.customTopLeftCornerLogoLinkUrl}}")
  314. li.layout-form
  315. .title {{_ 'custom-top-left-corner-logo-height'}}
  316. .form-group
  317. input.wekan-form-control#custom-top-left-corner-logo-height(type="text", placeholder="" value="{{currentSetting.customTopLeftCornerLogoHeight}}")
  318. li.layout-form
  319. .title {{_ 'automatic-linked-url-schemes'}}
  320. .form-group
  321. textarea#automatic-linked-url-schemes.wekan-form-control= currentSetting.automaticLinkedUrlSchemes
  322. li.layout-form
  323. .title {{_ 'hide-card-counter-list'}}
  324. .form-group.flex
  325. input.wekan-form-control#hide-card-counter-list(type="radio" name="hideCardCounterList" value="true" checked="{{#if currentSetting.hideCardCounterList}}checked{{/if}}")
  326. label {{_ 'yes'}}
  327. input.wekan-form-control#hide-card-counter-list(type="radio" name="hideCardCounterList" value="false" checked="{{#unless currentSetting.hideCardCounterList}}checked{{/unless}}")
  328. label {{_ 'no'}}
  329. li.layout-form
  330. .title {{_ 'hide-board-member-list'}}
  331. .form-group.flex
  332. input.wekan-form-control#hide-board-member-list(type="radio" name="hideBoardMemberList" value="true" checked="{{#if currentSetting.hideBoardMemberList}}checked{{/if}}")
  333. label {{_ 'yes'}}
  334. input.wekan-form-control#hide-board-member-list(type="radio" name="hideBoardMemberList" value="false" checked="{{#unless currentSetting.hideBoardMemberList}}checked{{/unless}}")
  335. label {{_ 'no'}}
  336. li
  337. button.js-save-layout.primary {{_ 'save'}}
  338. template(name='selectAuthenticationMethod')
  339. select#defaultAuthenticationMethod
  340. each authentications
  341. if isSelected value
  342. option(value="{{value}}" selected) {{_ value}}
  343. else
  344. option(value="{{value}}") {{_ value}}
  345. template(name='selectSpinnerName')
  346. select#spinnerName
  347. each spinner in spinners
  348. if isSelected spinner
  349. option(value="{{spinner}}" selected) {{_ spinner}}
  350. else
  351. option(value="{{spinner}}") {{_ spinner}}