code.gitea.io/gitea@v1.22.3/modules/setting/ui.go (about)

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