aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorJames Kiefer <[email protected]>2018-09-12 11:33:14 -0600
committerBjørn Erik Pedersen <[email protected]>2018-09-12 19:33:14 +0200
commit3dafe206e31bb92f27802a04bf9159cbc20af234 (patch)
tree6b2aabcaa3b98087ece4e2a85e1d7944366abc07
parent37d6463479952f7dfba59d899eed38b41e223283 (diff)
downloadhugo-3dafe206e31bb92f27802a04bf9159cbc20af234.tar.gz
hugo-3dafe206e31bb92f27802a04bf9159cbc20af234.zip
minifiers: Make JSON minification more generic
Add a regex matcher for json types. Specifically support LD+JSON which allows for google seo minification out of the box. Expanded JS/JSON minification testing.
-rw-r--r--minifiers/minifiers.go1
-rw-r--r--minifiers/minifiers_test.go46
2 files changed, 40 insertions, 7 deletions
diff --git a/minifiers/minifiers.go b/minifiers/minifiers.go
index 073898815..07eec34ce 100644
--- a/minifiers/minifiers.go
+++ b/minifiers/minifiers.go
@@ -74,6 +74,7 @@ func New(mediaTypes media.Types, outputFormats output.Formats) Client {
addMinifierFunc(m, mediaTypes, "css", css.Minify)
addMinifierFunc(m, mediaTypes, "js", js.Minify)
m.AddFuncRegexp(regexp.MustCompile("^(application|text)/(x-)?(java|ecma)script$"), js.Minify)
+ m.AddFuncRegexp(regexp.MustCompile("^(application|text)/(x-|ld\\+)?json$"), json.Minify)
addMinifierFunc(m, mediaTypes, "json", json.Minify)
addMinifierFunc(m, mediaTypes, "svg", svg.Minify)
addMinifierFunc(m, mediaTypes, "xml", xml.Minify)
diff --git a/minifiers/minifiers_test.go b/minifiers/minifiers_test.go
index a0f0f97b4..6500aa2c2 100644
--- a/minifiers/minifiers_test.go
+++ b/minifiers/minifiers_test.go
@@ -28,14 +28,46 @@ func TestNew(t *testing.T) {
assert := require.New(t)
m := New(media.DefaultTypes, output.DefaultFormats)
- var b bytes.Buffer
+ var rawJS string
+ var minJS string
+ rawJS = " var foo =1 ; foo ++ ; "
+ minJS = "var foo=1;foo++;"
- assert.NoError(m.Minify(media.CSSType, &b, strings.NewReader("body { color: blue; }")))
- assert.Equal("body{color:blue}", b.String())
+ var rawJSON string
+ var minJSON string
+ rawJSON = " { \"a\" : 123 , \"b\":2, \"c\": 5 } "
+ minJSON = "{\"a\":123,\"b\":2,\"c\":5}"
- b.Reset()
+ for _, test := range []struct {
+ tp media.Type
+ rawString string
+ expectedMinString string
+ }{
+ {media.CSSType, " body { color: blue; } ", "body{color:blue}"},
+ {media.RSSType, " <hello> Hugo! </hello> ", "<hello>Hugo!</hello>"}, // RSS should be handled as XML
+ {media.JSONType, rawJSON, minJSON},
+ {media.JavascriptType, rawJS, minJS},
+ // JS Regex minifiers
+ {media.Type{MainType: "application", SubType: "ecmascript"}, rawJS, minJS},
+ {media.Type{MainType: "application", SubType: "javascript"}, rawJS, minJS},
+ {media.Type{MainType: "application", SubType: "x-javascript"}, rawJS, minJS},
+ {media.Type{MainType: "application", SubType: "x-ecmascript"}, rawJS, minJS},
+ {media.Type{MainType: "text", SubType: "ecmascript"}, rawJS, minJS},
+ {media.Type{MainType: "text", SubType: "javascript"}, rawJS, minJS},
+ {media.Type{MainType: "text", SubType: "x-javascript"}, rawJS, minJS},
+ {media.Type{MainType: "text", SubType: "x-ecmascript"}, rawJS, minJS},
+ // JSON Regex minifiers
+ {media.Type{MainType: "application", SubType: "json"}, rawJSON, minJSON},
+ {media.Type{MainType: "application", SubType: "x-json"}, rawJSON, minJSON},
+ {media.Type{MainType: "application", SubType: "ld+json"}, rawJSON, minJSON},
+ {media.Type{MainType: "text", SubType: "json"}, rawJSON, minJSON},
+ {media.Type{MainType: "text", SubType: "x-json"}, rawJSON, minJSON},
+ {media.Type{MainType: "text", SubType: "ld+json"}, rawJSON, minJSON},
+ } {
+ var b bytes.Buffer
+
+ assert.NoError(m.Minify(test.tp, &b, strings.NewReader(test.rawString)))
+ assert.Equal(test.expectedMinString, b.String())
+ }
- // RSS should be handled as XML
- assert.NoError(m.Minify(media.RSSType, &b, strings.NewReader("<hello> Hugo! </hello> ")))
- assert.Equal("<hello>Hugo!</hello>", b.String())
}