summaryrefslogtreecommitdiffstats
path: root/minifiers/config.go
diff options
context:
space:
mode:
Diffstat (limited to 'minifiers/config.go')
-rw-r--r--minifiers/config.go111
1 files changed, 111 insertions, 0 deletions
diff --git a/minifiers/config.go b/minifiers/config.go
new file mode 100644
index 000000000..20d122e9b
--- /dev/null
+++ b/minifiers/config.go
@@ -0,0 +1,111 @@
+// Copyright 2019 The Hugo Authors. All rights reserved.
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+package minifiers
+
+import (
+ "github.com/gohugoio/hugo/config"
+ "github.com/gohugoio/hugo/docshelper"
+ "github.com/gohugoio/hugo/parser"
+
+ "github.com/mitchellh/mapstructure"
+ "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/svg"
+ "github.com/tdewolff/minify/v2/xml"
+)
+
+var defaultTdewolffConfig = tdewolffConfig{
+ HTML: html.Minifier{
+ KeepDocumentTags: true,
+ KeepConditionalComments: true,
+ KeepEndTags: true,
+ KeepDefaultAttrVals: true,
+ KeepWhitespace: false,
+ // KeepQuotes: false, >= v2.6.2
+ },
+ CSS: css.Minifier{
+ Decimals: -1, // will be deprecated
+ // Precision: 0, // use Precision with >= v2.7.0
+ KeepCSS2: true,
+ },
+ JS: js.Minifier{},
+ JSON: json.Minifier{},
+ SVG: svg.Minifier{
+ Decimals: -1, // will be deprecated
+ // Precision: 0, // use Precision with >= v2.7.0
+ },
+ XML: xml.Minifier{
+ KeepWhitespace: false,
+ },
+}
+
+type tdewolffConfig struct {
+ HTML html.Minifier
+ CSS css.Minifier
+ JS js.Minifier
+ JSON json.Minifier
+ SVG svg.Minifier
+ XML xml.Minifier
+}
+
+type minifiersConfig struct {
+ EnableHTML bool
+ EnableCSS bool
+ EnableJS bool
+ EnableJSON bool
+ EnableSVG bool
+ EnableXML bool
+
+ Tdewolff tdewolffConfig
+}
+
+var defaultConfig = minifiersConfig{
+ EnableHTML: true,
+ EnableCSS: true,
+ EnableJS: true,
+ EnableJSON: true,
+ EnableSVG: true,
+ EnableXML: true,
+
+ Tdewolff: defaultTdewolffConfig,
+}
+
+func decodeConfig(cfg config.Provider) (conf minifiersConfig, err error) {
+ conf = defaultConfig
+
+ m := cfg.GetStringMap("minifiers")
+ if m == nil {
+ return
+ }
+
+ err = mapstructure.WeakDecode(m, &conf)
+
+ if err != nil {
+ return
+ }
+
+ return
+}
+
+func init() {
+ docsProvider := func() map[string]interface{} {
+ docs := make(map[string]interface{})
+ docs["minifiers"] = parser.LowerCaseCamelJSONMarshaller{Value: defaultConfig}
+ return docs
+
+ }
+ docshelper.AddDocProvider("config", docsProvider)
+}