aboutsummaryrefslogtreecommitdiff
path: root/ui/static/static.go
diff options
context:
space:
mode:
authorGravatar Frédéric Guillot <f@miniflux.net> 2021-02-18 20:34:58 -0800
committerGravatar fguillot <f@miniflux.net> 2021-02-18 20:49:06 -0800
commit4855fbd13f8c9be1a593db2db05052cb49954e0b (patch)
tree61467d5b63d15b3362e52c64957e730ebbfcd374 /ui/static/static.go
parent9569666259a71d12438d4484ce9fc43309fea99c (diff)
downloadv2-4855fbd13f8c9be1a593db2db05052cb49954e0b.tar.gz
v2-4855fbd13f8c9be1a593db2db05052cb49954e0b.tar.zst
v2-4855fbd13f8c9be1a593db2db05052cb49954e0b.zip
Use embed package for Javascript bundles instead of generated files
Diffstat (limited to 'ui/static/static.go')
-rw-r--r--ui/static/static.go70
1 files changed, 70 insertions, 0 deletions
diff --git a/ui/static/static.go b/ui/static/static.go
index 9cefbfee..8e78a8dd 100644
--- a/ui/static/static.go
+++ b/ui/static/static.go
@@ -12,12 +12,15 @@ import (
"github.com/tdewolff/minify/v2"
"github.com/tdewolff/minify/v2/css"
+ "github.com/tdewolff/minify/v2/js"
)
// Static assets.
var (
StylesheetBundleChecksums map[string]string
StylesheetBundles map[string][]byte
+ JavascriptBundleChecksums map[string]string
+ JavascriptBundles map[string][]byte
)
//go:embed bin/*
@@ -26,6 +29,9 @@ var binaryFiles embed.FS
//go:embed css/*.css
var stylesheetFiles embed.FS
+//go:embed js/*.js
+var javascriptFiles embed.FS
+
var binaryFileChecksums map[string]string
// CalculateBinaryFileChecksums generates hash of embed binary files.
@@ -102,3 +108,67 @@ func GenerateStylesheetsBundles() error {
return nil
}
+
+// GenerateJavascriptBundles creates JS bundles.
+func GenerateJavascriptBundles() error {
+ var bundles = map[string][]string{
+ "app": {
+ "js/dom_helper.js",
+ "js/touch_handler.js",
+ "js/keyboard_handler.js",
+ "js/request_builder.js",
+ "js/modal_handler.js",
+ "js/app.js",
+ "js/bootstrap.js",
+ },
+ "service-worker": {
+ "js/service_worker.js",
+ },
+ }
+
+ var prefixes = map[string]string{
+ "app": "(function(){'use strict';",
+ "service-worker": "'use strict';",
+ }
+
+ var suffixes = map[string]string{
+ "app": "})();",
+ }
+
+ JavascriptBundles = make(map[string][]byte)
+ JavascriptBundleChecksums = make(map[string]string)
+
+ minifier := minify.New()
+ minifier.AddFunc("text/javascript", js.Minify)
+
+ for bundle, srcFiles := range bundles {
+ var buffer bytes.Buffer
+
+ if prefix, found := prefixes[bundle]; found {
+ buffer.WriteString(prefix)
+ }
+
+ for _, srcFile := range srcFiles {
+ fileData, err := javascriptFiles.ReadFile(srcFile)
+ if err != nil {
+ return err
+ }
+
+ buffer.Write(fileData)
+ }
+
+ if suffix, found := suffixes[bundle]; found {
+ buffer.WriteString(suffix)
+ }
+
+ minifiedData, err := minifier.Bytes("text/javascript", buffer.Bytes())
+ if err != nil {
+ return err
+ }
+
+ JavascriptBundles[bundle] = minifiedData
+ JavascriptBundleChecksums[bundle] = fmt.Sprintf("%x", sha256.Sum256(minifiedData))
+ }
+
+ return nil
+}