summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRohan Kumar <seirdy@seirdy.one>2021-06-09 16:13:46 -0700
committerBjørn Erik Pedersen <bjorn.erik.pedersen@gmail.com>2021-06-18 13:11:44 +0200
commit02f31897b4f7252154850a65c900e88e0b237fa3 (patch)
tree97a517c98892ec07d9e31e0a20e2c759e89db398
parent402da3f8f327f97302c4b5d69cd4832a94bd189b (diff)
media: support application/manifest+json
The standard file extension for Web App Manifest files is ".webmanifest". This commit allows Hugo to recognize .webmanifest files as "application/manifest+json" files and to minify them using its JSON minifier. The .webmanifest file extension is recommended in the w3c spec to simplify media type registration: https://www.w3.org/TR/appmanifest/#media-type-registration Webhint docs are also relevant: https://webhint.io/docs/user-guide/hints/hint-manifest-file-extension/ Closes #8624
-rw-r--r--media/mediaType.go16
-rw-r--r--minifiers/minifiers.go2
-rw-r--r--output/outputFormat.go9
3 files changed, 19 insertions, 8 deletions
diff --git a/media/mediaType.go b/media/mediaType.go
index 817ea1ba8..d3f212ad3 100644
--- a/media/mediaType.go
+++ b/media/mediaType.go
@@ -166,13 +166,14 @@ var (
TSXType = newMediaType("text", "tsx", []string{"tsx"})
JSXType = newMediaType("text", "jsx", []string{"jsx"})
- JSONType = newMediaType("application", "json", []string{"json"})
- RSSType = newMediaTypeWithMimeSuffix("application", "rss", "xml", []string{"xml"})
- XMLType = newMediaType("application", "xml", []string{"xml"})
- SVGType = newMediaTypeWithMimeSuffix("image", "svg", "xml", []string{"svg"})
- TextType = newMediaType("text", "plain", []string{"txt"})
- TOMLType = newMediaType("application", "toml", []string{"toml"})
- YAMLType = newMediaType("application", "yaml", []string{"yaml", "yml"})
+ JSONType = newMediaType("application", "json", []string{"json"})
+ WebAppManifestType = newMediaTypeWithMimeSuffix("application", "manifest", "json", []string{"webmanifest"})
+ RSSType = newMediaTypeWithMimeSuffix("application", "rss", "xml", []string{"xml"})
+ XMLType = newMediaType("application", "xml", []string{"xml"})
+ SVGType = newMediaTypeWithMimeSuffix("image", "svg", "xml", []string{"svg"})
+ TextType = newMediaType("text", "plain", []string{"txt"})
+ TOMLType = newMediaType("application", "toml", []string{"toml"})
+ YAMLType = newMediaType("application", "yaml", []string{"yaml", "yml"})
// Common image types
PNGType = newMediaType("image", "png", []string{"png"})
@@ -206,6 +207,7 @@ var DefaultTypes = Types{
TSXType,
JSXType,
JSONType,
+ WebAppManifestType,
RSSType,
XMLType,
SVGType,
diff --git a/minifiers/minifiers.go b/minifiers/minifiers.go
index e76e56afd..3ac285ecb 100644
--- a/minifiers/minifiers.go
+++ b/minifiers/minifiers.go
@@ -78,7 +78,7 @@ func New(mediaTypes media.Types, outputFormats output.Formats, cfg config.Provid
}
if !conf.DisableJSON {
addMinifier(m, mediaTypes, "json", &conf.Tdewolff.JSON)
- m.AddRegexp(regexp.MustCompile(`^(application|text)/(x-|ld\+)?json$`), &conf.Tdewolff.JSON)
+ m.AddRegexp(regexp.MustCompile(`^(application|text)/(x-|(ld|manifest)\+)?json$`), &conf.Tdewolff.JSON)
}
if !conf.DisableSVG {
addMinifier(m, mediaTypes, "svg", &conf.Tdewolff.SVG)
diff --git a/output/outputFormat.go b/output/outputFormat.go
index a52f43c8b..a2ffd7993 100644
--- a/output/outputFormat.go
+++ b/output/outputFormat.go
@@ -143,6 +143,14 @@ var (
Rel: "alternate",
}
+ WebAppManifestFormat = Format{
+ Name: "WebAppManifest",
+ MediaType: media.WebAppManifestType,
+ BaseName: "manifest",
+ IsPlainText: true,
+ Rel: "manifest",
+ }
+
RobotsTxtFormat = Format{
Name: "ROBOTS",
MediaType: media.TextType,
@@ -176,6 +184,7 @@ var DefaultFormats = Formats{
CSVFormat,
HTMLFormat,
JSONFormat,
+ WebAppManifestFormat,
RobotsTxtFormat,
RSSFormat,
SitemapFormat,