Implementation of all repositories of a user from user->settings (#1740)
* Implementation of all repositories of a user from user->settings * Update message when no repository found * Update according to comments * Change UI to have a better look * improved user repositories UI
This commit is contained in:
parent
1739e84ac0
commit
e5d80b7090
|
@ -308,6 +308,7 @@ ssh_gpg_keys = SSH / GPG Keys
|
||||||
social = Social Accounts
|
social = Social Accounts
|
||||||
applications = Applications
|
applications = Applications
|
||||||
orgs = Organizations
|
orgs = Organizations
|
||||||
|
repos = Repositories
|
||||||
delete = Delete Account
|
delete = Delete Account
|
||||||
twofa = Two-Factor Authentication
|
twofa = Two-Factor Authentication
|
||||||
account_link = External Accounts
|
account_link = External Accounts
|
||||||
|
@ -446,6 +447,7 @@ remove_account_link_desc = Removing this linked account will revoke all related
|
||||||
remove_account_link_success = Account link has been removed successfully!
|
remove_account_link_success = Account link has been removed successfully!
|
||||||
|
|
||||||
orgs_none = You are not a member of any organizations.
|
orgs_none = You are not a member of any organizations.
|
||||||
|
repos_none = You do not own any repositories
|
||||||
|
|
||||||
delete_account = Delete Your Account
|
delete_account = Delete Your Account
|
||||||
delete_prompt = The operation will delete your account permanently, and <strong>CANNOT</strong> be undone!
|
delete_prompt = The operation will delete your account permanently, and <strong>CANNOT</strong> be undone!
|
||||||
|
|
|
@ -2877,6 +2877,9 @@ footer .ui.language .menu {
|
||||||
padding-top: 15px;
|
padding-top: 15px;
|
||||||
padding-bottom: 5px;
|
padding-bottom: 5px;
|
||||||
}
|
}
|
||||||
|
.user.settings .iconFloat {
|
||||||
|
float: left;
|
||||||
|
}
|
||||||
.dashboard {
|
.dashboard {
|
||||||
padding-top: 15px;
|
padding-top: 15px;
|
||||||
padding-bottom: 80px;
|
padding-bottom: 80px;
|
||||||
|
|
|
@ -101,4 +101,9 @@
|
||||||
padding-top: 15px;
|
padding-top: 15px;
|
||||||
padding-bottom: 5px;
|
padding-bottom: 5px;
|
||||||
}
|
}
|
||||||
|
&.settings {
|
||||||
|
.iconFloat {
|
||||||
|
float: left;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -237,6 +237,7 @@ func RegisterRoutes(m *macaron.Macaron) {
|
||||||
m.Route("/delete", "GET,POST", user.SettingsDelete)
|
m.Route("/delete", "GET,POST", user.SettingsDelete)
|
||||||
m.Combo("/account_link").Get(user.SettingsAccountLinks).Post(user.SettingsDeleteAccountLink)
|
m.Combo("/account_link").Get(user.SettingsAccountLinks).Post(user.SettingsDeleteAccountLink)
|
||||||
m.Get("/organization", user.SettingsOrganization)
|
m.Get("/organization", user.SettingsOrganization)
|
||||||
|
m.Get("/repos", user.SettingsRepos)
|
||||||
m.Group("/two_factor", func() {
|
m.Group("/two_factor", func() {
|
||||||
m.Get("", user.SettingsTwoFactor)
|
m.Get("", user.SettingsTwoFactor)
|
||||||
m.Post("/regenerate_scratch", user.SettingsTwoFactorRegenerateScratch)
|
m.Post("/regenerate_scratch", user.SettingsTwoFactorRegenerateScratch)
|
||||||
|
|
|
@ -39,6 +39,7 @@ const (
|
||||||
tplSettingsTwofaEnroll base.TplName = "user/settings/twofa_enroll"
|
tplSettingsTwofaEnroll base.TplName = "user/settings/twofa_enroll"
|
||||||
tplSettingsAccountLink base.TplName = "user/settings/account_link"
|
tplSettingsAccountLink base.TplName = "user/settings/account_link"
|
||||||
tplSettingsOrganization base.TplName = "user/settings/organization"
|
tplSettingsOrganization base.TplName = "user/settings/organization"
|
||||||
|
tplSettingsRepositories base.TplName = "user/settings/repos"
|
||||||
tplSettingsDelete base.TplName = "user/settings/delete"
|
tplSettingsDelete base.TplName = "user/settings/delete"
|
||||||
tplSecurity base.TplName = "user/security"
|
tplSecurity base.TplName = "user/security"
|
||||||
)
|
)
|
||||||
|
@ -785,3 +786,37 @@ func SettingsOrganization(ctx *context.Context) {
|
||||||
ctx.Data["Orgs"] = orgs
|
ctx.Data["Orgs"] = orgs
|
||||||
ctx.HTML(200, tplSettingsOrganization)
|
ctx.HTML(200, tplSettingsOrganization)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// SettingsRepos display a list of all repositories of the user
|
||||||
|
func SettingsRepos(ctx *context.Context) {
|
||||||
|
ctx.Data["Title"] = ctx.Tr("settings")
|
||||||
|
ctx.Data["PageIsSettingsRepos"] = true
|
||||||
|
ctxUser := ctx.User
|
||||||
|
|
||||||
|
var err error
|
||||||
|
if err = ctxUser.GetRepositories(1, setting.UI.User.RepoPagingNum); err != nil {
|
||||||
|
ctx.Handle(500, "GetRepositories", err)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
repos := ctxUser.Repos
|
||||||
|
|
||||||
|
for i := range repos {
|
||||||
|
if repos[i].IsFork {
|
||||||
|
err := repos[i].GetBaseRepo()
|
||||||
|
if err != nil {
|
||||||
|
ctx.Handle(500, "GetBaseRepo", err)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
err = repos[i].BaseRepo.GetOwner()
|
||||||
|
if err != nil {
|
||||||
|
ctx.Handle(500, "GetOwner", err)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
ctx.Data["Owner"] = ctxUser
|
||||||
|
ctx.Data["Repos"] = repos
|
||||||
|
|
||||||
|
ctx.HTML(200, tplSettingsRepositories)
|
||||||
|
}
|
||||||
|
|
|
@ -30,6 +30,8 @@
|
||||||
</a>
|
</a>
|
||||||
<a class="{{if .PageIsSettingsOrganization}}active{{end}} item" href="{{AppSubUrl}}/user/settings/organization">
|
<a class="{{if .PageIsSettingsOrganization}}active{{end}} item" href="{{AppSubUrl}}/user/settings/organization">
|
||||||
{{.i18n.Tr "settings.organization"}}
|
{{.i18n.Tr "settings.organization"}}
|
||||||
|
<a class="{{if .PageIsSettingsRepos}}active{{end}} item" href="{{AppSubUrl}}/user/settings/repos">
|
||||||
|
{{.i18n.Tr "settings.repos"}}
|
||||||
</a>
|
</a>
|
||||||
<a class="{{if .PageIsSettingsDelete}}active{{end}} item" href="{{AppSubUrl}}/user/settings/delete">
|
<a class="{{if .PageIsSettingsDelete}}active{{end}} item" href="{{AppSubUrl}}/user/settings/delete">
|
||||||
{{.i18n.Tr "settings.delete"}}
|
{{.i18n.Tr "settings.delete"}}
|
||||||
|
|
|
@ -0,0 +1,53 @@
|
||||||
|
{{template "base/head" .}}
|
||||||
|
<div class="user settings">
|
||||||
|
{{template "user/settings/navbar" .}}
|
||||||
|
<div class="ui container">
|
||||||
|
{{template "base/alert" .}}
|
||||||
|
<h4 class="ui top attached header">
|
||||||
|
{{.i18n.Tr "settings.repos"}}
|
||||||
|
</h4>
|
||||||
|
<div class="ui attached segment">
|
||||||
|
{{if .Repos}}
|
||||||
|
<div class="ui middle aligned divided list">
|
||||||
|
{{range .Repos}}
|
||||||
|
<div class="item">
|
||||||
|
<div class="content">
|
||||||
|
{{if .IsPrivate}}
|
||||||
|
<span class="text gold iconFloat"><i class="octicon octicon-lock"></i></span>
|
||||||
|
{{else if .IsFork}}
|
||||||
|
<span class="iconFloat"><i class="octicon octicon-repo-forked"></i></span>
|
||||||
|
{{else if .IsMirror}}
|
||||||
|
<span class="iconFloat"><i class="octicon octicon-repo-clone"></i></span>
|
||||||
|
{{else}}
|
||||||
|
<span class="iconFloat"><i class="octicon octicon-repo"></i></span>
|
||||||
|
{{end}}
|
||||||
|
<a class="name" href="{{AppSubUrl}}/{{$.Owner.Name}}/{{.Name}}">{{$.Owner.Name}}/{{.Name}}</a>
|
||||||
|
<span>{{SizeFmt .Size}}</span>
|
||||||
|
{{if .IsFork}}
|
||||||
|
{{$.i18n.Tr "repo.forked_from"}}
|
||||||
|
<span><a href="{{AppSubUrl}}/{{.BaseRepo.Owner.Name}}/{{.BaseRepo.Name}}">{{.BaseRepo.Owner.Name}}/{{.BaseRepo.Name}}</a></span>
|
||||||
|
{{end}}
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
{{end}}
|
||||||
|
</div>
|
||||||
|
{{else}}
|
||||||
|
<div class="item">
|
||||||
|
{{.i18n.Tr "settings.repos_none"}}
|
||||||
|
</div>
|
||||||
|
{{end}}
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="ui small basic delete modal">
|
||||||
|
<div class="ui icon header">
|
||||||
|
<i class="trash icon"></i>
|
||||||
|
{{.i18n.Tr "settings.remove_account_link"}}
|
||||||
|
</div>
|
||||||
|
<div class="content">
|
||||||
|
<p>{{.i18n.Tr "settings.remove_account_link_desc"}}</p>
|
||||||
|
</div>
|
||||||
|
{{template "base/delete_modal_actions" .}}
|
||||||
|
</div>
|
||||||
|
{{template "base/footer" .}}
|
Loading…
Reference in New Issue