mirror of
				https://gitee.com/gitea/gitea
				synced 2025-11-04 16:40:24 +08:00 
			
		
		
		
	Add modals to Organization and Team remove/leave (#16471)
* Add modals to Organization and Team remove/leave Add confirmation modals to Organization and Team remove and leave. Fix #16215 Signed-off-by: Andrew Thornton <art27@cantab.net> * avoid for-in Signed-off-by: Andrew Thornton <art27@cantab.net> * Revert "avoid for-in" This reverts commit 2af9a6f9d46ed31b6fc6e3a29e695577dcf09f75. * Apply suggestions from code review Co-authored-by: silverwind <me@silverwind.io> Co-authored-by: 6543 <6543@obermui.de> Co-authored-by: silverwind <me@silverwind.io> Co-authored-by: techknowlogick <techknowlogick@gitea.io>
This commit is contained in:
		@@ -2176,12 +2176,15 @@ members.member_role = Member Role:
 | 
				
			|||||||
members.owner = Owner
 | 
					members.owner = Owner
 | 
				
			||||||
members.member = Member
 | 
					members.member = Member
 | 
				
			||||||
members.remove = Remove
 | 
					members.remove = Remove
 | 
				
			||||||
 | 
					members.remove.detail = Remove %[1]s from %[2]s?
 | 
				
			||||||
members.leave = Leave
 | 
					members.leave = Leave
 | 
				
			||||||
 | 
					members.leave.detail = Leave %s?
 | 
				
			||||||
members.invite_desc = Add a new member to %s:
 | 
					members.invite_desc = Add a new member to %s:
 | 
				
			||||||
members.invite_now = Invite Now
 | 
					members.invite_now = Invite Now
 | 
				
			||||||
 | 
					
 | 
				
			||||||
teams.join = Join
 | 
					teams.join = Join
 | 
				
			||||||
teams.leave = Leave
 | 
					teams.leave = Leave
 | 
				
			||||||
 | 
					teams.leave.detail = Leave %s?
 | 
				
			||||||
teams.can_create_org_repo = Create repositories
 | 
					teams.can_create_org_repo = Create repositories
 | 
				
			||||||
teams.can_create_org_repo_helper = Members can create new repositories in organization. Creator will get administrator access to the new repository.
 | 
					teams.can_create_org_repo_helper = Members can create new repositories in organization. Creator will get administrator access to the new repository.
 | 
				
			||||||
teams.read_access = Read Access
 | 
					teams.read_access = Read Access
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -99,14 +99,18 @@ func MembersAction(ctx *context.Context) {
 | 
				
			|||||||
		err = org.RemoveMember(uid)
 | 
							err = org.RemoveMember(uid)
 | 
				
			||||||
		if models.IsErrLastOrgOwner(err) {
 | 
							if models.IsErrLastOrgOwner(err) {
 | 
				
			||||||
			ctx.Flash.Error(ctx.Tr("form.last_org_owner"))
 | 
								ctx.Flash.Error(ctx.Tr("form.last_org_owner"))
 | 
				
			||||||
			ctx.Redirect(ctx.Org.OrgLink + "/members")
 | 
								ctx.JSON(http.StatusOK, map[string]interface{}{
 | 
				
			||||||
 | 
									"redirect": ctx.Org.OrgLink + "/members",
 | 
				
			||||||
 | 
								})
 | 
				
			||||||
			return
 | 
								return
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
	case "leave":
 | 
						case "leave":
 | 
				
			||||||
		err = org.RemoveMember(ctx.User.ID)
 | 
							err = org.RemoveMember(ctx.User.ID)
 | 
				
			||||||
		if models.IsErrLastOrgOwner(err) {
 | 
							if models.IsErrLastOrgOwner(err) {
 | 
				
			||||||
			ctx.Flash.Error(ctx.Tr("form.last_org_owner"))
 | 
								ctx.Flash.Error(ctx.Tr("form.last_org_owner"))
 | 
				
			||||||
			ctx.Redirect(ctx.Org.OrgLink + "/members")
 | 
								ctx.JSON(http.StatusOK, map[string]interface{}{
 | 
				
			||||||
 | 
									"redirect": ctx.Org.OrgLink + "/members",
 | 
				
			||||||
 | 
								})
 | 
				
			||||||
			return
 | 
								return
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
@@ -120,9 +124,12 @@ func MembersAction(ctx *context.Context) {
 | 
				
			|||||||
		return
 | 
							return
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if ctx.Params(":action") != "leave" {
 | 
						redirect := ctx.Org.OrgLink + "/members"
 | 
				
			||||||
		ctx.Redirect(ctx.Org.OrgLink + "/members")
 | 
						if ctx.Params(":action") == "leave" {
 | 
				
			||||||
	} else {
 | 
							redirect = setting.AppSubURL + "/"
 | 
				
			||||||
		ctx.Redirect(setting.AppSubURL + "/")
 | 
					 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						ctx.JSON(http.StatusOK, map[string]interface{}{
 | 
				
			||||||
 | 
							"redirect": redirect,
 | 
				
			||||||
 | 
						})
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -66,6 +66,23 @@ func TeamsAction(ctx *context.Context) {
 | 
				
			|||||||
		err = ctx.Org.Team.AddMember(ctx.User.ID)
 | 
							err = ctx.Org.Team.AddMember(ctx.User.ID)
 | 
				
			||||||
	case "leave":
 | 
						case "leave":
 | 
				
			||||||
		err = ctx.Org.Team.RemoveMember(ctx.User.ID)
 | 
							err = ctx.Org.Team.RemoveMember(ctx.User.ID)
 | 
				
			||||||
 | 
							if err != nil {
 | 
				
			||||||
 | 
								if models.IsErrLastOrgOwner(err) {
 | 
				
			||||||
 | 
									ctx.Flash.Error(ctx.Tr("form.last_org_owner"))
 | 
				
			||||||
 | 
								} else {
 | 
				
			||||||
 | 
									log.Error("Action(%s): %v", ctx.Params(":action"), err)
 | 
				
			||||||
 | 
									ctx.JSON(http.StatusOK, map[string]interface{}{
 | 
				
			||||||
 | 
										"ok":  false,
 | 
				
			||||||
 | 
										"err": err.Error(),
 | 
				
			||||||
 | 
									})
 | 
				
			||||||
 | 
									return
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
							ctx.JSON(http.StatusOK,
 | 
				
			||||||
 | 
								map[string]interface{}{
 | 
				
			||||||
 | 
									"redirect": ctx.Org.OrgLink + "/teams/",
 | 
				
			||||||
 | 
								})
 | 
				
			||||||
 | 
							return
 | 
				
			||||||
	case "remove":
 | 
						case "remove":
 | 
				
			||||||
		if !ctx.Org.IsOwner {
 | 
							if !ctx.Org.IsOwner {
 | 
				
			||||||
			ctx.Error(http.StatusNotFound)
 | 
								ctx.Error(http.StatusNotFound)
 | 
				
			||||||
@@ -73,6 +90,23 @@ func TeamsAction(ctx *context.Context) {
 | 
				
			|||||||
		}
 | 
							}
 | 
				
			||||||
		err = ctx.Org.Team.RemoveMember(uid)
 | 
							err = ctx.Org.Team.RemoveMember(uid)
 | 
				
			||||||
		page = "team"
 | 
							page = "team"
 | 
				
			||||||
 | 
							if err != nil {
 | 
				
			||||||
 | 
								if models.IsErrLastOrgOwner(err) {
 | 
				
			||||||
 | 
									ctx.Flash.Error(ctx.Tr("form.last_org_owner"))
 | 
				
			||||||
 | 
								} else {
 | 
				
			||||||
 | 
									log.Error("Action(%s): %v", ctx.Params(":action"), err)
 | 
				
			||||||
 | 
									ctx.JSON(http.StatusOK, map[string]interface{}{
 | 
				
			||||||
 | 
										"ok":  false,
 | 
				
			||||||
 | 
										"err": err.Error(),
 | 
				
			||||||
 | 
									})
 | 
				
			||||||
 | 
									return
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
							ctx.JSON(http.StatusOK,
 | 
				
			||||||
 | 
								map[string]interface{}{
 | 
				
			||||||
 | 
									"redirect": ctx.Org.OrgLink + "/teams/" + ctx.Org.Team.LowerName,
 | 
				
			||||||
 | 
								})
 | 
				
			||||||
 | 
							return
 | 
				
			||||||
	case "add":
 | 
						case "add":
 | 
				
			||||||
		if !ctx.Org.IsOwner {
 | 
							if !ctx.Org.IsOwner {
 | 
				
			||||||
			ctx.Error(http.StatusNotFound)
 | 
								ctx.Error(http.StatusNotFound)
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -54,14 +54,18 @@
 | 
				
			|||||||
					<div class="ui four wide column">
 | 
										<div class="ui four wide column">
 | 
				
			||||||
						<div class="text right">
 | 
											<div class="text right">
 | 
				
			||||||
							{{if eq $.SignedUser.ID .ID}}
 | 
												{{if eq $.SignedUser.ID .ID}}
 | 
				
			||||||
								<form method="post" action="{{$.OrgLink}}/members/action/leave">
 | 
													<form>
 | 
				
			||||||
									{{$.CsrfTokenHtml}}
 | 
														<button class="ui red small button delete-button" data-modal-id="leave-organization"
 | 
				
			||||||
									<button type="submit" class="ui red small button" name="uid" value="{{.ID}}">{{$.i18n.Tr "org.members.leave"}}</button>
 | 
															data-url="{{$.OrgLink}}/members/action/leave" data-datauid="{{.ID}}"
 | 
				
			||||||
 | 
															data-name="{{.DisplayName}}"
 | 
				
			||||||
 | 
															data-data-organization-name="{{$.Org.DisplayName}}">{{$.i18n.Tr "org.members.leave"}}</button>
 | 
				
			||||||
								</form>
 | 
													</form>
 | 
				
			||||||
							{{else if $.IsOrganizationOwner}}
 | 
												{{else if $.IsOrganizationOwner}}
 | 
				
			||||||
								<form method="post" action="{{$.OrgLink}}/members/action/remove">
 | 
													<form>
 | 
				
			||||||
									{{$.CsrfTokenHtml}}
 | 
														<button class="ui red small button delete-button" data-modal-id="remove-organization-member"
 | 
				
			||||||
									<button type="submit" class="ui red small button" name="uid" value="{{.ID}}">{{$.i18n.Tr "org.members.remove"}}</button>
 | 
															data-url="{{$.OrgLink}}/members/action/remove" data-datauid="{{.ID}}"
 | 
				
			||||||
 | 
															data-name="{{.DisplayName}}"
 | 
				
			||||||
 | 
															data-data-organization-name="{{$.Org.DisplayName}}">{{$.i18n.Tr "org.members.remove"}}</button>
 | 
				
			||||||
								</form>
 | 
													</form>
 | 
				
			||||||
							{{end}}
 | 
												{{end}}
 | 
				
			||||||
						</div>
 | 
											</div>
 | 
				
			||||||
@@ -73,4 +77,25 @@
 | 
				
			|||||||
		{{template "base/paginate" .}}
 | 
							{{template "base/paginate" .}}
 | 
				
			||||||
	</div>
 | 
						</div>
 | 
				
			||||||
</div>
 | 
					</div>
 | 
				
			||||||
 | 
					<div class="ui small basic delete modal" id="leave-organization">
 | 
				
			||||||
 | 
						<div class="ui icon header">
 | 
				
			||||||
 | 
							{{svg "octicon-x" 16 "close inside"}}
 | 
				
			||||||
 | 
							{{$.i18n.Tr "org.members.leave"}}
 | 
				
			||||||
 | 
						</div>
 | 
				
			||||||
 | 
						<div class="content">
 | 
				
			||||||
 | 
							<p>{{$.i18n.Tr "org.members.leave.detail" `<span class="dataOrganizationName"></span>` | Safe}}</p>
 | 
				
			||||||
 | 
						</div>
 | 
				
			||||||
 | 
						{{template "base/delete_modal_actions" .}}
 | 
				
			||||||
 | 
					</div>
 | 
				
			||||||
 | 
					<div class="ui small basic delete modal" id="remove-organization-member">
 | 
				
			||||||
 | 
						<div class="ui icon header">
 | 
				
			||||||
 | 
							{{svg "octicon-x" 16 "close inside"}}
 | 
				
			||||||
 | 
							{{$.i18n.Tr "org.members.remove"}}
 | 
				
			||||||
 | 
						</div>
 | 
				
			||||||
 | 
						<div class="content">
 | 
				
			||||||
 | 
							<p>{{$.i18n.Tr "org.members.remove.detail" `<span class="name"></span>` `<span class="dataOrganizationName"></span>` | Safe}}</p>
 | 
				
			||||||
 | 
						</div>
 | 
				
			||||||
 | 
						{{template "base/delete_modal_actions" .}}
 | 
				
			||||||
 | 
					</div>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
{{template "base/footer" .}}
 | 
					{{template "base/footer" .}}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -26,10 +26,12 @@
 | 
				
			|||||||
				<div class="ui bottom attached table segment members">
 | 
									<div class="ui bottom attached table segment members">
 | 
				
			||||||
					{{range .Team.Members}}
 | 
										{{range .Team.Members}}
 | 
				
			||||||
						<div class="item">
 | 
											<div class="item">
 | 
				
			||||||
							{{if $.IsOrganizationOwner}}
 | 
												{{if and $.IsOrganizationOwner (not (eq $.SignedUser.ID .ID))}}
 | 
				
			||||||
								<form method="post" action="{{$.OrgLink}}/teams/{{$.Team.LowerName}}/action/remove">
 | 
													<form>
 | 
				
			||||||
									{{$.CsrfTokenHtml}}
 | 
														<button class="ui red button delete-button right" data-modal-id="remove-team-member"
 | 
				
			||||||
									<button type="submit" class="ui red small button right" name="uid" value="{{.ID}}">{{$.i18n.Tr "org.members.remove"}}</button>
 | 
															data-url="{{$.OrgLink}}/teams/{{$.Team.LowerName}}/action/remove" data-datauid="{{.ID}}"
 | 
				
			||||||
 | 
															data-name="{{.DisplayName}}"
 | 
				
			||||||
 | 
															data-data-team-name="{{$.Team.Name}}">{{$.i18n.Tr "org.members.remove"}}</button>
 | 
				
			||||||
								</form>
 | 
													</form>
 | 
				
			||||||
							{{end}}
 | 
												{{end}}
 | 
				
			||||||
							<a href="{{.HomeLink}}">
 | 
												<a href="{{.HomeLink}}">
 | 
				
			||||||
@@ -47,4 +49,14 @@
 | 
				
			|||||||
		</div>
 | 
							</div>
 | 
				
			||||||
	</div>
 | 
						</div>
 | 
				
			||||||
</div>
 | 
					</div>
 | 
				
			||||||
 | 
					<div class="ui small basic delete modal" id="remove-team-member">
 | 
				
			||||||
 | 
						<div class="ui icon header">
 | 
				
			||||||
 | 
							{{svg "octicon-x" 16 "close inside"}}
 | 
				
			||||||
 | 
							{{$.i18n.Tr "org.members.remove"}}
 | 
				
			||||||
 | 
						</div>
 | 
				
			||||||
 | 
						<div class="content">
 | 
				
			||||||
 | 
							<p>{{$.i18n.Tr "org.members.remove.detail" `<span class="name"></span>` `<span class="dataTeamName"></span>` | Safe}}</p>
 | 
				
			||||||
 | 
						</div>
 | 
				
			||||||
 | 
						{{template "base/delete_modal_actions" .}}
 | 
				
			||||||
 | 
					</div>
 | 
				
			||||||
{{template "base/footer" .}}
 | 
					{{template "base/footer" .}}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -3,10 +3,10 @@
 | 
				
			|||||||
		<strong>{{.Team.Name}}</strong>
 | 
							<strong>{{.Team.Name}}</strong>
 | 
				
			||||||
		<div class="ui right">
 | 
							<div class="ui right">
 | 
				
			||||||
			{{if .Team.IsMember $.SignedUser.ID}}
 | 
								{{if .Team.IsMember $.SignedUser.ID}}
 | 
				
			||||||
				<form method="post" action="{{.OrgLink}}/teams/{{.Team.LowerName}}/action/leave">
 | 
									<form>
 | 
				
			||||||
					{{$.CsrfTokenHtml}}
 | 
										<button class="ui red tiny button delete-button" data-modal-id="leave-team-sidebar"
 | 
				
			||||||
					<input type="hidden" name="page" value="home"/>
 | 
											data-url="{{.OrgLink}}/teams/{{.Team.LowerName}}/action/leave" data-datauid="{{$.SignedUser.ID}}"
 | 
				
			||||||
					<button type="submit" class="ui red tiny button" name="uid" value="{{$.SignedUser.ID}}">{{$.i18n.Tr "org.teams.leave"}}</button>
 | 
											data-name="{{.Team.Name}}">{{$.i18n.Tr "org.teams.leave"}}</button>
 | 
				
			||||||
				</form>
 | 
									</form>
 | 
				
			||||||
			{{else if .IsOrganizationOwner}}
 | 
								{{else if .IsOrganizationOwner}}
 | 
				
			||||||
				<form method="post" action="{{.OrgLink}}/teams/{{.Team.LowerName}}/action/join">
 | 
									<form method="post" action="{{.OrgLink}}/teams/{{.Team.LowerName}}/action/join">
 | 
				
			||||||
@@ -59,3 +59,13 @@
 | 
				
			|||||||
		</div>
 | 
							</div>
 | 
				
			||||||
	{{end}}
 | 
						{{end}}
 | 
				
			||||||
</div>
 | 
					</div>
 | 
				
			||||||
 | 
					<div class="ui small basic delete modal" id="leave-team-sidebar">
 | 
				
			||||||
 | 
						<div class="ui icon header">
 | 
				
			||||||
 | 
							{{svg "octicon-x" 16 "close inside"}}
 | 
				
			||||||
 | 
							{{$.i18n.Tr "org.teams.leave"}}
 | 
				
			||||||
 | 
						</div>
 | 
				
			||||||
 | 
						<div class="content">
 | 
				
			||||||
 | 
							<p>{{$.i18n.Tr "org.teams.leave.detail" `<span class="name"></span>` | Safe}}</p>
 | 
				
			||||||
 | 
						</div>
 | 
				
			||||||
 | 
						{{template "base/delete_modal_actions" .}}
 | 
				
			||||||
 | 
					</div>
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -17,9 +17,10 @@
 | 
				
			|||||||
						<a class="text black" href="{{$.OrgLink}}/teams/{{.LowerName}}"><strong>{{.Name}}</strong></a>
 | 
											<a class="text black" href="{{$.OrgLink}}/teams/{{.LowerName}}"><strong>{{.Name}}</strong></a>
 | 
				
			||||||
						<div class="ui right">
 | 
											<div class="ui right">
 | 
				
			||||||
							{{if .IsMember $.SignedUser.ID}}
 | 
												{{if .IsMember $.SignedUser.ID}}
 | 
				
			||||||
								<form method="post" action="{{$.OrgLink}}/teams/{{.LowerName}}/action/leave">
 | 
													<form>
 | 
				
			||||||
									{{$.CsrfTokenHtml}}
 | 
														<button class="ui red tiny button delete-button" data-modal-id="leave-team"
 | 
				
			||||||
									<button type="submit" class="ui red small button" name="uid" value="{{$.SignedUser.ID}}">{{$.i18n.Tr "org.teams.leave"}}</button>
 | 
															data-url="{{$.OrgLink}}/teams/{{.LowerName}}/action/leave" data-datauid="{{$.SignedUser.ID}}"
 | 
				
			||||||
 | 
															data-name="{{.Name}}">{{$.i18n.Tr "org.teams.leave"}}</button>
 | 
				
			||||||
								</form>
 | 
													</form>
 | 
				
			||||||
							{{else if $.IsOrganizationOwner}}
 | 
												{{else if $.IsOrganizationOwner}}
 | 
				
			||||||
								<form method="post" action="{{$.OrgLink}}/teams/{{.LowerName}}/action/join">
 | 
													<form method="post" action="{{$.OrgLink}}/teams/{{.LowerName}}/action/join">
 | 
				
			||||||
@@ -44,4 +45,14 @@
 | 
				
			|||||||
		</div>
 | 
							</div>
 | 
				
			||||||
	</div>
 | 
						</div>
 | 
				
			||||||
</div>
 | 
					</div>
 | 
				
			||||||
 | 
					<div class="ui small basic delete modal" id="leave-team">
 | 
				
			||||||
 | 
						<div class="ui icon header">
 | 
				
			||||||
 | 
							{{svg "octicon-x" 16 "close inside"}}
 | 
				
			||||||
 | 
							{{$.i18n.Tr "org.teams.leave"}}
 | 
				
			||||||
 | 
						</div>
 | 
				
			||||||
 | 
						<div class="content">
 | 
				
			||||||
 | 
							<p>{{$.i18n.Tr "org.teams.leave.detail" `<span class="name"></span>` | Safe}}</p>
 | 
				
			||||||
 | 
						</div>
 | 
				
			||||||
 | 
						{{template "base/delete_modal_actions" .}}
 | 
				
			||||||
 | 
					</div>
 | 
				
			||||||
{{template "base/footer" .}}
 | 
					{{template "base/footer" .}}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -72,7 +72,7 @@
 | 
				
			|||||||
					<div class="item">
 | 
										<div class="item">
 | 
				
			||||||
						{{if not .IsPrimary}}
 | 
											{{if not .IsPrimary}}
 | 
				
			||||||
							<div class="right floated content">
 | 
												<div class="right floated content">
 | 
				
			||||||
								<button class="ui red tiny button delete-button" id="delete-email" data-url="{{AppSubUrl}}/user/settings/account/email/delete" data-id="{{.ID}}">
 | 
													<button class="ui red tiny button delete-button" data-modal-id="delete-email" data-url="{{AppSubUrl}}/user/settings/account/email/delete" data-id="{{.ID}}">
 | 
				
			||||||
									{{$.i18n.Tr "settings.delete_email"}}
 | 
														{{$.i18n.Tr "settings.delete_email"}}
 | 
				
			||||||
								</button>
 | 
													</button>
 | 
				
			||||||
							</div>
 | 
												</div>
 | 
				
			||||||
@@ -185,7 +185,7 @@
 | 
				
			|||||||
					<input id="password-confirmation" name="password" type="password" autocomplete="off" required>
 | 
										<input id="password-confirmation" name="password" type="password" autocomplete="off" required>
 | 
				
			||||||
				</div>
 | 
									</div>
 | 
				
			||||||
				<div class="field">
 | 
									<div class="field">
 | 
				
			||||||
					<div class="ui red button delete-button" id="delete-account" data-type="form" data-form="#delete-form">
 | 
										<div class="ui red button delete-button" data-modal-id="delete-account" data-type="form" data-form="#delete-form">
 | 
				
			||||||
						{{.i18n.Tr "settings.confirm_delete_account"}}
 | 
											{{.i18n.Tr "settings.confirm_delete_account"}}
 | 
				
			||||||
					</div>
 | 
										</div>
 | 
				
			||||||
					<a href="{{AppSubUrl}}/user/forgot_password?email={{.Email}}">{{.i18n.Tr "auth.forgot_password"}}</a>
 | 
										<a href="{{AppSubUrl}}/user/forgot_password?email={{.Email}}">{{.i18n.Tr "auth.forgot_password"}}</a>
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -14,7 +14,7 @@
 | 
				
			|||||||
				{{range .Tokens}}
 | 
									{{range .Tokens}}
 | 
				
			||||||
					<div class="item">
 | 
										<div class="item">
 | 
				
			||||||
						<div class="right floated content">
 | 
											<div class="right floated content">
 | 
				
			||||||
								<button class="ui red tiny button delete-button" id="delete-token" data-url="{{$.Link}}/delete" data-id="{{.ID}}">
 | 
													<button class="ui red tiny button delete-button" data-modal-id="delete-token" data-url="{{$.Link}}/delete" data-id="{{.ID}}">
 | 
				
			||||||
									{{svg "octicon-trash" 16 "mr-2"}}
 | 
														{{svg "octicon-trash" 16 "mr-2"}}
 | 
				
			||||||
									{{$.i18n.Tr "settings.delete_token"}}
 | 
														{{$.i18n.Tr "settings.delete_token"}}
 | 
				
			||||||
								</button>
 | 
													</button>
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -13,7 +13,7 @@
 | 
				
			|||||||
						{{svg "octicon-pencil" 16 "mr-2"}}
 | 
											{{svg "octicon-pencil" 16 "mr-2"}}
 | 
				
			||||||
						{{$.i18n.Tr "settings.oauth2_application_edit"}}
 | 
											{{$.i18n.Tr "settings.oauth2_application_edit"}}
 | 
				
			||||||
					</a>
 | 
										</a>
 | 
				
			||||||
					<button class="ui red tiny button delete-button" id="remove-gitea-oauth2-application"
 | 
										<button class="ui red tiny button delete-button" data-modal-id="remove-gitea-oauth2-application"
 | 
				
			||||||
							data-url="{{AppSubUrl}}/user/settings/applications/oauth2/delete"
 | 
												data-url="{{AppSubUrl}}/user/settings/applications/oauth2/delete"
 | 
				
			||||||
							data-id="{{$app.ID}}">
 | 
												data-id="{{$app.ID}}">
 | 
				
			||||||
						{{svg "octicon-trash" 16 "mr-2"}}
 | 
											{{svg "octicon-trash" 16 "mr-2"}}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -9,7 +9,7 @@
 | 
				
			|||||||
		{{range $grant := .Grants}}
 | 
							{{range $grant := .Grants}}
 | 
				
			||||||
			<div class="item">
 | 
								<div class="item">
 | 
				
			||||||
				<div class="right floated content">
 | 
									<div class="right floated content">
 | 
				
			||||||
					<button class="ui red tiny button delete-button" id="revoke-gitea-oauth2-grant"
 | 
										<button class="ui red tiny button delete-button" data-modal-id="revoke-gitea-oauth2-grant"
 | 
				
			||||||
							data-url="{{AppSubUrl}}/user/settings/applications/oauth2/revoke"
 | 
												data-url="{{AppSubUrl}}/user/settings/applications/oauth2/revoke"
 | 
				
			||||||
							data-id="{{$grant.ID}}">
 | 
												data-id="{{$grant.ID}}">
 | 
				
			||||||
						{{$.i18n.Tr "settings.revoke_key"}}
 | 
											{{$.i18n.Tr "settings.revoke_key"}}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -12,7 +12,7 @@
 | 
				
			|||||||
		{{range .GPGKeys}}
 | 
							{{range .GPGKeys}}
 | 
				
			||||||
			<div class="item">
 | 
								<div class="item">
 | 
				
			||||||
				<div class="right floated content">
 | 
									<div class="right floated content">
 | 
				
			||||||
					<button class="ui red tiny button delete-button" id="delete-gpg" data-url="{{$.Link}}/delete?type=gpg" data-id="{{.ID}}">
 | 
										<button class="ui red tiny button delete-button" data-modal-id="delete-gpg" data-url="{{$.Link}}/delete?type=gpg" data-id="{{.ID}}">
 | 
				
			||||||
						{{$.i18n.Tr "settings.delete_key"}}
 | 
											{{$.i18n.Tr "settings.delete_key"}}
 | 
				
			||||||
					</button>
 | 
										</button>
 | 
				
			||||||
					{{if and (not .Verified) (ne $.VerifyingID .KeyID)}}
 | 
										{{if and (not .Verified) (ne $.VerifyingID .KeyID)}}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -17,7 +17,7 @@
 | 
				
			|||||||
			{{range .Principals}}
 | 
								{{range .Principals}}
 | 
				
			||||||
				<div class="item">
 | 
									<div class="item">
 | 
				
			||||||
					<div class="right floated content">
 | 
										<div class="right floated content">
 | 
				
			||||||
						<button class="ui red tiny button delete-button" id="delete-principal" data-url="{{$.Link}}/delete?type=principal" data-id="{{.ID}}">
 | 
											<button class="ui red tiny button delete-button" data-modal-id="delete-principal" data-url="{{$.Link}}/delete?type=principal" data-id="{{.ID}}">
 | 
				
			||||||
							{{$.i18n.Tr "settings.delete_key"}}
 | 
												{{$.i18n.Tr "settings.delete_key"}}
 | 
				
			||||||
						</button>
 | 
											</button>
 | 
				
			||||||
					</div>
 | 
										</div>
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -16,7 +16,7 @@
 | 
				
			|||||||
		{{range $index, $key := .Keys}}
 | 
							{{range $index, $key := .Keys}}
 | 
				
			||||||
			<div class="item">
 | 
								<div class="item">
 | 
				
			||||||
				<div class="right floated content">
 | 
									<div class="right floated content">
 | 
				
			||||||
					<button class="ui red tiny button delete-button{{if index $.ExternalKeys $index}} disabled{{end}}" id="delete-ssh" data-url="{{$.Link}}/delete?type=ssh" data-id="{{.ID}}"{{if index $.ExternalKeys $index}} title="{{$.i18n.Tr "settings.ssh_externally_managed"}}"{{end}}>
 | 
										<button class="ui red tiny button delete-button{{if index $.ExternalKeys $index}} disabled{{end}}" data-modal-id="delete-ssh" data-url="{{$.Link}}/delete?type=ssh" data-id="{{.ID}}"{{if index $.ExternalKeys $index}} title="{{$.i18n.Tr "settings.ssh_externally_managed"}}"{{end}}>
 | 
				
			||||||
						{{$.i18n.Tr "settings.delete_key"}}
 | 
											{{$.i18n.Tr "settings.delete_key"}}
 | 
				
			||||||
					</button>
 | 
										</button>
 | 
				
			||||||
				</div>
 | 
									</div>
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -10,7 +10,7 @@
 | 
				
			|||||||
		{{range $loginSource, $provider := .AccountLinks}}
 | 
							{{range $loginSource, $provider := .AccountLinks}}
 | 
				
			||||||
			<div class="item">
 | 
								<div class="item">
 | 
				
			||||||
				<div class="right floated content">
 | 
									<div class="right floated content">
 | 
				
			||||||
						<button class="ui red tiny button delete-button" id="delete-account-link" data-url="{{AppSubUrl}}/user/settings/security/account_link" data-id="{{$loginSource.ID}}">
 | 
											<button class="ui red tiny button delete-button" data-modal-id="delete-account-link" data-url="{{AppSubUrl}}/user/settings/security/account_link" data-id="{{$loginSource.ID}}">
 | 
				
			||||||
							{{$.i18n.Tr "settings.delete_key"}}
 | 
												{{$.i18n.Tr "settings.delete_key"}}
 | 
				
			||||||
						</button>
 | 
											</button>
 | 
				
			||||||
				</div>
 | 
									</div>
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -9,7 +9,7 @@
 | 
				
			|||||||
		{{range .OpenIDs}}
 | 
							{{range .OpenIDs}}
 | 
				
			||||||
			<div class="item">
 | 
								<div class="item">
 | 
				
			||||||
				<div class="right floated content">
 | 
									<div class="right floated content">
 | 
				
			||||||
						<button class="ui red tiny button delete-button" id="delete-openid" data-url="{{AppSubUrl}}/user/settings/security/openid/delete" data-id="{{.ID}}">
 | 
											<button class="ui red tiny button delete-button" data-modal-id="delete-openid" data-url="{{AppSubUrl}}/user/settings/security/openid/delete" data-id="{{.ID}}">
 | 
				
			||||||
							{{$.i18n.Tr "settings.delete_key"}}
 | 
												{{$.i18n.Tr "settings.delete_key"}}
 | 
				
			||||||
						</button>
 | 
											</button>
 | 
				
			||||||
				</div>
 | 
									</div>
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -13,7 +13,7 @@
 | 
				
			|||||||
	<form class="ui form" action="{{AppSubUrl}}/user/settings/security/two_factor/disable" method="post" enctype="multipart/form-data" id="disable-form">
 | 
						<form class="ui form" action="{{AppSubUrl}}/user/settings/security/two_factor/disable" method="post" enctype="multipart/form-data" id="disable-form">
 | 
				
			||||||
		{{.CsrfTokenHtml}}
 | 
							{{.CsrfTokenHtml}}
 | 
				
			||||||
		<p>{{.i18n.Tr "settings.twofa_disable_note"}}</p>
 | 
							<p>{{.i18n.Tr "settings.twofa_disable_note"}}</p>
 | 
				
			||||||
		<div class="ui red button delete-button" id="disable-twofa" data-type="form" data-form="#disable-form">{{$.i18n.Tr "settings.twofa_disable"}}</div>
 | 
							<div class="ui red button delete-button" data-modal-id="disable-twofa" data-type="form" data-form="#disable-form">{{$.i18n.Tr "settings.twofa_disable"}}</div>
 | 
				
			||||||
	</form>
 | 
						</form>
 | 
				
			||||||
	{{else}}
 | 
						{{else}}
 | 
				
			||||||
	<p>{{.i18n.Tr "settings.twofa_not_enrolled"}}</p>
 | 
						<p>{{.i18n.Tr "settings.twofa_not_enrolled"}}</p>
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -8,7 +8,7 @@
 | 
				
			|||||||
			{{range .U2FRegistrations}}
 | 
								{{range .U2FRegistrations}}
 | 
				
			||||||
				<div class="item">
 | 
									<div class="item">
 | 
				
			||||||
					<div class="right floated content">
 | 
										<div class="right floated content">
 | 
				
			||||||
						<button class="ui red tiny button delete-button" id="delete-registration" data-url="{{$.Link}}/u2f/delete" data-id="{{.ID}}">
 | 
											<button class="ui red tiny button delete-button" data-modal-id="delete-registration" data-url="{{$.Link}}/u2f/delete" data-id="{{.ID}}">
 | 
				
			||||||
						{{$.i18n.Tr "settings.delete_key"}}
 | 
											{{$.i18n.Tr "settings.delete_key"}}
 | 
				
			||||||
						</button>
 | 
											</button>
 | 
				
			||||||
					</div>
 | 
										</div>
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -2956,13 +2956,19 @@ $(() => {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
function showDeletePopup() {
 | 
					function showDeletePopup() {
 | 
				
			||||||
  const $this = $(this);
 | 
					  const $this = $(this);
 | 
				
			||||||
 | 
					  const dataArray = $this.data();
 | 
				
			||||||
  let filter = '';
 | 
					  let filter = '';
 | 
				
			||||||
  if ($this.attr('id')) {
 | 
					  if ($this.data('modal-id')) {
 | 
				
			||||||
    filter += `#${$this.attr('id')}`;
 | 
					    filter += `#${$this.data('modal-id')}`;
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  const dialog = $(`.delete.modal${filter}`);
 | 
					  const dialog = $(`.delete.modal${filter}`);
 | 
				
			||||||
  dialog.find('.name').text($this.data('name'));
 | 
					  dialog.find('.name').text($this.data('name'));
 | 
				
			||||||
 | 
					  for (const [key, value] of Object.entries(dataArray)) {
 | 
				
			||||||
 | 
					    if (key && key.startsWith('data')) {
 | 
				
			||||||
 | 
					      dialog.find(`.${key}`).text(value);
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  dialog.modal({
 | 
					  dialog.modal({
 | 
				
			||||||
    closable: false,
 | 
					    closable: false,
 | 
				
			||||||
@@ -2972,10 +2978,19 @@ function showDeletePopup() {
 | 
				
			|||||||
        return;
 | 
					        return;
 | 
				
			||||||
      }
 | 
					      }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
      $.post($this.data('url'), {
 | 
					      const postData = {
 | 
				
			||||||
        _csrf: csrf,
 | 
					        _csrf: csrf,
 | 
				
			||||||
        id: $this.data('id')
 | 
					      };
 | 
				
			||||||
      }).done((data) => {
 | 
					      for (const [key, value] of Object.entries(dataArray)) {
 | 
				
			||||||
 | 
					        if (key && key.startsWith('data')) {
 | 
				
			||||||
 | 
					          postData[key.substr(4)] = value;
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					        if (key === 'id') {
 | 
				
			||||||
 | 
					          postData['id'] = value;
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      $.post($this.data('url'), postData).done((data) => {
 | 
				
			||||||
        window.location.href = data.redirect;
 | 
					        window.location.href = data.redirect;
 | 
				
			||||||
      });
 | 
					      });
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user