| @@ -1,6 +1,6 @@ | |||
| <div class="ui container" id="navbar"> | |||
| <div class="item brand" style="justify-content: space-between;"> | |||
| <a href="https://www.openi.org.cn/"> | |||
| <a href="/"> | |||
| <img class="ui mini image" src="{{StaticUrlPrefix}}/img/openi-logo-w.svg?v=2020041802"> | |||
| </a> | |||
| <div class="ui basic icon button mobile-only" id="navbar-expand-toggle"> | |||
| @@ -21,7 +21,7 @@ | |||
| <a class="item" href="https://www.openi.org.cn/html/news/dongtai/">{{.i18n.Tr "custom.head.community_infos"}}</a> | |||
| </div> | |||
| </div> | |||
| <a class="item" href="{{AppSubUrl}}/datasets">{{.i18n.Tr "datasets"}}</a> | |||
| <a class="item" href="{{AppSubUrl}}/explore/datasets">{{.i18n.Tr "datasets"}}</a> | |||
| <a class="item" href="{{AppSubUrl}}/explore/repos">{{.i18n.Tr "custom.head.project"}}</a> | |||
| {{if not .UnitIssuesGlobalDisabled}} | |||
| <a class="item {{if .PageIsIssues}}active{{end}}" href="{{AppSubUrl}}/issues">{{.i18n.Tr "issues"}}</a> | |||
| @@ -37,7 +37,7 @@ | |||
| <i class="dropdown icon"></i> | |||
| <div class="menu"> | |||
| <a class="item" href="{{AppSubUrl}}/explore/repos">{{.i18n.Tr "custom.head.project"}}</a> | |||
| <a class="item" href="{{AppSubUrl}}/datasets">{{.i18n.Tr "datasets"}}</a> | |||
| <a class="item" href="{{AppSubUrl}}/explore/datasets">{{.i18n.Tr "custom.head.dataset"}}</a> | |||
| <a class="item" href="javascript:alert('WIP')">{{.i18n.Tr "custom.head.study"}}</a> | |||
| <a class="item" href="javascript:alert('WIP')">{{.i18n.Tr "custom.head.activity"}}</a> | |||
| </div> | |||
| @@ -61,7 +61,7 @@ | |||
| <i class="dropdown icon"></i> | |||
| <div class="menu"> | |||
| <a class="item {{if .PageIsExplore}}active{{end}}" href="{{AppSubUrl}}/explore/repos">{{.i18n.Tr "custom.head.project"}}</a> | |||
| <a class="item" href="{{AppSubUrl}}/datasets">{{.i18n.Tr "datasets"}}</a> | |||
| <a class="item" href="{{AppSubUrl}}/explore/datasets">{{.i18n.Tr "datasets"}}</a> | |||
| <a class="item" href="javascript:alert('WIP')" target="_blank">{{.i18n.Tr "custom.head.project"}}</a> | |||
| <a class="item" href="javascript:alert('WIP')" target="_blank">{{.i18n.Tr "custom.head.activity"}}</a> | |||
| </div> | |||
| @@ -0,0 +1,49 @@ | |||
| <h2 class="ui left floated medium header"> | |||
| {{.i18n.Tr "datasets"}} | |||
| </h2> | |||
| <div class="ui right floated secondary filter menu"> | |||
| <!-- Sort --> | |||
| <div class="ui right dropdown type jump item"> | |||
| <span class="text"> | |||
| {{.i18n.Tr "repo.issues.filter_sort"}} | |||
| <i class="dropdown icon"></i> | |||
| </span> | |||
| <div class="menu"> | |||
| <a class="{{if eq .SortType "newest"}}active{{end}} item" href="{{$.Link}}?sort=newest&q={{$.Keyword}}&tab={{$.TabName}}">{{.i18n.Tr "repo.issues.filter_sort.latest"}}</a> | |||
| <a class="{{if eq .SortType "oldest"}}active{{end}} item" href="{{$.Link}}?sort=oldest&q={{$.Keyword}}&tab={{$.TabName}}">{{.i18n.Tr "repo.issues.filter_sort.oldest"}}</a> | |||
| <a class="{{if eq .SortType "recentupdate"}}active{{end}} item" href="{{$.Link}}?sort=recentupdate&q={{$.Keyword}}&tab={{$.TabName}}">{{.i18n.Tr "repo.issues.filter_sort.recentupdate"}}</a> | |||
| <a class="{{if eq .SortType "leastupdate"}}active{{end}} item" href="{{$.Link}}?sort=leastupdate&q={{$.Keyword}}&tab={{$.TabName}}">{{.i18n.Tr "repo.issues.filter_sort.leastupdate"}}</a> | |||
| </div> | |||
| </div> | |||
| </div> | |||
| <div class="ui clearing divider"></div> | |||
| <div class="ui dataset list"> | |||
| <div class="ui sixteen wide mobile ten wide tablet ten wide computer colum"> | |||
| {{range .Datasets}} | |||
| <div class="item"> | |||
| <div class="ui header"> | |||
| <a class="name" href="/datasets/{{.ID}}"> | |||
| {{.Title}} | |||
| </a> | |||
| <div class="ui right metas"> | |||
| <span class="text grey">{{svg "octicon-tasklist" 16}} {{$.i18n.Tr (printf "dataset.task.%s" .Task)}}</span> | |||
| <span class="text grey">{{svg "octicon-tag" 16}}{{$.i18n.Tr (printf "dataset.category.%s" .Category)}}</span> | |||
| {{if ne .DownloadTimes 0}} | |||
| <span class="text grey">{{svg "octicon-flame" 16}} {{.DownloadTimes}}</span> | |||
| {{end}} | |||
| </div> | |||
| </div> | |||
| <div class="description"> | |||
| <a><div class="ui small label topic">{{.Description}}</div></a> | |||
| <p class="time">{{$.i18n.Tr "org.repo_updated"}} {{TimeSinceUnix .UpdatedUnix $.i18n.Lang}}</p> | |||
| </div> | |||
| </div> | |||
| {{else}} | |||
| <div> | |||
| {{$.i18n.Tr "explore.dataset_no_results"}} | |||
| </div> | |||
| {{end}} | |||
| </div> | |||
| </div> | |||
| @@ -0,0 +1,14 @@ | |||
| <div class="repos--seach"> | |||
| <div class="ui container"> | |||
| <div class="ui two column centered grid"> | |||
| <form class="mobile ten wide tablet computer column ui form ignore-dirty"> | |||
| <div class="ui fluid action input"> | |||
| <input name="q" value="{{.Keyword}}" placeholder="{{.i18n.Tr "explore.search"}}..." autofocus> | |||
| <input type="hidden" name="tab" value="{{$.TabName}}"> | |||
| <input type="hidden" name="sort" value="{{$.SortType}}"> | |||
| <button class="ui blue button">{{.i18n.Tr "explore.search"}}</button> | |||
| </div> | |||
| </form> | |||
| </div> | |||
| </div> | |||
| </div> | |||
| @@ -0,0 +1,17 @@ | |||
| {{template "base/head" .}} | |||
| <div class="explore repositories"> | |||
| {{template "explore/dataset_search" .}} | |||
| <div class="ui container"> | |||
| <div class="ui grid"> | |||
| {{template "explore/navbar" .}} | |||
| <div class="ui sixteen wide mobile ten wide tablet ten wide computer column"> | |||
| {{template "explore/dataset_list" .}} | |||
| {{template "base/paginate" .}} | |||
| </div> | |||
| <div class="ui sixteen wide mobile six wide tablet three wide computer column"> | |||
| {{template "explore/repo_right" .}} | |||
| </div> | |||
| </div> | |||
| </div> | |||
| </div> | |||
| {{template "base/footer" .}} | |||
| @@ -3,6 +3,9 @@ | |||
| <a class="{{if .PageIsExploreRepositories}}active{{end}} item" href="{{AppSubUrl}}/explore/repos"> | |||
| {{svg "octicon-repo" 16}} {{.i18n.Tr "explore.repos"}} | |||
| </a> | |||
| <a class="{{if .PageIsDatasets}}active{{end}} item" href="{{AppSubUrl}}/explore/datasets"> | |||
| {{svg "octicon-file-submodule" 16}} {{.i18n.Tr "datasets"}} | |||
| </a> | |||
| <a class="{{if .PageIsExploreUsers}}active{{end}} item" href="{{AppSubUrl}}/explore/users"> | |||
| {{svg "octicon-person" 16}} {{.i18n.Tr "explore.users"}} | |||
| </a> | |||
| @@ -24,7 +27,7 @@ | |||
| <a class="{{if .PageIsExploreRepositories}}active{{end}} item" href="{{AppSubUrl}}/explore/repos"> | |||
| {{svg "octicon-repo" 16}} {{.i18n.Tr "explore.repos"}} | |||
| </a> | |||
| <a class="{{if .PageIsDatasets}}active{{end}} item" href="{{AppSubUrl}}/datasets"> | |||
| <a class="{{if .PageIsDatasets}}active{{end}} item" href="{{AppSubUrl}}/explore/datasets"> | |||
| {{svg "octicon-file-submodule" 16}} {{.i18n.Tr "datasets"}} | |||
| </a> | |||
| <a class="{{if .PageIsExploreUsers}}active{{end}} item" href="{{AppSubUrl}}/explore/users"> | |||
| @@ -1,10 +1,10 @@ | |||
| {{template "base/head" .}} | |||
| <div class="explore users"> | |||
| {{template "explore/search" .}} | |||
| <div class="ui container"> | |||
| <div class="ui grid"> | |||
| {{template "explore/navbar" .}} | |||
| {{template "explore/navbar" .}} | |||
| <div class="sixteen wide mobile ten wide tablet ten wide computer column"> | |||
| <h2 class="ui left floated medium header"> | |||
| {{.i18n.Tr "explore.organizations"}} | |||
| @@ -26,9 +26,9 @@ | |||
| </div> | |||
| </div> | |||
| </div> | |||
| <div class="ui clearing divider"></div> | |||
| <div class="ui user list"> | |||
| {{range .Users}} | |||
| <div class="item"> | |||
| @@ -59,7 +59,7 @@ | |||
| {{template "base/paginate" .}} | |||
| </div> | |||
| <div class="sixteen wide mobile six wide tablet four wide computer column"> | |||
| <div class="sixteen wide mobile six wide tablet three wide computer column"> | |||
| {{template "explore/repo_right" .}} | |||
| </div> | |||
| </div> | |||
| @@ -53,7 +53,7 @@ | |||
| </div> | |||
| {{template "base/paginate" .}} | |||
| </div> | |||
| <div class="sixteen wide mobile six wide tablet four wide computer column"> | |||
| <div class="sixteen wide mobile six wide tablet three wide computer column"> | |||
| {{template "explore/repo_right" .}} | |||
| </div> | |||
| @@ -2448,6 +2448,7 @@ head.license= OpenI open source license | |||
| head.community_charter= OpenI Community Charter | |||
| head.community_infos= Community News | |||
| head.project= Project | |||
| head.dataset= Dataset | |||
| head.study= Study | |||
| head.activity= Activity | |||
| foot.council= Council | |||
| @@ -2448,6 +2448,7 @@ head.license=启智开源许可证 | |||
| head.community_charter=启智社区章程 | |||
| head.community_infos=社区动态 | |||
| head.project=项目 | |||
| head.dataset=数据集 | |||
| head.study=学些 | |||
| head.activity=活动 | |||
| foot.council=理事会 | |||
| @@ -25,6 +25,8 @@ const ( | |||
| tplHome base.TplName = "home" | |||
| // tplExploreRepos explore repositories page template | |||
| tplExploreRepos base.TplName = "explore/repos" | |||
| // tplExploreDataset explore datasets page template | |||
| tplExploreDataset base.TplName = "explore/datasets" | |||
| // tplExploreUsers explore users page template | |||
| tplExploreUsers base.TplName = "explore/users" | |||
| // tplExploreOrganizations explore organizations page template | |||
| @@ -188,6 +190,77 @@ func ExploreRepos(ctx *context.Context) { | |||
| }) | |||
| } | |||
| func ExploreDatasets(ctx *context.Context) { | |||
| ctx.Data["Title"] = ctx.Tr("explore") | |||
| ctx.Data["PageIsExplore"] = true | |||
| ctx.Data["PageIsExploreDatasets"] = true | |||
| // ctx.Data["IsRepoIndexerEnabled"] = setting.Indexer.RepoIndexerEnabled | |||
| var ( | |||
| datasets []*models.Dataset | |||
| count int64 | |||
| err error | |||
| orderBy models.SearchOrderBy | |||
| ) | |||
| page := ctx.QueryInt("page") | |||
| if page <= 0 { | |||
| page = 1 | |||
| } | |||
| ctx.Data["SortType"] = ctx.Query("sort") | |||
| switch ctx.Query("sort") { | |||
| case "newest": | |||
| orderBy = models.SearchOrderByNewest | |||
| case "oldest": | |||
| orderBy = models.SearchOrderByOldest | |||
| case "recentupdate": | |||
| orderBy = models.SearchOrderByRecentUpdated | |||
| case "leastupdate": | |||
| orderBy = models.SearchOrderByLeastUpdated | |||
| case "reversealphabetically": | |||
| orderBy = models.SearchOrderByAlphabeticallyReverse | |||
| case "alphabetically": | |||
| orderBy = models.SearchOrderByAlphabetically | |||
| case "reversesize": | |||
| orderBy = models.SearchOrderBySizeReverse | |||
| default: | |||
| ctx.Data["SortType"] = "recentupdate" | |||
| orderBy = models.SearchOrderByRecentUpdated | |||
| } | |||
| keyword := strings.Trim(ctx.Query("q"), " ") | |||
| var ownerID int64 | |||
| if ctx.User != nil && !ctx.User.IsAdmin { | |||
| ownerID = ctx.User.ID | |||
| } | |||
| opts := &models.SearchDatasetOptions{ | |||
| Keyword: keyword, | |||
| IncludePublic: true, | |||
| SearchOrderBy: orderBy, | |||
| OwnerID: ownerID, | |||
| ListOptions: models.ListOptions{ | |||
| Page: page, | |||
| PageSize: setting.UI.ExplorePagingNum, | |||
| }, | |||
| } | |||
| datasets, count, err = models.SearchDataset(opts) | |||
| if err != nil { | |||
| ctx.ServerError("SearchDatasets", err) | |||
| return | |||
| } | |||
| pager := context.NewPagination(int(count), opts.PageSize, page, 5) | |||
| pager.SetDefaultParams(ctx) | |||
| ctx.Data["Page"] = pager | |||
| ctx.Data["Keyword"] = opts.Keyword | |||
| ctx.Data["Datasets"] = datasets | |||
| ctx.Data["Total"] = count | |||
| ctx.Data["PageIsDatasets"] = true | |||
| ctx.HTML(200, tplExploreDataset) | |||
| } | |||
| // RenderUserSearch render user search page | |||
| func RenderUserSearch(ctx *context.Context, opts *models.SearchUserOptions, tplName base.TplName) { | |||
| opts.Page = ctx.QueryInt("page") | |||
| @@ -291,6 +291,7 @@ func RegisterRoutes(m *macaron.Macaron) { | |||
| ctx.Redirect(setting.AppSubURL + "/explore/repos") | |||
| }) | |||
| m.Get("/repos", routers.ExploreRepos) | |||
| m.Get("/datasets", routers.ExploreDatasets) | |||
| m.Get("/users", routers.ExploreUsers) | |||
| m.Get("/organizations", routers.ExploreOrganizations) | |||
| m.Get("/code", routers.ExploreCode) | |||
| @@ -1007,7 +1008,7 @@ func RegisterRoutes(m *macaron.Macaron) { | |||
| // DataSet | |||
| m.Group("/datasets", func() { | |||
| m.Get("", dataset.List) | |||
| // m.Get("", dataset.List) | |||
| m.Get("/create", dataset.Create) | |||
| m.Post("/create", bindIgnErr(auth.CreateDatasetForm{}), dataset.CreatePost) | |||
| m.Post("/delete", dataset.Delete) | |||