diff --git a/commands/gen.go b/commands/gen.go
index 1a3cf2174..02df720c8 100644
--- a/commands/gen.go
+++ b/commands/gen.go
@@ -30,6 +30,8 @@ import (
"github.com/gohugoio/hugo/docshelper"
"github.com/gohugoio/hugo/helpers"
"github.com/gohugoio/hugo/hugofs"
+ "github.com/gohugoio/hugo/hugolib"
+ "github.com/gohugoio/hugo/parser"
"github.com/spf13/cobra"
"github.com/spf13/cobra/doc"
)
@@ -197,6 +199,14 @@ url: %s
enc := json.NewEncoder(f)
enc.SetIndent("", " ")
+ configProvider := func() docshelper.DocProvider {
+ conf := hugolib.DefaultConfig()
+ conf.CacheDir = "" // The default value does not make sense in the docs.
+ defaultConfig := parser.LowerCaseCamelJSONMarshaller{Value: conf}
+ return docshelper.DocProvider{"config": defaultConfig}
+ }
+
+ docshelper.AddDocProviderFunc(configProvider)
if err := enc.Encode(docshelper.GetDocProvider()); err != nil {
return err
}
diff --git a/config/allconfig/alldecoders.go b/config/allconfig/alldecoders.go
index 6b8a4568c..24f9b9677 100644
--- a/config/allconfig/alldecoders.go
+++ b/config/allconfig/alldecoders.go
@@ -49,10 +49,11 @@ type decodeConfig struct {
}
type decodeWeight struct {
- key string
- decode func(decodeWeight, decodeConfig) error
- getCompiler func(c *Config) configCompiler
- weight int
+ key string
+ decode func(decodeWeight, decodeConfig) error
+ getCompiler func(c *Config) configCompiler
+ weight int
+ internalOrDeprecated bool // Hide it from the docs.
}
var allDecoderSetups = map[string]decodeWeight{
@@ -340,6 +341,7 @@ var allDecoderSetups = map[string]decodeWeight{
p.c.Author = maps.CleanConfigStringMap(p.p.GetStringMap(d.key))
return nil
},
+ internalOrDeprecated: true,
},
"social": {
key: "social",
@@ -347,6 +349,7 @@ var allDecoderSetups = map[string]decodeWeight{
p.c.Social = maps.CleanConfigStringMapString(p.p.GetStringMapString(d.key))
return nil
},
+ internalOrDeprecated: true,
},
"uglyurls": {
key: "uglyurls",
@@ -362,12 +365,14 @@ var allDecoderSetups = map[string]decodeWeight{
}
return nil
},
+ internalOrDeprecated: true,
},
"internal": {
key: "internal",
decode: func(d decodeWeight, p decodeConfig) error {
return mapstructure.WeakDecode(p.p.GetStringMap(d.key), &p.c.Internal)
},
+ internalOrDeprecated: true,
},
}
diff --git a/config/docshelper.go b/config/allconfig/docshelper.go
similarity index 79%
rename from config/docshelper.go
rename to config/allconfig/docshelper.go
index e34c53c2b..48a09de51 100644
--- a/config/docshelper.go
+++ b/config/allconfig/docshelper.go
@@ -1,4 +1,4 @@
-// Copyright 2021 The Hugo Authors. All rights reserved.
+// Copyright 2023 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.
@@ -11,10 +11,11 @@
// See the License for the specific language governing permissions and
// limitations under the License.
-package config
+package allconfig
import (
"github.com/gohugoio/hugo/common/maps"
+ "github.com/gohugoio/hugo/config"
"github.com/gohugoio/hugo/docshelper"
)
@@ -22,8 +23,11 @@ import (
func init() {
docsProvider := func() docshelper.DocProvider {
- cfg := New()
- for _, configRoot := range ConfigRootKeys {
+ cfg := config.New()
+ for configRoot, v := range allDecoderSetups {
+ if v.internalOrDeprecated {
+ continue
+ }
cfg.Set(configRoot, make(maps.Params))
}
lang := maps.Params{
@@ -38,7 +42,7 @@ func init() {
configHelpers := map[string]any{
"mergeStrategy": cfg.Get(""),
}
- return docshelper.DocProvider{"config": configHelpers}
+ return docshelper.DocProvider{"config_helpers": configHelpers}
}
docshelper.AddDocProviderFunc(docsProvider)
diff --git a/config/security/docshelper.go b/config/security/docshelper.go
deleted file mode 100644
index ade03560e..000000000
--- a/config/security/docshelper.go
+++ /dev/null
@@ -1,26 +0,0 @@
-// Copyright 2021 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 security
-
-import (
- "github.com/gohugoio/hugo/docshelper"
-)
-
-func init() {
- docsProvider := func() docshelper.DocProvider {
-
- return docshelper.DocProvider{"config": DefaultConfig.ToSecurityMap()}
- }
- docshelper.AddDocProviderFunc(docsProvider)
-}
diff --git a/docs/content/en/getting-started/configuration.md b/docs/content/en/getting-started/configuration.md
index ea82f1b53..2ed46cb10 100644
--- a/docs/content/en/getting-started/configuration.md
+++ b/docs/content/en/getting-started/configuration.md
@@ -112,7 +112,7 @@ deep
Note that you don't need to be so verbose as in the default setup below; a `_merge` value higher up will be inherited if not set.
-{{< code-toggle config="mergeStrategy" skipHeader=true />}}
+{{< code-toggle file="hugo" dataKey="config_helpers.mergeStrategy" skipHeader=true />}}
## All configuration settings
diff --git a/docs/content/en/templates/output-formats.md b/docs/content/en/templates/output-formats.md
index 3983acc24..d1f5f3bfe 100644
--- a/docs/content/en/templates/output-formats.md
+++ b/docs/content/en/templates/output-formats.md
@@ -20,7 +20,7 @@ A [media type] (also known as _MIME type_ and _content type_) is a two-part iden
This is the full set of built-in media types in Hugo:
-{{< datatable "media" "types" "type" "suffixes" >}}
+{{< datatable "config" "mediaTypes" "_key" "suffixes" >}}
**Note:**
@@ -61,7 +61,7 @@ Given a media type and some additional configuration, you get an **Output Format
This is the full set of Hugo's built-in output formats:
-{{< datatable "output" "formats" "name" "mediaType" "path" "baseName" "rel" "protocol" "isPlainText" "isHTML" "noUgly" "permalinkable" >}}
+{{< datatable "config" "outputFormats" "name" "mediaType" "path" "baseName" "rel" "protocol" "isPlainText" "isHTML" "noUgly" "permalinkable" >}}
- A page can be output in as many output formats as you want, and you can have an infinite amount of output formats defined **as long as they resolve to a unique path on the file system**. In the above table, the best example of this is `AMP` vs. `HTML`. `AMP` has the value `amp` for `Path` so it doesn't overwrite the `HTML` version; e.g. we can now have both `/index.html` and `/amp/index.html`.
- The `MediaType` must match the `Type` of an already defined media type.
diff --git a/docs/data/docs.json b/docs/data/docs.json
index 8d130b2fc..23f9710bb 100644
--- a/docs/data/docs.json
+++ b/docs/data/docs.json
@@ -1600,6 +1600,144 @@
]
},
"config": {
+ "baseURL": "",
+ "buildDrafts": false,
+ "buildExpired": false,
+ "buildFuture": false,
+ "copyright": "",
+ "defaultContentLanguage": "en",
+ "defaultContentLanguageInSubdir": false,
+ "disableAliases": false,
+ "disablePathToLower": false,
+ "disableKinds": null,
+ "disableLanguages": null,
+ "disableHugoGeneratorInject": false,
+ "disableLiveReload": false,
+ "enableEmoji": false,
+ "mainSections": null,
+ "enableRobotsTXT": false,
+ "enableGitInfo": false,
+ "templateMetrics": false,
+ "templateMetricsHints": false,
+ "noBuildLock": false,
+ "ignoreErrors": null,
+ "ignoreFiles": [],
+ "ignoreCache": false,
+ "enableMissingTranslationPlaceholders": false,
+ "panicOnWarning": false,
+ "environment": "production",
+ "languageCode": "",
+ "hasCJKLanguage": false,
+ "paginate": 10,
+ "paginatePath": "page",
+ "pluralizeListTitles": true,
+ "canonifyURLs": false,
+ "relativeURLs": false,
+ "removePathAccents": false,
+ "printUnusedTemplates": false,
+ "printI18nWarnings": false,
+ "printPathWarnings": false,
+ "refLinksNotFoundURL": "",
+ "refLinksErrorLevel": "",
+ "sectionPagesMenu": "",
+ "summaryLength": 70,
+ "title": "",
+ "theme": null,
+ "timeout": "30s",
+ "timeZone": "",
+ "titleCaseStyle": "AP",
+ "newContentEditor": "",
+ "noTimes": false,
+ "noChmod": false,
+ "cleanDestinationDir": false,
+ "ignoreVendorPaths": "",
+ "themesDir": "themes",
+ "publishDir": "public",
+ "resourceDir": "resources",
+ "workingDir": "",
+ "cacheDir": "",
+ "contentDir": "content",
+ "dataDir": "data",
+ "layoutDir": "layouts",
+ "i18nDir": "i18n",
+ "archeTypeDir": "archetypes",
+ "assetDir": "assets",
+ "staticDir": [
+ "static"
+ ],
+ "staticDir0": null,
+ "staticDir1": null,
+ "staticDir2": null,
+ "staticDir3": null,
+ "staticDir4": null,
+ "staticDir5": null,
+ "staticDir6": null,
+ "staticDir7": null,
+ "staticDir8": null,
+ "staticDir9": null,
+ "staticDir10": null,
+ "author": {},
+ "social": null,
+ "build": {
+ "useResourceCacheWhen": "fallback",
+ "buildStats": {
+ "enable": false,
+ "disableTags": false,
+ "disableClasses": false,
+ "disableIDs": false
+ },
+ "noJSConfigInAssets": false,
+ "cacheBusters": [
+ {
+ "source": "assets/.*\\.(js|ts|jsx|tsx)",
+ "target": "(js|scripts|javascript)"
+ },
+ {
+ "source": "assets/.*\\.(css|sass|scss)$",
+ "target": "(css|styles|scss|sass)"
+ },
+ {
+ "source": "(postcss|tailwind)\\.config\\.js",
+ "target": "(css|styles|scss|sass)"
+ },
+ {
+ "source": "assets/.*\\.(.*)$",
+ "target": "$1"
+ }
+ ]
+ },
+ "caches": {
+ "assets": {
+ "maxAge": -1,
+ "dir": ":resourceDir/_gen",
+ "isResourceDir": true
+ },
+ "getcsv": {
+ "maxAge": -1,
+ "dir": ":cacheDir/:project",
+ "isResourceDir": false
+ },
+ "getjson": {
+ "maxAge": -1,
+ "dir": ":cacheDir/:project",
+ "isResourceDir": false
+ },
+ "getresource": {
+ "maxAge": -1,
+ "dir": ":cacheDir/:project",
+ "isResourceDir": false
+ },
+ "images": {
+ "maxAge": 1800000000000000,
+ "dir": ":cacheDir/images",
+ "isResourceDir": false
+ },
+ "modules": {
+ "maxAge": -1,
+ "dir": ":cacheDir/modules",
+ "isResourceDir": false
+ }
+ },
"markup": {
"defaultMarkdownHandler": "goldmark",
"highlight": {
@@ -1674,74 +1812,529 @@
"preserveTOC": false
}
},
- "mergeStrategy": {
- "build": {
- "_merge": "none"
+ "mediaTypes": {
+ "application/json": {
+ "delimiter": ".",
+ "suffixes": [
+ "json"
+ ]
},
- "caches": {
- "_merge": "none"
+ "application/manifest+json": {
+ "delimiter": ".",
+ "suffixes": [
+ "webmanifest"
+ ]
},
- "cascade": {
- "_merge": "none"
+ "application/octet-stream": {
+ "delimiter": "."
},
- "frontmatter": {
- "_merge": "none"
+ "application/pdf": {
+ "delimiter": ".",
+ "suffixes": [
+ "pdf"
+ ]
},
- "imaging": {
- "_merge": "none"
+ "application/rss+xml": {
+ "delimiter": ".",
+ "suffixes": [
+ "xml",
+ "rss"
+ ]
},
- "languages": {
- "_merge": "none",
- "en": {
- "_merge": "none",
- "menus": {
- "_merge": "shallow"
- },
- "params": {
- "_merge": "deep"
- }
- }
+ "application/toml": {
+ "delimiter": ".",
+ "suffixes": [
+ "toml"
+ ]
},
- "markup": {
- "_merge": "none"
+ "application/wasm": {
+ "delimiter": ".",
+ "suffixes": [
+ "wasm"
+ ]
},
- "mediatypes": {
- "_merge": "shallow"
+ "application/xml": {
+ "delimiter": ".",
+ "suffixes": [
+ "xml"
+ ]
},
- "menus": {
- "_merge": "shallow"
+ "application/yaml": {
+ "delimiter": ".",
+ "suffixes": [
+ "yaml",
+ "yml"
+ ]
},
- "minify": {
- "_merge": "none"
+ "font/otf": {
+ "delimiter": ".",
+ "suffixes": [
+ "otf"
+ ]
},
- "module": {
- "_merge": "none"
+ "font/ttf": {
+ "delimiter": ".",
+ "suffixes": [
+ "ttf"
+ ]
},
- "outputformats": {
- "_merge": "shallow"
+ "image/bmp": {
+ "delimiter": ".",
+ "suffixes": [
+ "bmp"
+ ]
},
- "params": {
- "_merge": "deep"
+ "image/gif": {
+ "delimiter": ".",
+ "suffixes": [
+ "gif"
+ ]
},
- "permalinks": {
- "_merge": "none"
+ "image/jpeg": {
+ "delimiter": ".",
+ "suffixes": [
+ "jpg",
+ "jpeg",
+ "jpe",
+ "jif",
+ "jfif"
+ ]
},
- "privacy": {
- "_merge": "none"
+ "image/png": {
+ "delimiter": ".",
+ "suffixes": [
+ "png"
+ ]
},
- "related": {
- "_merge": "none"
+ "image/svg+xml": {
+ "delimiter": ".",
+ "suffixes": [
+ "svg"
+ ]
},
- "security": {
- "_merge": "none"
+ "image/tiff": {
+ "delimiter": ".",
+ "suffixes": [
+ "tif",
+ "tiff"
+ ]
+ },
+ "image/webp": {
+ "delimiter": ".",
+ "suffixes": [
+ "webp"
+ ]
+ },
+ "text/calendar": {
+ "delimiter": ".",
+ "suffixes": [
+ "ics"
+ ]
+ },
+ "text/css": {
+ "delimiter": ".",
+ "suffixes": [
+ "css"
+ ]
+ },
+ "text/csv": {
+ "delimiter": ".",
+ "suffixes": [
+ "csv"
+ ]
+ },
+ "text/html": {
+ "delimiter": ".",
+ "suffixes": [
+ "html"
+ ]
+ },
+ "text/javascript": {
+ "delimiter": ".",
+ "suffixes": [
+ "js",
+ "jsm",
+ "mjs"
+ ]
+ },
+ "text/jsx": {
+ "delimiter": ".",
+ "suffixes": [
+ "jsx"
+ ]
+ },
+ "text/markdown": {
+ "delimiter": ".",
+ "suffixes": [
+ "md",
+ "markdown"
+ ]
+ },
+ "text/plain": {
+ "delimiter": ".",
+ "suffixes": [
+ "txt"
+ ]
+ },
+ "text/tsx": {
+ "delimiter": ".",
+ "suffixes": [
+ "tsx"
+ ]
+ },
+ "text/typescript": {
+ "delimiter": ".",
+ "suffixes": [
+ "ts"
+ ]
+ },
+ "text/x-sass": {
+ "delimiter": ".",
+ "suffixes": [
+ "sass"
+ ]
+ },
+ "text/x-scss": {
+ "delimiter": ".",
+ "suffixes": [
+ "scss"
+ ]
+ },
+ "video/3gpp": {
+ "delimiter": ".",
+ "suffixes": [
+ "3gpp",
+ "3gp"
+ ]
+ },
+ "video/mp4": {
+ "delimiter": ".",
+ "suffixes": [
+ "mp4"
+ ]
+ },
+ "video/mpeg": {
+ "delimiter": ".",
+ "suffixes": [
+ "mpg",
+ "mpeg"
+ ]
+ },
+ "video/ogg": {
+ "delimiter": ".",
+ "suffixes": [
+ "ogv"
+ ]
+ },
+ "video/webm": {
+ "delimiter": ".",
+ "suffixes": [
+ "webm"
+ ]
+ },
+ "video/x-msvideo": {
+ "delimiter": ".",
+ "suffixes": [
+ "avi"
+ ]
+ }
+ },
+ "imaging": {
+ "bgColor": "#ffffff",
+ "hint": "photo",
+ "quality": 75,
+ "resampleFilter": "box"
+ },
+ "outputFormats": {
+ "amp": {
+ "mediaType": "text/html",
+ "name": "amp",
+ "path": "amp",
+ "baseName": "index",
+ "rel": "amphtml",
+ "protocol": "",
+ "isPlainText": false,
+ "isHTML": true,
+ "noUgly": false,
+ "notAlternative": false,
+ "permalinkable": true,
+ "weight": 0
+ },
+ "calendar": {
+ "mediaType": "text/calendar",
+ "name": "calendar",
+ "path": "",
+ "baseName": "index",
+ "rel": "alternate",
+ "protocol": "webcal://",
+ "isPlainText": true,
+ "isHTML": false,
+ "noUgly": false,
+ "notAlternative": false,
+ "permalinkable": false,
+ "weight": 0
+ },
+ "css": {
+ "mediaType": "text/css",
+ "name": "css",
+ "path": "",
+ "baseName": "styles",
+ "rel": "stylesheet",
+ "protocol": "",
+ "isPlainText": true,
+ "isHTML": false,
+ "noUgly": false,
+ "notAlternative": true,
+ "permalinkable": false,
+ "weight": 0
+ },
+ "csv": {
+ "mediaType": "text/csv",
+ "name": "csv",
+ "path": "",
+ "baseName": "index",
+ "rel": "alternate",
+ "protocol": "",
+ "isPlainText": true,
+ "isHTML": false,
+ "noUgly": false,
+ "notAlternative": false,
+ "permalinkable": false,
+ "weight": 0
+ },
+ "html": {
+ "mediaType": "text/html",
+ "name": "html",
+ "path": "",
+ "baseName": "index",
+ "rel": "canonical",
+ "protocol": "",
+ "isPlainText": false,
+ "isHTML": true,
+ "noUgly": false,
+ "notAlternative": false,
+ "permalinkable": true,
+ "weight": 10
+ },
+ "json": {
+ "mediaType": "application/json",
+ "name": "json",
+ "path": "",
+ "baseName": "index",
+ "rel": "alternate",
+ "protocol": "",
+ "isPlainText": true,
+ "isHTML": false,
+ "noUgly": false,
+ "notAlternative": false,
+ "permalinkable": false,
+ "weight": 0
+ },
+ "markdown": {
+ "mediaType": "text/markdown",
+ "name": "markdown",
+ "path": "",
+ "baseName": "index",
+ "rel": "alternate",
+ "protocol": "",
+ "isPlainText": true,
+ "isHTML": false,
+ "noUgly": false,
+ "notAlternative": false,
+ "permalinkable": false,
+ "weight": 0
+ },
+ "robots": {
+ "mediaType": "text/plain",
+ "name": "robots",
+ "path": "",
+ "baseName": "robots",
+ "rel": "alternate",
+ "protocol": "",
+ "isPlainText": true,
+ "isHTML": false,
+ "noUgly": false,
+ "notAlternative": false,
+ "permalinkable": false,
+ "weight": 0
+ },
+ "rss": {
+ "mediaType": "application/rss+xml",
+ "name": "rss",
+ "path": "",
+ "baseName": "index",
+ "rel": "alternate",
+ "protocol": "",
+ "isPlainText": false,
+ "isHTML": false,
+ "noUgly": true,
+ "notAlternative": false,
+ "permalinkable": false,
+ "weight": 0
},
"sitemap": {
- "_merge": "none"
+ "mediaType": "application/xml",
+ "name": "sitemap",
+ "path": "",
+ "baseName": "sitemap",
+ "rel": "sitemap",
+ "protocol": "",
+ "isPlainText": false,
+ "isHTML": false,
+ "noUgly": true,
+ "notAlternative": false,
+ "permalinkable": false,
+ "weight": 0
},
- "taxonomies": {
- "_merge": "none"
+ "webappmanifest": {
+ "mediaType": "application/manifest+json",
+ "name": "webappmanifest",
+ "path": "",
+ "baseName": "manifest",
+ "rel": "manifest",
+ "protocol": "",
+ "isPlainText": true,
+ "isHTML": false,
+ "noUgly": false,
+ "notAlternative": true,
+ "permalinkable": false,
+ "weight": 0
}
},
+ "outputs": {
+ "home": [
+ "html",
+ "rss"
+ ],
+ "page": [
+ "html"
+ ],
+ "rss": [
+ "rss"
+ ],
+ "section": [
+ "html",
+ "rss"
+ ],
+ "taxonomy": [
+ "html",
+ "rss"
+ ],
+ "term": [
+ "html",
+ "rss"
+ ]
+ },
+ "cascade": [],
+ "menus": {},
+ "deployment": {
+ "targets": null,
+ "matchers": null,
+ "order": null,
+ "target": "",
+ "confirm": false,
+ "dryRun": false,
+ "force": false,
+ "invalidateCDN": true,
+ "maxDeletes": 256,
+ "workers": 10
+ },
+ "module": {
+ "mounts": [
+ {
+ "source": "content",
+ "target": "content",
+ "lang": "",
+ "includeFiles": null,
+ "excludeFiles": null
+ },
+ {
+ "source": "data",
+ "target": "data",
+ "lang": "",
+ "includeFiles": null,
+ "excludeFiles": null
+ },
+ {
+ "source": "layouts",
+ "target": "layouts",
+ "lang": "",
+ "includeFiles": null,
+ "excludeFiles": null
+ },
+ {
+ "source": "i18n",
+ "target": "i18n",
+ "lang": "",
+ "includeFiles": null,
+ "excludeFiles": null
+ },
+ {
+ "source": "archetypes",
+ "target": "archetypes",
+ "lang": "",
+ "includeFiles": null,
+ "excludeFiles": null
+ },
+ {
+ "source": "assets",
+ "target": "assets",
+ "lang": "",
+ "includeFiles": null,
+ "excludeFiles": null
+ },
+ {
+ "source": "static",
+ "target": "static",
+ "lang": "",
+ "includeFiles": null,
+ "excludeFiles": null
+ }
+ ],
+ "imports": null,
+ "params": null,
+ "hugoVersion": {
+ "min": "",
+ "max": "",
+ "extended": false
+ },
+ "noVendor": "",
+ "vendorClosest": false,
+ "replacements": null,
+ "proxy": "direct",
+ "noProxy": "none",
+ "private": "*.*",
+ "workspace": "off"
+ },
+ "frontmatter": {
+ "date": [
+ "date",
+ "publishdate",
+ "pubdate",
+ "published",
+ "lastmod",
+ "modified"
+ ],
+ "lastmod": [
+ ":git",
+ "lastmod",
+ "modified",
+ "date",
+ "publishdate",
+ "pubdate",
+ "published"
+ ],
+ "publishDate": [
+ "publishdate",
+ "pubdate",
+ "published",
+ "date"
+ ],
+ "expiryDate": [
+ "expirydate",
+ "unpublishdate"
+ ]
+ },
"minify": {
"minifyOutput": false,
"disableHTML": false,
@@ -1782,572 +2375,237 @@
}
}
},
+ "permalinks": {
+ "page": {},
+ "section": {},
+ "taxonomy": {},
+ "term": {}
+ },
+ "taxonomies": {
+ "category": "categories",
+ "tag": "tags"
+ },
+ "sitemap": {
+ "changeFreq": "",
+ "priority": -1,
+ "filename": "sitemap.xml"
+ },
+ "related": {
+ "threshold": 80,
+ "includeNewer": false,
+ "toLower": false,
+ "indices": [
+ {
+ "name": "keywords",
+ "type": "basic",
+ "applyFilter": false,
+ "pattern": "",
+ "weight": 100,
+ "cardinalityThreshold": 0,
+ "toLower": false
+ },
+ {
+ "name": "date",
+ "type": "basic",
+ "applyFilter": false,
+ "pattern": "",
+ "weight": 10,
+ "cardinalityThreshold": 0,
+ "toLower": false
+ },
+ {
+ "name": "tags",
+ "type": "",
+ "applyFilter": false,
+ "pattern": "",
+ "weight": 80,
+ "cardinalityThreshold": 0,
+ "toLower": false
+ }
+ ]
+ },
+ "server": {
+ "headers": null,
+ "redirects": [
+ {
+ "from": "**",
+ "to": "/404.html",
+ "status": 404,
+ "force": false
+ }
+ ]
+ },
+ "privacy": {
+ "disqus": {
+ "disable": false
+ },
+ "googleAnalytics": {
+ "disable": false,
+ "useSessionStorage": false,
+ "respectDoNotTrack": false,
+ "anonymizeIP": false
+ },
+ "instagram": {
+ "disable": false,
+ "simple": false
+ },
+ "twitter": {
+ "disable": false,
+ "enableDNT": false,
+ "simple": false
+ },
+ "vimeo": {
+ "disable": false,
+ "enableDNT": false,
+ "simple": false
+ },
+ "youTube": {
+ "disable": false,
+ "privacyEnhanced": false
+ }
+ },
"security": {
- "enableInlineShortcodes": false,
"exec": {
"allow": [
- "^(dart-)?sass(-embedded)?$",
- "^go$",
- "^npx$",
- "^postcss$"
+ "^((dart-)?sass(-embedded)?|go|npx|postcss)$"
],
"osEnv": [
- "(?i)^((HTTPS?|NO)_PROXY|PATH(EXT)?|APPDATA|TE?MP|TERM|GO\\w+|(XDG_CONFIG_)?HOME|USERPROFILE|SSH_AUTH_SOCK|DISPLAY|LANG)$"
+ "(?i)^(PATH|PATHEXT|APPDATA|HOME|TMP|TEMP|TERM)$"
]
},
"funcs": {
"getenv": [
- "^HUGO_",
- "^CI$"
+ "^(HUGO_|REPOSITORY_URL|^BRANCH$)"
]
},
- "goTemplates": {
- "AllowActionJSTmpl": false
- },
"http": {
- "mediaTypes": null,
+ "urls": [
+ ".*"
+ ],
"methods": [
"(?i)GET|POST"
],
- "urls": [
- ".*"
- ]
+ "mediaTypes": null
+ },
+ "enableInlineShortcodes": false,
+ "goTemplates": {
+ "allowActionJSTmpl": false
+ }
+ },
+ "services": {
+ "disqus": {
+ "shortname": ""
+ },
+ "googleAnalytics": {
+ "id": ""
+ },
+ "instagram": {
+ "disableInlineCSS": false,
+ "accessToken": ""
+ },
+ "twitter": {
+ "disableInlineCSS": false
+ },
+ "rss": {
+ "limit": -1
+ }
+ },
+ "params": {},
+ "languages": {
+ "en": {
+ "languageName": "",
+ "languageCode": "",
+ "title": "",
+ "languageDirection": "",
+ "weight": 0,
+ "disabled": false
+ }
+ },
+ "uglyURLs": false
+ },
+ "config_helpers": {
+ "mergeStrategy": {
+ "build": {
+ "_merge": "none"
+ },
+ "caches": {
+ "_merge": "none"
+ },
+ "cascade": {
+ "_merge": "none"
+ },
+ "deployment": {
+ "_merge": "none"
+ },
+ "frontmatter": {
+ "_merge": "none"
+ },
+ "imaging": {
+ "_merge": "none"
+ },
+ "languages": {
+ "_merge": "none",
+ "en": {
+ "_merge": "none",
+ "menus": {
+ "_merge": "shallow"
+ },
+ "params": {
+ "_merge": "deep"
+ }
+ }
+ },
+ "markup": {
+ "_merge": "none"
+ },
+ "mediatypes": {
+ "_merge": "shallow"
+ },
+ "menus": {
+ "_merge": "shallow"
+ },
+ "minify": {
+ "_merge": "none"
+ },
+ "module": {
+ "_merge": "none"
+ },
+ "outputformats": {
+ "_merge": "shallow"
+ },
+ "outputs": {
+ "_merge": "none"
+ },
+ "params": {
+ "_merge": "deep"
+ },
+ "permalinks": {
+ "_merge": "none"
+ },
+ "privacy": {
+ "_merge": "none"
+ },
+ "related": {
+ "_merge": "none"
+ },
+ "security": {
+ "_merge": "none"
+ },
+ "server": {
+ "_merge": "none"
+ },
+ "services": {
+ "_merge": "none"
+ },
+ "sitemap": {
+ "_merge": "none"
+ },
+ "taxonomies": {
+ "_merge": "none"
}
}
},
- "media": {
- "types": [
- {
- "mainType": "application",
- "subType": "json",
- "delimiter": ".",
- "type": "application/json",
- "string": "application/json",
- "suffixes": [
- "json"
- ]
- },
- {
- "mainType": "application",
- "subType": "manifest",
- "delimiter": ".",
- "type": "application/manifest+json",
- "string": "application/manifest+json",
- "suffixes": [
- "webmanifest"
- ]
- },
- {
- "mainType": "application",
- "subType": "octet-stream",
- "delimiter": ".",
- "type": "application/octet-stream",
- "string": "application/octet-stream",
- "suffixes": [
- ""
- ]
- },
- {
- "mainType": "application",
- "subType": "pdf",
- "delimiter": ".",
- "type": "application/pdf",
- "string": "application/pdf",
- "suffixes": [
- "pdf"
- ]
- },
- {
- "mainType": "application",
- "subType": "rss",
- "delimiter": ".",
- "type": "application/rss+xml",
- "string": "application/rss+xml",
- "suffixes": [
- "xml",
- "rss"
- ]
- },
- {
- "mainType": "application",
- "subType": "toml",
- "delimiter": ".",
- "type": "application/toml",
- "string": "application/toml",
- "suffixes": [
- "toml"
- ]
- },
- {
- "mainType": "application",
- "subType": "wasm",
- "delimiter": ".",
- "type": "application/wasm",
- "string": "application/wasm",
- "suffixes": [
- "wasm"
- ]
- },
- {
- "mainType": "application",
- "subType": "xml",
- "delimiter": ".",
- "type": "application/xml",
- "string": "application/xml",
- "suffixes": [
- "xml"
- ]
- },
- {
- "mainType": "application",
- "subType": "yaml",
- "delimiter": ".",
- "type": "application/yaml",
- "string": "application/yaml",
- "suffixes": [
- "yaml",
- "yml"
- ]
- },
- {
- "mainType": "font",
- "subType": "otf",
- "delimiter": ".",
- "type": "font/otf",
- "string": "font/otf",
- "suffixes": [
- "otf"
- ]
- },
- {
- "mainType": "font",
- "subType": "ttf",
- "delimiter": ".",
- "type": "font/ttf",
- "string": "font/ttf",
- "suffixes": [
- "ttf"
- ]
- },
- {
- "mainType": "image",
- "subType": "bmp",
- "delimiter": ".",
- "type": "image/bmp",
- "string": "image/bmp",
- "suffixes": [
- "bmp"
- ]
- },
- {
- "mainType": "image",
- "subType": "gif",
- "delimiter": ".",
- "type": "image/gif",
- "string": "image/gif",
- "suffixes": [
- "gif"
- ]
- },
- {
- "mainType": "image",
- "subType": "jpeg",
- "delimiter": ".",
- "type": "image/jpeg",
- "string": "image/jpeg",
- "suffixes": [
- "jpg",
- "jpeg",
- "jpe",
- "jif",
- "jfif"
- ]
- },
- {
- "mainType": "image",
- "subType": "png",
- "delimiter": ".",
- "type": "image/png",
- "string": "image/png",
- "suffixes": [
- "png"
- ]
- },
- {
- "mainType": "image",
- "subType": "svg",
- "delimiter": ".",
- "type": "image/svg+xml",
- "string": "image/svg+xml",
- "suffixes": [
- "svg"
- ]
- },
- {
- "mainType": "image",
- "subType": "tiff",
- "delimiter": ".",
- "type": "image/tiff",
- "string": "image/tiff",
- "suffixes": [
- "tif",
- "tiff"
- ]
- },
- {
- "mainType": "image",
- "subType": "webp",
- "delimiter": ".",
- "type": "image/webp",
- "string": "image/webp",
- "suffixes": [
- "webp"
- ]
- },
- {
- "mainType": "text",
- "subType": "calendar",
- "delimiter": ".",
- "type": "text/calendar",
- "string": "text/calendar",
- "suffixes": [
- "ics"
- ]
- },
- {
- "mainType": "text",
- "subType": "css",
- "delimiter": ".",
- "type": "text/css",
- "string": "text/css",
- "suffixes": [
- "css"
- ]
- },
- {
- "mainType": "text",
- "subType": "csv",
- "delimiter": ".",
- "type": "text/csv",
- "string": "text/csv",
- "suffixes": [
- "csv"
- ]
- },
- {
- "mainType": "text",
- "subType": "html",
- "delimiter": ".",
- "type": "text/html",
- "string": "text/html",
- "suffixes": [
- "html"
- ]
- },
- {
- "mainType": "text",
- "subType": "javascript",
- "delimiter": ".",
- "type": "text/javascript",
- "string": "text/javascript",
- "suffixes": [
- "js",
- "jsm",
- "mjs"
- ]
- },
- {
- "mainType": "text",
- "subType": "jsx",
- "delimiter": ".",
- "type": "text/jsx",
- "string": "text/jsx",
- "suffixes": [
- "jsx"
- ]
- },
- {
- "mainType": "text",
- "subType": "markdown",
- "delimiter": ".",
- "type": "text/markdown",
- "string": "text/markdown",
- "suffixes": [
- "md",
- "markdown"
- ]
- },
- {
- "mainType": "text",
- "subType": "plain",
- "delimiter": ".",
- "type": "text/plain",
- "string": "text/plain",
- "suffixes": [
- "txt"
- ]
- },
- {
- "mainType": "text",
- "subType": "tsx",
- "delimiter": ".",
- "type": "text/tsx",
- "string": "text/tsx",
- "suffixes": [
- "tsx"
- ]
- },
- {
- "mainType": "text",
- "subType": "typescript",
- "delimiter": ".",
- "type": "text/typescript",
- "string": "text/typescript",
- "suffixes": [
- "ts"
- ]
- },
- {
- "mainType": "text",
- "subType": "x-sass",
- "delimiter": ".",
- "type": "text/x-sass",
- "string": "text/x-sass",
- "suffixes": [
- "sass"
- ]
- },
- {
- "mainType": "text",
- "subType": "x-scss",
- "delimiter": ".",
- "type": "text/x-scss",
- "string": "text/x-scss",
- "suffixes": [
- "scss"
- ]
- },
- {
- "mainType": "video",
- "subType": "3gpp",
- "delimiter": ".",
- "type": "video/3gpp",
- "string": "video/3gpp",
- "suffixes": [
- "3gpp",
- "3gp"
- ]
- },
- {
- "mainType": "video",
- "subType": "mp4",
- "delimiter": ".",
- "type": "video/mp4",
- "string": "video/mp4",
- "suffixes": [
- "mp4"
- ]
- },
- {
- "mainType": "video",
- "subType": "mpeg",
- "delimiter": ".",
- "type": "video/mpeg",
- "string": "video/mpeg",
- "suffixes": [
- "mpg",
- "mpeg"
- ]
- },
- {
- "mainType": "video",
- "subType": "ogg",
- "delimiter": ".",
- "type": "video/ogg",
- "string": "video/ogg",
- "suffixes": [
- "ogv"
- ]
- },
- {
- "mainType": "video",
- "subType": "webm",
- "delimiter": ".",
- "type": "video/webm",
- "string": "video/webm",
- "suffixes": [
- "webm"
- ]
- },
- {
- "mainType": "video",
- "subType": "x-msvideo",
- "delimiter": ".",
- "type": "video/x-msvideo",
- "string": "video/x-msvideo",
- "suffixes": [
- "avi"
- ]
- }
- ]
- },
"output": {
- "formats": [
- {
- "mediaType": "text/html",
- "name": "html",
- "path": "",
- "baseName": "index",
- "rel": "canonical",
- "protocol": "",
- "isPlainText": false,
- "isHTML": true,
- "noUgly": false,
- "notAlternative": false,
- "permalinkable": true,
- "weight": 10
- },
- {
- "mediaType": "text/html",
- "name": "amp",
- "path": "amp",
- "baseName": "index",
- "rel": "amphtml",
- "protocol": "",
- "isPlainText": false,
- "isHTML": true,
- "noUgly": false,
- "notAlternative": false,
- "permalinkable": true,
- "weight": 0
- },
- {
- "mediaType": "text/calendar",
- "name": "calendar",
- "path": "",
- "baseName": "index",
- "rel": "alternate",
- "protocol": "webcal://",
- "isPlainText": true,
- "isHTML": false,
- "noUgly": false,
- "notAlternative": false,
- "permalinkable": false,
- "weight": 0
- },
- {
- "mediaType": "text/css",
- "name": "css",
- "path": "",
- "baseName": "styles",
- "rel": "stylesheet",
- "protocol": "",
- "isPlainText": true,
- "isHTML": false,
- "noUgly": false,
- "notAlternative": true,
- "permalinkable": false,
- "weight": 0
- },
- {
- "mediaType": "text/csv",
- "name": "csv",
- "path": "",
- "baseName": "index",
- "rel": "alternate",
- "protocol": "",
- "isPlainText": true,
- "isHTML": false,
- "noUgly": false,
- "notAlternative": false,
- "permalinkable": false,
- "weight": 0
- },
- {
- "mediaType": "application/json",
- "name": "json",
- "path": "",
- "baseName": "index",
- "rel": "alternate",
- "protocol": "",
- "isPlainText": true,
- "isHTML": false,
- "noUgly": false,
- "notAlternative": false,
- "permalinkable": false,
- "weight": 0
- },
- {
- "mediaType": "text/markdown",
- "name": "markdown",
- "path": "",
- "baseName": "index",
- "rel": "alternate",
- "protocol": "",
- "isPlainText": true,
- "isHTML": false,
- "noUgly": false,
- "notAlternative": false,
- "permalinkable": false,
- "weight": 0
- },
- {
- "mediaType": "text/plain",
- "name": "robots",
- "path": "",
- "baseName": "robots",
- "rel": "alternate",
- "protocol": "",
- "isPlainText": true,
- "isHTML": false,
- "noUgly": false,
- "notAlternative": false,
- "permalinkable": false,
- "weight": 0
- },
- {
- "mediaType": "application/rss+xml",
- "name": "rss",
- "path": "",
- "baseName": "index",
- "rel": "alternate",
- "protocol": "",
- "isPlainText": false,
- "isHTML": false,
- "noUgly": true,
- "notAlternative": false,
- "permalinkable": false,
- "weight": 0
- },
- {
- "mediaType": "application/xml",
- "name": "sitemap",
- "path": "",
- "baseName": "sitemap",
- "rel": "sitemap",
- "protocol": "",
- "isPlainText": false,
- "isHTML": false,
- "noUgly": true,
- "notAlternative": false,
- "permalinkable": false,
- "weight": 0
- },
- {
- "mediaType": "application/manifest+json",
- "name": "webappmanifest",
- "path": "",
- "baseName": "manifest",
- "rel": "manifest",
- "protocol": "",
- "isPlainText": true,
- "isHTML": false,
- "noUgly": false,
- "notAlternative": true,
- "permalinkable": false,
- "weight": 0
- }
- ],
"layouts": [
{
"Example": "Single page in \"posts\" section",
@@ -3138,7 +3396,7 @@
"Examples": []
},
"Apply": {
- "Description": "Apply takes a map, array, or slice c and returns a new slice with the function fname applied over it.",
+ "Description": "Apply takes an array or slice c and returns a new slice with the function fname applied over it.",
"Args": [
"ctx",
"c",
@@ -3168,6 +3426,7 @@
"Delimit": {
"Description": "Delimit takes a given list l and returns a string delimited by sep.\nIf last is passed to the function, it will be used as the final delimiter.",
"Args": [
+ "ctx",
"l",
"sep",
"last"
@@ -3415,6 +3674,7 @@
"Sort": {
"Description": "Sort returns a sorted copy of the list l.",
"Args": [
+ "ctx",
"l",
"args"
],
@@ -3473,6 +3733,7 @@
"Where": {
"Description": "Where returns a filtered subset of collection c.",
"Args": [
+ "ctx",
"c",
"key",
"args"
diff --git a/docs/layouts/maintenance/list.html b/docs/layouts/maintenance/list.html
index 2035c058b..f78bbd08f 100644
--- a/docs/layouts/maintenance/list.html
+++ b/docs/layouts/maintenance/list.html
@@ -1,68 +1,78 @@
{{ define "main" }}
-
+
-
-
- What's on this Page
-
-
-
-
- {{ $byLastMod := .Site.RegularPages.ByLastmod }}
- {{ $recent := ($byLastMod | last 30).Reverse }}
- {{ $leastRecent := $byLastMod | first 10 }}
-
Last Updated
- {{ partial "maintenance-pages-table.html" $recent }}
-
Least Recently Updated
- {{ partial "maintenance-pages-table.html" $leastRecent }}
+
+
+ What's on this Page
+
+
+
+
+ {{ $byLastMod := .Site.RegularPages.ByLastmod }}
+ {{ $recent := ($byLastMod | last 30).Reverse }}
+ {{ $leastRecent := $byLastMod | first 10 }}
+
Last Updated
+ {{ partial "maintenance-pages-table.html" $recent }}
+
Least Recently Updated
+ {{ partial "maintenance-pages-table.html" $leastRecent }}
- {{/* Don't think this is possible with where directly. Should investigate. */}}
- {{ .Scratch.Set "todos" slice }}
- {{ range .Site.RegularPages }}
- {{ if .HasShortcode "todo" }}
- {{ $.Scratch.Add "todos" . }}
- {{ end }}
+ {{/* Don't think this is possible with where directly. Should investigate. */}}
+ {{ .Scratch.Set "todos" slice }}
+ {{ range .Site.RegularPages }}
+ {{ if .HasShortcode "todo" }}
+ {{ $.Scratch.Add "todos" . }}
+ {{ end }}
+ {{ end }}
+
Pages marked with TODO
+ {{ partial "maintenance-pages-table.html" (.Scratch.Get "todos") }}
+
+
+
Dependencies
+
+
+
+ #
+ Owner
+ Path
+ Version
+ Time
+ Vendor
+
+
+
+ {{ range $index, $element := hugo.Deps }}
+
+ {{ add $index 1 }}
+
+ {{ with $element.Owner }}{{ .Path }}{{ end }}
+
+
+ {{ $element.Path }}
+ {{ with $element.Replace }}
+ =>
+ {{ .Path }}
+ {{ end }}
+
+ {{ $element.Version }}
+
+ {{ with $element.Time }}{{ . }}{{ end }}
+
+ {{ $element.Vendor }}
+
{{ end }}
- Pages marked with TODO
- {{ partial "maintenance-pages-table.html" (.Scratch.Get "todos") }}
-
- Dependencies
-
-
-
- #
- Owner
- Path
- Version
- Time
- Vendor
-
-
-
- {{ range $index, $element := hugo.Deps }}
-
- {{ add $index 1 }}
- {{ with $element.Owner }}{{.Path }}{{ end }}
-
- {{ $element.Path }}
- {{ with $element.Replace}}
- => {{ .Path }}
- {{ end }}
-
- {{ $element.Version }}
- {{ with $element.Time }}{{ . }}{{ end }}
- {{ $element.Vendor }}
-
- {{ end }}
-
-
-
-
+
+
+
-
-{{ end }}
\ No newline at end of file
+
+{{ end }}
diff --git a/docs/layouts/shortcodes/code-toggle.html b/docs/layouts/shortcodes/code-toggle.html
index 3b151669f..6e0e3d73e 100644
--- a/docs/layouts/shortcodes/code-toggle.html
+++ b/docs/layouts/shortcodes/code-toggle.html
@@ -1,17 +1,18 @@
{{- /*
-Renders syntax-highlighted configuration data in JSON, TOML, and YAML formats.
+ Renders syntax-highlighted configuration data in JSON, TOML, and YAML formats.
-@param {string} [config] The section of site.Data.docs.config to render.
-@param {bool} [copy=true] If true, display a copy to clipboard button.
-@param {string} [file] The file name to display above the rendered code.
-@param {bool} [fm=false] If true, render the code as front matter.
-@param {bool} [skipHeader=false] If false, omit top level key(s) when rendering a section of site.Data.docs.config.
+ @param {string} [config] The section of site.Data.docs.config to render.
+ @param {bool} [copy=true] If true, display a copy to clipboard button.
+ @param {string} [file] The file name to display above the rendered code.
+ @param {bool} [fm=false] If true, render the code as front matter.
+ @param {bool} [skipHeader=false] If false, omit top level key(s) when rendering a section of site.Data.docs.config.
-@returns {template.HTML}
+ @returns {template.HTML}
*/}}
{{- /* Initialize. */}}
{{- $config := "" }}
+{{- $dataKey := "" }}
{{- $copy := true }}
{{- $file := "" }}
{{- $fm := false }}
@@ -19,20 +20,21 @@ Renders syntax-highlighted configuration data in JSON, TOML, and YAML formats.
{{- /* Get parameters. */}}
{{- $config = .Get "config" }}
+{{- $dataKey = .Get "dataKey" }}
{{- $file = .Get "file" }}
{{- if in (slice "false" false 0) (.Get "copy") }}
{{- $copy = false }}
-{{- else if in (slice "true" true 1) (.Get "copy")}}
+{{- else if in (slice "true" true 1) (.Get "copy") }}
{{- $copy = true }}
{{- end }}
{{- if in (slice "false" false 0) (.Get "fm") }}
{{- $fm = false }}
-{{- else if in (slice "true" true 1) (.Get "fm")}}
+{{- else if in (slice "true" true 1) (.Get "fm") }}
{{- $fm = true }}
{{- end }}
{{- if in (slice "false" false 0) (.Get "skipHeader") }}
{{- $skipHeader = false }}
-{{- else if in (slice "true" true 1) (.Get "skipHeader")}}
+{{- else if in (slice "true" true 1) (.Get "skipHeader") }}
{{- $skipHeader = true }}
{{- end }}
@@ -43,14 +45,18 @@ Renders syntax-highlighted configuration data in JSON, TOML, and YAML formats.
{{- /* Render. */}}
{{- $code := "" }}
-{{- with $config }}
+{{- if $config }}
{{- $file = $file | default "hugo" }}
- {{- $sections := (split . ".") }}
+ {{- $sections := (split $config ".") }}
{{- $configSection := index $.Site.Data.docs.config $sections }}
{{- $code = dict $sections $configSection }}
{{- if $skipHeader }}
{{- $code = $configSection }}
{{- end }}
+{{- else if $dataKey }}
+ {{- $file = $file | default $dataKey }}
+ {{- $sections := (split $dataKey ".") }}
+ {{- $code = index $.Site.Data.docs $sections }}
{{- else }}
{{- $code = $.Inner }}
{{- end }}
@@ -62,7 +68,9 @@ Renders syntax-highlighted configuration data in JSON, TOML, and YAML formats.
{{- end }}
{{- range $langs }}
-
+
{{ . }}
@@ -70,7 +78,9 @@ Renders syntax-highlighted configuration data in JSON, TOML, and YAML formats.
{{- range $langs }}
-
+
{{- $hCode := $code | transform.Remarshal . }}
{{- if and $fm (in (slice "toml" "yaml") .) }}
{{- $hCode = printf "%s\n%s\n%s" $placeHolder $hCode $placeHolder }}
@@ -79,7 +89,11 @@ Renders syntax-highlighted configuration data in JSON, TOML, and YAML formats.
{{ highlight $hCode . "" | replaceRE $placeHolder (index $delimiters .) | safeHTML }}
{{- if $copy }}
-
+
{{- /* Functionality located within filesaver.js The copy here is located in the css with .copy class so it can be replaced with JS on success */}}
{{- end }}
{{- end }}
diff --git a/docs/layouts/shortcodes/datatable.html b/docs/layouts/shortcodes/datatable.html
index 4e2814f5a..12054f89d 100644
--- a/docs/layouts/shortcodes/datatable.html
+++ b/docs/layouts/shortcodes/datatable.html
@@ -3,20 +3,31 @@
{{ $list := (index (index .Site.Data.docs $package) $listname) }}
{{ $fields := after 2 .Params }}
+
-
- {{ range $fields }}
- {{ . }}
- {{ end }}
-
- {{ range $list }}
-
- {{ range $k, $v := . }}
- {{ $.Scratch.Set $k $v }}
- {{ end }}
- {{ range $fields }}
- {{ $.Scratch.Get . }}
- {{ end }}
-
- {{ end }}
+
+ {{ range $fields }}
+ {{ $s := . }}
+ {{ if eq $s "_key" }}
+ {{ $s = "Type" }}
+ {{ end }}
+ {{ $s }}
+ {{ end }}
+
+ {{ range $k1, $v1 := $list }}
+
+ {{ range $k2, $v2 := . }}
+ {{ $.Scratch.Set $k2 $v2 }}
+ {{ end }}
+ {{ range $fields }}
+ {{ $s := "" }}
+ {{ if eq . "_key" }}
+ {{ $s = $k1 }}
+ {{ else }}
+ {{ $s = $.Scratch.Get . }}
+ {{ end }}
+ {{ $s }}
+ {{ end }}
+
+ {{ end }}
diff --git a/docshelper/docs.go b/docshelper/docs.go
index 1e1594120..b138ff81e 100644
--- a/docshelper/docs.go
+++ b/docshelper/docs.go
@@ -15,9 +15,11 @@
// is of limited interest for the general Hugo user.
package docshelper
+import "fmt"
+
type (
DocProviderFunc = func() DocProvider
- DocProvider map[string]map[string]any
+ DocProvider map[string]any
)
var docProviderFuncs []DocProviderFunc
@@ -32,20 +34,14 @@ func GetDocProvider() DocProvider {
for _, fn := range docProviderFuncs {
p := fn()
for k, v := range p {
- if prev, found := provider[k]; !found {
- provider[k] = v
- } else {
- merge(prev, v)
+ if _, found := provider[k]; found {
+ // We use to merge config, but not anymore.
+ // These constructs will eventually go away, so just make it simple.
+ panic(fmt.Sprintf("Duplicate doc provider key: %q", k))
}
+ provider[k] = v
}
}
return provider
}
-
-// Shallow merge
-func merge(dst, src map[string]any) {
- for k, v := range src {
- dst[k] = v
- }
-}
diff --git a/markup/markup_config/config.go b/markup/markup_config/config.go
index 0793669a7..0350a78a2 100644
--- a/markup/markup_config/config.go
+++ b/markup/markup_config/config.go
@@ -16,12 +16,10 @@ package markup_config
import (
"github.com/gohugoio/hugo/common/maps"
"github.com/gohugoio/hugo/config"
- "github.com/gohugoio/hugo/docshelper"
"github.com/gohugoio/hugo/markup/asciidocext/asciidocext_config"
"github.com/gohugoio/hugo/markup/goldmark/goldmark_config"
"github.com/gohugoio/hugo/markup/highlight"
"github.com/gohugoio/hugo/markup/tableofcontents"
- "github.com/gohugoio/hugo/parser"
"github.com/mitchellh/mapstructure"
)
@@ -108,10 +106,3 @@ var Default = Config{
Goldmark: goldmark_config.Default,
AsciidocExt: asciidocext_config.Default,
}
-
-func init() {
- docsProvider := func() docshelper.DocProvider {
- return docshelper.DocProvider{"config": map[string]any{"markup": parser.LowerCaseCamelJSONMarshaller{Value: Default}}}
- }
- docshelper.AddDocProviderFunc(docsProvider)
-}
diff --git a/media/docshelper.go b/media/docshelper.go
deleted file mode 100644
index d37c08eb3..000000000
--- a/media/docshelper.go
+++ /dev/null
@@ -1,13 +0,0 @@
-package media
-
-import (
- "github.com/gohugoio/hugo/docshelper"
-)
-
-// This is is just some helpers used to create some JSON used in the Hugo docs.
-func init() {
- docsProvider := func() docshelper.DocProvider {
- return docshelper.DocProvider{"media": map[string]any{"types": DefaultTypes}}
- }
- docshelper.AddDocProviderFunc(docsProvider)
-}
diff --git a/minifiers/config.go b/minifiers/config.go
index 58271362d..8ebcaa5c9 100644
--- a/minifiers/config.go
+++ b/minifiers/config.go
@@ -15,8 +15,6 @@ package minifiers
import (
"github.com/gohugoio/hugo/common/maps"
- "github.com/gohugoio/hugo/docshelper"
- "github.com/gohugoio/hugo/parser"
"github.com/spf13/cast"
"github.com/mitchellh/mapstructure"
@@ -113,10 +111,3 @@ func DecodeConfig(v any) (conf MinifyConfig, err error) {
return
}
-
-func init() {
- docsProvider := func() docshelper.DocProvider {
- return docshelper.DocProvider{"config": map[string]any{"minify": parser.LowerCaseCamelJSONMarshaller{Value: defaultConfig}}}
- }
- docshelper.AddDocProviderFunc(docsProvider)
-}
diff --git a/output/docshelper.go b/output/docshelper.go
index 1275c5979..0436a10be 100644
--- a/output/docshelper.go
+++ b/output/docshelper.go
@@ -14,7 +14,6 @@ func init() {
docsProvider := func() docshelper.DocProvider {
return docshelper.DocProvider{
"output": map[string]any{
- "formats": DefaultFormats,
"layouts": createLayoutExamples(),
},
}