gitea源码

ui.go 4.7KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173
  1. // Copyright 2023 The Gitea Authors. All rights reserved.
  2. // SPDX-License-Identifier: MIT
  3. package setting
  4. import (
  5. "time"
  6. "code.gitea.io/gitea/modules/container"
  7. "code.gitea.io/gitea/modules/log"
  8. )
  9. // UI settings
  10. var UI = struct {
  11. ExplorePagingNum int
  12. SitemapPagingNum int
  13. IssuePagingNum int
  14. RepoSearchPagingNum int
  15. MembersPagingNum int
  16. FeedMaxCommitNum int
  17. FeedPagingNum int
  18. PackagesPagingNum int
  19. GraphMaxCommitNum int
  20. CodeCommentLines int
  21. ReactionMaxUserNum int
  22. MaxDisplayFileSize int64
  23. ShowUserEmail bool
  24. DefaultShowFullName bool
  25. DefaultTheme string
  26. Themes []string
  27. FileIconTheme string
  28. Reactions []string
  29. ReactionsLookup container.Set[string] `ini:"-"`
  30. CustomEmojis []string
  31. CustomEmojisMap map[string]string `ini:"-"`
  32. SearchRepoDescription bool
  33. OnlyShowRelevantRepos bool
  34. ExploreDefaultSort string `ini:"EXPLORE_PAGING_DEFAULT_SORT"`
  35. PreferredTimestampTense string
  36. AmbiguousUnicodeDetection bool
  37. Notification struct {
  38. MinTimeout time.Duration
  39. TimeoutStep time.Duration
  40. MaxTimeout time.Duration
  41. EventSourceUpdateTime time.Duration
  42. } `ini:"ui.notification"`
  43. SVG struct {
  44. Enabled bool `ini:"ENABLE_RENDER"`
  45. } `ini:"ui.svg"`
  46. CSV struct {
  47. MaxFileSize int64
  48. MaxRows int
  49. } `ini:"ui.csv"`
  50. Admin struct {
  51. UserPagingNum int
  52. RepoPagingNum int
  53. NoticePagingNum int
  54. OrgPagingNum int
  55. } `ini:"ui.admin"`
  56. User struct {
  57. RepoPagingNum int
  58. OrgPagingNum int
  59. } `ini:"ui.user"`
  60. Meta struct {
  61. Author string
  62. Description string
  63. Keywords string
  64. } `ini:"ui.meta"`
  65. }{
  66. ExplorePagingNum: 20,
  67. SitemapPagingNum: 20,
  68. IssuePagingNum: 20,
  69. RepoSearchPagingNum: 20,
  70. MembersPagingNum: 20,
  71. FeedMaxCommitNum: 5,
  72. FeedPagingNum: 20,
  73. PackagesPagingNum: 20,
  74. GraphMaxCommitNum: 100,
  75. CodeCommentLines: 4,
  76. ReactionMaxUserNum: 10,
  77. MaxDisplayFileSize: 8388608,
  78. DefaultTheme: `gitea-auto`,
  79. FileIconTheme: `material`,
  80. Reactions: []string{`+1`, `-1`, `laugh`, `hooray`, `confused`, `heart`, `rocket`, `eyes`},
  81. CustomEmojis: []string{`git`, `gitea`, `codeberg`, `gitlab`, `github`, `gogs`},
  82. CustomEmojisMap: map[string]string{"git": ":git:", "gitea": ":gitea:", "codeberg": ":codeberg:", "gitlab": ":gitlab:", "github": ":github:", "gogs": ":gogs:"},
  83. ExploreDefaultSort: "recentupdate",
  84. PreferredTimestampTense: "mixed",
  85. AmbiguousUnicodeDetection: true,
  86. Notification: struct {
  87. MinTimeout time.Duration
  88. TimeoutStep time.Duration
  89. MaxTimeout time.Duration
  90. EventSourceUpdateTime time.Duration
  91. }{
  92. MinTimeout: 10 * time.Second,
  93. TimeoutStep: 10 * time.Second,
  94. MaxTimeout: 60 * time.Second,
  95. EventSourceUpdateTime: 10 * time.Second,
  96. },
  97. SVG: struct {
  98. Enabled bool `ini:"ENABLE_RENDER"`
  99. }{
  100. Enabled: true,
  101. },
  102. CSV: struct {
  103. MaxFileSize int64
  104. MaxRows int
  105. }{
  106. MaxFileSize: 524288,
  107. MaxRows: 2500,
  108. },
  109. Admin: struct {
  110. UserPagingNum int
  111. RepoPagingNum int
  112. NoticePagingNum int
  113. OrgPagingNum int
  114. }{
  115. UserPagingNum: 50,
  116. RepoPagingNum: 50,
  117. NoticePagingNum: 25,
  118. OrgPagingNum: 50,
  119. },
  120. User: struct {
  121. RepoPagingNum int
  122. OrgPagingNum int
  123. }{
  124. RepoPagingNum: 15,
  125. OrgPagingNum: 15,
  126. },
  127. Meta: struct {
  128. Author string
  129. Description string
  130. Keywords string
  131. }{
  132. Author: "Gitea - Git with a cup of tea",
  133. Description: "Gitea (Git with a cup of tea) is a painless self-hosted Git service written in Go",
  134. Keywords: "go,git,self-hosted,gitea",
  135. },
  136. }
  137. func loadUIFrom(rootCfg ConfigProvider) {
  138. mustMapSetting(rootCfg, "ui", &UI)
  139. sec := rootCfg.Section("ui")
  140. UI.ShowUserEmail = sec.Key("SHOW_USER_EMAIL").MustBool(true)
  141. UI.DefaultShowFullName = sec.Key("DEFAULT_SHOW_FULL_NAME").MustBool(false)
  142. UI.SearchRepoDescription = sec.Key("SEARCH_REPO_DESCRIPTION").MustBool(true)
  143. if UI.PreferredTimestampTense != "mixed" && UI.PreferredTimestampTense != "absolute" {
  144. log.Fatal("ui.PREFERRED_TIMESTAMP_TENSE must be either 'mixed' or 'absolute'")
  145. }
  146. // OnlyShowRelevantRepos=false is important for many private/enterprise instances,
  147. // because many private repositories do not have "description/topic", users just want to search by their names.
  148. UI.OnlyShowRelevantRepos = sec.Key("ONLY_SHOW_RELEVANT_REPOS").MustBool(false)
  149. UI.ReactionsLookup = make(container.Set[string])
  150. for _, reaction := range UI.Reactions {
  151. UI.ReactionsLookup.Add(reaction)
  152. }
  153. UI.CustomEmojisMap = make(map[string]string)
  154. for _, emoji := range UI.CustomEmojis {
  155. UI.CustomEmojisMap[emoji] = ":" + emoji + ":"
  156. }
  157. }