mirror of
https://github.com/miniflux/v2.git
synced 2025-08-01 17:38:37 +00:00
Use embed package for Javascript bundles instead of generated files
This commit is contained in:
parent
9569666259
commit
4855fbd13f
9 changed files with 79 additions and 106 deletions
File diff suppressed because one or more lines are too long
|
@ -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
|
||||
}
|
||||
|
|
|
@ -16,7 +16,7 @@ import (
|
|||
|
||||
func (h *handler) showJavascript(w http.ResponseWriter, r *http.Request) {
|
||||
filename := request.RouteStringParam(r, "name")
|
||||
etag, found := static.JavascriptsChecksums[filename]
|
||||
etag, found := static.JavascriptBundleChecksums[filename]
|
||||
if !found {
|
||||
html.NotFound(w, r)
|
||||
return
|
||||
|
@ -24,7 +24,7 @@ func (h *handler) showJavascript(w http.ResponseWriter, r *http.Request) {
|
|||
|
||||
response.New(w, r).WithCaching(etag, 48*time.Hour, func(b *response.Builder) {
|
||||
b.WithHeader("Content-Type", "text/javascript; charset=utf-8")
|
||||
b.WithBody(static.Javascripts[filename])
|
||||
b.WithBody(static.JavascriptBundles[filename])
|
||||
b.Write()
|
||||
})
|
||||
}
|
||||
|
|
|
@ -41,7 +41,7 @@ func New(tpl *template.Engine, r *http.Request, sess *session.Session) *View {
|
|||
b.params["flashErrorMessage"] = sess.FlashErrorMessage(request.FlashErrorMessage(r))
|
||||
b.params["theme"] = theme
|
||||
b.params["theme_checksum"] = static.StylesheetBundleChecksums[theme]
|
||||
b.params["app_js_checksum"] = static.JavascriptsChecksums["app"]
|
||||
b.params["sw_js_checksum"] = static.JavascriptsChecksums["service-worker"]
|
||||
b.params["app_js_checksum"] = static.JavascriptBundleChecksums["app"]
|
||||
b.params["sw_js_checksum"] = static.JavascriptBundleChecksums["service-worker"]
|
||||
return b
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue