mirror of
https://github.com/miniflux/v2.git
synced 2025-06-27 16:36:00 +00:00
Use embed package for CSS bundles instead of generated files
This commit is contained in:
parent
42edd357bc
commit
9569666259
9 changed files with 83 additions and 58 deletions
|
@ -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
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue