aboutsummaryrefslogtreecommitdiff
path: root/ui/static/static.go
diff options
context:
space:
mode:
authorGravatar Frédéric Guillot <f@miniflux.net> 2021-02-17 21:58:04 -0800
committerGravatar fguillot <f@miniflux.net> 2021-02-17 22:07:28 -0800
commit9569666259a71d12438d4484ce9fc43309fea99c (patch)
tree697a9effbf62c0ee3c81729d3ea1ea60d213cfab /ui/static/static.go
parent42edd357bc5622b56f93b658a270ecb6918a0137 (diff)
downloadv2-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.go63
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
+}