Skip to content

Commit cd6175d

Browse files
committed
feat(theme): convert assets type to slice
1 parent 6e14ea4 commit cd6175d

File tree

3 files changed

+30
-24
lines changed

3 files changed

+30
-24
lines changed

src/tpl/defaultTheme/defaultTheme.go

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -9,15 +9,15 @@ import (
99
//go:embed frontend/index.html
1010
var defaultTplStr string
1111

12-
//go:embed frontend/favicon.ico
13-
var defaultFavicon []byte
14-
1512
//go:embed frontend/index.css
1613
var defaultCss []byte
1714

1815
//go:embed frontend/index.js
1916
var defaultJs []byte
2017

18+
//go:embed frontend/favicon.ico
19+
var defaultFavicon []byte
20+
2121
var DefaultTheme theme.MemTheme
2222

2323
func init() {
@@ -29,8 +29,8 @@ func init() {
2929
}
3030

3131
DefaultTheme.Assets = theme.Assets{
32-
"favicon.ico": {"image/x-icon", bytes.NewReader(defaultFavicon)},
33-
"index.css": {"text/css; charset=utf-8", bytes.NewReader(defaultCss)},
34-
"index.js": {"application/javascript; charset=utf-8", bytes.NewReader(defaultJs)},
32+
{"index.css", "text/css; charset=utf-8", bytes.NewReader(defaultCss)},
33+
{"index.js", "application/javascript; charset=utf-8", bytes.NewReader(defaultJs)},
34+
{"favicon.ico", "image/x-icon", bytes.NewReader(defaultFavicon)},
3535
}
3636
}

src/tpl/theme/asset.go

Lines changed: 9 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -7,23 +7,25 @@ import (
77
)
88

99
type Asset struct {
10+
Path string
1011
ContentType string
1112
ReadSeeker io.ReadSeeker
1213
}
1314

14-
type Assets map[string]Asset
15+
type Assets []Asset
1516

16-
func (assets Assets) Set(path string, content []byte) error {
17+
func (assets Assets) Append(path string, content []byte) (Assets, error) {
1718
rd := bytes.NewReader(content)
1819
ctype, err := util.GetContentType(path, rd)
1920
if err != nil {
20-
return err
21+
return assets, err
2122
}
2223

23-
asset := Asset{
24+
assets = append(assets, Asset{
25+
Path: path,
2426
ContentType: ctype,
2527
ReadSeeker: rd,
26-
}
27-
assets[path] = asset
28-
return nil
28+
})
29+
30+
return assets, nil
2931
}

src/tpl/theme/memTheme.go

Lines changed: 15 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -17,11 +17,6 @@ type MemTheme struct {
1717
var initTime = time.Now()
1818

1919
func LoadMemTheme(themePath string) (theme MemTheme, err error) {
20-
var currentTheme = MemTheme{
21-
Template: nil,
22-
Assets: make(Assets, 3),
23-
}
24-
2520
// assume to be a zip file
2621
var zipRd *zip.ReadCloser
2722
zipRd, err = zip.OpenReader(themePath)
@@ -30,6 +25,11 @@ func LoadMemTheme(themePath string) (theme MemTheme, err error) {
3025
}
3126
defer zipRd.Close()
3227

28+
currentTheme := MemTheme{
29+
Template: nil,
30+
Assets: make(Assets, 0, len(zipRd.File)-1), // exclude template file
31+
}
32+
3333
for _, f := range zipRd.File {
3434
var rd io.ReadCloser
3535
rd, err = f.Open()
@@ -48,7 +48,7 @@ func LoadMemTheme(themePath string) (theme MemTheme, err error) {
4848
return
4949
}
5050
} else {
51-
currentTheme.Assets.Set(f.Name, raw)
51+
currentTheme.Assets, _ = currentTheme.Assets.Append(f.Name, raw)
5252
}
5353
}
5454

@@ -66,12 +66,16 @@ func (theme MemTheme) RenderPage(w io.Writer, data interface{}) error {
6666
}
6767

6868
func (theme MemTheme) RenderAsset(w http.ResponseWriter, r *http.Request, assetPath string) {
69-
asset, ok := theme.Assets[assetPath]
70-
if !ok {
71-
w.WriteHeader(http.StatusNotFound)
69+
assets := theme.Assets
70+
for i := range assets {
71+
if assets[i].Path != assetPath {
72+
continue
73+
}
74+
w.Header().Set("Content-Type", assets[i].ContentType)
75+
http.ServeContent(w, r, assetPath, initTime, assets[i].ReadSeeker)
7276
return
7377
}
7478

75-
w.Header().Set("Content-Type", asset.ContentType)
76-
http.ServeContent(w, r, assetPath, initTime, asset.ReadSeeker)
79+
w.WriteHeader(http.StatusNotFound)
80+
return
7781
}

0 commit comments

Comments
 (0)