Browse Source

Pre-generate themes stylesheets at build time

Frédéric Guillot 7 years ago
parent
commit
ca30800e6a
3 changed files with 22 additions and 19 deletions
  1. 14 12
      generate.go
  2. 0 0
      ui/static/css.go
  3. 8 7
      ui/static_stylesheet.go

+ 14 - 12
generate.go

@@ -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 it is too large
+ 0 - 0
ui/static/css.go


+ 8 - 7
ui/static_stylesheet.go

@@ -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)
 }

Some files were not shown because too many files changed in this diff