aboutsummaryrefslogtreecommitdiff
path: root/middleware
diff options
context:
space:
mode:
authorBobby <[email protected]>2025-07-18 12:24:06 +0530
committerBobby <[email protected]>2025-07-18 12:24:06 +0530
commit01e730c68a79862112798d4816625ddcd00350d9 (patch)
tree3850e69c55334756b0faef76f54d9a74091f92d2 /middleware
parent8df8cdd7e1bdefded59d073c14aa74666740be8c (diff)
downloadimageboard-01e730c68a79862112798d4816625ddcd00350d9.tar.xz
imageboard-01e730c68a79862112798d4816625ddcd00350d9.zip
refactor ratings, minify content, update single post page
Diffstat (limited to 'middleware')
-rw-r--r--middleware/middleware.go1
-rw-r--r--middleware/minifier.go79
2 files changed, 80 insertions, 0 deletions
diff --git a/middleware/middleware.go b/middleware/middleware.go
index ee51965..171e107 100644
--- a/middleware/middleware.go
+++ b/middleware/middleware.go
@@ -4,4 +4,5 @@ import "github.com/gofiber/fiber/v2"
func Initialize(app *fiber.App) {
app.Use(JSON)
+ app.Use(Minifier)
}
diff --git a/middleware/minifier.go b/middleware/minifier.go
new file mode 100644
index 0000000..09d8813
--- /dev/null
+++ b/middleware/minifier.go
@@ -0,0 +1,79 @@
+package middleware
+
+import (
+ "bytes"
+ "regexp"
+
+ "github.com/gofiber/fiber/v2"
+ "github.com/tdewolff/minify/v2"
+ "github.com/tdewolff/minify/v2/css"
+ "github.com/tdewolff/minify/v2/html"
+ "github.com/tdewolff/minify/v2/js"
+ "github.com/tdewolff/minify/v2/json"
+ "github.com/tdewolff/minify/v2/xml"
+)
+
+func Minifier(context *fiber.Ctx) error {
+ var (
+ minifyHTML = true
+ minifyCSS = true
+ minifyJS = true
+ minifyXML = true
+ minifyJSON = true
+ )
+
+ m := minify.New()
+
+ if minifyHTML {
+ m.Add("text/html", &html.Minifier{
+ KeepEndTags: true,
+ KeepDocumentTags: true,
+ })
+ }
+
+ if minifyCSS {
+ m.Add("text/css", &css.Minifier{})
+ }
+
+ if minifyJS {
+ m.Add("application/javascript", &js.Minifier{})
+ m.Add("application/x-javascript", &js.Minifier{})
+ m.Add("text/javascript", &js.Minifier{})
+ m.AddRegexp(regexp.MustCompile("^(application|text)/(x-)?(java|ecma)script$"), &js.Minifier{})
+ }
+
+ if minifyXML {
+ m.AddRegexp(regexp.MustCompile("xml$"), &xml.Minifier{})
+ }
+
+ if minifyJSON {
+ m.AddRegexp(regexp.MustCompile("json$"), &json.Minifier{})
+ }
+
+ if err := context.Next(); err != nil {
+ return err
+ }
+
+ statusCode := context.Response().StatusCode()
+ if statusCode != fiber.StatusOK && statusCode != fiber.StatusNotModified {
+ return nil
+ }
+
+ if statusCode == fiber.StatusNotModified {
+ return nil
+ }
+ origBody := context.Response().Body()
+ if len(origBody) == 0 {
+ return nil
+ }
+
+ context.Response().ResetBody()
+
+ mimetype := string(context.Response().Header.Peek("Content-Type"))
+
+ if err := m.Minify(mimetype, context.Response().BodyWriter(), bytes.NewReader(origBody)); err != nil {
+ context.Response().BodyWriter().Write(origBody)
+ }
+
+ return nil
+}