diff options
author | 2021-02-17 21:58:04 -0800 | |
---|---|---|
committer | 2021-02-17 22:07:28 -0800 | |
commit | 9569666259a71d12438d4484ce9fc43309fea99c (patch) | |
tree | 697a9effbf62c0ee3c81729d3ea1ea60d213cfab /ui/static/static.go | |
parent | 42edd357bc5622b56f93b658a270ecb6918a0137 (diff) | |
download | v2-9569666259a71d12438d4484ce9fc43309fea99c.tar.gz v2-9569666259a71d12438d4484ce9fc43309fea99c.tar.zst v2-9569666259a71d12438d4484ce9fc43309fea99c.zip |
Use embed package for CSS bundles instead of generated files
Diffstat (limited to 'ui/static/static.go')
-rw-r--r-- | ui/static/static.go | 63 |
1 files changed, 60 insertions, 3 deletions
diff --git a/ui/static/static.go b/ui/static/static.go index f70cc2e8..9cefbfee 100644 --- a/ui/static/static.go +++ b/ui/static/static.go @@ -5,32 +5,48 @@ package static // import "miniflux.app/ui/static" import ( + "bytes" "crypto/sha256" "embed" "fmt" + + "github.com/tdewolff/minify/v2" + "github.com/tdewolff/minify/v2/css" +) + +// Static assets. +var ( + StylesheetBundleChecksums map[string]string + StylesheetBundles map[string][]byte ) //go:embed bin/* var binaryFiles embed.FS +//go:embed css/*.css +var stylesheetFiles embed.FS + var binaryFileChecksums map[string]string -func init() { +// CalculateBinaryFileChecksums generates hash of embed binary files. +func CalculateBinaryFileChecksums() error { binaryFileChecksums = make(map[string]string) dirEntries, err := binaryFiles.ReadDir("bin") if err != nil { - panic(err) + return err } for _, dirEntry := range dirEntries { data, err := LoadBinaryFile(dirEntry.Name()) if err != nil { - panic(err) + return err } binaryFileChecksums[dirEntry.Name()] = fmt.Sprintf("%x", sha256.Sum256(data)) } + + return nil } // LoadBinaryFile loads an embed binary file. @@ -45,3 +61,44 @@ func GetBinaryFileChecksum(filename string) (string, error) { } return binaryFileChecksums[filename], nil } + +// GenerateStylesheetsBundles creates CSS bundles. +func GenerateStylesheetsBundles() error { + var bundles = map[string][]string{ + "light_serif": {"css/light.css", "css/serif.css", "css/common.css"}, + "light_sans_serif": {"css/light.css", "css/sans_serif.css", "css/common.css"}, + "dark_serif": {"css/dark.css", "css/serif.css", "css/common.css"}, + "dark_sans_serif": {"css/dark.css", "css/sans_serif.css", "css/common.css"}, + "system_serif": {"css/system.css", "css/serif.css", "css/common.css"}, + "system_sans_serif": {"css/system.css", "css/sans_serif.css", "css/common.css"}, + } + + StylesheetBundles = make(map[string][]byte) + StylesheetBundleChecksums = make(map[string]string) + + minifier := minify.New() + minifier.AddFunc("text/css", css.Minify) + + for bundle, srcFiles := range bundles { + var buffer bytes.Buffer + + for _, srcFile := range srcFiles { + fileData, err := stylesheetFiles.ReadFile(srcFile) + if err != nil { + return err + } + + buffer.Write(fileData) + } + + minifiedData, err := minifier.Bytes("text/css", buffer.Bytes()) + if err != nil { + return err + } + + StylesheetBundles[bundle] = minifiedData + StylesheetBundleChecksums[bundle] = fmt.Sprintf("%x", sha256.Sum256(minifiedData)) + } + + return nil +} |