You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

search.go 1.7KB

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