diff options
| author | Bobby <[email protected]> | 2025-07-18 12:24:06 +0530 |
|---|---|---|
| committer | Bobby <[email protected]> | 2025-07-18 12:24:06 +0530 |
| commit | 01e730c68a79862112798d4816625ddcd00350d9 (patch) | |
| tree | 3850e69c55334756b0faef76f54d9a74091f92d2 /middleware | |
| parent | 8df8cdd7e1bdefded59d073c14aa74666740be8c (diff) | |
| download | imageboard-01e730c68a79862112798d4816625ddcd00350d9.tar.xz imageboard-01e730c68a79862112798d4816625ddcd00350d9.zip | |
refactor ratings, minify content, update single post page
Diffstat (limited to 'middleware')
| -rw-r--r-- | middleware/middleware.go | 1 | ||||
| -rw-r--r-- | middleware/minifier.go | 79 |
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 +} |
