Use light/dark theme based on system preference (#17051)

Add a new default theme `auto`, which will automatically switch between
`gitea` (light) and `arc-green` (dark) themes depending on the user's
operating system settings.

Closes: #8183
tokarchuk/v1.17
Gwyneth Morgan 3 years ago committed by GitHub
parent 868e937a53
commit 4e0cca3f7d
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
  1. 1
      .stylelintrc
  2. 4
      custom/conf/app.example.ini
  3. 4
      docs/content/doc/advanced/config-cheat-sheet.en-us.md
  4. 2
      docs/content/doc/advanced/customizing-gitea.en-us.md
  5. 2
      docs/content/doc/help/faq.en-us.md
  6. 4
      modules/setting/setting.go
  7. 8
      web_src/js/utils.js
  8. 3
      web_src/less/themes/theme-auto.less

@ -13,3 +13,4 @@ rules:
rule-empty-line-before: null rule-empty-line-before: null
selector-pseudo-element-colon-notation: double selector-pseudo-element-colon-notation: double
shorthand-property-no-redundant-values: true shorthand-property-no-redundant-values: true
no-invalid-position-at-import-rule: null

@ -1035,10 +1035,10 @@ PATH =
;SHOW_USER_EMAIL = true ;SHOW_USER_EMAIL = true
;; ;;
;; Set the default theme for the Gitea install ;; Set the default theme for the Gitea install
;DEFAULT_THEME = gitea ;DEFAULT_THEME = auto
;; ;;
;; All available themes. Allow users select personalized themes regardless of the value of `DEFAULT_THEME`. ;; All available themes. Allow users select personalized themes regardless of the value of `DEFAULT_THEME`.
;THEMES = gitea,arc-green ;THEMES = auto,gitea,arc-green
;; ;;
;; All available reactions users can choose on issues/prs and comments. ;; All available reactions users can choose on issues/prs and comments.
;; Values can be emoji alias (:smile:) or a unicode emoji. ;; Values can be emoji alias (:smile:) or a unicode emoji.

@ -174,9 +174,9 @@ The following configuration set `Content-Type: application/vnd.android.package-a
- `FEED_PAGING_NUM`: **20**: Number of items that are displayed in home feed. - `FEED_PAGING_NUM`: **20**: Number of items that are displayed in home feed.
- `GRAPH_MAX_COMMIT_NUM`: **100**: Number of maximum commits shown in the commit graph. - `GRAPH_MAX_COMMIT_NUM`: **100**: Number of maximum commits shown in the commit graph.
- `CODE_COMMENT_LINES`: **4**: Number of line of codes shown for a code comment. - `CODE_COMMENT_LINES`: **4**: Number of line of codes shown for a code comment.
- `DEFAULT_THEME`: **gitea**: \[gitea, arc-green\]: Set the default theme for the Gitea install. - `DEFAULT_THEME`: **auto**: \[auto, gitea, arc-green\]: Set the default theme for the Gitea install.
- `SHOW_USER_EMAIL`: **true**: Whether the email of the user should be shown in the Explore Users page. - `SHOW_USER_EMAIL`: **true**: Whether the email of the user should be shown in the Explore Users page.
- `THEMES`: **gitea,arc-green**: All available themes. Allow users select personalized themes. - `THEMES`: **auto,gitea,arc-green**: All available themes. Allow users select personalized themes.
regardless of the value of `DEFAULT_THEME`. regardless of the value of `DEFAULT_THEME`.
- `THEME_COLOR_META_TAG`: **#6cc644**: Value of `theme-color` meta tag, used by Android >= 5.0. An invalid color like "none" or "disable" will have the default style. More info: https://developers.google.com/web/updates/2014/11/Support-for-theme-color-in-Chrome-39-for-Android - `THEME_COLOR_META_TAG`: **#6cc644**: Value of `theme-color` meta tag, used by Android >= 5.0. An invalid color like "none" or "disable" will have the default style. More info: https://developers.google.com/web/updates/2014/11/Support-for-theme-color-in-Chrome-39-for-Android
- `MAX_DISPLAY_FILE_SIZE`: **8388608**: Max size of files to be displayed (default is 8MiB) - `MAX_DISPLAY_FILE_SIZE`: **8388608**: Max size of files to be displayed (default is 8MiB)

@ -321,7 +321,7 @@ A full list of supported emoji's is at [emoji list](https://gitea.com/gitea/gite
## Customizing the look of Gitea ## Customizing the look of Gitea
The default built-in themes are `gitea` (light) and `arc-green` (dark). The default built-in themes are `gitea` (light), `arc-green` (dark), and `auto` (chooses light or dark depending on operating system settings).
The default theme can be changed via `DEFAULT_THEME` in the [ui](https://docs.gitea.io/en-us/config-cheat-sheet/#ui-ui) section of `app.ini`. The default theme can be changed via `DEFAULT_THEME` in the [ui](https://docs.gitea.io/en-us/config-cheat-sheet/#ui-ui) section of `app.ini`.
Gitea also has support for user themes, which means every user can select which theme should be used. Gitea also has support for user themes, which means every user can select which theme should be used.

@ -158,7 +158,7 @@ Use [Fail2Ban]({{< relref "doc/usage/fail2ban-setup.en-us.md" >}}) to monitor an
## How to add/use custom themes ## How to add/use custom themes
Gitea supports two official themes right now, `gitea` and `arc-green` (`light` and `dark` respectively) Gitea supports three official themes right now, `gitea` (light), `arc-green` (dark), and `auto` (automatically switches between the previous two depending on operating system settings).
To add your own theme, currently the only way is to provide a complete theme (not just color overrides) To add your own theme, currently the only way is to provide a complete theme (not just color overrides)
As an example, let's say our theme is `arc-blue` (this is a real theme, and can be found [in this issue](https://github.com/go-gitea/gitea/issues/6011)) As an example, let's say our theme is `arc-blue` (this is a real theme, and can be found [in this issue](https://github.com/go-gitea/gitea/issues/6011))

@ -255,8 +255,8 @@ var (
ReactionMaxUserNum: 10, ReactionMaxUserNum: 10,
ThemeColorMetaTag: `#6cc644`, ThemeColorMetaTag: `#6cc644`,
MaxDisplayFileSize: 8388608, MaxDisplayFileSize: 8388608,
DefaultTheme: `gitea`, DefaultTheme: `auto`,
Themes: []string{`gitea`, `arc-green`}, Themes: []string{`auto`, `gitea`, `arc-green`},
Reactions: []string{`+1`, `-1`, `laugh`, `hooray`, `confused`, `heart`, `rocket`, `eyes`}, Reactions: []string{`+1`, `-1`, `laugh`, `hooray`, `confused`, `heart`, `rocket`, `eyes`},
CustomEmojis: []string{`git`, `gitea`, `codeberg`, `gitlab`, `github`, `gogs`}, CustomEmojis: []string{`git`, `gitea`, `codeberg`, `gitlab`, `github`, `gogs`},
CustomEmojisMap: map[string]string{"git": ":git:", "gitea": ":gitea:", "codeberg": ":codeberg:", "gitlab": ":gitlab:", "github": ":github:", "gogs": ":gogs:"}, CustomEmojisMap: map[string]string{"git": ":git:", "gitea": ":gitea:", "codeberg": ":codeberg:", "gitlab": ":gitlab:", "github": ":github:", "gogs": ":gogs:"},

@ -26,7 +26,13 @@ export function isObject(obj) {
// returns whether a dark theme is enabled // returns whether a dark theme is enabled
export function isDarkTheme() { export function isDarkTheme() {
return document.documentElement.classList.contains('theme-arc-green'); if (document.documentElement.classList.contains('theme-auto')) {
return window.matchMedia('(prefers-color-scheme: dark)').matches;
}
if (document.documentElement.classList.contains('theme-arc-green')) {
return true;
}
return false;
} }
// removes duplicate elements in an array // removes duplicate elements in an array

@ -0,0 +1,3 @@
@media (prefers-color-scheme: dark) {
@import "theme-arc-green.less";
}
Loading…
Cancel
Save