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.

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