@@ -10,15 +10,15 @@ import ( | |||
"xorm.io/xorm" | |||
) | |||
type SelectedPageSize int | |||
type AvailablePageSize int | |||
const ( | |||
PageSize15 SelectedPageSize = 15 | |||
PageSize30 SelectedPageSize = 30 | |||
PageSize50 SelectedPageSize = 50 | |||
PageSize15 AvailablePageSize = 15 | |||
PageSize30 AvailablePageSize = 30 | |||
PageSize50 AvailablePageSize = 50 | |||
) | |||
func (s SelectedPageSize) IsLegal() bool { | |||
func (s AvailablePageSize) IsLegal() bool { | |||
switch s { | |||
case PageSize30, PageSize50, PageSize15: | |||
return true | |||
@@ -26,7 +26,7 @@ func (s SelectedPageSize) IsLegal() bool { | |||
return false | |||
} | |||
func (s SelectedPageSize) Int() int { | |||
func (s AvailablePageSize) Int() int { | |||
return int(s) | |||
} | |||
@@ -43,6 +43,8 @@ const ( | |||
tplHomeTerm base.TplName = "terms" | |||
tplHomePrivacy base.TplName = "privacy" | |||
tplResoruceDesc base.TplName = "resource_desc" | |||
tplRepoSquare base.TplName = "explore/repos/square" | |||
tplRepoSearch base.TplName = "explore/repos/search" | |||
) | |||
// Home render home page | |||
@@ -296,6 +298,13 @@ func ExploreRepos(ctx *context.Context) { | |||
}) | |||
} | |||
func GetRepoSquarePage(ctx *context.Context) { | |||
ctx.HTML(200, tplRepoSquare) | |||
} | |||
func GetRepoSearchPage(ctx *context.Context) { | |||
ctx.HTML(200, tplRepoSearch) | |||
} | |||
func RepoSquare(ctx *context.Context) { | |||
var result []*models.Repository4Card | |||
var err error | |||
@@ -351,7 +360,10 @@ func RepoFind(ctx *context.Context) { | |||
topic := strings.Trim(ctx.Query("topic"), " ") | |||
sort := strings.Trim(ctx.Query("sort"), " ") | |||
page := ctx.QueryInt("page") | |||
pageSize := models.SelectedPageSize(ctx.QueryInt("pageSize")) | |||
pageSize := models.AvailablePageSize(ctx.QueryInt("pageSize")) | |||
if pageSize == 0 { | |||
pageSize = models.PageSize15 | |||
} | |||
if !pageSize.IsLegal() { | |||
ctx.JSON(http.StatusOK, response.ServerError("pageSize illegal")) | |||
return | |||
@@ -371,8 +371,10 @@ func RegisterRoutes(m *macaron.Macaron) { | |||
m.Get("/images/star", repo.GetStarImages) | |||
m.Group("/repos", func() { | |||
m.Get("", routers.ExploreRepos) | |||
//m.Get("", routers.ExploreRepos) | |||
m.Get("", routers.GetRepoSearchPage) | |||
m.Group("/square", func() { | |||
m.Get("", routers.GetRepoSquarePage) | |||
m.Get("/tab", routers.RepoSquare) | |||
m.Get("/active-user", routers.ActiveUser) | |||
m.Get("/active-org", routers.ActiveOrg) | |||
@@ -85,31 +85,31 @@ func FindRepos(opts FindReposOptions) (*models.FindReposResponse, error) { | |||
switch opts.Sort { | |||
//1.近期热门:按最近1个月浏览量倒序排序,最近1个月浏览量>最近更新>项目名称升序 | |||
case "most_popular": | |||
case "mostpopular": | |||
orderBy = models.SearchOrderByLastMonthVisitsReverse + "," + models.SearchOrderByRecentUpdated + "," + models.SearchOrderByAlphabetically | |||
//2.近期活跃:按提交增长量(最近4个月commit数)倒序排序,提交增长量>最近更新>项目名称升序。 | |||
case "most_active": | |||
case "mostactive": | |||
orderBy = models.SearchOrderByLastFourMonthCommitsReverse + "," + models.SearchOrderByRecentUpdated + "," + models.SearchOrderByAlphabetically | |||
//3.最近更新:按最近更新>项目名称升序排序。 | |||
case "recent_update": | |||
case "recentupdate": | |||
orderBy = models.SearchOrderByRecentUpdated + "," + models.SearchOrderByAlphabetically | |||
//4.最近创建:按项目创建时间排序,最近的排前面。最近创建>项目名称升序。 | |||
case "newest": | |||
orderBy = models.SearchOrderByNewest + "," + models.SearchOrderByAlphabetically | |||
//5.点赞最多:按点赞数倒序排序。点赞数>最近更新>项目名称升序。 | |||
case "most_stars": | |||
case "moststars": | |||
orderBy = models.SearchOrderByStarsReverse + "," + models.SearchOrderByRecentUpdated + "," + models.SearchOrderByAlphabetically | |||
//6.派生最多:按派生数倒序排序。派生数>最近更新>项目名称升序。 | |||
case "most_forks": | |||
case "mostforks": | |||
orderBy = models.SearchOrderByForksReverse + "," + models.SearchOrderByRecentUpdated + "," + models.SearchOrderByAlphabetically | |||
//7.数据集最多:按项目包含的数据集文件数量倒序排序,数据集文件数>最近更新>项目名称升序。 | |||
case "most_datasets": | |||
case "mostdatasets": | |||
orderBy = models.SearchOrderByDatasetCntReverse + "," + models.SearchOrderByRecentUpdated + "," + models.SearchOrderByAlphabetically | |||
//8.AI任务最多:按项目包含的AI任务数量倒序排序,AI任务数>最近更新>项目名称升序。 | |||
case "most_ai_tasks": | |||
case "mostaitasks": | |||
orderBy = models.SearchOrderByAiTaskCntReverse + "," + models.SearchOrderByRecentUpdated + "," + models.SearchOrderByAlphabetically | |||
//9.模型最多:按项目包含的模型数量倒序排序,模型大小为0则不统计。模型数>最近更新>项目名称升序。 | |||
case "most_models": | |||
case "mostmodels": | |||
orderBy = models.SearchOrderByModelCntReverse + "," + models.SearchOrderByRecentUpdated + "," + models.SearchOrderByAlphabetically | |||
default: | |||