code.gitea.io/gitea@v1.21.7/routers/web/repo/search.go (about) 1 // Copyright 2017 The Gitea Authors. All rights reserved. 2 // SPDX-License-Identifier: MIT 3 4 package repo 5 6 import ( 7 "net/http" 8 9 "code.gitea.io/gitea/modules/base" 10 "code.gitea.io/gitea/modules/context" 11 code_indexer "code.gitea.io/gitea/modules/indexer/code" 12 "code.gitea.io/gitea/modules/setting" 13 ) 14 15 const tplSearch base.TplName = "repo/search" 16 17 // Search render repository search page 18 func Search(ctx *context.Context) { 19 if !setting.Indexer.RepoIndexerEnabled { 20 ctx.Redirect(ctx.Repo.RepoLink) 21 return 22 } 23 24 language := ctx.FormTrim("l") 25 keyword := ctx.FormTrim("q") 26 27 queryType := ctx.FormTrim("t") 28 isMatch := queryType == "match" 29 30 ctx.Data["Keyword"] = keyword 31 ctx.Data["Language"] = language 32 ctx.Data["queryType"] = queryType 33 ctx.Data["PageIsViewCode"] = true 34 35 if keyword == "" { 36 ctx.HTML(http.StatusOK, tplSearch) 37 return 38 } 39 40 page := ctx.FormInt("page") 41 if page <= 0 { 42 page = 1 43 } 44 45 total, searchResults, searchResultLanguages, err := code_indexer.PerformSearch(ctx, []int64{ctx.Repo.Repository.ID}, 46 language, keyword, page, setting.UI.RepoSearchPagingNum, isMatch) 47 if err != nil { 48 if code_indexer.IsAvailable(ctx) { 49 ctx.ServerError("SearchResults", err) 50 return 51 } 52 ctx.Data["CodeIndexerUnavailable"] = true 53 } else { 54 ctx.Data["CodeIndexerUnavailable"] = !code_indexer.IsAvailable(ctx) 55 } 56 57 ctx.Data["SourcePath"] = ctx.Repo.Repository.Link() 58 ctx.Data["SearchResults"] = searchResults 59 ctx.Data["SearchResultLanguages"] = searchResultLanguages 60 61 pager := context.NewPagination(total, setting.UI.RepoSearchPagingNum, page, 5) 62 pager.SetDefaultParams(ctx) 63 pager.AddParam(ctx, "l", "Language") 64 ctx.Data["Page"] = pager 65 66 ctx.HTML(http.StatusOK, tplSearch) 67 }