gitea源码

account.tmpl 6.7KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161
  1. {{template "user/settings/layout_head" (dict "ctxData" . "pageClass" "user settings account")}}
  2. <div class="user-setting-content">
  3. <h4 class="ui top attached header">
  4. {{ctx.Locale.Tr "settings.password"}}
  5. </h4>
  6. <div class="ui attached segment">
  7. {{if and (not ($.UserDisabledFeatures.Contains "manage_credentials")) (or (.SignedUser.IsLocal) (.SignedUser.IsOAuth2))}}
  8. <form class="ui form ignore-dirty" action="{{AppSubUrl}}/user/settings/account" method="post">
  9. {{template "base/disable_form_autofill"}}
  10. {{.CsrfTokenHtml}}
  11. {{if .SignedUser.IsPasswordSet}}
  12. <div class="required field {{if .Err_OldPassword}}error{{end}}">
  13. <label for="old_password">{{ctx.Locale.Tr "settings.old_password"}}</label>
  14. <input id="old_password" name="old_password" type="password" autocomplete="current-password" autofocus required>
  15. </div>
  16. {{end}}
  17. <div class="required field {{if .Err_Password}}error{{end}}">
  18. <label for="password">{{ctx.Locale.Tr "settings.new_password"}}</label>
  19. <input id="password" name="password" type="password" autocomplete="new-password" required>
  20. </div>
  21. <div class="required field {{if .Err_Password}}error{{end}}">
  22. <label for="retype">{{ctx.Locale.Tr "settings.retype_new_password"}}</label>
  23. <input id="retype" name="retype" type="password" autocomplete="new-password" required>
  24. </div>
  25. <div class="field">
  26. <button class="ui primary button">{{ctx.Locale.Tr "settings.change_password"}}</button>
  27. <a href="{{AppSubUrl}}/user/forgot_password?email={{.Email}}">{{ctx.Locale.Tr "auth.forgot_password"}}</a>
  28. </div>
  29. </form>
  30. {{else}}
  31. <div class="ui info message">
  32. <p class="text left">{{ctx.Locale.Tr "settings.password_change_disabled"}}</p>
  33. </div>
  34. {{end}}
  35. </div>
  36. {{if not ($.UserDisabledFeatures.Contains "manage_credentials")}}
  37. <h4 class="ui top attached header">
  38. {{ctx.Locale.Tr "settings.manage_emails"}}
  39. </h4>
  40. <div class="ui attached segment">
  41. <div class="ui list flex-items-block">
  42. {{if not ($.UserDisabledFeatures.Contains "manage_credentials")}}
  43. {{range .Emails}}
  44. <div class="item tw-flex-wrap">
  45. <div class="content tw-flex-1">
  46. <strong>{{.Email}}</strong>
  47. {{if .IsPrimary}}
  48. <div class="ui primary label">{{ctx.Locale.Tr "settings.primary"}}</div>
  49. {{end}}
  50. {{if .IsActivated}}
  51. <div class="ui green label">{{ctx.Locale.Tr "settings.activated"}}</div>
  52. {{else}}
  53. <div class="ui label">{{ctx.Locale.Tr "settings.requires_activation"}}</div>
  54. {{end}}
  55. </div>
  56. <div class="flex-text-block">
  57. {{if not .IsPrimary}}
  58. <button class="ui red tiny button delete-button" data-modal-id="delete-email" data-url="{{AppSubUrl}}/user/settings/account/email/delete" data-id="{{.ID}}">
  59. {{ctx.Locale.Tr "settings.delete_email"}}
  60. </button>
  61. {{if .CanBePrimary}}
  62. <form action="{{AppSubUrl}}/user/settings/account/email" method="post">
  63. {{$.CsrfTokenHtml}}
  64. <input name="_method" type="hidden" value="PRIMARY">
  65. <input name="id" type="hidden" value="{{.ID}}">
  66. <button class="ui primary tiny button">{{ctx.Locale.Tr "settings.primary_email"}}</button>
  67. </form>
  68. {{end}}
  69. {{end}}
  70. {{if not .IsActivated}}
  71. <form action="{{AppSubUrl}}/user/settings/account/email" method="post">
  72. {{$.CsrfTokenHtml}}
  73. <input name="_method" type="hidden" value="SENDACTIVATION">
  74. <input name="id" type="hidden" value="{{.ID}}">
  75. {{if $.ActivationsPending}}
  76. <button disabled class="ui primary tiny button">{{ctx.Locale.Tr "settings.activations_pending"}}</button>
  77. {{else}}
  78. <button class="ui primary tiny button">{{ctx.Locale.Tr "settings.activate_email"}}</button>
  79. {{end}}
  80. </form>
  81. {{end}}
  82. </div>
  83. </div>
  84. {{end}}{{/* range Emails */}}
  85. {{end}}{{/* if manage_credentials */}}
  86. </div>
  87. </div>
  88. {{end}}
  89. {{if not ($.UserDisabledFeatures.Contains "manage_credentials")}}
  90. <div class="ui bottom attached segment">
  91. <form class="ui form" action="{{AppSubUrl}}/user/settings/account/email" method="post">
  92. {{.CsrfTokenHtml}}
  93. <div class="required field {{if .Err_Email}}error{{end}}">
  94. <label for="email">{{ctx.Locale.Tr "settings.add_new_email"}}</label>
  95. <input id="email" name="email" type="email" required {{if not .CanAddEmails}}disabled{{end}}>
  96. </div>
  97. <button class="ui primary button" {{if not .CanAddEmails}}disabled{{end}}>
  98. {{ctx.Locale.Tr "settings.add_email"}}
  99. </button>
  100. </form>
  101. {{/* if ActivationsPending is false, then CanAddEmails must be true, so if CanAddEmails is false, ActivationsPending must be true */}}
  102. {{if not .CanAddEmails}}
  103. <div class="ui warning message">{{ctx.Locale.Tr "settings.can_not_add_email_activations_pending"}}</div>
  104. {{end}}
  105. </div>
  106. {{end}}
  107. {{if not ($.UserDisabledFeatures.Contains "deletion")}}
  108. <h4 class="ui top attached error header">
  109. {{ctx.Locale.Tr "settings.delete_account"}}
  110. </h4>
  111. <div class="ui attached error segment">
  112. <div class="ui red message">
  113. <p class="text left">{{svg "octicon-alert"}} {{ctx.Locale.Tr "settings.delete_prompt"}}</p>
  114. {{if .UserDeleteWithComments}}
  115. <p class="text left tw-font-semibold">{{ctx.Locale.Tr "settings.delete_with_all_comments" .UserDeleteWithCommentsMaxTime}}</p>
  116. {{end}}
  117. </div>
  118. <form class="ui form ignore-dirty" id="delete-form" action="{{AppSubUrl}}/user/settings/account/delete" method="post">
  119. {{template "base/disable_form_autofill"}}
  120. {{.CsrfTokenHtml}}
  121. <div class="required field {{if .Err_Password}}error{{end}}">
  122. <label for="password-confirmation">{{ctx.Locale.Tr "password"}}</label>
  123. <input id="password-confirmation" name="password" type="password" autocomplete="off" required>
  124. </div>
  125. <div class="field">
  126. <button class="ui red button delete-button" data-modal-id="delete-account" data-type="form" data-form="#delete-form">
  127. {{ctx.Locale.Tr "settings.confirm_delete_account"}}
  128. </button>
  129. </div>
  130. </form>
  131. <div class="ui g-modal-confirm delete modal" id="delete-account">
  132. <div class="header">
  133. {{svg "octicon-trash"}}
  134. {{ctx.Locale.Tr "settings.delete_account_title"}}
  135. </div>
  136. <div class="content">
  137. <p>{{ctx.Locale.Tr "settings.delete_account_desc"}}</p>
  138. </div>
  139. {{template "base/modal_actions_confirm" .}}
  140. </div>
  141. </div>
  142. {{end}}
  143. </div>
  144. <div class="ui g-modal-confirm delete modal" id="delete-email">
  145. <div class="header">
  146. {{svg "octicon-trash"}}
  147. {{ctx.Locale.Tr "settings.email_deletion"}}
  148. </div>
  149. <div class="content">
  150. <p>{{ctx.Locale.Tr "settings.email_deletion_desc"}}</p>
  151. </div>
  152. {{template "base/modal_actions_confirm" .}}
  153. </div>
  154. {{template "user/settings/layout_footer" .}}