/
static_assets.go
90 lines (75 loc) · 1.88 KB
/
static_assets.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
package server
import (
"net/http"
"strings"
"github.com/flet-dev/flet/server/model"
"github.com/flet-dev/flet/server/store"
log "github.com/sirupsen/logrus"
)
type AssetsFS struct {
staticContent *FileSystemAssetsSFS
}
func newAssetsFS(contentDir string) AssetsFS {
return AssetsFS{
staticContent: newFileSystemAssetsSFS(contentDir, true),
}
}
func (fs AssetsFS) Exists(prefix string, path string) bool {
//log.Debugln("AssetsSFS Exists:", prefix, path)
assetsFS, assetPath, _ := fs.getAssetsSFS(path)
if assetsFS != nil && assetsFS.Exists(assetPath) {
return true
}
return fs.staticContent.Exists(path)
}
func (fs AssetsFS) Open(name string) (file http.File, err error) {
//log.Debugln("AssetsSFS Open:", name)
assetsFS, assetPath, _ := fs.getAssetsSFS(name)
if assetsFS != nil && assetsFS.Exists(assetPath) {
file, err = assetsFS.Open(name)
if err == nil {
return
}
}
file, err = fs.staticContent.Open(name)
return
}
func (fs AssetsFS) getAssetsSFS(path string) (afs *FileSystemAssetsSFS, assetPath string, err error) {
afs = nil
p := strings.Trim(path, "/")
assetPath = path
if p != "" {
hrefParts := strings.Split(p, "/")
if len(hrefParts) > 2 {
p = strings.Join(hrefParts[:2], "/")
assetPath = strings.Join(hrefParts[2:], "/")
} else {
p = ""
}
}
log.Debugln("getAssetsSFS, path, assetPath:", path, assetPath)
pageName, err := model.ParsePageName(p)
if err != nil {
return
}
page := store.GetPageByName(pageName.String())
if page != nil && page.AssetsDir == "" {
return
} else if page == nil && p != "" {
// fallback to index
p = ""
assetPath = path
pageName, err = model.ParsePageName(p)
if err != nil {
return
}
page = store.GetPageByName(pageName.String())
if page == nil || page.AssetsDir == "" {
return
}
} else if page == nil {
return
}
afs = newFileSystemAssetsSFS(page.AssetsDir, false)
return
}