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.

ui.go 4.7KB

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