1
0
Fork 0

Pre-generate themes stylesheets at build time

This commit is contained in:
Frédéric Guillot 2018-07-07 11:00:39 -07:00
parent 459bb4531f
commit ca30800e6a
3 changed files with 28 additions and 25 deletions

View file

@ -116,23 +116,20 @@ func generateJSBundle(bundleFile string, srcFiles []string) {
bundle.Write(bundleFile)
}
func generateCSSBundle(bundleFile string, srcFiles []string) {
func generateCSSBundle(bundleFile string, themes map[string][]string) {
bundle := NewBundle("static", "Stylesheets")
m := minify.New()
m.AddFunc("text/css", css.Minify)
for _, srcFile := range srcFiles {
data := readFile(srcFile)
filename := stripExtension(basename(srcFile))
m := minify.New()
m.AddFunc("text/css", css.Minify)
minifiedData, err := m.Bytes("text/css", data)
for theme, srcFiles := range themes {
data := concat(srcFiles)
minifiedData, err := m.String("text/css", data)
if err != nil {
panic(err)
}
bundle.Files[filename] = string(minifiedData)
bundle.Checksums[filename] = checksum(minifiedData)
bundle.Files[theme] = minifiedData
bundle.Checksums[theme] = checksum([]byte(minifiedData))
}
bundle.Write(bundleFile)
@ -184,7 +181,12 @@ func main() {
"ui/static/js/bootstrap.js",
})
generateCSSBundle("ui/static/css.go", glob("ui/static/css/*.css"))
generateCSSBundle("ui/static/css.go", map[string][]string{
"default": []string{"ui/static/css/common.css"},
"black": []string{"ui/static/css/common.css", "ui/static/css/black.css"},
"sansserif": []string{"ui/static/css/common.css", "ui/static/css/sansserif.css"},
})
generateBinaryBundle("ui/static/bin.go", glob("ui/static/bin/*"))
generateBundle("sql/sql.go", "sql", "SqlMap", glob("sql/*.sql"))

File diff suppressed because one or more lines are too long

View file

@ -10,19 +10,20 @@ import (
"github.com/miniflux/miniflux/http/request"
"github.com/miniflux/miniflux/http/response"
"github.com/miniflux/miniflux/http/response/html"
"github.com/miniflux/miniflux/ui/static"
)
// Stylesheet renders the CSS.
func (c *Controller) Stylesheet(w http.ResponseWriter, r *http.Request) {
stylesheet := request.Param(r, "name", "white")
body := static.Stylesheets["common"]
etag := static.StylesheetsChecksums["common"]
if theme, found := static.Stylesheets[stylesheet]; found {
body += theme
etag += static.StylesheetsChecksums[stylesheet]
stylesheet := request.Param(r, "name", "default")
if _, found := static.Stylesheets[stylesheet]; !found {
html.NotFound(w)
return
}
body := static.Stylesheets[stylesheet]
etag := static.StylesheetsChecksums[stylesheet]
response.Cache(w, r, "text/css; charset=utf-8", etag, []byte(body), 48*time.Hour)
}