Skip to content

Commit e37342d

Browse files
zeripath6543silverwindtechknowlogick
authored
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 <[email protected]> * avoid for-in Signed-off-by: Andrew Thornton <[email protected]> * Revert "avoid for-in" This reverts commit 2af9a6f. * Apply suggestions from code review Co-authored-by: silverwind <[email protected]> Co-authored-by: 6543 <[email protected]> Co-authored-by: silverwind <[email protected]> Co-authored-by: techknowlogick <[email protected]>
1 parent 3289ace commit e37342d

19 files changed

+157
-40
lines changed

options/locale/locale_en-US.ini

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2176,12 +2176,15 @@ members.member_role = Member Role:
21762176
members.owner = Owner
21772177
members.member = Member
21782178
members.remove = Remove
2179+
members.remove.detail = Remove %[1]s from %[2]s?
21792180
members.leave = Leave
2181+
members.leave.detail = Leave %s?
21802182
members.invite_desc = Add a new member to %s:
21812183
members.invite_now = Invite Now
21822184
21832185
teams.join = Join
21842186
teams.leave = Leave
2187+
teams.leave.detail = Leave %s?
21852188
teams.can_create_org_repo = Create repositories
21862189
teams.can_create_org_repo_helper = Members can create new repositories in organization. Creator will get administrator access to the new repository.
21872190
teams.read_access = Read Access

routers/web/org/members.go

Lines changed: 13 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -99,14 +99,18 @@ func MembersAction(ctx *context.Context) {
9999
err = org.RemoveMember(uid)
100100
if models.IsErrLastOrgOwner(err) {
101101
ctx.Flash.Error(ctx.Tr("form.last_org_owner"))
102-
ctx.Redirect(ctx.Org.OrgLink + "/members")
102+
ctx.JSON(http.StatusOK, map[string]interface{}{
103+
"redirect": ctx.Org.OrgLink + "/members",
104+
})
103105
return
104106
}
105107
case "leave":
106108
err = org.RemoveMember(ctx.User.ID)
107109
if models.IsErrLastOrgOwner(err) {
108110
ctx.Flash.Error(ctx.Tr("form.last_org_owner"))
109-
ctx.Redirect(ctx.Org.OrgLink + "/members")
111+
ctx.JSON(http.StatusOK, map[string]interface{}{
112+
"redirect": ctx.Org.OrgLink + "/members",
113+
})
110114
return
111115
}
112116
}
@@ -120,9 +124,12 @@ func MembersAction(ctx *context.Context) {
120124
return
121125
}
122126

123-
if ctx.Params(":action") != "leave" {
124-
ctx.Redirect(ctx.Org.OrgLink + "/members")
125-
} else {
126-
ctx.Redirect(setting.AppSubURL + "/")
127+
redirect := ctx.Org.OrgLink + "/members"
128+
if ctx.Params(":action") == "leave" {
129+
redirect = setting.AppSubURL + "/"
127130
}
131+
132+
ctx.JSON(http.StatusOK, map[string]interface{}{
133+
"redirect": redirect,
134+
})
128135
}

routers/web/org/teams.go

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -66,13 +66,47 @@ func TeamsAction(ctx *context.Context) {
6666
err = ctx.Org.Team.AddMember(ctx.User.ID)
6767
case "leave":
6868
err = ctx.Org.Team.RemoveMember(ctx.User.ID)
69+
if err != nil {
70+
if models.IsErrLastOrgOwner(err) {
71+
ctx.Flash.Error(ctx.Tr("form.last_org_owner"))
72+
} else {
73+
log.Error("Action(%s): %v", ctx.Params(":action"), err)
74+
ctx.JSON(http.StatusOK, map[string]interface{}{
75+
"ok": false,
76+
"err": err.Error(),
77+
})
78+
return
79+
}
80+
}
81+
ctx.JSON(http.StatusOK,
82+
map[string]interface{}{
83+
"redirect": ctx.Org.OrgLink + "/teams/",
84+
})
85+
return
6986
case "remove":
7087
if !ctx.Org.IsOwner {
7188
ctx.Error(http.StatusNotFound)
7289
return
7390
}
7491
err = ctx.Org.Team.RemoveMember(uid)
7592
page = "team"
93+
if err != nil {
94+
if models.IsErrLastOrgOwner(err) {
95+
ctx.Flash.Error(ctx.Tr("form.last_org_owner"))
96+
} else {
97+
log.Error("Action(%s): %v", ctx.Params(":action"), err)
98+
ctx.JSON(http.StatusOK, map[string]interface{}{
99+
"ok": false,
100+
"err": err.Error(),
101+
})
102+
return
103+
}
104+
}
105+
ctx.JSON(http.StatusOK,
106+
map[string]interface{}{
107+
"redirect": ctx.Org.OrgLink + "/teams/" + ctx.Org.Team.LowerName,
108+
})
109+
return
76110
case "add":
77111
if !ctx.Org.IsOwner {
78112
ctx.Error(http.StatusNotFound)

templates/org/member/members.tmpl

Lines changed: 31 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -54,14 +54,18 @@
5454
<div class="ui four wide column">
5555
<div class="text right">
5656
{{if eq $.SignedUser.ID .ID}}
57-
<form method="post" action="{{$.OrgLink}}/members/action/leave">
58-
{{$.CsrfTokenHtml}}
59-
<button type="submit" class="ui red small button" name="uid" value="{{.ID}}">{{$.i18n.Tr "org.members.leave"}}</button>
57+
<form>
58+
<button class="ui red small button delete-button" data-modal-id="leave-organization"
59+
data-url="{{$.OrgLink}}/members/action/leave" data-datauid="{{.ID}}"
60+
data-name="{{.DisplayName}}"
61+
data-data-organization-name="{{$.Org.DisplayName}}">{{$.i18n.Tr "org.members.leave"}}</button>
6062
</form>
6163
{{else if $.IsOrganizationOwner}}
62-
<form method="post" action="{{$.OrgLink}}/members/action/remove">
63-
{{$.CsrfTokenHtml}}
64-
<button type="submit" class="ui red small button" name="uid" value="{{.ID}}">{{$.i18n.Tr "org.members.remove"}}</button>
64+
<form>
65+
<button class="ui red small button delete-button" data-modal-id="remove-organization-member"
66+
data-url="{{$.OrgLink}}/members/action/remove" data-datauid="{{.ID}}"
67+
data-name="{{.DisplayName}}"
68+
data-data-organization-name="{{$.Org.DisplayName}}">{{$.i18n.Tr "org.members.remove"}}</button>
6569
</form>
6670
{{end}}
6771
</div>
@@ -73,4 +77,25 @@
7377
{{template "base/paginate" .}}
7478
</div>
7579
</div>
80+
<div class="ui small basic delete modal" id="leave-organization">
81+
<div class="ui icon header">
82+
{{svg "octicon-x" 16 "close inside"}}
83+
{{$.i18n.Tr "org.members.leave"}}
84+
</div>
85+
<div class="content">
86+
<p>{{$.i18n.Tr "org.members.leave.detail" `<span class="dataOrganizationName"></span>` | Safe}}</p>
87+
</div>
88+
{{template "base/delete_modal_actions" .}}
89+
</div>
90+
<div class="ui small basic delete modal" id="remove-organization-member">
91+
<div class="ui icon header">
92+
{{svg "octicon-x" 16 "close inside"}}
93+
{{$.i18n.Tr "org.members.remove"}}
94+
</div>
95+
<div class="content">
96+
<p>{{$.i18n.Tr "org.members.remove.detail" `<span class="name"></span>` `<span class="dataOrganizationName"></span>` | Safe}}</p>
97+
</div>
98+
{{template "base/delete_modal_actions" .}}
99+
</div>
100+
76101
{{template "base/footer" .}}

templates/org/team/members.tmpl

Lines changed: 16 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -26,10 +26,12 @@
2626
<div class="ui bottom attached table segment members">
2727
{{range .Team.Members}}
2828
<div class="item">
29-
{{if $.IsOrganizationOwner}}
30-
<form method="post" action="{{$.OrgLink}}/teams/{{$.Team.LowerName}}/action/remove">
31-
{{$.CsrfTokenHtml}}
32-
<button type="submit" class="ui red small button right" name="uid" value="{{.ID}}">{{$.i18n.Tr "org.members.remove"}}</button>
29+
{{if and $.IsOrganizationOwner (not (eq $.SignedUser.ID .ID))}}
30+
<form>
31+
<button class="ui red button delete-button right" data-modal-id="remove-team-member"
32+
data-url="{{$.OrgLink}}/teams/{{$.Team.LowerName}}/action/remove" data-datauid="{{.ID}}"
33+
data-name="{{.DisplayName}}"
34+
data-data-team-name="{{$.Team.Name}}">{{$.i18n.Tr "org.members.remove"}}</button>
3335
</form>
3436
{{end}}
3537
<a href="{{.HomeLink}}">
@@ -47,4 +49,14 @@
4749
</div>
4850
</div>
4951
</div>
52+
<div class="ui small basic delete modal" id="remove-team-member">
53+
<div class="ui icon header">
54+
{{svg "octicon-x" 16 "close inside"}}
55+
{{$.i18n.Tr "org.members.remove"}}
56+
</div>
57+
<div class="content">
58+
<p>{{$.i18n.Tr "org.members.remove.detail" `<span class="name"></span>` `<span class="dataTeamName"></span>` | Safe}}</p>
59+
</div>
60+
{{template "base/delete_modal_actions" .}}
61+
</div>
5062
{{template "base/footer" .}}

templates/org/team/sidebar.tmpl

Lines changed: 14 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -3,10 +3,10 @@
33
<strong>{{.Team.Name}}</strong>
44
<div class="ui right">
55
{{if .Team.IsMember $.SignedUser.ID}}
6-
<form method="post" action="{{.OrgLink}}/teams/{{.Team.LowerName}}/action/leave">
7-
{{$.CsrfTokenHtml}}
8-
<input type="hidden" name="page" value="home"/>
9-
<button type="submit" class="ui red tiny button" name="uid" value="{{$.SignedUser.ID}}">{{$.i18n.Tr "org.teams.leave"}}</button>
6+
<form>
7+
<button class="ui red tiny button delete-button" data-modal-id="leave-team-sidebar"
8+
data-url="{{.OrgLink}}/teams/{{.Team.LowerName}}/action/leave" data-datauid="{{$.SignedUser.ID}}"
9+
data-name="{{.Team.Name}}">{{$.i18n.Tr "org.teams.leave"}}</button>
1010
</form>
1111
{{else if .IsOrganizationOwner}}
1212
<form method="post" action="{{.OrgLink}}/teams/{{.Team.LowerName}}/action/join">
@@ -59,3 +59,13 @@
5959
</div>
6060
{{end}}
6161
</div>
62+
<div class="ui small basic delete modal" id="leave-team-sidebar">
63+
<div class="ui icon header">
64+
{{svg "octicon-x" 16 "close inside"}}
65+
{{$.i18n.Tr "org.teams.leave"}}
66+
</div>
67+
<div class="content">
68+
<p>{{$.i18n.Tr "org.teams.leave.detail" `<span class="name"></span>` | Safe}}</p>
69+
</div>
70+
{{template "base/delete_modal_actions" .}}
71+
</div>

templates/org/team/teams.tmpl

Lines changed: 14 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -17,9 +17,10 @@
1717
<a class="text black" href="{{$.OrgLink}}/teams/{{.LowerName}}"><strong>{{.Name}}</strong></a>
1818
<div class="ui right">
1919
{{if .IsMember $.SignedUser.ID}}
20-
<form method="post" action="{{$.OrgLink}}/teams/{{.LowerName}}/action/leave">
21-
{{$.CsrfTokenHtml}}
22-
<button type="submit" class="ui red small button" name="uid" value="{{$.SignedUser.ID}}">{{$.i18n.Tr "org.teams.leave"}}</button>
20+
<form>
21+
<button class="ui red tiny button delete-button" data-modal-id="leave-team"
22+
data-url="{{$.OrgLink}}/teams/{{.LowerName}}/action/leave" data-datauid="{{$.SignedUser.ID}}"
23+
data-name="{{.Name}}">{{$.i18n.Tr "org.teams.leave"}}</button>
2324
</form>
2425
{{else if $.IsOrganizationOwner}}
2526
<form method="post" action="{{$.OrgLink}}/teams/{{.LowerName}}/action/join">
@@ -44,4 +45,14 @@
4445
</div>
4546
</div>
4647
</div>
48+
<div class="ui small basic delete modal" id="leave-team">
49+
<div class="ui icon header">
50+
{{svg "octicon-x" 16 "close inside"}}
51+
{{$.i18n.Tr "org.teams.leave"}}
52+
</div>
53+
<div class="content">
54+
<p>{{$.i18n.Tr "org.teams.leave.detail" `<span class="name"></span>` | Safe}}</p>
55+
</div>
56+
{{template "base/delete_modal_actions" .}}
57+
</div>
4758
{{template "base/footer" .}}

templates/user/settings/account.tmpl

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -72,7 +72,7 @@
7272
<div class="item">
7373
{{if not .IsPrimary}}
7474
<div class="right floated content">
75-
<button class="ui red tiny button delete-button" id="delete-email" data-url="{{AppSubUrl}}/user/settings/account/email/delete" data-id="{{.ID}}">
75+
<button class="ui red tiny button delete-button" data-modal-id="delete-email" data-url="{{AppSubUrl}}/user/settings/account/email/delete" data-id="{{.ID}}">
7676
{{$.i18n.Tr "settings.delete_email"}}
7777
</button>
7878
</div>
@@ -185,7 +185,7 @@
185185
<input id="password-confirmation" name="password" type="password" autocomplete="off" required>
186186
</div>
187187
<div class="field">
188-
<div class="ui red button delete-button" id="delete-account" data-type="form" data-form="#delete-form">
188+
<div class="ui red button delete-button" data-modal-id="delete-account" data-type="form" data-form="#delete-form">
189189
{{.i18n.Tr "settings.confirm_delete_account"}}
190190
</div>
191191
<a href="{{AppSubUrl}}/user/forgot_password?email={{.Email}}">{{.i18n.Tr "auth.forgot_password"}}</a>

templates/user/settings/applications.tmpl

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@
1414
{{range .Tokens}}
1515
<div class="item">
1616
<div class="right floated content">
17-
<button class="ui red tiny button delete-button" id="delete-token" data-url="{{$.Link}}/delete" data-id="{{.ID}}">
17+
<button class="ui red tiny button delete-button" data-modal-id="delete-token" data-url="{{$.Link}}/delete" data-id="{{.ID}}">
1818
{{svg "octicon-trash" 16 "mr-2"}}
1919
{{$.i18n.Tr "settings.delete_token"}}
2020
</button>

templates/user/settings/applications_oauth2.tmpl

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@
1313
{{svg "octicon-pencil" 16 "mr-2"}}
1414
{{$.i18n.Tr "settings.oauth2_application_edit"}}
1515
</a>
16-
<button class="ui red tiny button delete-button" id="remove-gitea-oauth2-application"
16+
<button class="ui red tiny button delete-button" data-modal-id="remove-gitea-oauth2-application"
1717
data-url="{{AppSubUrl}}/user/settings/applications/oauth2/delete"
1818
data-id="{{$app.ID}}">
1919
{{svg "octicon-trash" 16 "mr-2"}}

0 commit comments

Comments
 (0)