-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathassets.go
More file actions
49 lines (40 loc) · 1.34 KB
/
assets.go
File metadata and controls
49 lines (40 loc) · 1.34 KB
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
package main
import (
"embed"
"html/template"
"io/fs"
"net/http"
)
// Embed the web assets at compile time
//
//go:embed web/templates
var templateFS embed.FS
//go:embed web/static
var staticFS embed.FS
// EmbeddedAssetProvider implements the AssetProvider interface using embedded assets
type EmbeddedAssetProvider struct{}
// GetTemplates returns parsed templates from embedded assets
func (e *EmbeddedAssetProvider) GetTemplates() (*template.Template, error) {
return template.ParseFS(templateFS, "web/templates/*.html")
}
// GetStaticHandler returns an HTTP handler for serving static assets
func (e *EmbeddedAssetProvider) GetStaticHandler() http.Handler {
// Get the static subdirectory from the embedded filesystem
staticSubFS, err := fs.Sub(staticFS, "web/static")
if err != nil {
panic(err) // This should never happen with properly embedded assets
}
return http.FileServer(http.FS(staticSubFS))
}
// GetStaticFS returns the embedded static filesystem
func (e *EmbeddedAssetProvider) GetStaticFS() fs.FS {
staticSubFS, err := fs.Sub(staticFS, "web/static")
if err != nil {
panic(err) // This should never happen with properly embedded assets
}
return staticSubFS
}
// HasEmbeddedAssets returns true if assets are embedded (always true in this implementation)
func (e *EmbeddedAssetProvider) HasEmbeddedAssets() bool {
return true
}