Skip to content

Commit 247084f

Browse files
committed
fix
1 parent 1a2ae64 commit 247084f

7 files changed

+82
-0
lines changed

services/webtheme/webtheme.go

+50
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
package webtheme
55

66
import (
7+
"regexp"
78
"sort"
89
"strings"
910
"sync"
@@ -20,6 +21,55 @@ var (
2021
themeOnce sync.Once
2122
)
2223

24+
type ThemeMetaInfo struct {
25+
ThemeFileName string
26+
DisplayName string
27+
PreferColorSchemes []string
28+
}
29+
30+
func parseThemeMetaInfoToMap(cssContent string) map[string]string {
31+
reMetaInfoItem := `
32+
(
33+
\s*(--[-\w]+)
34+
\s*:
35+
\s*("(\\"|[^"])*")
36+
\s*;
37+
\s*
38+
)
39+
`
40+
reMetaInfoItem = strings.ReplaceAll(reMetaInfoItem, "\n", "")
41+
reMetaInfoBlock := `\bgitea-theme-meta-info\s*\{(` + reMetaInfoItem + `+)\}`
42+
re := regexp.MustCompile(reMetaInfoBlock)
43+
matchedMetaInfoBlock := re.FindAllStringSubmatch(cssContent, -1)
44+
if len(matchedMetaInfoBlock) == 0 {
45+
return nil
46+
}
47+
re = regexp.MustCompile(strings.ReplaceAll(reMetaInfoItem, "\n", ""))
48+
matchedItems := re.FindAllStringSubmatch(matchedMetaInfoBlock[0][1], -1)
49+
m := map[string]string{}
50+
for _, item := range matchedItems {
51+
v := item[3]
52+
v = strings.TrimPrefix(v, "\"")
53+
v = strings.TrimSuffix(v, "\"")
54+
v = strings.ReplaceAll(v, `\"`, `"`)
55+
m[item[2]] = v
56+
}
57+
return m
58+
}
59+
60+
func parseThemeMetaInfo(fileName, cssContent string) *ThemeMetaInfo {
61+
themeInfo := &ThemeMetaInfo{
62+
ThemeFileName: fileName,
63+
DisplayName: strings.TrimSuffix(strings.TrimPrefix(fileName, "theme-"), ".css"),
64+
}
65+
m := parseThemeMetaInfoToMap(cssContent)
66+
if m == nil {
67+
return themeInfo
68+
}
69+
themeInfo.DisplayName = m["--theme-display-name"]
70+
return themeInfo
71+
}
72+
2373
func initThemes() {
2474
availableThemes = nil
2575
defer func() {

services/webtheme/webtheme_test.go

+12
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
package webtheme
2+
3+
import (
4+
"testing"
5+
6+
"github.com/stretchr/testify/assert"
7+
)
8+
9+
func TestParseThemeMetaInfoToMap(t *testing.T) {
10+
m := parseThemeMetaInfoToMap(`gitea-theme-meta-info { --k1: "v1"; --k2: "a\"b"; }`)
11+
assert.Equal(t, map[string]string{"--k1": "v1", "--k2": "a\"b"}, m)
12+
}
+4
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,6 @@
11
@import "./theme-gitea-light.css" (prefers-color-scheme: light);
22
@import "./theme-gitea-dark.css" (prefers-color-scheme: dark);
3+
4+
gitea-theme-meta-info {
5+
--theme-display-name: 'Auto';
6+
}

web_src/css/themes/theme-gitea-dark-protanopia-deuteranopia.css

+4
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,9 @@
11
@import "./theme-gitea-dark.css";
22

3+
gitea-theme-meta-info {
4+
--theme-display-name: "Dark (Red/Green Colorblind-Friendly)";
5+
}
6+
37
/* red/green colorblind-friendly colors */
48
/* from GitHub: --diffBlob-addition-*, --diffBlob-deletion-*, etc */
59
:root {

web_src/css/themes/theme-gitea-dark.css

+4
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,10 @@
11
@import "../chroma/dark.css";
22
@import "../codemirror/dark.css";
33

4+
gitea-theme-meta-info {
5+
--theme-display-name: "Dark";
6+
}
7+
48
:root {
59
--is-dark-theme: true;
610
--color-primary: #4183c4;

web_src/css/themes/theme-gitea-light-protanopia-deuteranopia.css

+4
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,9 @@
11
@import "./theme-gitea-light.css";
22

3+
gitea-theme-meta-info {
4+
--theme-display-name: "Light (Red/Green Colorblind-Friendly)";
5+
}
6+
37
/* red/green colorblind-friendly colors */
48
/* from GitHub: --diffBlob-addition-*, --diffBlob-deletion-*, etc */
59
:root {

web_src/css/themes/theme-gitea-light.css

+4
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,10 @@
11
@import "../chroma/light.css";
22
@import "../codemirror/light.css";
33

4+
gitea-theme-meta-info {
5+
--theme-display-name: "Light";
6+
}
7+
48
:root {
59
--is-dark-theme: false;
610
--color-primary: #4183c4;

0 commit comments

Comments
 (0)