mirror of
https://github.com/prymitive/karma
synced 2026-05-07 03:26:52 +00:00
This will tell webpack to add a hash to all bundles filenames, we generate script tags for loading those and inject them as templates. No more forced cache bypassing
74 lines
1.7 KiB
Go
74 lines
1.7 KiB
Go
package main
|
|
|
|
import (
|
|
"errors"
|
|
"html/template"
|
|
"net/http"
|
|
"strings"
|
|
|
|
assetfs "github.com/elazarl/go-bindata-assetfs"
|
|
log "github.com/sirupsen/logrus"
|
|
)
|
|
|
|
type binaryFileSystem struct {
|
|
fs http.FileSystem
|
|
}
|
|
|
|
func (b *binaryFileSystem) Open(name string) (http.File, error) {
|
|
return b.fs.Open(name)
|
|
}
|
|
|
|
func (b *binaryFileSystem) Exists(prefix string, filepath string) bool {
|
|
if p := strings.TrimPrefix(filepath, prefix); len(p) < len(filepath) {
|
|
if _, err := b.fs.Open(p); err != nil {
|
|
return false
|
|
}
|
|
return true
|
|
}
|
|
return false
|
|
}
|
|
|
|
func newBinaryFileSystem(root string) *binaryFileSystem {
|
|
fs := &assetfs.AssetFS{
|
|
Asset: Asset,
|
|
// Don't render directory index, return 404 for /static/ requests)
|
|
AssetDir: func(path string) ([]string, error) { return nil, errors.New("Not found") },
|
|
Prefix: root,
|
|
}
|
|
return &binaryFileSystem{
|
|
fs,
|
|
}
|
|
}
|
|
|
|
// load all templates from binary asset resource
|
|
// this function will iterate all files with given prefix (e.g. /templates/)
|
|
// and return Template instance with all templates loaded
|
|
func loadTemplates(t *template.Template, prefix string) *template.Template {
|
|
for _, filename := range AssetNames() {
|
|
if strings.HasPrefix(filename, prefix) {
|
|
templateContent, err := Asset(filename)
|
|
if err != nil {
|
|
log.Fatal(err)
|
|
}
|
|
var tmpl *template.Template
|
|
if t == nil {
|
|
// if template wasn't yet initialized do it here
|
|
t = template.New(filename)
|
|
}
|
|
if filename == t.Name() {
|
|
tmpl = t
|
|
} else {
|
|
// if we already have an instance of template.Template then
|
|
// add a new file to it
|
|
tmpl = t.New(filename)
|
|
}
|
|
_, err = tmpl.Parse(string(templateContent))
|
|
if err != nil {
|
|
log.Fatal(err)
|
|
return nil
|
|
}
|
|
}
|
|
}
|
|
return t
|
|
}
|