42 lines
619 B
Go
42 lines
619 B
Go
package web
|
|
|
|
import (
|
|
"embed"
|
|
"io/fs"
|
|
"path"
|
|
)
|
|
|
|
//go:embed assets scripts styles templates
|
|
var webFS embed.FS
|
|
|
|
var FS fs.FS
|
|
|
|
func init() {
|
|
FS = prefixFS{root: "web", fs: webFS}
|
|
}
|
|
|
|
type prefixFS struct {
|
|
root string
|
|
fs fs.FS
|
|
}
|
|
|
|
func (p prefixFS) Open(name string) (fs.File, error) {
|
|
clean := path.Clean(name)
|
|
|
|
if clean == p.root {
|
|
return p.fs.Open(".")
|
|
}
|
|
|
|
return p.fs.Open(clean[len(p.root + "/"):])
|
|
}
|
|
|
|
func (p prefixFS) ReadDir(name string) ([]fs.DirEntry, error) {
|
|
clean := path.Clean(name)
|
|
|
|
if clean == p.root {
|
|
return fs.ReadDir(p.fs, ".")
|
|
}
|
|
|
|
return fs.ReadDir(p.fs, clean[len(p.root + "/"):])
|
|
}
|