parent
7e382a5555
commit
f3fbb7c67d
9 changed files with 211 additions and 106 deletions
|
@ -522,6 +522,11 @@ func SearchRepository(ctx context.Context, opts *SearchRepoOptions) (RepositoryL
|
||||||
return SearchRepositoryByCondition(ctx, opts, cond, true)
|
return SearchRepositoryByCondition(ctx, opts, cond, true)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// CountRepository counts repositories based on search options,
|
||||||
|
func CountRepository(ctx context.Context, opts *SearchRepoOptions) (int64, error) {
|
||||||
|
return db.GetEngine(ctx).Where(SearchRepositoryCondition(opts)).Count(new(Repository))
|
||||||
|
}
|
||||||
|
|
||||||
// SearchRepositoryByCondition search repositories by condition
|
// SearchRepositoryByCondition search repositories by condition
|
||||||
func SearchRepositoryByCondition(ctx context.Context, opts *SearchRepoOptions, cond builder.Cond, loadAttributes bool) (RepositoryList, int64, error) {
|
func SearchRepositoryByCondition(ctx context.Context, opts *SearchRepoOptions, cond builder.Cond, loadAttributes bool) (RepositoryList, int64, error) {
|
||||||
sess, count, err := searchRepositoryByCondition(ctx, opts, cond)
|
sess, count, err := searchRepositoryByCondition(ctx, opts, cond)
|
||||||
|
|
|
@ -15,108 +15,11 @@ import (
|
||||||
"github.com/stretchr/testify/assert"
|
"github.com/stretchr/testify/assert"
|
||||||
)
|
)
|
||||||
|
|
||||||
func TestSearchRepository(t *testing.T) {
|
func getTestCases() []struct {
|
||||||
assert.NoError(t, unittest.PrepareTestDatabase())
|
name string
|
||||||
|
opts *repo_model.SearchRepoOptions
|
||||||
// test search public repository on explore page
|
count int
|
||||||
repos, count, err := repo_model.SearchRepositoryByName(db.DefaultContext, &repo_model.SearchRepoOptions{
|
} {
|
||||||
ListOptions: db.ListOptions{
|
|
||||||
Page: 1,
|
|
||||||
PageSize: 10,
|
|
||||||
},
|
|
||||||
Keyword: "repo_12",
|
|
||||||
Collaborate: util.OptionalBoolFalse,
|
|
||||||
})
|
|
||||||
|
|
||||||
assert.NoError(t, err)
|
|
||||||
if assert.Len(t, repos, 1) {
|
|
||||||
assert.Equal(t, "test_repo_12", repos[0].Name)
|
|
||||||
}
|
|
||||||
assert.Equal(t, int64(1), count)
|
|
||||||
|
|
||||||
repos, count, err = repo_model.SearchRepositoryByName(db.DefaultContext, &repo_model.SearchRepoOptions{
|
|
||||||
ListOptions: db.ListOptions{
|
|
||||||
Page: 1,
|
|
||||||
PageSize: 10,
|
|
||||||
},
|
|
||||||
Keyword: "test_repo",
|
|
||||||
Collaborate: util.OptionalBoolFalse,
|
|
||||||
})
|
|
||||||
|
|
||||||
assert.NoError(t, err)
|
|
||||||
assert.Equal(t, int64(2), count)
|
|
||||||
assert.Len(t, repos, 2)
|
|
||||||
|
|
||||||
// test search private repository on explore page
|
|
||||||
repos, count, err = repo_model.SearchRepositoryByName(db.DefaultContext, &repo_model.SearchRepoOptions{
|
|
||||||
ListOptions: db.ListOptions{
|
|
||||||
Page: 1,
|
|
||||||
PageSize: 10,
|
|
||||||
},
|
|
||||||
Keyword: "repo_13",
|
|
||||||
Private: true,
|
|
||||||
Collaborate: util.OptionalBoolFalse,
|
|
||||||
})
|
|
||||||
|
|
||||||
assert.NoError(t, err)
|
|
||||||
if assert.Len(t, repos, 1) {
|
|
||||||
assert.Equal(t, "test_repo_13", repos[0].Name)
|
|
||||||
}
|
|
||||||
assert.Equal(t, int64(1), count)
|
|
||||||
|
|
||||||
repos, count, err = repo_model.SearchRepositoryByName(db.DefaultContext, &repo_model.SearchRepoOptions{
|
|
||||||
ListOptions: db.ListOptions{
|
|
||||||
Page: 1,
|
|
||||||
PageSize: 10,
|
|
||||||
},
|
|
||||||
Keyword: "test_repo",
|
|
||||||
Private: true,
|
|
||||||
Collaborate: util.OptionalBoolFalse,
|
|
||||||
})
|
|
||||||
|
|
||||||
assert.NoError(t, err)
|
|
||||||
assert.Equal(t, int64(3), count)
|
|
||||||
assert.Len(t, repos, 3)
|
|
||||||
|
|
||||||
// Test non existing owner
|
|
||||||
repos, count, err = repo_model.SearchRepositoryByName(db.DefaultContext, &repo_model.SearchRepoOptions{OwnerID: unittest.NonexistentID})
|
|
||||||
|
|
||||||
assert.NoError(t, err)
|
|
||||||
assert.Empty(t, repos)
|
|
||||||
assert.Equal(t, int64(0), count)
|
|
||||||
|
|
||||||
// Test search within description
|
|
||||||
repos, count, err = repo_model.SearchRepository(db.DefaultContext, &repo_model.SearchRepoOptions{
|
|
||||||
ListOptions: db.ListOptions{
|
|
||||||
Page: 1,
|
|
||||||
PageSize: 10,
|
|
||||||
},
|
|
||||||
Keyword: "description_14",
|
|
||||||
Collaborate: util.OptionalBoolFalse,
|
|
||||||
IncludeDescription: true,
|
|
||||||
})
|
|
||||||
|
|
||||||
assert.NoError(t, err)
|
|
||||||
if assert.Len(t, repos, 1) {
|
|
||||||
assert.Equal(t, "test_repo_14", repos[0].Name)
|
|
||||||
}
|
|
||||||
assert.Equal(t, int64(1), count)
|
|
||||||
|
|
||||||
// Test NOT search within description
|
|
||||||
repos, count, err = repo_model.SearchRepository(db.DefaultContext, &repo_model.SearchRepoOptions{
|
|
||||||
ListOptions: db.ListOptions{
|
|
||||||
Page: 1,
|
|
||||||
PageSize: 10,
|
|
||||||
},
|
|
||||||
Keyword: "description_14",
|
|
||||||
Collaborate: util.OptionalBoolFalse,
|
|
||||||
IncludeDescription: false,
|
|
||||||
})
|
|
||||||
|
|
||||||
assert.NoError(t, err)
|
|
||||||
assert.Empty(t, repos)
|
|
||||||
assert.Equal(t, int64(0), count)
|
|
||||||
|
|
||||||
testCases := []struct {
|
testCases := []struct {
|
||||||
name string
|
name string
|
||||||
opts *repo_model.SearchRepoOptions
|
opts *repo_model.SearchRepoOptions
|
||||||
|
@ -274,6 +177,113 @@ func TestSearchRepository(t *testing.T) {
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
|
return testCases
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestSearchRepository(t *testing.T) {
|
||||||
|
assert.NoError(t, unittest.PrepareTestDatabase())
|
||||||
|
|
||||||
|
// test search public repository on explore page
|
||||||
|
repos, count, err := repo_model.SearchRepositoryByName(db.DefaultContext, &repo_model.SearchRepoOptions{
|
||||||
|
ListOptions: db.ListOptions{
|
||||||
|
Page: 1,
|
||||||
|
PageSize: 10,
|
||||||
|
},
|
||||||
|
Keyword: "repo_12",
|
||||||
|
Collaborate: util.OptionalBoolFalse,
|
||||||
|
})
|
||||||
|
|
||||||
|
assert.NoError(t, err)
|
||||||
|
if assert.Len(t, repos, 1) {
|
||||||
|
assert.Equal(t, "test_repo_12", repos[0].Name)
|
||||||
|
}
|
||||||
|
assert.Equal(t, int64(1), count)
|
||||||
|
|
||||||
|
repos, count, err = repo_model.SearchRepositoryByName(db.DefaultContext, &repo_model.SearchRepoOptions{
|
||||||
|
ListOptions: db.ListOptions{
|
||||||
|
Page: 1,
|
||||||
|
PageSize: 10,
|
||||||
|
},
|
||||||
|
Keyword: "test_repo",
|
||||||
|
Collaborate: util.OptionalBoolFalse,
|
||||||
|
})
|
||||||
|
|
||||||
|
assert.NoError(t, err)
|
||||||
|
assert.Equal(t, int64(2), count)
|
||||||
|
assert.Len(t, repos, 2)
|
||||||
|
|
||||||
|
// test search private repository on explore page
|
||||||
|
repos, count, err = repo_model.SearchRepositoryByName(db.DefaultContext, &repo_model.SearchRepoOptions{
|
||||||
|
ListOptions: db.ListOptions{
|
||||||
|
Page: 1,
|
||||||
|
PageSize: 10,
|
||||||
|
},
|
||||||
|
Keyword: "repo_13",
|
||||||
|
Private: true,
|
||||||
|
Collaborate: util.OptionalBoolFalse,
|
||||||
|
})
|
||||||
|
|
||||||
|
assert.NoError(t, err)
|
||||||
|
if assert.Len(t, repos, 1) {
|
||||||
|
assert.Equal(t, "test_repo_13", repos[0].Name)
|
||||||
|
}
|
||||||
|
assert.Equal(t, int64(1), count)
|
||||||
|
|
||||||
|
repos, count, err = repo_model.SearchRepositoryByName(db.DefaultContext, &repo_model.SearchRepoOptions{
|
||||||
|
ListOptions: db.ListOptions{
|
||||||
|
Page: 1,
|
||||||
|
PageSize: 10,
|
||||||
|
},
|
||||||
|
Keyword: "test_repo",
|
||||||
|
Private: true,
|
||||||
|
Collaborate: util.OptionalBoolFalse,
|
||||||
|
})
|
||||||
|
|
||||||
|
assert.NoError(t, err)
|
||||||
|
assert.Equal(t, int64(3), count)
|
||||||
|
assert.Len(t, repos, 3)
|
||||||
|
|
||||||
|
// Test non existing owner
|
||||||
|
repos, count, err = repo_model.SearchRepositoryByName(db.DefaultContext, &repo_model.SearchRepoOptions{OwnerID: unittest.NonexistentID})
|
||||||
|
|
||||||
|
assert.NoError(t, err)
|
||||||
|
assert.Empty(t, repos)
|
||||||
|
assert.Equal(t, int64(0), count)
|
||||||
|
|
||||||
|
// Test search within description
|
||||||
|
repos, count, err = repo_model.SearchRepository(db.DefaultContext, &repo_model.SearchRepoOptions{
|
||||||
|
ListOptions: db.ListOptions{
|
||||||
|
Page: 1,
|
||||||
|
PageSize: 10,
|
||||||
|
},
|
||||||
|
Keyword: "description_14",
|
||||||
|
Collaborate: util.OptionalBoolFalse,
|
||||||
|
IncludeDescription: true,
|
||||||
|
})
|
||||||
|
|
||||||
|
assert.NoError(t, err)
|
||||||
|
if assert.Len(t, repos, 1) {
|
||||||
|
assert.Equal(t, "test_repo_14", repos[0].Name)
|
||||||
|
}
|
||||||
|
assert.Equal(t, int64(1), count)
|
||||||
|
|
||||||
|
// Test NOT search within description
|
||||||
|
repos, count, err = repo_model.SearchRepository(db.DefaultContext, &repo_model.SearchRepoOptions{
|
||||||
|
ListOptions: db.ListOptions{
|
||||||
|
Page: 1,
|
||||||
|
PageSize: 10,
|
||||||
|
},
|
||||||
|
Keyword: "description_14",
|
||||||
|
Collaborate: util.OptionalBoolFalse,
|
||||||
|
IncludeDescription: false,
|
||||||
|
})
|
||||||
|
|
||||||
|
assert.NoError(t, err)
|
||||||
|
assert.Empty(t, repos)
|
||||||
|
assert.Equal(t, int64(0), count)
|
||||||
|
|
||||||
|
testCases := getTestCases()
|
||||||
|
|
||||||
for _, testCase := range testCases {
|
for _, testCase := range testCases {
|
||||||
t.Run(testCase.name, func(t *testing.T) {
|
t.Run(testCase.name, func(t *testing.T) {
|
||||||
repos, count, err := repo_model.SearchRepositoryByName(db.DefaultContext, testCase.opts)
|
repos, count, err := repo_model.SearchRepositoryByName(db.DefaultContext, testCase.opts)
|
||||||
|
@ -349,6 +359,21 @@ func TestSearchRepository(t *testing.T) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestCountRepository(t *testing.T) {
|
||||||
|
assert.NoError(t, unittest.PrepareTestDatabase())
|
||||||
|
|
||||||
|
testCases := getTestCases()
|
||||||
|
|
||||||
|
for _, testCase := range testCases {
|
||||||
|
t.Run(testCase.name, func(t *testing.T) {
|
||||||
|
count, err := repo_model.CountRepository(db.DefaultContext, testCase.opts)
|
||||||
|
|
||||||
|
assert.NoError(t, err)
|
||||||
|
assert.Equal(t, int64(testCase.count), count)
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
func TestSearchRepositoryByTopicName(t *testing.T) {
|
func TestSearchRepositoryByTopicName(t *testing.T) {
|
||||||
assert.NoError(t, unittest.PrepareTestDatabase())
|
assert.NoError(t, unittest.PrepareTestDatabase())
|
||||||
|
|
||||||
|
|
|
@ -16,6 +16,7 @@ import (
|
||||||
"code.gitea.io/gitea/modules/markup"
|
"code.gitea.io/gitea/modules/markup"
|
||||||
"code.gitea.io/gitea/modules/markup/markdown"
|
"code.gitea.io/gitea/modules/markup/markdown"
|
||||||
"code.gitea.io/gitea/modules/setting"
|
"code.gitea.io/gitea/modules/setting"
|
||||||
|
shared_user "code.gitea.io/gitea/routers/web/shared/user"
|
||||||
)
|
)
|
||||||
|
|
||||||
const (
|
const (
|
||||||
|
@ -158,6 +159,12 @@ func Home(ctx *context.Context) {
|
||||||
ctx.Data["PageIsViewRepositories"] = true
|
ctx.Data["PageIsViewRepositories"] = true
|
||||||
ctx.Data["IsFollowing"] = isFollowing
|
ctx.Data["IsFollowing"] = isFollowing
|
||||||
|
|
||||||
|
err = shared_user.LoadHeaderCount(ctx)
|
||||||
|
if err != nil {
|
||||||
|
ctx.ServerError("LoadHeaderCount", err)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
pager := context.NewPagination(int(count), setting.UI.User.RepoPagingNum, page, 5)
|
pager := context.NewPagination(int(count), setting.UI.User.RepoPagingNum, page, 5)
|
||||||
pager.SetDefaultParams(ctx)
|
pager.SetDefaultParams(ctx)
|
||||||
pager.AddParam(ctx, "language", "Language")
|
pager.AddParam(ctx, "language", "Language")
|
||||||
|
|
|
@ -101,6 +101,12 @@ func Projects(ctx *context.Context) {
|
||||||
project.RenderedContent = project.Description
|
project.RenderedContent = project.Description
|
||||||
}
|
}
|
||||||
|
|
||||||
|
err = shared_user.LoadHeaderCount(ctx)
|
||||||
|
if err != nil {
|
||||||
|
ctx.ServerError("LoadHeaderCount", err)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
numPages := 0
|
numPages := 0
|
||||||
if total > 0 {
|
if total > 0 {
|
||||||
numPages = (int(total) - 1/setting.UI.IssuePagingNum)
|
numPages = (int(total) - 1/setting.UI.IssuePagingNum)
|
||||||
|
@ -135,6 +141,13 @@ func RenderNewProject(ctx *context.Context) {
|
||||||
ctx.Data["HomeLink"] = ctx.ContextUser.HomeLink()
|
ctx.Data["HomeLink"] = ctx.ContextUser.HomeLink()
|
||||||
ctx.Data["CancelLink"] = ctx.ContextUser.HomeLink() + "/-/projects"
|
ctx.Data["CancelLink"] = ctx.ContextUser.HomeLink() + "/-/projects"
|
||||||
shared_user.RenderUserHeader(ctx)
|
shared_user.RenderUserHeader(ctx)
|
||||||
|
|
||||||
|
err := shared_user.LoadHeaderCount(ctx)
|
||||||
|
if err != nil {
|
||||||
|
ctx.ServerError("LoadHeaderCount", err)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
ctx.HTML(http.StatusOK, tplProjectsNew)
|
ctx.HTML(http.StatusOK, tplProjectsNew)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -270,6 +283,12 @@ func EditProjectPost(ctx *context.Context) {
|
||||||
|
|
||||||
shared_user.RenderUserHeader(ctx)
|
shared_user.RenderUserHeader(ctx)
|
||||||
|
|
||||||
|
err := shared_user.LoadHeaderCount(ctx)
|
||||||
|
if err != nil {
|
||||||
|
ctx.ServerError("LoadHeaderCount", err)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
if ctx.HasError() {
|
if ctx.HasError() {
|
||||||
ctx.HTML(http.StatusOK, tplProjectsNew)
|
ctx.HTML(http.StatusOK, tplProjectsNew)
|
||||||
return
|
return
|
||||||
|
@ -379,6 +398,12 @@ func ViewProject(ctx *context.Context) {
|
||||||
ctx.Data["Boards"] = boards
|
ctx.Data["Boards"] = boards
|
||||||
shared_user.RenderUserHeader(ctx)
|
shared_user.RenderUserHeader(ctx)
|
||||||
|
|
||||||
|
err = shared_user.LoadHeaderCount(ctx)
|
||||||
|
if err != nil {
|
||||||
|
ctx.ServerError("LoadHeaderCount", err)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
ctx.HTML(http.StatusOK, tplProjectsView)
|
ctx.HTML(http.StatusOK, tplProjectsView)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -14,6 +14,7 @@ import (
|
||||||
"code.gitea.io/gitea/modules/markup"
|
"code.gitea.io/gitea/modules/markup"
|
||||||
"code.gitea.io/gitea/modules/markup/markdown"
|
"code.gitea.io/gitea/modules/markup/markdown"
|
||||||
"code.gitea.io/gitea/modules/setting"
|
"code.gitea.io/gitea/modules/setting"
|
||||||
|
"code.gitea.io/gitea/modules/util"
|
||||||
)
|
)
|
||||||
|
|
||||||
// prepareContextForCommonProfile store some common data into context data for user's profile related pages (including the nav menu)
|
// prepareContextForCommonProfile store some common data into context data for user's profile related pages (including the nav menu)
|
||||||
|
@ -110,3 +111,21 @@ func RenderUserHeader(ctx *context.Context) {
|
||||||
defer profileClose()
|
defer profileClose()
|
||||||
ctx.Data["HasProfileReadme"] = profileReadmeBlob != nil
|
ctx.Data["HasProfileReadme"] = profileReadmeBlob != nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func LoadHeaderCount(ctx *context.Context) error {
|
||||||
|
prepareContextForCommonProfile(ctx)
|
||||||
|
|
||||||
|
repoCount, err := repo_model.CountRepository(ctx, &repo_model.SearchRepoOptions{
|
||||||
|
Actor: ctx.Doer,
|
||||||
|
OwnerID: ctx.ContextUser.ID,
|
||||||
|
Private: ctx.IsSigned,
|
||||||
|
Collaborate: util.OptionalBoolFalse,
|
||||||
|
IncludeDescription: setting.UI.SearchRepoDescription,
|
||||||
|
})
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
ctx.Data["RepoCount"] = repoCount
|
||||||
|
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
|
@ -101,6 +101,12 @@ func ListPackages(ctx *context.Context) {
|
||||||
ctx.Data["Total"] = total
|
ctx.Data["Total"] = total
|
||||||
ctx.Data["RepositoryAccessMap"] = repositoryAccessMap
|
ctx.Data["RepositoryAccessMap"] = repositoryAccessMap
|
||||||
|
|
||||||
|
err = shared_user.LoadHeaderCount(ctx)
|
||||||
|
if err != nil {
|
||||||
|
ctx.ServerError("LoadHeaderCount", err)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
// TODO: context/org -> HandleOrgAssignment() can not be used
|
// TODO: context/org -> HandleOrgAssignment() can not be used
|
||||||
if ctx.ContextUser.IsOrganization() {
|
if ctx.ContextUser.IsOrganization() {
|
||||||
org := org_model.OrgFromUser(ctx.ContextUser)
|
org := org_model.OrgFromUser(ctx.ContextUser)
|
||||||
|
@ -255,6 +261,12 @@ func ViewPackageVersion(ctx *context.Context) {
|
||||||
}
|
}
|
||||||
ctx.Data["HasRepositoryAccess"] = hasRepositoryAccess
|
ctx.Data["HasRepositoryAccess"] = hasRepositoryAccess
|
||||||
|
|
||||||
|
err = shared_user.LoadHeaderCount(ctx)
|
||||||
|
if err != nil {
|
||||||
|
ctx.ServerError("LoadHeaderCount", err)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
ctx.HTML(http.StatusOK, tplPackagesView)
|
ctx.HTML(http.StatusOK, tplPackagesView)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -346,6 +358,12 @@ func ListPackageVersions(ctx *context.Context) {
|
||||||
|
|
||||||
ctx.Data["Total"] = total
|
ctx.Data["Total"] = total
|
||||||
|
|
||||||
|
err = shared_user.LoadHeaderCount(ctx)
|
||||||
|
if err != nil {
|
||||||
|
ctx.ServerError("LoadHeaderCount", err)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
pager := context.NewPagination(int(total), setting.UI.PackagesPagingNum, page, 5)
|
pager := context.NewPagination(int(total), setting.UI.PackagesPagingNum, page, 5)
|
||||||
for k, v := range pagerParams {
|
for k, v := range pagerParams {
|
||||||
pager.AddParamString(k, v)
|
pager.AddParamString(k, v)
|
||||||
|
|
|
@ -269,6 +269,12 @@ func prepareUserProfileTabData(ctx *context.Context, showPrivate bool, profileGi
|
||||||
ctx.Data["Repos"] = repos
|
ctx.Data["Repos"] = repos
|
||||||
ctx.Data["Total"] = total
|
ctx.Data["Total"] = total
|
||||||
|
|
||||||
|
err = shared_user.LoadHeaderCount(ctx)
|
||||||
|
if err != nil {
|
||||||
|
ctx.ServerError("LoadHeaderCount", err)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
pager := context.NewPagination(total, pagingNum, page, 5)
|
pager := context.NewPagination(total, pagingNum, page, 5)
|
||||||
pager.SetDefaultParams(ctx)
|
pager.SetDefaultParams(ctx)
|
||||||
pager.AddParam(ctx, "tab", "TabName")
|
pager.AddParam(ctx, "tab", "TabName")
|
||||||
|
|
|
@ -2,8 +2,8 @@
|
||||||
<div class="ui secondary stackable pointing menu">
|
<div class="ui secondary stackable pointing menu">
|
||||||
<a class="{{if .PageIsViewRepositories}}active {{end}}item" href="{{$.Org.HomeLink}}">
|
<a class="{{if .PageIsViewRepositories}}active {{end}}item" href="{{$.Org.HomeLink}}">
|
||||||
{{svg "octicon-repo"}} {{.locale.Tr "user.repositories"}}
|
{{svg "octicon-repo"}} {{.locale.Tr "user.repositories"}}
|
||||||
{{if .ContextUser.NumRepos}}
|
{{if .RepoCount}}
|
||||||
<div class="ui small label">{{.ContextUser.NumRepos}}</div>
|
<div class="ui small label">{{.RepoCount}}</div>
|
||||||
{{end}}
|
{{end}}
|
||||||
</a>
|
</a>
|
||||||
{{if .CanReadProjects}}
|
{{if .CanReadProjects}}
|
||||||
|
|
|
@ -6,8 +6,8 @@
|
||||||
{{end}}
|
{{end}}
|
||||||
<a class="{{if eq .TabName "repositories"}}active {{end}} item" href="{{.ContextUser.HomeLink}}?tab=repositories">
|
<a class="{{if eq .TabName "repositories"}}active {{end}} item" href="{{.ContextUser.HomeLink}}?tab=repositories">
|
||||||
{{svg "octicon-repo"}} {{.locale.Tr "user.repositories"}}
|
{{svg "octicon-repo"}} {{.locale.Tr "user.repositories"}}
|
||||||
{{if .ContextUser.NumRepos}}
|
{{if .RepoCount}}
|
||||||
<div class="ui small label">{{.ContextUser.NumRepos}}</div>
|
<div class="ui small label">{{.RepoCount}}</div>
|
||||||
{{end}}
|
{{end}}
|
||||||
</a>
|
</a>
|
||||||
{{if or .ContextUser.IsIndividual (and .ContextUser.IsOrganization .CanReadProjects)}}
|
{{if or .ContextUser.IsIndividual (and .ContextUser.IsOrganization .CanReadProjects)}}
|
||||||
|
|
Loading…
Reference in a new issue