mirror of
https://github.com/gohugoio/hugo.git
synced 2024-11-21 20:46:30 -05:00
Merge commit '7125ad401ad043e46262afc7eca8dceb6d54bb9e'
This commit is contained in:
commit
3758456b31
141 changed files with 904 additions and 813 deletions
|
@ -7,8 +7,10 @@
|
||||||
"flagWords": [
|
"flagWords": [
|
||||||
"alot",
|
"alot",
|
||||||
"hte",
|
"hte",
|
||||||
|
"langauge",
|
||||||
"reccommend",
|
"reccommend",
|
||||||
"seperate"
|
"seperate",
|
||||||
|
"teh"
|
||||||
],
|
],
|
||||||
"ignorePaths": [
|
"ignorePaths": [
|
||||||
"**/emojis.md",
|
"**/emojis.md",
|
||||||
|
@ -69,6 +71,7 @@
|
||||||
"transpile",
|
"transpile",
|
||||||
"transpiles",
|
"transpiles",
|
||||||
"unmarshal",
|
"unmarshal",
|
||||||
|
"unmarshals",
|
||||||
"unmarshaling",
|
"unmarshaling",
|
||||||
"# ----------------------------------------------------------------------",
|
"# ----------------------------------------------------------------------",
|
||||||
"# cspell: ignore foreign language words",
|
"# cspell: ignore foreign language words",
|
||||||
|
|
2
docs/.github/workflows/spellcheck.yml
vendored
2
docs/.github/workflows/spellcheck.yml
vendored
|
@ -13,7 +13,7 @@ jobs:
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v4
|
- uses: actions/checkout@v4
|
||||||
- uses: streetsidesoftware/cspell-action@v4
|
- uses: streetsidesoftware/cspell-action@v5
|
||||||
with:
|
with:
|
||||||
check_dot_files: false
|
check_dot_files: false
|
||||||
files: content/**/*.md
|
files: content/**/*.md
|
||||||
|
|
|
@ -1,5 +1,6 @@
|
||||||
# https://github.com/DavidAnson/markdownlint/blob/main/doc/Rules.md
|
# https://github.com/DavidAnson/markdownlint/blob/main/doc/Rules.md
|
||||||
|
|
||||||
|
MD001: false
|
||||||
MD002: false
|
MD002: false
|
||||||
MD003: false
|
MD003: false
|
||||||
MD004: false
|
MD004: false
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
// Grab any element that has the 'js-toggle' class and add an event listner for the toggleClass function
|
// Grab any element that has the 'js-toggle' class and add an event listener for the toggleClass function
|
||||||
var toggleBtns = document.getElementsByClassName('js-toggle')
|
var toggleBtns = document.getElementsByClassName('js-toggle')
|
||||||
for (var i = 0; i < toggleBtns.length; i++) {
|
for (var i = 0; i < toggleBtns.length; i++) {
|
||||||
toggleBtns[i].addEventListener('click', toggleClass, false)
|
toggleBtns[i].addEventListener('click', toggleClass, false)
|
||||||
|
|
|
@ -201,7 +201,7 @@ either of these shortcodes in conjunction with this render hook.
|
||||||
Validates the fragment portion of a link destination.
|
Validates the fragment portion of a link destination.
|
||||||
|
|
||||||
@context {string} contentPath The page containing the link.
|
@context {string} contentPath The page containing the link.
|
||||||
@context {srting} errorLevel The error level when unable to resolve destination; ignore (default), warning, or error.
|
@context {string} errorLevel The error level when unable to resolve destination; ignore (default), warning, or error.
|
||||||
@context {page} page The page corresponding to the link destination
|
@context {page} page The page corresponding to the link destination
|
||||||
@context {struct} parsedURL The link destination parsed by urls.Parse.
|
@context {struct} parsedURL The link destination parsed by urls.Parse.
|
||||||
@context {string} renderHookName The name of the render hook.
|
@context {string} renderHookName The name of the render hook.
|
||||||
|
|
|
@ -1,9 +1,21 @@
|
||||||
{{/*
|
<a
|
||||||
Disable Twitter for now as we lost access to the account.
|
href="https://twitter.com/intent/follow?screen_name=gohugoiov2"
|
||||||
with site.Params.social.twitter }}
|
title="Follow on Twitter"
|
||||||
<a href="https://twitter.com/intent/follow?screen_name={{ . }}" title="Follow on Twitter" class="link-transition twitter link dib z-999 pt3 pt0-l mr2">
|
class="link-transition twitter link dib z-999 pt3 pt0-l mr2">
|
||||||
{{ partial "svg/twitter.svg" (dict "size" "32px") }}
|
{{ partial "svg/twitter.svg" (dict "size" "32px") }}
|
||||||
</a>
|
</a>
|
||||||
{{ end */}}
|
<a
|
||||||
<a rel="me" class="mstdn mr3" href="https://fosstodon.org/@gohugoio" target="_blank">gohugoio</a>
|
rel="me"
|
||||||
<a class="github-button needs-js link primary-color-dark" href="https://github.com/gohugoio/hugo" data-size="large" data-show-count="false" aria-label="Star gohugoio/hugo on GitHub">Star</a>
|
class="mstdn mr3"
|
||||||
|
href="https://fosstodon.org/@gohugoio"
|
||||||
|
target="_blank"
|
||||||
|
>gohugoio</a
|
||||||
|
>
|
||||||
|
<a
|
||||||
|
class="github-button needs-js link primary-color-dark"
|
||||||
|
href="https://github.com/gohugoio/hugo"
|
||||||
|
data-size="large"
|
||||||
|
data-show-count="false"
|
||||||
|
aria-label="Star gohugoio/hugo on GitHub"
|
||||||
|
>Star</a
|
||||||
|
>
|
||||||
|
|
|
@ -5,7 +5,7 @@
|
||||||
{{ $href := printf "https://github.com/gohugoio/hugo/releases/tag/%s" $version }}
|
{{ $href := printf "https://github.com/gohugoio/hugo/releases/tag/%s" $version }}
|
||||||
<aside>
|
<aside>
|
||||||
<div class="admonition-content bl bw2 b--dark-red" >
|
<div class="admonition-content bl bw2 b--dark-red" >
|
||||||
<p>Deprecated in <a href="{{ $href }}">{{ $version }}</a></p>
|
<p>Deprecated in <a href="{{ $href }}">{{ $version }}</a>.</p>
|
||||||
{{ $.Inner }}
|
{{ $.Inner }}
|
||||||
</div>
|
</div>
|
||||||
</aside>
|
</aside>
|
||||||
|
|
|
@ -100,7 +100,7 @@ Renders the given image using the given filter, if any.
|
||||||
"fontSize" 64
|
"fontSize" 64
|
||||||
"lineHeight" 1.2
|
"lineHeight" 1.2
|
||||||
"fontColor" "#ffffff"
|
"fontColor" "#ffffff"
|
||||||
"fontPath" "https://github.com/google/fonts/raw/main/apache/roboto/static/Roboto-Regular.ttf"
|
"fontPath" "https://github.com/google/fonts/raw/main/ofl/lato/Lato-Regular.ttf"
|
||||||
}}
|
}}
|
||||||
|
|
||||||
{{- /* Get and validate parameters. */}}
|
{{- /* Get and validate parameters. */}}
|
||||||
|
@ -119,9 +119,10 @@ Renders the given image using the given filter, if any.
|
||||||
{{- end }}
|
{{- end }}
|
||||||
|
|
||||||
{{- $validFilters := slice
|
{{- $validFilters := slice
|
||||||
"brightness" "colorbalance" "colorize" "contrast" "gamma" "gaussianblur"
|
"autoorient" "brightness" "colorbalance" "colorize" "contrast" "gamma"
|
||||||
"grayscale" "hue" "invert" "none" "opacity" "overlay" "padding" "pixelate"
|
"gaussianblur" "grayscale" "hue" "invert" "none" "opacity" "overlay"
|
||||||
"process" "saturation" "sepia" "sigmoid" "text" "unsharpmask"
|
"padding" "pixelate" "process" "saturation" "sepia" "sigmoid" "text"
|
||||||
|
"unsharpmask"
|
||||||
}}
|
}}
|
||||||
|
|
||||||
{{- with $filter }}
|
{{- with $filter }}
|
||||||
|
@ -157,7 +158,11 @@ Renders the given image using the given filter, if any.
|
||||||
{{- /* Create filter. */}}
|
{{- /* Create filter. */}}
|
||||||
{{- $f := "" }}
|
{{- $f := "" }}
|
||||||
{{- $ctx := dict "filter" $filter "args" $filterArgs "name" .Name "position" .Position }}
|
{{- $ctx := dict "filter" $filter "args" $filterArgs "name" .Name "position" .Position }}
|
||||||
{{- if eq $filter "brightness" }}
|
{{- if eq $filter "autoorient" }}
|
||||||
|
{{- $ctx = merge $ctx (dict "argsRequired" 0) }}
|
||||||
|
{{- template "validate-arg-count" $ctx }}
|
||||||
|
{{- $f = images.AutoOrient }}
|
||||||
|
{{- else if eq $filter "brightness" }}
|
||||||
{{- $ctx = merge $ctx (dict "argsRequired" 1) }}
|
{{- $ctx = merge $ctx (dict "argsRequired" 1) }}
|
||||||
{{- template "validate-arg-count" $ctx }}
|
{{- template "validate-arg-count" $ctx }}
|
||||||
{{- $filterArgs = apply $filterArgs "float" "." }}
|
{{- $filterArgs = apply $filterArgs "float" "." }}
|
||||||
|
|
|
@ -3,7 +3,7 @@ Renders the page using the RenderShortcode method on the Page object.
|
||||||
|
|
||||||
You must call this shortcode using the {{% %}} notation.
|
You must call this shortcode using the {{% %}} notation.
|
||||||
|
|
||||||
@param {string} (postional parameter 0) The path to the page, relative to the content directory.
|
@param {string} (positional parameter 0) The path to the page, relative to the content directory.
|
||||||
@returns template.HTML
|
@returns template.HTML
|
||||||
|
|
||||||
@example {{% include "functions/_common/glob-patterns" %}}
|
@example {{% include "functions/_common/glob-patterns" %}}
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
{{- /*
|
{{- /*
|
||||||
Renders a desciption list of the pages in the given section.
|
Renders a description list of the pages in the given section.
|
||||||
|
|
||||||
Render a subset of the pages in the section by specifying a predefined filter,
|
Render a subset of the pages in the section by specifying a predefined filter,
|
||||||
and whether to include those pages.
|
and whether to include those pages.
|
||||||
|
|
|
@ -1,13 +1,36 @@
|
||||||
{{ $version := .Get 0 }}
|
{{- /*
|
||||||
{{ if not $version }}
|
Renders a "new in" button indicating the version in which a feature was added.
|
||||||
{{ errorf "Missing version in new-in shortcode " }}
|
|
||||||
{{ end }}
|
When comparing the current version to the specified version, the "new in"
|
||||||
{{ $version = $version | strings.TrimPrefix "v" }}
|
button will be hidden if any of the following conditions is true:
|
||||||
<button
|
|
||||||
class="bg-white hover:bg-gray-100 text-gray-800 font-semibold py-2 mr2 px-4 border border-gray-400 rounded shadow">
|
- The major version difference exceeds the majorVersionDiffThreshold
|
||||||
<a
|
- The minor version difference exceeds the minorVersionDiffThreshold
|
||||||
href="{{ printf "https://github.com/gohugoio/hugo/releases/tag/v%s" $version }}"
|
|
||||||
target="_blank"
|
@param {string} version The semantic version string, with or without a leading v.
|
||||||
>New in v{{ $version }}</a
|
@returns {template.HTML}
|
||||||
>
|
|
||||||
</button>
|
@example {{< new-in 0.100.0 >}}
|
||||||
|
*/}}
|
||||||
|
|
||||||
|
{{- /* Set defaults. */}}
|
||||||
|
{{- $majorVersionDiffThreshold := 0 }}
|
||||||
|
{{- $minorVersionDiffThreshold := 30 }}
|
||||||
|
{{- $displayExpirationWarning := true }}
|
||||||
|
|
||||||
|
{{- /* Render. */}}
|
||||||
|
{{- with $version := .Get 0 | strings.TrimPrefix "v" }}
|
||||||
|
{{- $majorVersionDiff := sub (index (split hugo.Version ".") 0 | int) (index (split $version ".") 0 | int) }}
|
||||||
|
{{- $minorVersionDiff := sub (index (split hugo.Version ".") 1 | int) (index (split $version ".") 1 | int) }}
|
||||||
|
{{- if or (gt $majorVersionDiff $majorVersionDiffThreshold) (gt $minorVersionDiff $minorVersionDiffThreshold) }}
|
||||||
|
{{- if $displayExpirationWarning }}
|
||||||
|
{{- warnf "This call to the %q shortcode should be removed: %s. The button is now hidden because the specified version (%s) is older than the display threshold." $.Name $.Position $version }}
|
||||||
|
{{- end }}
|
||||||
|
{{- else }}
|
||||||
|
<button class="bg-white hover:bg-gray-100 text-gray-800 font-semibold py-2 mr2 px-4 border border-gray-400 rounded shadow">
|
||||||
|
<a href="{{ printf "https://github.com/gohugoio/hugo/releases/tag/v%s" $version }}">New in v{{ $version }}</a>
|
||||||
|
</button>
|
||||||
|
{{- end }}
|
||||||
|
{{- else }}
|
||||||
|
{{- errorf "The %q shortcode requires a positional parameter (version). See %s" .Name .Position }}
|
||||||
|
{{- end -}}
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
{{/*
|
{{/*
|
||||||
Renders the child sections of the given top-level section, listing each childs's immediate descendants.
|
Renders the child sections of the given top-level section, listing each child's immediate descendants.
|
||||||
|
|
||||||
@param {string} section The top-level section to render.
|
@param {string} section The top-level section to render.
|
||||||
@returns template.HTML
|
@returns template.HTML
|
||||||
|
@ -11,7 +11,7 @@ Renders the child sections of the given top-level section, listing each childs's
|
||||||
{{ with .Get "section" }}
|
{{ with .Get "section" }}
|
||||||
{{ $section = . }}
|
{{ $section = . }}
|
||||||
{{ else }}
|
{{ else }}
|
||||||
{{ errorf "The %q shortcodes requires a 'section' parameter. See %s" .Name .Postion }}
|
{{ errorf "The %q shortcodes requires a 'section' parameter. See %s" .Name .Position }}
|
||||||
{{ end }}
|
{{ end }}
|
||||||
|
|
||||||
{{/* Do not change the markdown indentation, and do not remove blank lines. */}}
|
{{/* Do not change the markdown indentation, and do not remove blank lines. */}}
|
||||||
|
@ -24,7 +24,9 @@ Renders the child sections of the given top-level section, listing each childs's
|
||||||
{{ range .Pages }}
|
{{ range .Pages }}
|
||||||
{{ $aliases := "" }}
|
{{ $aliases := "" }}
|
||||||
{{ if eq .Section "functions" }}
|
{{ if eq .Section "functions" }}
|
||||||
{{ $aliases = delimit .Params.action.aliases " or " }}
|
{{ with .Params.action.aliases }}
|
||||||
|
{{ $aliases = delimit . " or " }}
|
||||||
|
{{ end }}
|
||||||
{{ end }}
|
{{ end }}
|
||||||
|
|
||||||
[{{ .LinkTitle }}]({{ .RelPermalink }}) {{ with $aliases }}({{ . }}){{ end }}
|
[{{ .LinkTitle }}]({{ .RelPermalink }}) {{ with $aliases }}({{ . }}){{ end }}
|
||||||
|
@ -33,5 +35,5 @@ Renders the child sections of the given top-level section, listing each childs's
|
||||||
{{ end }}
|
{{ end }}
|
||||||
{{ end }}
|
{{ end }}
|
||||||
{{ else }}
|
{{ else }}
|
||||||
{{ errorf "The %q shortcodes was unable to find the %q section. See %s" .Name $section .Postion }}
|
{{ errorf "The %q shortcodes was unable to find the %q section. See %s" .Name $section .Position }}
|
||||||
{{ end }}
|
{{ end }}
|
||||||
|
|
|
@ -1 +1 @@
|
||||||
# github.com/gohugoio/gohugoioTheme v0.0.0-20231111235806-77931ac4875e
|
# github.com/gohugoio/gohugoioTheme v0.0.0-20240125093153-bea12fdc0b15
|
||||||
|
|
|
@ -21,7 +21,7 @@ flex_box_interior_classes = "flex-auto w-100 w-40-l mr3 mb3 bg-white ba b--moon-
|
||||||
#sidebar_direction = "sidebar_left"
|
#sidebar_direction = "sidebar_left"
|
||||||
|
|
||||||
[social]
|
[social]
|
||||||
twitter = "GoHugoIO"
|
twitter = "GoHugoIOv2"
|
||||||
|
|
||||||
[render_hooks.link]
|
[render_hooks.link]
|
||||||
errorLevel = 'warning' # ignore (default), warning, or error (fails the build)
|
errorLevel = 'warning' # ignore (default), warning, or error (fails the build)
|
||||||
|
|
|
@ -24,7 +24,7 @@ Hugo comes with all the code you need to load Disqus into your templates. Before
|
||||||
|
|
||||||
Disqus comments require you set a single value in your [site's configuration file][configuration] like so:
|
Disqus comments require you set a single value in your [site's configuration file][configuration] like so:
|
||||||
|
|
||||||
{{< code-toggle file="hugo" >}}
|
{{< code-toggle file=hugo >}}
|
||||||
[services.disqus]
|
[services.disqus]
|
||||||
shortname = 'your-disqus-shortname'
|
shortname = 'your-disqus-shortname'
|
||||||
{{</ code-toggle >}}
|
{{</ code-toggle >}}
|
||||||
|
@ -48,6 +48,7 @@ Disqus has its own [internal template](/templates/internal/#disqus) available, t
|
||||||
These are some alternatives to Disqus:
|
These are some alternatives to Disqus:
|
||||||
|
|
||||||
* [Cactus Comments](https://cactus.chat/docs/integrations/hugo/) (Open Source, Matrix appservice, Docker install)
|
* [Cactus Comments](https://cactus.chat/docs/integrations/hugo/) (Open Source, Matrix appservice, Docker install)
|
||||||
|
* [Comentario](https://gitlab.com/comentario/comentario) (Open Source, self-hosted, Go/Angular, run locally, in Docker or Kubernetes)
|
||||||
* [Commento](https://commento.io/) (Open Source, available as a service, local install, or docker image)
|
* [Commento](https://commento.io/) (Open Source, available as a service, local install, or docker image)
|
||||||
* [Giscus](https://giscus.app/) (Open source, comments system powered by GitHub Discussions)
|
* [Giscus](https://giscus.app/) (Open source, comments system powered by GitHub Discussions)
|
||||||
* [Graph Comment](https://graphcomment.com/)
|
* [Graph Comment](https://graphcomment.com/)
|
||||||
|
|
|
@ -505,7 +505,7 @@ hugo --gc
|
||||||
[mounted]: /hugo-modules/configuration#module-configuration-mounts
|
[mounted]: /hugo-modules/configuration#module-configuration-mounts
|
||||||
[page bundle]: /content-management/page-bundles
|
[page bundle]: /content-management/page-bundles
|
||||||
[`lang.FormatNumber`]: /functions/lang/formatnumber
|
[`lang.FormatNumber`]: /functions/lang/formatnumber
|
||||||
[filters]: /functions/images
|
[filters]: /functions/images/filter/#image-filters
|
||||||
[github.com/disintegration/imaging]: <https://github.com/disintegration/imaging#image-resizing>
|
[github.com/disintegration/imaging]: <https://github.com/disintegration/imaging#image-resizing>
|
||||||
[Smartcrop]: <https://github.com/muesli/smartcrop#smartcrop>
|
[Smartcrop]: <https://github.com/muesli/smartcrop#smartcrop>
|
||||||
[Exif]: <https://en.wikipedia.org/wiki/Exif>
|
[Exif]: <https://en.wikipedia.org/wiki/Exif>
|
||||||
|
|
|
@ -48,7 +48,7 @@ To add a page to the "main" menu:
|
||||||
|
|
||||||
{{< code-toggle file=content/about.md fm=true >}}
|
{{< code-toggle file=content/about.md fm=true >}}
|
||||||
title = 'About'
|
title = 'About'
|
||||||
menu = 'main'
|
menus = 'main'
|
||||||
{{< /code-toggle >}}
|
{{< /code-toggle >}}
|
||||||
|
|
||||||
Access the entry with `site.Menus.main` in your templates. See [menu templates] for details.
|
Access the entry with `site.Menus.main` in your templates. See [menu templates] for details.
|
||||||
|
@ -57,11 +57,15 @@ To add a page to the "main" and "footer" menus:
|
||||||
|
|
||||||
{{< code-toggle file=content/contact.md fm=true >}}
|
{{< code-toggle file=content/contact.md fm=true >}}
|
||||||
title = 'Contact'
|
title = 'Contact'
|
||||||
menu = ['main','footer']
|
menus = ['main','footer']
|
||||||
{{< /code-toggle >}}
|
{{< /code-toggle >}}
|
||||||
|
|
||||||
Access the entry with `site.Menus.main` and `site.Menus.footer` in your templates. See [menu templates] for details.
|
Access the entry with `site.Menus.main` and `site.Menus.footer` in your templates. See [menu templates] for details.
|
||||||
|
|
||||||
|
{{% note %}}
|
||||||
|
The configuration key in the examples above is `menus`. The `menu` (singular) configuration key is an alias for `menus`.
|
||||||
|
{{% /note %}}
|
||||||
|
|
||||||
### Properties {#properties-front-matter}
|
### Properties {#properties-front-matter}
|
||||||
|
|
||||||
Use these properties when defining menu entries in front matter:
|
Use these properties when defining menu entries in front matter:
|
||||||
|
@ -96,11 +100,11 @@ This front matter menu entry demonstrates some of the available properties:
|
||||||
|
|
||||||
{{< code-toggle file=content/products/software.md fm=true >}}
|
{{< code-toggle file=content/products/software.md fm=true >}}
|
||||||
title = 'Software'
|
title = 'Software'
|
||||||
[menu.main]
|
[[menus.main]]
|
||||||
parent = 'Products'
|
parent = 'Products'
|
||||||
weight = 20
|
weight = 20
|
||||||
pre = '<i class="fa-solid fa-code"></i>'
|
pre = '<i class="fa-solid fa-code"></i>'
|
||||||
[menu.main.params]
|
[menus.main.params]
|
||||||
class = 'center'
|
class = 'center'
|
||||||
{{< /code-toggle >}}
|
{{< /code-toggle >}}
|
||||||
|
|
||||||
|
@ -111,17 +115,17 @@ Access the entry with `site.Menus.main` in your templates. See [menu templates]
|
||||||
To define entries for the "main" menu:
|
To define entries for the "main" menu:
|
||||||
|
|
||||||
{{< code-toggle file=hugo >}}
|
{{< code-toggle file=hugo >}}
|
||||||
[[menu.main]]
|
[[menus.main]]
|
||||||
name = 'Home'
|
name = 'Home'
|
||||||
pageRef = '/'
|
pageRef = '/'
|
||||||
weight = 10
|
weight = 10
|
||||||
|
|
||||||
[[menu.main]]
|
[[menus.main]]
|
||||||
name = 'Products'
|
name = 'Products'
|
||||||
pageRef = '/products'
|
pageRef = '/products'
|
||||||
weight = 20
|
weight = 20
|
||||||
|
|
||||||
[[menu.main]]
|
[[menus.main]]
|
||||||
name = 'Services'
|
name = 'Services'
|
||||||
pageRef = '/services'
|
pageRef = '/services'
|
||||||
weight = 30
|
weight = 30
|
||||||
|
@ -132,12 +136,12 @@ This creates a menu structure that you can access with `site.Menus.main` in your
|
||||||
To define entries for the "footer" menu:
|
To define entries for the "footer" menu:
|
||||||
|
|
||||||
{{< code-toggle file=hugo >}}
|
{{< code-toggle file=hugo >}}
|
||||||
[[menu.footer]]
|
[[menus.footer]]
|
||||||
name = 'Terms'
|
name = 'Terms'
|
||||||
pageRef = '/terms'
|
pageRef = '/terms'
|
||||||
weight = 10
|
weight = 10
|
||||||
|
|
||||||
[[menu.footer]]
|
[[menus.footer]]
|
||||||
name = 'Privacy'
|
name = 'Privacy'
|
||||||
pageRef = '/privacy'
|
pageRef = '/privacy'
|
||||||
weight = 20
|
weight = 20
|
||||||
|
@ -145,6 +149,10 @@ weight = 20
|
||||||
|
|
||||||
This creates a menu structure that you can access with `site.Menus.footer` in your templates. See [menu templates] for details.
|
This creates a menu structure that you can access with `site.Menus.footer` in your templates. See [menu templates] for details.
|
||||||
|
|
||||||
|
{{% note %}}
|
||||||
|
The configuration key in the examples above is `menus`. The `menu` (singular) configuration key is an alias for `menus`.
|
||||||
|
{{% /note %}}
|
||||||
|
|
||||||
### Properties {#properties-site-configuration}
|
### Properties {#properties-site-configuration}
|
||||||
|
|
||||||
{{% note %}}
|
{{% note %}}
|
||||||
|
@ -177,34 +185,34 @@ url
|
||||||
This nested menu demonstrates some of the available properties:
|
This nested menu demonstrates some of the available properties:
|
||||||
|
|
||||||
{{< code-toggle file=hugo >}}
|
{{< code-toggle file=hugo >}}
|
||||||
[[menu.main]]
|
[[menus.main]]
|
||||||
name = 'Products'
|
name = 'Products'
|
||||||
pageRef = '/products'
|
pageRef = '/products'
|
||||||
weight = 10
|
weight = 10
|
||||||
|
|
||||||
[[menu.main]]
|
[[menus.main]]
|
||||||
name = 'Hardware'
|
name = 'Hardware'
|
||||||
pageRef = '/products/hardware'
|
pageRef = '/products/hardware'
|
||||||
parent = 'Products'
|
parent = 'Products'
|
||||||
weight = 1
|
weight = 1
|
||||||
|
|
||||||
[[menu.main]]
|
[[menus.main]]
|
||||||
name = 'Software'
|
name = 'Software'
|
||||||
pageRef = '/products/software'
|
pageRef = '/products/software'
|
||||||
parent = 'Products'
|
parent = 'Products'
|
||||||
weight = 2
|
weight = 2
|
||||||
|
|
||||||
[[menu.main]]
|
[[menus.main]]
|
||||||
name = 'Services'
|
name = 'Services'
|
||||||
pageRef = '/services'
|
pageRef = '/services'
|
||||||
weight = 20
|
weight = 20
|
||||||
|
|
||||||
[[menu.main]]
|
[[menus.main]]
|
||||||
name = 'Hugo'
|
name = 'Hugo'
|
||||||
pre = '<i class="fa fa-heart"></i>'
|
pre = '<i class="fa fa-heart"></i>'
|
||||||
url = 'https://gohugo.io/'
|
url = 'https://gohugo.io/'
|
||||||
weight = 30
|
weight = 30
|
||||||
[menu.main.params]
|
[menus.main.params]
|
||||||
rel = 'external'
|
rel = 'external'
|
||||||
{{< /code-toggle >}}
|
{{< /code-toggle >}}
|
||||||
|
|
||||||
|
|
|
@ -71,7 +71,7 @@ disabled
|
||||||
: (`bool`) If `true`, Hugo will not render content for this language. Default is `false`.
|
: (`bool`) If `true`, Hugo will not render content for this language. Default is `false`.
|
||||||
|
|
||||||
languageCode
|
languageCode
|
||||||
: (`string`) The language tag as defined by [RFC 5646]. This value may include upper and lower case characters, hyphens or underscores, and does not affect localization or URLs. Hugo uses this value to populate the `language` element in the [built-in RSS template], and the `lang` attribute of the `html` element in the [built-in alias template]. Examples:
|
: (`string`) The language tag as defined by [RFC 5646]. This value may include upper and lower case characters, hyphens, or underscores, and does not affect localization or URLs. Hugo uses this value to populate the `language` element in the [built-in RSS template], and the `lang` attribute of the `html` element in the [built-in alias template]. Examples:
|
||||||
|
|
||||||
- `en`
|
- `en`
|
||||||
- `en-GB`
|
- `en-GB`
|
||||||
|
@ -546,12 +546,12 @@ languageCode = 'de-DE'
|
||||||
languageName = 'Deutsch'
|
languageName = 'Deutsch'
|
||||||
weight = 1
|
weight = 1
|
||||||
|
|
||||||
[[languages.de.menu.main]]
|
[[languages.de.menus.main]]
|
||||||
name = 'Produkte'
|
name = 'Produkte'
|
||||||
pageRef = '/products'
|
pageRef = '/products'
|
||||||
weight = 10
|
weight = 10
|
||||||
|
|
||||||
[[languages.de.menu.main]]
|
[[languages.de.menus.main]]
|
||||||
name = 'Leistungen'
|
name = 'Leistungen'
|
||||||
pageRef = '/services'
|
pageRef = '/services'
|
||||||
weight = 20
|
weight = 20
|
||||||
|
@ -561,12 +561,12 @@ languageCode = 'en-US'
|
||||||
languageName = 'English'
|
languageName = 'English'
|
||||||
weight = 2
|
weight = 2
|
||||||
|
|
||||||
[[languages.en.menu.main]]
|
[[languages.en.menus.main]]
|
||||||
name = 'Products'
|
name = 'Products'
|
||||||
pageRef = '/products'
|
pageRef = '/products'
|
||||||
weight = 10
|
weight = 10
|
||||||
|
|
||||||
[[languages.en.menu.main]]
|
[[languages.en.menus.main]]
|
||||||
name = 'Services'
|
name = 'Services'
|
||||||
pageRef = '/services'
|
pageRef = '/services'
|
||||||
weight = 20
|
weight = 20
|
||||||
|
@ -579,13 +579,12 @@ With a more complex menu structure, create a [configuration directory] and split
|
||||||
```text
|
```text
|
||||||
config/
|
config/
|
||||||
└── _default/
|
└── _default/
|
||||||
├── menus/
|
├── menus.de.toml
|
||||||
│ ├── menu.de.toml
|
├── menus.en.toml
|
||||||
│ └── menu.en.toml
|
|
||||||
└── hugo.toml
|
└── hugo.toml
|
||||||
```
|
```
|
||||||
|
|
||||||
{{< code-toggle file=config/_default/menus/menu.de >}}
|
{{< code-toggle file=config/_default/menus.de >}}
|
||||||
[[main]]
|
[[main]]
|
||||||
name = 'Produkte'
|
name = 'Produkte'
|
||||||
pageRef = '/products'
|
pageRef = '/products'
|
||||||
|
@ -596,7 +595,7 @@ pageRef = '/services'
|
||||||
weight = 20
|
weight = 20
|
||||||
{{< /code-toggle >}}
|
{{< /code-toggle >}}
|
||||||
|
|
||||||
{{< code-toggle file=config/_default/menus/menu.en >}}
|
{{< code-toggle file=config/_default/menus.en >}}
|
||||||
[[main]]
|
[[main]]
|
||||||
name = 'Products'
|
name = 'Products'
|
||||||
pageRef = '/products'
|
pageRef = '/products'
|
||||||
|
@ -627,12 +626,12 @@ The `identifier` depends on how you define menu entries:
|
||||||
For example, if you define menu entries in site configuration:
|
For example, if you define menu entries in site configuration:
|
||||||
|
|
||||||
{{< code-toggle file=hugo >}}
|
{{< code-toggle file=hugo >}}
|
||||||
[[menu.main]]
|
[[menus.main]]
|
||||||
identifier = 'products'
|
identifier = 'products'
|
||||||
name = 'Products'
|
name = 'Products'
|
||||||
pageRef = '/products'
|
pageRef = '/products'
|
||||||
weight = 10
|
weight = 10
|
||||||
[[menu.main]]
|
[[menus.main]]
|
||||||
identifier = 'services'
|
identifier = 'services'
|
||||||
name = 'Services'
|
name = 'Services'
|
||||||
pageRef = '/services'
|
pageRef = '/services'
|
||||||
|
|
|
@ -73,7 +73,7 @@ Cons
|
||||||
|
|
||||||
Because there are multiple ways in which a summary can be specified it is useful to understand the order of selection Hugo follows when deciding on the text to be returned by `.Summary`. It is as follows:
|
Because there are multiple ways in which a summary can be specified it is useful to understand the order of selection Hugo follows when deciding on the text to be returned by `.Summary`. It is as follows:
|
||||||
|
|
||||||
1. If there is a `<!--more-->`> summary divider present in the article the text up to the divider will be provided as per the manual summary split method
|
1. If there is a `<!--more-->` summary divider present in the article, the text up to the divider will be provided as per the manual summary split method
|
||||||
2. If there is a `summary` variable in the article front matter the value of the variable will be provided as per the front matter summary method
|
2. If there is a `summary` variable in the article front matter the value of the variable will be provided as per the front matter summary method
|
||||||
3. The text at the start of the article will be provided as per the automatic summary split method
|
3. The text at the start of the article will be provided as per the automatic summary split method
|
||||||
|
|
||||||
|
|
|
@ -100,7 +100,7 @@ Level 6 markdown headings are styled as `dt` elements. This was implemented to s
|
||||||
|
|
||||||
## Code examples
|
## Code examples
|
||||||
|
|
||||||
Indent code by two spaces. With examples of template code, include a space after opening action delimiters, and include a space before closing action delimeters.
|
Indent code by two spaces. With examples of template code, include a space after opening action delimiters, and include a space before closing action delimiters.
|
||||||
|
|
||||||
### Fenced code blocks
|
### Fenced code blocks
|
||||||
|
|
||||||
|
@ -269,7 +269,7 @@ Use the "note" shortcode with `{{%/* */%}}` delimiters to call attention to impo
|
||||||
Use the [`math.Mod`] function to control...
|
Use the [`math.Mod`] function to control...
|
||||||
|
|
||||||
[`math.Mod`]: /functions/math/mod/
|
[`math.Mod`]: /functions/math/mod/
|
||||||
{{%/* /code */%}}
|
{{%/* /note */%}}
|
||||||
```
|
```
|
||||||
|
|
||||||
Rendered:
|
Rendered:
|
||||||
|
@ -278,7 +278,7 @@ Rendered:
|
||||||
Use the [`math.Mod`] function to control...
|
Use the [`math.Mod`] function to control...
|
||||||
|
|
||||||
[`math.Mod`]: /functions/math/mod/
|
[`math.Mod`]: /functions/math/mod/
|
||||||
{{% /code %}}
|
{{% /note %}}
|
||||||
|
|
||||||
## New features
|
## New features
|
||||||
|
|
||||||
|
@ -306,13 +306,9 @@ When deprecating a function or method, add this to front matter:
|
||||||
|
|
||||||
{{< code-toggle file=content/something/foo.md fm=true >}}
|
{{< code-toggle file=content/something/foo.md fm=true >}}
|
||||||
expiryDate: 2024-10-30
|
expiryDate: 2024-10-30
|
||||||
_build:
|
|
||||||
list: never
|
|
||||||
{{< /code-toggle >}}
|
{{< /code-toggle >}}
|
||||||
|
|
||||||
Set the `expiryDate` to one year from the date of deprecation, and add a brief front matter comment to explain the settings.
|
Set the `expiryDate` to one year from the date of deprecation, and add a brief front matter comment to explain the setting.
|
||||||
|
|
||||||
Users will be able to search for the page, but the page will not appear in any list views, including section menus.
|
|
||||||
|
|
||||||
## GitHub workflow
|
## GitHub workflow
|
||||||
|
|
||||||
|
@ -348,13 +344,13 @@ Closes #1234
|
||||||
Closes #5678"
|
Closes #5678"
|
||||||
```
|
```
|
||||||
|
|
||||||
Step 5
|
Step 6
|
||||||
: Push the new branch to your fork of the documentation repository.
|
: Push the new branch to your fork of the documentation repository.
|
||||||
|
|
||||||
Step 6
|
Step 7
|
||||||
: Visit the [documentation repository] and create a pull request (PR).
|
: Visit the [documentation repository] and create a pull request (PR).
|
||||||
|
|
||||||
Step 7
|
Step 8
|
||||||
: A project maintainer will review your PR and may request changes. You may delete your branch after the maintainer merges your PR.
|
: A project maintainer will review your PR and may request changes. You may delete your branch after the maintainer merges your PR.
|
||||||
|
|
||||||
[ATX]: https://spec.commonmark.org/0.30/#atx-headings
|
[ATX]: https://spec.commonmark.org/0.30/#atx-headings
|
||||||
|
|
|
@ -7,7 +7,6 @@ action:
|
||||||
aliases: [append]
|
aliases: [append]
|
||||||
related:
|
related:
|
||||||
- functions/collections/Merge
|
- functions/collections/Merge
|
||||||
- functions/collections/Slice
|
|
||||||
returnType: any
|
returnType: any
|
||||||
signatures:
|
signatures:
|
||||||
- collections.Append ELEMENT [ELEMENT...] COLLECTION
|
- collections.Append ELEMENT [ELEMENT...] COLLECTION
|
||||||
|
|
|
@ -5,14 +5,9 @@ categories: []
|
||||||
keywords: []
|
keywords: []
|
||||||
action:
|
action:
|
||||||
aliases: [apply]
|
aliases: [apply]
|
||||||
|
related: []
|
||||||
returnType: '[]any'
|
returnType: '[]any'
|
||||||
signatures: [collections.Apply COLLECTION FUNCTION PARAM...]
|
signatures: [collections.Apply COLLECTION FUNCTION PARAM...]
|
||||||
relatedFunctions:
|
|
||||||
- collections.Delimit
|
|
||||||
- collections.In
|
|
||||||
- collections.Reverse
|
|
||||||
- collections.Seq
|
|
||||||
- collections.Slice
|
|
||||||
aliases: [/functions/apply]
|
aliases: [/functions/apply]
|
||||||
---
|
---
|
||||||
|
|
||||||
|
|
|
@ -6,11 +6,6 @@ keywords: []
|
||||||
action:
|
action:
|
||||||
aliases: [delimit]
|
aliases: [delimit]
|
||||||
related:
|
related:
|
||||||
- functions/collections/Apply
|
|
||||||
- functions/collections/In
|
|
||||||
- functions/collections/Reverse
|
|
||||||
- functions/collections/Seq
|
|
||||||
- functions/collections/Slice
|
|
||||||
- functions/strings/Split
|
- functions/strings/Split
|
||||||
returnType: string
|
returnType: string
|
||||||
signatures: ['collections.Delimit COLLECTION DELIMITER [LAST]']
|
signatures: ['collections.Delimit COLLECTION DELIMITER [LAST]']
|
||||||
|
|
|
@ -6,10 +6,7 @@ keywords: []
|
||||||
action:
|
action:
|
||||||
aliases: [dict]
|
aliases: [dict]
|
||||||
related:
|
related:
|
||||||
- functions/collections/Group
|
- functions/collections/Slice
|
||||||
- functions/collections/IndexFunction
|
|
||||||
- functions/collections/IsSet
|
|
||||||
- functions/collections/Where
|
|
||||||
returnType: mapany
|
returnType: mapany
|
||||||
signatures: ['collections.Dictionary KEY VALUE [VALUE...]']
|
signatures: ['collections.Dictionary KEY VALUE [VALUE...]']
|
||||||
aliases: [/functions/dict]
|
aliases: [/functions/dict]
|
||||||
|
|
|
@ -8,6 +8,7 @@ action:
|
||||||
related:
|
related:
|
||||||
- functions/collections/After
|
- functions/collections/After
|
||||||
- functions/collections/Last
|
- functions/collections/Last
|
||||||
|
- methods/pages/Limit
|
||||||
returnType: any
|
returnType: any
|
||||||
signatures: [collections.First N COLLECTION]
|
signatures: [collections.First N COLLECTION]
|
||||||
aliases: [/functions/first]
|
aliases: [/functions/first]
|
||||||
|
|
|
@ -5,11 +5,7 @@ categories: []
|
||||||
keywords: []
|
keywords: []
|
||||||
action:
|
action:
|
||||||
aliases: [group]
|
aliases: [group]
|
||||||
related:
|
related: []
|
||||||
- functions/collections/Dictionary
|
|
||||||
- functions/collections/IndexFunction
|
|
||||||
- functions/collections/IsSet
|
|
||||||
- functions/collections/Where
|
|
||||||
returnType: any
|
returnType: any
|
||||||
signatures: [collections.Group KEY PAGES]
|
signatures: [collections.Group KEY PAGES]
|
||||||
aliases: [/functions/group]
|
aliases: [/functions/group]
|
||||||
|
|
|
@ -6,7 +6,6 @@ keywords: []
|
||||||
action:
|
action:
|
||||||
aliases: [in]
|
aliases: [in]
|
||||||
related:
|
related:
|
||||||
- functions/collections/Slice
|
|
||||||
- functions/strings/Contains
|
- functions/strings/Contains
|
||||||
- functions/strings/ContainsAny
|
- functions/strings/ContainsAny
|
||||||
- functions/strings/ContainsNonSpace
|
- functions/strings/ContainsNonSpace
|
||||||
|
|
|
@ -5,11 +5,7 @@ categories: []
|
||||||
keywords: []
|
keywords: []
|
||||||
action:
|
action:
|
||||||
aliases: [index]
|
aliases: [index]
|
||||||
related:
|
related: []
|
||||||
- functions/collections/Dictionary
|
|
||||||
- functions/collections/Group
|
|
||||||
- functions/collections/IsSet
|
|
||||||
- functions/collections/Where
|
|
||||||
returnType: any
|
returnType: any
|
||||||
signatures:
|
signatures:
|
||||||
- collections.Index COLLECTION INDEXES
|
- collections.Index COLLECTION INDEXES
|
||||||
|
|
|
@ -6,10 +6,6 @@ keywords: []
|
||||||
action:
|
action:
|
||||||
aliases: [isset]
|
aliases: [isset]
|
||||||
related:
|
related:
|
||||||
- functions/collections/Dictionary
|
|
||||||
- functions/collections/Group
|
|
||||||
- functions/collections/IndexFunction
|
|
||||||
- functions/collections/Where
|
|
||||||
- functions/go-template/if
|
- functions/go-template/if
|
||||||
- functions/go-template/with
|
- functions/go-template/with
|
||||||
returnType: bool
|
returnType: bool
|
||||||
|
|
|
@ -8,6 +8,7 @@ action:
|
||||||
related:
|
related:
|
||||||
- methods/page/scratch
|
- methods/page/scratch
|
||||||
- methods/page/store
|
- methods/page/store
|
||||||
|
- methods/shortcode/scratch
|
||||||
returnType: maps.Scratch
|
returnType: maps.Scratch
|
||||||
signatures: [collections.NewScratch ]
|
signatures: [collections.NewScratch ]
|
||||||
---
|
---
|
||||||
|
@ -20,16 +21,18 @@ The `collections.NewScratch` function creates a locally scoped [scratch pad] to
|
||||||
|
|
||||||
## Methods
|
## Methods
|
||||||
|
|
||||||
Set
|
###### Set
|
||||||
: Sets the value of a given key.
|
|
||||||
|
Sets the value of a given key.
|
||||||
|
|
||||||
```go-html-template
|
```go-html-template
|
||||||
{{ $s := newScratch }}
|
{{ $s := newScratch }}
|
||||||
{{ $s.Set "greeting" "Hello" }}
|
{{ $s.Set "greeting" "Hello" }}
|
||||||
```
|
```
|
||||||
|
|
||||||
Get
|
###### Get
|
||||||
: Gets the value of a given key.
|
|
||||||
|
Gets the value of a given key.
|
||||||
|
|
||||||
```go-html-template
|
```go-html-template
|
||||||
{{ $s := newScratch }}
|
{{ $s := newScratch }}
|
||||||
|
@ -37,10 +40,11 @@ Get
|
||||||
{{ $s.Get "greeting" }} → Hello
|
{{ $s.Get "greeting" }} → Hello
|
||||||
```
|
```
|
||||||
|
|
||||||
Add
|
###### Add
|
||||||
: Adds a given value to existing value(s) of the given key.
|
|
||||||
|
|
||||||
: For single values, `Add` accepts values that support Go's `+` operator. If the first `Add` for a key is an array or slice, the following adds will be appended to that list.
|
Adds a given value to existing value(s) of the given key.
|
||||||
|
|
||||||
|
For single values, `Add` accepts values that support Go's `+` operator. If the first `Add` for a key is an array or slice, the following adds will be appended to that list.
|
||||||
|
|
||||||
```go-html-template
|
```go-html-template
|
||||||
{{ $s := newScratch }}
|
{{ $s := newScratch }}
|
||||||
|
@ -63,8 +67,9 @@ Add
|
||||||
{{ $s.Get "greetings" }} → [Hello Welcome Cheers]
|
{{ $s.Get "greetings" }} → [Hello Welcome Cheers]
|
||||||
```
|
```
|
||||||
|
|
||||||
SetInMap
|
###### SetInMap
|
||||||
: Takes a `key`, `mapKey` and `value` and adds a map of `mapKey` and `value` to the given `key`.
|
|
||||||
|
Takes a `key`, `mapKey` and `value` and adds a map of `mapKey` and `value` to the given `key`.
|
||||||
|
|
||||||
```go-html-template
|
```go-html-template
|
||||||
{{ $s := newScratch }}
|
{{ $s := newScratch }}
|
||||||
|
@ -73,8 +78,9 @@ SetInMap
|
||||||
{{ $s.Get "greetings" }} → map[english:Hello french:Bonjour]
|
{{ $s.Get "greetings" }} → map[english:Hello french:Bonjour]
|
||||||
```
|
```
|
||||||
|
|
||||||
DeleteInMap
|
###### DeleteInMap
|
||||||
: Takes a `key` and `mapKey` and removes the map of `mapKey` from the given `key`.
|
|
||||||
|
Takes a `key` and `mapKey` and removes the map of `mapKey` from the given `key`.
|
||||||
|
|
||||||
```go-html-template
|
```go-html-template
|
||||||
{{ $s := newScratch }}
|
{{ $s := newScratch }}
|
||||||
|
@ -84,8 +90,9 @@ DeleteInMap
|
||||||
{{ $s.Get "greetings" }} → map[french:Bonjour]
|
{{ $s.Get "greetings" }} → map[french:Bonjour]
|
||||||
```
|
```
|
||||||
|
|
||||||
GetSortedMapValues
|
###### GetSortedMapValues
|
||||||
: Returns an array of values from `key` sorted by `mapKey`.
|
|
||||||
|
Returns an array of values from `key` sorted by `mapKey`.
|
||||||
|
|
||||||
```go-html-template
|
```go-html-template
|
||||||
{{ $s := newScratch }}
|
{{ $s := newScratch }}
|
||||||
|
@ -94,8 +101,9 @@ GetSortedMapValues
|
||||||
{{ $s.GetSortedMapValues "greetings" }} → [Hello Bonjour]
|
{{ $s.GetSortedMapValues "greetings" }} → [Hello Bonjour]
|
||||||
```
|
```
|
||||||
|
|
||||||
Delete
|
###### Delete
|
||||||
: Removes the given key.
|
|
||||||
|
Removes the given key.
|
||||||
|
|
||||||
```go-html-template
|
```go-html-template
|
||||||
{{ $s := newScratch }}
|
{{ $s := newScratch }}
|
||||||
|
@ -103,8 +111,9 @@ Delete
|
||||||
{{ $s.Delete "greeting" }}
|
{{ $s.Delete "greeting" }}
|
||||||
```
|
```
|
||||||
|
|
||||||
Values
|
###### Values
|
||||||
: Returns the raw backing map. Do not use with `Scratch` or `Store` methods on a `Page` object due to concurrency issues.
|
|
||||||
|
Returns the raw backing map. Do not use with `Scratch` or `Store` methods on a `Page` object due to concurrency issues.
|
||||||
|
|
||||||
```go-html-template
|
```go-html-template
|
||||||
{{ $s := newScratch }}
|
{{ $s := newScratch }}
|
||||||
|
|
|
@ -5,13 +5,12 @@ categories: []
|
||||||
keywords: []
|
keywords: []
|
||||||
action:
|
action:
|
||||||
aliases: [querify]
|
aliases: [querify]
|
||||||
|
related:
|
||||||
|
- functions/go-template/urlquery.md
|
||||||
returnType: string
|
returnType: string
|
||||||
signatures:
|
signatures:
|
||||||
- collections.Querify VALUE [VALUE...]
|
- collections.Querify VALUE [VALUE...]
|
||||||
- collections.Querify COLLECTION
|
- collections.Querify COLLECTION
|
||||||
related:
|
|
||||||
- collections.Querify
|
|
||||||
- urlquery
|
|
||||||
aliases: [/functions/querify]
|
aliases: [/functions/querify]
|
||||||
---
|
---
|
||||||
|
|
||||||
|
|
|
@ -5,15 +5,12 @@ categories: []
|
||||||
keywords: []
|
keywords: []
|
||||||
action:
|
action:
|
||||||
aliases: []
|
aliases: []
|
||||||
|
related:
|
||||||
|
- functions/collections/Sort
|
||||||
|
- functions/collections/Shuffle
|
||||||
|
- functions/collections/Uniq
|
||||||
returnType: any
|
returnType: any
|
||||||
signatures: [collections.Reverse COLLECTION]
|
signatures: [collections.Reverse COLLECTION]
|
||||||
related:
|
|
||||||
- collections.Apply
|
|
||||||
- collections.Delimit
|
|
||||||
- collections.In
|
|
||||||
- collections.Reverse
|
|
||||||
- collections.Seq
|
|
||||||
- collections.Slice
|
|
||||||
aliases: [/functions/collections.reverse]
|
aliases: [/functions/collections.reverse]
|
||||||
---
|
---
|
||||||
|
|
||||||
|
|
|
@ -5,18 +5,12 @@ categories: []
|
||||||
keywords: []
|
keywords: []
|
||||||
action:
|
action:
|
||||||
aliases: [seq]
|
aliases: [seq]
|
||||||
|
related: []
|
||||||
returnType: '[]int'
|
returnType: '[]int'
|
||||||
signatures:
|
signatures:
|
||||||
- collections.Seq LAST
|
- collections.Seq LAST
|
||||||
- collections.Seq FIRST LAST
|
- collections.Seq FIRST LAST
|
||||||
- collections.Seq FIRST INCREMENT LAST
|
- collections.Seq FIRST INCREMENT LAST
|
||||||
related:
|
|
||||||
- collections.Apply
|
|
||||||
- collections.Delimit
|
|
||||||
- collections.In
|
|
||||||
- collections.Reverse
|
|
||||||
- collections.Seq
|
|
||||||
- collections.Slice
|
|
||||||
aliases: [/functions/seq]
|
aliases: [/functions/seq]
|
||||||
---
|
---
|
||||||
|
|
||||||
|
@ -27,7 +21,7 @@ aliases: [/functions/seq]
|
||||||
{{ seq -2 2 2 }} → [-2 0 2]
|
{{ seq -2 2 2 }} → [-2 0 2]
|
||||||
```
|
```
|
||||||
|
|
||||||
Iterate over a sequence of integers:
|
A contrived example of iterating over a sequence of integers:
|
||||||
|
|
||||||
```go-html-template
|
```go-html-template
|
||||||
{{ $product := 1 }}
|
{{ $product := 1 }}
|
||||||
|
@ -37,10 +31,6 @@ Iterate over a sequence of integers:
|
||||||
{{ $product }} → 24
|
{{ $product }} → 24
|
||||||
```
|
```
|
||||||
|
|
||||||
The example above is contrived. To calculate the product of 2 or more numbers, use the [`math.Product`] function:
|
{{% note %}}
|
||||||
|
The slice created by the `seq` function is limited to 2000 elements.
|
||||||
```go-html-template
|
{{% /note %}}
|
||||||
{{ math.Product (seq 4) }} → 24
|
|
||||||
```
|
|
||||||
|
|
||||||
[`math.Product`]: /functions/math/product
|
|
||||||
|
|
|
@ -5,13 +5,12 @@ categories: []
|
||||||
keywords: []
|
keywords: []
|
||||||
action:
|
action:
|
||||||
aliases: [shuffle]
|
aliases: [shuffle]
|
||||||
|
related:
|
||||||
|
- functions/collections/Reverse
|
||||||
|
- functions/collections/Sort
|
||||||
|
- functions/collections/Uniq
|
||||||
returnType: any
|
returnType: any
|
||||||
signatures: [collections.Shuffle COLLECTION]
|
signatures: [collections.Shuffle COLLECTION]
|
||||||
related:
|
|
||||||
- collections.Reverse
|
|
||||||
- collections.Shuffle
|
|
||||||
- collections.Sort
|
|
||||||
- collections.Uniq
|
|
||||||
aliases: [/functions/shuffle]
|
aliases: [/functions/shuffle]
|
||||||
---
|
---
|
||||||
|
|
||||||
|
|
|
@ -5,16 +5,10 @@ categories: []
|
||||||
keywords: []
|
keywords: []
|
||||||
action:
|
action:
|
||||||
aliases: [slice]
|
aliases: [slice]
|
||||||
|
related:
|
||||||
|
- functions/collections/Dictionary
|
||||||
returnType: any
|
returnType: any
|
||||||
signatures: [collections.Slice ITEM...]
|
signatures: [collections.Slice ITEM...]
|
||||||
related:
|
|
||||||
- collections.Append
|
|
||||||
- collections.Apply
|
|
||||||
- collections.Delimit
|
|
||||||
- collections.In
|
|
||||||
- collections.Reverse
|
|
||||||
- collections.Seq
|
|
||||||
- collections.Slice
|
|
||||||
aliases: [/functions/slice]
|
aliases: [/functions/slice]
|
||||||
---
|
---
|
||||||
|
|
||||||
|
|
|
@ -5,13 +5,13 @@ categories: []
|
||||||
keywords: []
|
keywords: []
|
||||||
action:
|
action:
|
||||||
aliases: [sort]
|
aliases: [sort]
|
||||||
|
related:
|
||||||
|
- functions/collections/Reverse
|
||||||
|
- functions/collections/Shuffle
|
||||||
|
- functions/collections/Uniq
|
||||||
returnType: any
|
returnType: any
|
||||||
signatures: ['collections.Sort COLLECTION [KEY] [ORDER]']
|
signatures: ['collections.Sort COLLECTION [KEY] [ORDER]']
|
||||||
related:
|
toc: true
|
||||||
- collections.Reverse
|
|
||||||
- collections.Shuffle
|
|
||||||
- collections.Sort
|
|
||||||
- collections.Uniq
|
|
||||||
aliases: [/functions/sort]
|
aliases: [/functions/sort]
|
||||||
---
|
---
|
||||||
|
|
||||||
|
@ -105,6 +105,40 @@ This produces:
|
||||||
Victor Marius Jean
|
Victor Marius Jean
|
||||||
```
|
```
|
||||||
|
|
||||||
|
### First level key removal
|
||||||
|
|
||||||
|
Hugo removes the first level keys when sorting a map.
|
||||||
|
|
||||||
|
Original map:
|
||||||
|
|
||||||
|
```json
|
||||||
|
{
|
||||||
|
"felix": {
|
||||||
|
"breed": "malicious",
|
||||||
|
"type": "cat"
|
||||||
|
},
|
||||||
|
"spot": {
|
||||||
|
"breed": "boxer",
|
||||||
|
"type": "dog"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
After sorting:
|
||||||
|
|
||||||
|
```json
|
||||||
|
[
|
||||||
|
{
|
||||||
|
"breed": "malicious",
|
||||||
|
"type": "cat"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"breed": "boxer",
|
||||||
|
"type": "dog"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
```
|
||||||
|
|
||||||
## Sort a page collection
|
## Sort a page collection
|
||||||
|
|
||||||
{{% note %}}
|
{{% note %}}
|
||||||
|
|
|
@ -5,13 +5,13 @@ categories: []
|
||||||
keywords: []
|
keywords: []
|
||||||
action:
|
action:
|
||||||
aliases: [symdiff]
|
aliases: [symdiff]
|
||||||
|
related:
|
||||||
|
- functions/collections/Complement
|
||||||
|
- functions/collections/Intersect
|
||||||
|
- functions/collections/SymDiff
|
||||||
|
- functions/collections/Union
|
||||||
returnType: any
|
returnType: any
|
||||||
signatures: [COLLECTION | collections.SymDiff COLLECTION]
|
signatures: [COLLECTION | collections.SymDiff COLLECTION]
|
||||||
related:
|
|
||||||
- collections.Complement
|
|
||||||
- collections.Intersect
|
|
||||||
- collections.SymDiff
|
|
||||||
- collections.Union
|
|
||||||
aliases: [/functions/symdiff]
|
aliases: [/functions/symdiff]
|
||||||
---
|
---
|
||||||
|
|
||||||
|
|
|
@ -5,13 +5,13 @@ categories: []
|
||||||
keywords: []
|
keywords: []
|
||||||
action:
|
action:
|
||||||
aliases: [union]
|
aliases: [union]
|
||||||
|
related:
|
||||||
|
- functions/collections/Complement
|
||||||
|
- functions/collections/Intersect
|
||||||
|
- functions/collections/SymDiff
|
||||||
|
- functions/collections/Union
|
||||||
returnType: any
|
returnType: any
|
||||||
signatures: [collections.Union SET1 SET2]
|
signatures: [collections.Union SET1 SET2]
|
||||||
related:
|
|
||||||
- collections.Complement
|
|
||||||
- collections.Intersect
|
|
||||||
- collections.SymDiff
|
|
||||||
- collections.Union
|
|
||||||
aliases: [/functions/union]
|
aliases: [/functions/union]
|
||||||
---
|
---
|
||||||
|
|
||||||
|
|
|
@ -5,13 +5,13 @@ categories: []
|
||||||
keywords: []
|
keywords: []
|
||||||
action:
|
action:
|
||||||
aliases: [uniq]
|
aliases: [uniq]
|
||||||
|
related:
|
||||||
|
- functions/collections/Reverse
|
||||||
|
- functions/collections/Shuffle
|
||||||
|
- functions/collections/Sort
|
||||||
|
- functions/collections/Uniq
|
||||||
returnType: any
|
returnType: any
|
||||||
signatures: [collections.Uniq COLLECTION]
|
signatures: [collections.Uniq COLLECTION]
|
||||||
related:
|
|
||||||
- collections.Reverse
|
|
||||||
- collections.Shuffle
|
|
||||||
- collections.Sort
|
|
||||||
- collections.Uniq
|
|
||||||
aliases: [/functions/uniq]
|
aliases: [/functions/uniq]
|
||||||
---
|
---
|
||||||
|
|
||||||
|
|
|
@ -5,16 +5,11 @@ categories: []
|
||||||
keywords: []
|
keywords: []
|
||||||
action:
|
action:
|
||||||
aliases: [where]
|
aliases: [where]
|
||||||
|
related: []
|
||||||
returnType: any
|
returnType: any
|
||||||
signatures: ['collections.Where COLLECTION KEY [OPERATOR] VALUE']
|
signatures: ['collections.Where COLLECTION KEY [OPERATOR] VALUE']
|
||||||
related:
|
|
||||||
- collections.Dictionary
|
|
||||||
- collections.Group
|
|
||||||
- collections.Index
|
|
||||||
- collections.IsSet
|
|
||||||
- collections.Where
|
|
||||||
aliases: [/functions/where]
|
|
||||||
toc: true
|
toc: true
|
||||||
|
aliases: [/functions/where]
|
||||||
---
|
---
|
||||||
|
|
||||||
The `where` function returns the given collection, removing elements that do not satisfy the comparison condition. The comparison condition is comprised of the `KEY`, `OPERATOR`, and `VALUE` arguments:
|
The `where` function returns the given collection, removing elements that do not satisfy the comparison condition. The comparison condition is comprised of the `KEY`, `OPERATOR`, and `VALUE` arguments:
|
||||||
|
@ -37,9 +32,10 @@ Hugo will test for equality if you do not provide an `OPERATOR` argument. For ex
|
||||||
The where function takes three or four arguments. The `OPERATOR` argument is optional.
|
The where function takes three or four arguments. The `OPERATOR` argument is optional.
|
||||||
|
|
||||||
COLLECTION
|
COLLECTION
|
||||||
: (`any`) Typically a page collection or a [slice] of [maps].
|
: (`any`) A [page collection] or a [slice] of [maps].
|
||||||
|
|
||||||
[maps]: /getting-started/glossary/#map
|
[maps]: /getting-started/glossary/#map
|
||||||
|
[page collection]: /getting-started/glossary/#page-collection
|
||||||
[slice]: /getting-started/glossary/#slice
|
[slice]: /getting-started/glossary/#slice
|
||||||
|
|
||||||
KEY
|
KEY
|
||||||
|
@ -50,7 +46,7 @@ KEY
|
||||||
```
|
```
|
||||||
|
|
||||||
[chain]: /getting-started/glossary/#chain
|
[chain]: /getting-started/glossary/#chain
|
||||||
|
Typically a
|
||||||
OPERATOR
|
OPERATOR
|
||||||
: (`string`) The logical comparison [operator](#operators).
|
: (`string`) The logical comparison [operator](#operators).
|
||||||
|
|
||||||
|
@ -64,7 +60,7 @@ Comparison|Result
|
||||||
`false "eq" "false"`|`false`
|
`false "eq" "false"`|`false`
|
||||||
`false "eq" false`|`true`
|
`false "eq" false`|`true`
|
||||||
|
|
||||||
When one or both of the values to compare is a slice, use the `in`, `not in` or `intersect` operators as described below.
|
When one or both of the values to compare is a slice, use the `in`, `not in`, or `intersect` operators as described below.
|
||||||
|
|
||||||
## Operators
|
## Operators
|
||||||
|
|
||||||
|
@ -123,14 +119,14 @@ Compare the value of the given field to an [`int`] or [`float`]:
|
||||||
[`float`]: /getting-started/glossary/#float
|
[`float`]: /getting-started/glossary/#float
|
||||||
|
|
||||||
```go-html-template
|
```go-html-template
|
||||||
{{ $sectionPages := where site.RegularPages "Section" "eq" "books" }}
|
{{ $books := where site.RegularPages "Section" "eq" "books" }}
|
||||||
|
|
||||||
{{ $pages := where $sectionPages "Params.price" "eq" 42 }}
|
{{ $pages := where $books "Params.price" "eq" 42 }}
|
||||||
{{ $pages := where $sectionPages "Params.price" "ne" 42.67 }}
|
{{ $pages := where $books "Params.price" "ne" 42.67 }}
|
||||||
{{ $pages := where $sectionPages "Params.price" "ge" 42 }}
|
{{ $pages := where $books "Params.price" "ge" 42 }}
|
||||||
{{ $pages := where $sectionPages "Params.price" "gt" 42.67 }}
|
{{ $pages := where $books "Params.price" "gt" 42.67 }}
|
||||||
{{ $pages := where $sectionPages "Params.price" "le" 42 }}
|
{{ $pages := where $books "Params.price" "le" 42 }}
|
||||||
{{ $pages := where $sectionPages "Params.price" "lt" 42.67 }}
|
{{ $pages := where $books "Params.price" "lt" 42.67 }}
|
||||||
```
|
```
|
||||||
|
|
||||||
## Boolean comparison
|
## Boolean comparison
|
||||||
|
@ -140,12 +136,12 @@ Compare the value of the given field to a [`bool`]:
|
||||||
[`bool`]: /getting-started/glossary/#bool
|
[`bool`]: /getting-started/glossary/#bool
|
||||||
|
|
||||||
```go-html-template
|
```go-html-template
|
||||||
{{ $sectionPages := where site.RegularPages "Section" "eq" "books" }}
|
{{ $books := where site.RegularPages "Section" "eq" "books" }}
|
||||||
|
|
||||||
{{ $pages := where $sectionPages "Params.fiction" "eq" true }}
|
{{ $pages := where $books "Params.fiction" "eq" true }}
|
||||||
{{ $pages := where $sectionPages "Params.fiction" "eq" false }}
|
{{ $pages := where $books "Params.fiction" "eq" false }}
|
||||||
{{ $pages := where $sectionPages "Params.fiction" "ne" true }}
|
{{ $pages := where $books "Params.fiction" "ne" true }}
|
||||||
{{ $pages := where $sectionPages "Params.fiction" "ne" false }}
|
{{ $pages := where $books "Params.fiction" "ne" false }}
|
||||||
```
|
```
|
||||||
|
|
||||||
## Member comparison
|
## Member comparison
|
||||||
|
@ -158,19 +154,19 @@ Compare a [`scalar`] to a [`slice`].
|
||||||
For example, to return a collection of pages where the `color` page parameter is either "red" or "yellow":
|
For example, to return a collection of pages where the `color` page parameter is either "red" or "yellow":
|
||||||
|
|
||||||
```go-html-template
|
```go-html-template
|
||||||
{{ $sectionPages := where site.RegularPages "Section" "eq" "fruit" }}
|
{{ $fruit := where site.RegularPages "Section" "eq" "fruit" }}
|
||||||
|
|
||||||
{{ $colors := slice "red" "yellow" }}
|
{{ $colors := slice "red" "yellow" }}
|
||||||
{{ $pages := where $sectionPages "Params.color" "in" $colors }}
|
{{ $pages := where $fruit "Params.color" "in" $colors }}
|
||||||
```
|
```
|
||||||
|
|
||||||
To return a collection of pages where the "color" page parameter is neither "red" nor "yellow":
|
To return a collection of pages where the "color" page parameter is neither "red" nor "yellow":
|
||||||
|
|
||||||
```go-html-template
|
```go-html-template
|
||||||
{{ $sectionPages := where site.RegularPages "Section" "eq" "fruit" }}
|
{{ $fruit := where site.RegularPages "Section" "eq" "fruit" }}
|
||||||
|
|
||||||
{{ $colors := slice "red" "yellow" }}
|
{{ $colors := slice "red" "yellow" }}
|
||||||
{{ $pages := where $sectionPages "Params.color" "not in" $colors }}
|
{{ $pages := where $fruit "Params.color" "not in" $colors }}
|
||||||
```
|
```
|
||||||
|
|
||||||
## Intersection comparison
|
## Intersection comparison
|
||||||
|
@ -180,10 +176,10 @@ Compare a [`slice`] to a [`slice`], returning collection elements with common va
|
||||||
For example, to return a collection of pages where any of the terms in the "genres" taxonomy are "suspense" or "romance":
|
For example, to return a collection of pages where any of the terms in the "genres" taxonomy are "suspense" or "romance":
|
||||||
|
|
||||||
```go-html-template
|
```go-html-template
|
||||||
{{ $sectionPages := where site.RegularPages "Section" "eq" "books" }}
|
{{ $books := where site.RegularPages "Section" "eq" "books" }}
|
||||||
|
|
||||||
{{ $genres := slice "suspense" "romance" }}
|
{{ $genres := slice "suspense" "romance" }}
|
||||||
{{ $pages := where $sectionPages "Params.genres" "intersect" $genres }}
|
{{ $pages := where $books "Params.genres" "intersect" $genres }}
|
||||||
```
|
```
|
||||||
|
|
||||||
## Regular expression comparison
|
## Regular expression comparison
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
---
|
---
|
||||||
title: crypto.FNV32a
|
title: crypto.FNV32a
|
||||||
description: Returns the FNV (Fowler–Noll–Vo) 32 bit hash of a given string.
|
description: Returns the FNV (Fowler–Noll–Vo) 32-bit hash of a given string.
|
||||||
categories: []
|
categories: []
|
||||||
keywords: []
|
keywords: []
|
||||||
action:
|
action:
|
||||||
|
@ -15,7 +15,7 @@ action:
|
||||||
aliases: [/functions/crypto.fnv32a]
|
aliases: [/functions/crypto.fnv32a]
|
||||||
---
|
---
|
||||||
|
|
||||||
This function calculates the 32 bit [FNV1a hash](https://en.wikipedia.org/wiki/Fowler%E2%80%93Noll%E2%80%93Vo_hash_function#FNV-1a_hash) of a given string according to the [specification](https://datatracker.ietf.org/doc/html/draft-eastlake-fnv-12):
|
This function calculates the 32-bit [FNV1a hash](https://en.wikipedia.org/wiki/Fowler%E2%80%93Noll%E2%80%93Vo_hash_function#FNV-1a_hash) of a given string according to the [specification](https://datatracker.ietf.org/doc/html/draft-eastlake-fnv-12):
|
||||||
|
|
||||||
```go-html-template
|
```go-html-template
|
||||||
{{ crypto.FNV32a "Hello world" }} → 1498229191
|
{{ crypto.FNV32a "Hello world" }} → 1498229191
|
||||||
|
|
|
@ -89,8 +89,7 @@ my-project/
|
||||||
{{ $data := "" }}
|
{{ $data := "" }}
|
||||||
{{ $p := "data/books.json" }}
|
{{ $p := "data/books.json" }}
|
||||||
{{ with resources.Get $p }}
|
{{ with resources.Get $p }}
|
||||||
{{ $opts := dict "delimiter" "," }}
|
{{ $data = . | transform.Unmarshal }}
|
||||||
{{ $data = . | transform.Unmarshal $opts }}
|
|
||||||
{{ else }}
|
{{ else }}
|
||||||
{{ errorf "Unable to get resource %q" $p }}
|
{{ errorf "Unable to get resource %q" $p }}
|
||||||
{{ end }}
|
{{ end }}
|
||||||
|
@ -113,8 +112,7 @@ my-project/
|
||||||
{{ $data := "" }}
|
{{ $data := "" }}
|
||||||
{{ $p := "books.json" }}
|
{{ $p := "books.json" }}
|
||||||
{{ with .Resources.Get $p }}
|
{{ with .Resources.Get $p }}
|
||||||
{{ $opts := dict "delimiter" "," }}
|
{{ $data = . | transform.Unmarshal }}
|
||||||
{{ $data = . | transform.Unmarshal $opts }}
|
|
||||||
{{ else }}
|
{{ else }}
|
||||||
{{ errorf "Unable to get resource %q" $p }}
|
{{ errorf "Unable to get resource %q" $p }}
|
||||||
{{ end }}
|
{{ end }}
|
||||||
|
@ -131,8 +129,7 @@ Consider using the [`resources.GetRemote`] function with [`transform.Unmarshal`]
|
||||||
{{ with .Err }}
|
{{ with .Err }}
|
||||||
{{ errorf "%s" . }}
|
{{ errorf "%s" . }}
|
||||||
{{ else }}
|
{{ else }}
|
||||||
{{ $opts := dict "delimiter" "," }}
|
{{ $data = . | transform.Unmarshal }}
|
||||||
{{ $data = . | transform.Unmarshal $opts }}
|
|
||||||
{{ end }}
|
{{ end }}
|
||||||
{{ else }}
|
{{ else }}
|
||||||
{{ errorf "Unable to get remote resource %q" $u }}
|
{{ errorf "Unable to get remote resource %q" $u }}
|
||||||
|
|
|
@ -20,3 +20,14 @@ The `warnf` function evaluates the format string, then prints the result to the
|
||||||
```go-html-template
|
```go-html-template
|
||||||
{{ warnf "The %q shortcode was unable to find %s. See %s" .Name $file .Position }}
|
{{ warnf "The %q shortcode was unable to find %s. See %s" .Name $file .Position }}
|
||||||
```
|
```
|
||||||
|
|
||||||
|
To prevent suppression of duplicate messages when using `warnf` for debugging, make each message unique with the [`math.Counter`] function. For example:
|
||||||
|
|
||||||
|
|
||||||
|
```go-html-template
|
||||||
|
{{ range site.RegularPages }}
|
||||||
|
{{ .Section | warnf "%#[2]v [%[1]d]" math.Counter }}
|
||||||
|
{{ end }}
|
||||||
|
```
|
||||||
|
|
||||||
|
[`math.Counter`]: /functions/math/counter
|
||||||
|
|
|
@ -86,7 +86,7 @@ Do not use the global `page` function in:
|
||||||
- Partials called by shortcodes
|
- Partials called by shortcodes
|
||||||
- Partials cached by the [`partialCached`] function
|
- Partials cached by the [`partialCached`] function
|
||||||
|
|
||||||
Hugo caches rendered shortcodes. If you use the global `page` function within a shortcode, and the page content is rendered in two or more templates, the cached shortcodes may be incorrect.
|
Hugo caches rendered shortcodes. If you use the global `page` function within a shortcode, and the page content is rendered in two or more templates, the cached shortcode may be incorrect.
|
||||||
|
|
||||||
Consider this section template:
|
Consider this section template:
|
||||||
|
|
||||||
|
|
|
@ -20,7 +20,7 @@ toc: true
|
||||||
|
|
||||||
```go-html-template
|
```go-html-template
|
||||||
{{ $s := slice "foo" "bar" "baz" }}
|
{{ $s := slice "foo" "bar" "baz" }}
|
||||||
{{ range $var }}
|
{{ range $s }}
|
||||||
{{ . }} → foo bar baz
|
{{ . }} → foo bar baz
|
||||||
{{ end }}
|
{{ end }}
|
||||||
```
|
```
|
||||||
|
|
|
@ -36,7 +36,7 @@ Use with the [`else`] statement:
|
||||||
{{ end }}
|
{{ end }}
|
||||||
```
|
```
|
||||||
|
|
||||||
Intialize a variable, scoped to the current block:
|
Initialize a variable, scoped to the current block:
|
||||||
|
|
||||||
```go-html-template
|
```go-html-template
|
||||||
{{ with $var := 42 }}
|
{{ with $var := 42 }}
|
||||||
|
|
|
@ -13,7 +13,7 @@ action:
|
||||||
toc: true
|
toc: true
|
||||||
---
|
---
|
||||||
|
|
||||||
{{< new-in 0.122.0 >}}
|
{{< new-in 0.121.2 >}}
|
||||||
|
|
||||||
## Usage
|
## Usage
|
||||||
|
|
||||||
|
|
|
@ -21,7 +21,9 @@ color
|
||||||
: (`string`) The font color, either a 3-digit or 6-digit hexadecimal color code. Default is `#ffffff` (white).
|
: (`string`) The font color, either a 3-digit or 6-digit hexadecimal color code. Default is `#ffffff` (white).
|
||||||
|
|
||||||
font
|
font
|
||||||
: (`resource.Resource`) The font can be a [global resource], a [page resource], or a [remote resource]. Default is the "Go Regular" TrueType font.
|
: (`resource.Resource`) The font can be a [global resource], a [page resource], or a [remote resource]. Default is [Go Regular], a proportional sans-serif TrueType font.
|
||||||
|
|
||||||
|
[Go Regular]: https://go.dev/blog/go-fonts#sans-serif
|
||||||
|
|
||||||
linespacing
|
linespacing
|
||||||
: (`int`) The number of pixels between each line. For a line height of 1.4, set the `linespacing` to 0.4 multiplied by the `size`. Default is `2`.
|
: (`int`) The number of pixels between each line. For a line height of 1.4, set the `linespacing` to 0.4 multiplied by the `size`. Default is `2`.
|
||||||
|
@ -45,7 +47,7 @@ Capture the font as a resource:
|
||||||
|
|
||||||
```go-html-template
|
```go-html-template
|
||||||
{{ $font := "" }}
|
{{ $font := "" }}
|
||||||
{{ $path := "https://github.com/google/fonts/raw/main/apache/roboto/static/Roboto-Regular.ttf" }}
|
{{ $path := "https://github.com/google/fonts/raw/main/ofl/lato/Lato-Regular.ttf" }}
|
||||||
{{ with resources.GetRemote $path }}
|
{{ with resources.GetRemote $path }}
|
||||||
{{ with .Err }}
|
{{ with .Err }}
|
||||||
{{ errorf "%s" . }}
|
{{ errorf "%s" . }}
|
||||||
|
|
|
@ -18,7 +18,7 @@ aliases: [/functions/humanize]
|
||||||
{{ humanize "myCamelPost" }} → My camel post
|
{{ humanize "myCamelPost" }} → My camel post
|
||||||
```
|
```
|
||||||
|
|
||||||
If the input is either an int64 value or the string representation of an integer, humanize returns the number with the proper ordinal appended.
|
If the input is an integer or a string representation of an integer, humanize returns the number with the proper ordinal appended.
|
||||||
|
|
||||||
```go-html-template
|
```go-html-template
|
||||||
{{ humanize "52" }} → 52nd
|
{{ humanize "52" }} → 52nd
|
||||||
|
|
|
@ -11,6 +11,23 @@ action:
|
||||||
aliases: [/functions/i18n]
|
aliases: [/functions/i18n]
|
||||||
---
|
---
|
||||||
|
|
||||||
|
The `lang.Translate` function returns the value associated with given key as defined in the translation table for the current language.
|
||||||
|
|
||||||
|
If the key is not found in the translation table for the current language, the `lang.Translate` function falls back to the translation table for the [`defaultContentLanguage`].
|
||||||
|
|
||||||
|
If the key is not found in the translation table for the `defaultContentLanguage`, the `lang.Translate` function returns an empty string.
|
||||||
|
|
||||||
|
[`defaultContentLanguage`]: /getting-started/configuration/#defaultcontentlanguage
|
||||||
|
|
||||||
|
{{% note %}}
|
||||||
|
To list missing and fallback translations, use the `--printI18nWarnings` flag when building your site.
|
||||||
|
|
||||||
|
To render placeholders for missing and fallback translations, set
|
||||||
|
[`enableMissingTranslationPlaceholders`] to `true` in your site configuration.
|
||||||
|
|
||||||
|
[`enableMissingTranslationPlaceholders`]: /getting-started/configuration/#enablemissingtranslationplaceholders
|
||||||
|
{{% /note %}}
|
||||||
|
|
||||||
Let's say your multilingual site supports two languages, English and Polish. Create a translation table for each language in the `i18n` directory.
|
Let's say your multilingual site supports two languages, English and Polish. Create a translation table for each language in the `i18n` directory.
|
||||||
|
|
||||||
```text
|
```text
|
||||||
|
|
|
@ -10,6 +10,8 @@ action:
|
||||||
signatures: [math.Rand]
|
signatures: [math.Rand]
|
||||||
---
|
---
|
||||||
|
|
||||||
|
{{< new-in 0.121.2 >}}
|
||||||
|
|
||||||
The `math.Rand` function returns a pseudo-random number in the [half-open interval] [0.0, 1.0).
|
The `math.Rand` function returns a pseudo-random number in the [half-open interval] [0.0, 1.0).
|
||||||
|
|
||||||
```go-html-template
|
```go-html-template
|
||||||
|
|
|
@ -2,6 +2,7 @@
|
||||||
title: math.Sub
|
title: math.Sub
|
||||||
description: Subtracts one or more numbers from the first number.
|
description: Subtracts one or more numbers from the first number.
|
||||||
categories: []
|
categories: []
|
||||||
|
keywords: []
|
||||||
action:
|
action:
|
||||||
aliases: [sub]
|
aliases: [sub]
|
||||||
related:
|
related:
|
||||||
|
|
|
@ -17,7 +17,7 @@ Use the `openapi3.Unmarshal` function with [global], [page], or [remote] resourc
|
||||||
[remote]: /getting-started/glossary/#remote-resource
|
[remote]: /getting-started/glossary/#remote-resource
|
||||||
[OpenAPI]: https://www.openapis.org/
|
[OpenAPI]: https://www.openapis.org/
|
||||||
|
|
||||||
For example, to work with a remote [OpenAPI] defintion:
|
For example, to work with a remote [OpenAPI] definition:
|
||||||
|
|
||||||
```go-html-template
|
```go-html-template
|
||||||
{{ $url := "https://raw.githubusercontent.com/OAI/OpenAPI-Specification/main/examples/v3.0/petstore.json" }}
|
{{ $url := "https://raw.githubusercontent.com/OAI/OpenAPI-Specification/main/examples/v3.0/petstore.json" }}
|
||||||
|
|
|
@ -68,7 +68,7 @@ Then, within the partial template:
|
||||||
To return a value from a partial template, it must contain only one `return` statement, placed at the end of the template:
|
To return a value from a partial template, it must contain only one `return` statement, placed at the end of the template:
|
||||||
|
|
||||||
```go-html-template
|
```go-html-template
|
||||||
{{ $result := false }}
|
{{ $result := "" }}
|
||||||
{{ if math.ModBool . 2 }}
|
{{ if math.ModBool . 2 }}
|
||||||
{{ $result = "even" }}
|
{{ $result = "even" }}
|
||||||
{{ else }}
|
{{ else }}
|
||||||
|
|
|
@ -51,7 +51,7 @@ The variant arguments are not available to the underlying partial template; they
|
||||||
To return a value from a partial template, it must contain only one `return` statement, placed at the end of the template:
|
To return a value from a partial template, it must contain only one `return` statement, placed at the end of the template:
|
||||||
|
|
||||||
```go-html-template
|
```go-html-template
|
||||||
{{ $result := false }}
|
{{ $result := "" }}
|
||||||
{{ if math.ModBool . 2 }}
|
{{ if math.ModBool . 2 }}
|
||||||
{{ $result = "even" }}
|
{{ $result = "even" }}
|
||||||
{{ else }}
|
{{ else }}
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
---
|
---
|
||||||
title: resources.Concat
|
title: resources.Concat
|
||||||
description: Concatenates a slice of resources.
|
description: Returns a concatenated slice of resources.
|
||||||
categories: []
|
categories: []
|
||||||
keywords: []
|
keywords: []
|
||||||
action:
|
action:
|
||||||
|
@ -10,12 +10,17 @@ action:
|
||||||
signatures: ['resources.Concat TARGETPATH [RESOURCE...]']
|
signatures: ['resources.Concat TARGETPATH [RESOURCE...]']
|
||||||
---
|
---
|
||||||
|
|
||||||
|
The `resources.Concat` function returns a concatenated slice of resources, caching the result using the target path as its cache key. Each resource must have the same [media type].
|
||||||
|
|
||||||
|
Hugo publishes the resource to the target path when you call its [`Publish`], [`Permalink`], or [`RelPermalink`] methods.
|
||||||
|
|
||||||
|
[media type]: https://en.wikipedia.org/wiki/Media_type
|
||||||
|
[`publish`]: /methods/resource/publish
|
||||||
|
[`permalink`]: /methods/resource/permalink
|
||||||
|
[`relpermalink`]: /methods/resource/relpermalink
|
||||||
|
|
||||||
```go-html-template
|
```go-html-template
|
||||||
{{ $plugins := resources.Get "js/plugins.js" }}
|
{{ $plugins := resources.Get "js/plugins.js" }}
|
||||||
{{ $global := resources.Get "js/global.js" }}
|
{{ $global := resources.Get "js/global.js" }}
|
||||||
{{ $js := slice $plugins $global | resources.Concat "js/bundle.js" }}
|
{{ $js := slice $plugins $global | resources.Concat "js/bundle.js" }}
|
||||||
```
|
```
|
||||||
|
|
||||||
Asset files of the same [media type] can be bundled into one resource using the `resources.Concat` function which takes two arguments, the target path for the created resource bundle and a slice of resource objects to be concatenated.
|
|
||||||
|
|
||||||
[media type]: https://en.wikipedia.org/wiki/Media_type
|
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
---
|
---
|
||||||
title: resources.ExecuteAsTemplate
|
title: resources.ExecuteAsTemplate
|
||||||
description: Creates a resource from a Go template, parsed and executed with the given context.
|
description: Returns a resource created from a Go template, parsed and executed with the given context.
|
||||||
categories: []
|
categories: []
|
||||||
keywords: []
|
keywords: []
|
||||||
action:
|
action:
|
||||||
|
@ -11,7 +11,13 @@ action:
|
||||||
signatures: [resources.ExecuteAsTemplate TARGETPATH CONTEXT RESOURCE]
|
signatures: [resources.ExecuteAsTemplate TARGETPATH CONTEXT RESOURCE]
|
||||||
---
|
---
|
||||||
|
|
||||||
Hugo publishes the resource to the target path when you call its`.Publish`, `.Permalink`, or `.RelPermalink` method. The resource is cached, using the target path as the cache key.
|
The `resources.ExecuteAsTemplate` function returns a resource created from a Go template, parsed and executed with the given context, caching the result using the target path as its cache key.
|
||||||
|
|
||||||
|
Hugo publishes the resource to the target path when you call its [`Publish`], [`Permalink`], or [`RelPermalink`] methods.
|
||||||
|
|
||||||
|
[`publish`]: /methods/resource/publish
|
||||||
|
[`permalink`]: /methods/resource/permalink
|
||||||
|
[`relpermalink`]: /methods/resource/relpermalink
|
||||||
|
|
||||||
Let's say you have a CSS file that you wish to populate with values from your site configuration:
|
Let's say you have a CSS file that you wish to populate with values from your site configuration:
|
||||||
|
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
---
|
---
|
||||||
title: resources.FromString
|
title: resources.FromString
|
||||||
description: Creates a resource from a string.
|
description: Returns a resource created from a string.
|
||||||
categories: []
|
categories: []
|
||||||
keywords: []
|
keywords: []
|
||||||
action:
|
action:
|
||||||
|
@ -11,7 +11,13 @@ action:
|
||||||
signatures: [resources.FromString TARGETPATH STRING]
|
signatures: [resources.FromString TARGETPATH STRING]
|
||||||
---
|
---
|
||||||
|
|
||||||
Hugo publishes the resource to the target path when you call its`.Publish`, `.Permalink`, or `.RelPermalink` method. The resource is cached, using the target path as the cache key.
|
The `resources.FromString` function returns a resource created from a string, caching the result using the target path as its cache key.
|
||||||
|
|
||||||
|
Hugo publishes the resource to the target path when you call its [`Publish`], [`Permalink`], or [`RelPermalink`] methods.
|
||||||
|
|
||||||
|
[`publish`]: /methods/resource/publish
|
||||||
|
[`permalink`]: /methods/resource/permalink
|
||||||
|
[`relpermalink`]: /methods/resource/relpermalink
|
||||||
|
|
||||||
Let's say you need to publish a file named "site.json" in the root of your public directory, containing the build date, the Hugo version used to build the site, and the date that the content was last modified. For example:
|
Let's say you need to publish a file named "site.json" in the root of your public directory, containing the build date, the Hugo version used to build the site, and the date that the content was last modified. For example:
|
||||||
|
|
||||||
|
|
|
@ -20,4 +20,4 @@ action:
|
||||||
{{ $style := $css | minify }}
|
{{ $style := $css | minify }}
|
||||||
```
|
```
|
||||||
|
|
||||||
Any CSS, JS, JSON, HTML, SVG or XML resource can be minified using resources.Minify which takes for argument the resource object.
|
Any CSS, JS, JSON, HTML, SVG, or XML resource can be minified using resources.Minify which takes for argument the resource object.
|
||||||
|
|
|
@ -139,8 +139,8 @@ To install Dart Sass for your builds on GitLab Pages, the `.gitlab-ci.yml` file
|
||||||
|
|
||||||
```yaml
|
```yaml
|
||||||
variables:
|
variables:
|
||||||
HUGO_VERSION: 0.115.1
|
HUGO_VERSION: 0.121.0
|
||||||
DART_SASS_VERSION: 1.63.6
|
DART_SASS_VERSION: 1.69.5
|
||||||
GIT_DEPTH: 0
|
GIT_DEPTH: 0
|
||||||
GIT_STRATEGY: clone
|
GIT_STRATEGY: clone
|
||||||
GIT_SUBMODULE_STRATEGY: recursive
|
GIT_SUBMODULE_STRATEGY: recursive
|
||||||
|
@ -173,8 +173,8 @@ To install Dart Sass for your builds on Netlify, the `netlify.toml` file should
|
||||||
|
|
||||||
```toml
|
```toml
|
||||||
[build.environment]
|
[build.environment]
|
||||||
HUGO_VERSION = "0.115.1"
|
HUGO_VERSION = "0.121.0"
|
||||||
DART_SASS_VERSION = "1.63.6"
|
DART_SASS_VERSION = "1.69.5"
|
||||||
TZ = "America/Los_Angeles"
|
TZ = "America/Los_Angeles"
|
||||||
|
|
||||||
[build]
|
[build]
|
||||||
|
|
|
@ -19,7 +19,7 @@ aliases: [/functions/safehtmlattr]
|
||||||
Given a site configuration that contains this menu entry:
|
Given a site configuration that contains this menu entry:
|
||||||
|
|
||||||
{{< code-toggle file=hugo >}}
|
{{< code-toggle file=hugo >}}
|
||||||
[[menu.main]]
|
[[menus.main]]
|
||||||
name = "IRC"
|
name = "IRC"
|
||||||
url = "irc://irc.freenode.net/#golang"
|
url = "irc://irc.freenode.net/#golang"
|
||||||
{{< /code-toggle >}}
|
{{< /code-toggle >}}
|
||||||
|
|
|
@ -23,7 +23,7 @@ Without `safeURL`, only the URI schemes `http:`, `https:` and `mailto:` are cons
|
||||||
The following examples use a [site `hugo.toml`][configuration] with the following [menu entry][menus]:
|
The following examples use a [site `hugo.toml`][configuration] with the following [menu entry][menus]:
|
||||||
|
|
||||||
{{< code-toggle file=hugo >}}
|
{{< code-toggle file=hugo >}}
|
||||||
[[menu.main]]
|
[[menus.main]]
|
||||||
name = "IRC: #golang at freenode"
|
name = "IRC: #golang at freenode"
|
||||||
url = "irc://irc.freenode.net/#golang"
|
url = "irc://irc.freenode.net/#golang"
|
||||||
{{< /code-toggle >}}
|
{{< /code-toggle >}}
|
||||||
|
|
|
@ -9,7 +9,7 @@ action:
|
||||||
- functions/strings/FindRE
|
- functions/strings/FindRE
|
||||||
- functions/strings/Replace
|
- functions/strings/Replace
|
||||||
- functions/strings/ReplaceRE
|
- functions/strings/ReplaceRE
|
||||||
returnType: '[]string'
|
returnType: '[][]string'
|
||||||
signatures: ['strings.FindRESubmatch PATTERN INPUT [LIMIT]']
|
signatures: ['strings.FindRESubmatch PATTERN INPUT [LIMIT]']
|
||||||
aliases: [/functions/findresubmatch]
|
aliases: [/functions/findresubmatch]
|
||||||
---
|
---
|
||||||
|
|
|
@ -9,7 +9,7 @@ action:
|
||||||
- functions/strings/FindRESubmatch
|
- functions/strings/FindRESubmatch
|
||||||
- functions/strings/Replace
|
- functions/strings/Replace
|
||||||
- functions/strings/ReplaceRE
|
- functions/strings/ReplaceRE
|
||||||
returnType: string
|
returnType: '[]string'
|
||||||
signatures: ['strings.FindRE PATTERN INPUT [LIMIT]']
|
signatures: ['strings.FindRE PATTERN INPUT [LIMIT]']
|
||||||
aliases: [/functions/findre]
|
aliases: [/functions/findre]
|
||||||
---
|
---
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
---
|
---
|
||||||
title: strings.HasSuffix
|
title: strings.HasSuffix
|
||||||
description: Reports whether the given string begins with the given suffix.
|
description: Reports whether the given string ends with the given suffix.
|
||||||
categories: []
|
categories: []
|
||||||
keywords: []
|
keywords: []
|
||||||
action:
|
action:
|
||||||
|
|
|
@ -10,6 +10,8 @@ action:
|
||||||
signatures: [transform.XMLEscape INPUT]
|
signatures: [transform.XMLEscape INPUT]
|
||||||
---
|
---
|
||||||
|
|
||||||
|
{{< new-in 0.121.0 >}}
|
||||||
|
|
||||||
The `transform.XMLEscape` function removes [disallowed characters] as defined in the XML specification, then escapes the result by replacing the following characters with [HTML entities]:
|
The `transform.XMLEscape` function removes [disallowed characters] as defined in the XML specification, then escapes the result by replacing the following characters with [HTML entities]:
|
||||||
|
|
||||||
- `"` → `"`
|
- `"` → `"`
|
||||||
|
@ -24,7 +26,7 @@ The `transform.XMLEscape` function removes [disallowed characters] as defined in
|
||||||
For example:
|
For example:
|
||||||
|
|
||||||
```go-html-template
|
```go-html-template
|
||||||
transform.XMLEscape "<p>abc</p>" → <p>abc</p>
|
{{ transform.XMLEscape "<p>abc</p>" }} → <p>abc</p>
|
||||||
```
|
```
|
||||||
|
|
||||||
When using `transform.XMLEscape` in a template rendered by Go's [html/template] package, declare the string to be safe HTML to avoid double escaping. For example, in an RSS template:
|
When using `transform.XMLEscape` in a template rendered by Go's [html/template] package, declare the string to be safe HTML to avoid double escaping. For example, in an RSS template:
|
||||||
|
|
|
@ -15,61 +15,117 @@ aliases: [/overview/source-directory/,/overview/configuration/]
|
||||||
|
|
||||||
## Configuration file
|
## Configuration file
|
||||||
|
|
||||||
Hugo uses the `hugo.toml`, `hugo.yaml`, or `hugo.json` (if found in the
|
Create a site configuration file in the root of your project directory, naming it `hugo.toml`, `hugo.yaml`, or `hugo.json`, with that order of precedence.
|
||||||
site root) as the default site configuration file.
|
|
||||||
|
|
||||||
The user can choose to override that default with one or more site configuration files using the command-line `--config` switch.
|
```text
|
||||||
|
my-project/
|
||||||
Examples:
|
└── hugo.toml
|
||||||
|
|
||||||
```txt
|
|
||||||
hugo --config debugconfig.toml
|
|
||||||
hugo --config a.toml,b.toml,c.toml
|
|
||||||
```
|
```
|
||||||
|
|
||||||
{{% note %}}
|
{{% note %}}
|
||||||
Multiple site configuration files can be specified as a comma-separated string to the `--config` switch.
|
With v0.109.0 and earlier the basename of the site configuration file was `config` instead of `hugo`. You can use either, but should transition to the new naming convention when practical.
|
||||||
{{% /note %}}
|
{{% /note %}}
|
||||||
|
|
||||||
## hugo.toml vs config.toml
|
A simple example:
|
||||||
|
|
||||||
In Hugo 0.110.0 we changed the default configuration base file name to `hugo`, e.g. `hugo.toml`. We will still look for `config.toml` etc., but we recommend you eventually rename it (but you need to wait if you want to support older Hugo versions). The main reason we're doing this is to make it easier for code editors and build tools to identify this as a Hugo configuration file and project.
|
{{< code-toggle file=hugo >}}
|
||||||
|
baseURL = 'https://example.org/'
|
||||||
|
languageCode = 'en-us'
|
||||||
|
title = 'ABC Widgets, Inc.'
|
||||||
|
[params]
|
||||||
|
subtitle = 'The Best Widgets on Earth'
|
||||||
|
[params.contact]
|
||||||
|
email = 'info@example.org'
|
||||||
|
phone = '+1 202-555-1212'
|
||||||
|
{{< /code-toggle >}}
|
||||||
|
|
||||||
{{< new-in 0.110.0 >}}
|
To use a different configuration file when building your site, use the `--config` flag:
|
||||||
|
|
||||||
|
```sh
|
||||||
|
hugo --config other.toml
|
||||||
|
```
|
||||||
|
|
||||||
|
Combine two or more configuration files, with left-to-right precedence:
|
||||||
|
|
||||||
|
```sh
|
||||||
|
hugo --config a.toml,b.yaml,c.json
|
||||||
|
```
|
||||||
|
|
||||||
|
{{% note %}}
|
||||||
|
See the specifications for each file format: [TOML], [YAML], and [JSON].
|
||||||
|
|
||||||
|
[TOML]: https://toml.io/en/latest
|
||||||
|
[YAML]: https://yaml.org/spec/
|
||||||
|
[JSON]: https://datatracker.ietf.org/doc/html/rfc7159
|
||||||
|
{{% /note %}}
|
||||||
|
|
||||||
## Configuration directory
|
## Configuration directory
|
||||||
|
|
||||||
In addition to using a single site configuration file, one can use the `configDir` directory (default to `config/`) to maintain easier organization and environment specific settings.
|
Instead of a single site configuration file, split your configuration by [environment], root configuration key, and language. For example:
|
||||||
|
|
||||||
- Each file represents a configuration root object, such as `params.toml` for `[Params]`, `menu(s).toml` for `[Menu]`, `languages.toml` for `[Languages]` etc...
|
[environment]: /getting-started/glossary/#environment
|
||||||
- Each file's content must be top-level, for example:
|
|
||||||
|
|
||||||
{{< code-toggle file="hugo" copy=false >}}
|
```text
|
||||||
[Params]
|
my-project/
|
||||||
foo = "bar"
|
└── config/
|
||||||
|
├── _default/
|
||||||
|
│ ├── hugo.toml
|
||||||
|
│ ├── menus.en.toml
|
||||||
|
│ ├── menus.de.toml
|
||||||
|
│ └── params.toml
|
||||||
|
├── production/
|
||||||
|
│ ├── hugo.toml
|
||||||
|
│ └── params.toml
|
||||||
|
└── staging/
|
||||||
|
├── hugo.toml
|
||||||
|
└── params.toml
|
||||||
|
```
|
||||||
|
|
||||||
|
The root configuration keys are `build`, `caches`, `cascade`, `deployment`, `frontmatter`, `imaging`, `languages`, `markup`, `mediatypes`, `menus`, `minify`, `module`, `outputformats`, `outputs`, `params`, `permalinks`, `privacy`, `related`, `security`, `server`, `services`, `sitemap`, and `taxonomies`.
|
||||||
|
|
||||||
|
### Omit the root key
|
||||||
|
|
||||||
|
When splitting the configuration by root key, omit the root key in the given file. For example, these are equivalent:
|
||||||
|
|
||||||
|
{{< code-toggle file=hugo >}}
|
||||||
|
[params]
|
||||||
|
foo = 'bar'
|
||||||
{{< /code-toggle >}}
|
{{< /code-toggle >}}
|
||||||
|
|
||||||
{{< code-toggle file="params" copy=false >}}
|
{{< code-toggle file=params >}}
|
||||||
foo = "bar"
|
foo = 'bar'
|
||||||
{{< /code-toggle >}}
|
{{< /code-toggle >}}
|
||||||
|
|
||||||
- Each directory holds a group of files containing settings unique to an environment.
|
### Recursive parsing
|
||||||
- Files can be localized to become language specific.
|
|
||||||
|
|
||||||
```txt
|
Hugo parses the `config` directory recursively, allowing you to organize the files into subdirectories. For example:
|
||||||
├── config
|
|
||||||
│ ├── _default
|
```text
|
||||||
│ │ ├── hugo.toml
|
my-project/
|
||||||
│ │ ├── languages.toml
|
└── config/
|
||||||
│ │ ├── menus.en.toml
|
└── _default/
|
||||||
│ │ ├── menus.zh.toml
|
├── navigation/
|
||||||
│ │ └── params.toml
|
│ ├── menus.de.toml
|
||||||
│ ├── production
|
│ └── menus.en.toml
|
||||||
│ │ ├── hugo.toml
|
└── hugo.toml
|
||||||
│ │ └── params.toml
|
```
|
||||||
│ └── staging
|
|
||||||
│ ├── hugo.toml
|
### Example
|
||||||
│ └── params.toml
|
|
||||||
|
```text
|
||||||
|
my-project/
|
||||||
|
└── config/
|
||||||
|
├── _default/
|
||||||
|
│ ├── hugo.toml
|
||||||
|
│ ├── menus.en.toml
|
||||||
|
│ ├── menus.de.toml
|
||||||
|
│ └── params.toml
|
||||||
|
├── production/
|
||||||
|
│ ├── hugo.toml
|
||||||
|
│ └── params.toml
|
||||||
|
└── staging/
|
||||||
|
├── hugo.toml
|
||||||
|
└── params.toml
|
||||||
```
|
```
|
||||||
|
|
||||||
Considering the structure above, when running `hugo --environment staging`, Hugo will use every setting from `config/_default` and merge `staging`'s on top of those.
|
Considering the structure above, when running `hugo --environment staging`, Hugo will use every setting from `config/_default` and merge `staging`'s on top of those.
|
||||||
|
@ -144,356 +200,272 @@ Note that you don't need to be so verbose as in the default setup below; a `_mer
|
||||||
|
|
||||||
## All configuration settings
|
## All configuration settings
|
||||||
|
|
||||||
The following is the full list of Hugo-defined variables. Users may choose to override those values in their site configuration file(s).
|
###### archetypeDir
|
||||||
|
|
||||||
### archetypeDir
|
(`string`) The directory where Hugo finds archetype files (content templates). Default is `archetypes`. {{% module-mounts-note %}}
|
||||||
|
|
||||||
**Default value:** "archetypes"
|
###### assetDir
|
||||||
|
|
||||||
The directory where Hugo finds archetype files (content templates). {{% module-mounts-note %}}
|
(`string`) The directory where Hugo finds asset files used in [Hugo Pipes](/hugo-pipes/). Default is `assets`. {{% module-mounts-note %}}
|
||||||
|
|
||||||
### assetDir
|
###### baseURL
|
||||||
|
|
||||||
**Default value:** "assets"
|
(`string`) The absolute URL (protocol, host, path, and trailing slash) of your published site (e.g., `https://www.example.org/docs/`).
|
||||||
|
|
||||||
The directory where Hugo finds asset files used in [Hugo Pipes](/hugo-pipes/). {{% module-mounts-note %}}
|
###### build
|
||||||
|
|
||||||
### baseURL
|
See [Configure Build](#configure-build).
|
||||||
|
|
||||||
The absolute URL (protocol, host, path, and trailing slash) of your published site (e.g., `https://www.example.org/docs/`).
|
###### buildDrafts
|
||||||
|
|
||||||
### build
|
(`bool`) Include drafts when building. Default is `false`.
|
||||||
|
|
||||||
See [Configure Build](#configure-build)
|
###### buildExpired
|
||||||
|
|
||||||
### buildDrafts (false)
|
(`bool`) Include content already expired. Default is `false`.
|
||||||
|
|
||||||
**Default value:** false
|
###### buildFuture
|
||||||
|
|
||||||
Include drafts when building.
|
(`bool`) Include content with publishdate in the future. Default is `false`.
|
||||||
|
|
||||||
### buildExpired
|
###### caches
|
||||||
|
|
||||||
**Default value:** false
|
See [Configure File Caches](#configure-file-caches).
|
||||||
|
|
||||||
Include content already expired.
|
###### cascade
|
||||||
|
|
||||||
### buildFuture
|
|
||||||
|
|
||||||
**Default value:** false
|
|
||||||
|
|
||||||
Include content with publishdate in the future.
|
|
||||||
|
|
||||||
### caches
|
|
||||||
|
|
||||||
See [Configure File Caches](#configure-file-caches)
|
|
||||||
|
|
||||||
### cascade
|
|
||||||
|
|
||||||
Pass down down default configuration values (front matter) to pages in the content tree. The options in site config is the same as in page front matter, see [Front Matter Cascade](/content-management/front-matter#front-matter-cascade).
|
Pass down down default configuration values (front matter) to pages in the content tree. The options in site config is the same as in page front matter, see [Front Matter Cascade](/content-management/front-matter#front-matter-cascade).
|
||||||
|
|
||||||
{{% note %}}
|
{{% note %}}
|
||||||
For a website in a single language, define the `[[cascade]]` in [Front Matter](/content-management/front-matter#front-matter-cascade). For a multilingual website, define the `[[cascade]]` in [Site Config](../../getting-started/configuration/#cascade).
|
For a website in a single language, define the `[[cascade]]` in [Front Matter](/content-management/front-matter#front-matter-cascade). For a multilingual website, define the `[[cascade]]` in [Site Config](../../getting-started/configuration/#cascade).
|
||||||
|
|
||||||
To remain consistent and prevent unexpected behaviour, do not mix these strategies.
|
To remain consistent and prevent unexpected behavior, do not mix these strategies.
|
||||||
{{% /note %}}
|
{{% /note %}}
|
||||||
|
|
||||||
### canonifyURLs
|
###### canonifyURLs
|
||||||
|
|
||||||
**Default value:** false
|
(`bool`) Enable to turn relative URLs into absolute. Default is `false`. See [details](/content-management/urls/#canonical-urls).
|
||||||
|
|
||||||
Enable to turn relative URLs into absolute. See [details](/content-management/urls/#canonical-urls).
|
###### cleanDestinationDir
|
||||||
|
|
||||||
### cleanDestinationDir
|
(`bool`) When building, removes files from destination not found in static directories. Default is `false`.
|
||||||
|
|
||||||
**Default value:** false
|
###### contentDir
|
||||||
|
|
||||||
When building, removes files from destination not found in static directories.
|
(`string`) The directory from where Hugo reads content files. Default is `content`. {{% module-mounts-note %}}
|
||||||
|
|
||||||
### contentDir
|
###### copyright
|
||||||
|
|
||||||
**Default value:** "content"
|
(`string`) Copyright notice for your site, typically displayed in the footer.
|
||||||
|
|
||||||
The directory from where Hugo reads content files. {{% module-mounts-note %}}
|
###### dataDir
|
||||||
|
|
||||||
### copyright
|
(`string`) The directory from where Hugo reads data files. Default is `data`. {{% module-mounts-note %}}
|
||||||
|
|
||||||
**Default value:** ""
|
###### defaultContentLanguage
|
||||||
|
|
||||||
Copyright notice for your site, typically displayed in the footer.
|
(`string`) Content without language indicator will default to this language. Default is `en`.
|
||||||
|
|
||||||
### dataDir
|
###### defaultContentLanguageInSubdir
|
||||||
|
|
||||||
**Default value:** "data"
|
(`bool`) Render the default content language in subdir, e.g. `content/en/`. The site root `/` will then redirect to `/en/`. Default is `false`.
|
||||||
|
|
||||||
The directory from where Hugo reads data files. {{% module-mounts-note %}}
|
###### disableAliases
|
||||||
|
|
||||||
### defaultContentLanguage
|
(`bool`) Will disable generation of alias redirects. Note that even if `disableAliases` is set, the aliases themselves are preserved on the page. The motivation with this is to be able to generate 301 redirects in an `.htaccess`, a Netlify `_redirects` file or similar using a custom output format. Default is `false`.
|
||||||
|
|
||||||
**Default value:** "en"
|
###### disableHugoGeneratorInject
|
||||||
|
|
||||||
Content without language indicator will default to this language.
|
(`bool`) Hugo will, by default, inject a generator meta tag in the HTML head on the _home page only_. You can turn it off, but we would really appreciate if you don't, as this is a good way to watch Hugo's popularity on the rise. Default is `false`.
|
||||||
|
|
||||||
### defaultContentLanguageInSubdir
|
###### disableKinds
|
||||||
|
|
||||||
**Default value:** false
|
(`string slice`) Disable rendering of the specified page [kinds], any of `404`, `home`, `page`, `robotstxt`, `rss`, `section`, `sitemap`, `taxonomy`, or `term`.
|
||||||
|
|
||||||
Render the default content language in subdir, e.g. `content/en/`. The site root `/` will then redirect to `/en/`.
|
[kinds]: /getting-started/glossary/#page-kind
|
||||||
|
|
||||||
### disableAliases
|
###### disableLiveReload
|
||||||
|
|
||||||
**Default value:** false
|
(`bool`) Disable automatic live reloading of browser window. Default is `false`.
|
||||||
|
|
||||||
Will disable generation of alias redirects. Note that even if `disableAliases` is set, the aliases themselves are preserved on the page. The motivation with this is to be able to generate 301 redirects in an `.htaccess`, a Netlify `_redirects` file or similar using a custom output format.
|
###### disablePathToLower
|
||||||
|
|
||||||
### disableHugoGeneratorInject
|
(`bool`) Do not convert the url/path to lowercase. Default is `false`.
|
||||||
|
|
||||||
**Default value:** false
|
###### enableEmoji
|
||||||
|
|
||||||
Hugo will, by default, inject a generator meta tag in the HTML head on the _home page only_. You can turn it off, but we would really appreciate if you don't, as this is a good way to watch Hugo's popularity on the rise.
|
(`bool`) Enable Emoji emoticons support for page content; see the [emoji shortcode quick reference guide](/quick-reference/emojis/). Default is `false`.
|
||||||
|
|
||||||
### disableKinds
|
###### enableGitInfo
|
||||||
|
|
||||||
**Default value:** []
|
(`bool`) Enable `.GitInfo` object for each page (if the Hugo site is versioned by Git). This will then update the `Lastmod` parameter for each page using the last git commit date for that content file. Default is `false`.
|
||||||
|
|
||||||
Enable disabling of all pages of the specified *Kinds*. Allowed values in this list: `"page"`, `"home"`, `"section"`, `"taxonomy"`, `"term"`, `"RSS"`, `"sitemap"`, `"robotsTXT"`, `"404"`.
|
###### enableMissingTranslationPlaceholders
|
||||||
|
|
||||||
### disableLiveReload
|
(`bool`) Show a placeholder instead of the default value or an empty string if a translation is missing. Default is `false`.
|
||||||
|
|
||||||
**Default value:** false
|
###### enableRobotsTXT
|
||||||
|
|
||||||
Disable automatic live reloading of browser window.
|
(`bool`) Enable generation of `robots.txt` file. Default is `false`.
|
||||||
|
|
||||||
### disablePathToLower
|
###### frontmatter
|
||||||
|
|
||||||
**Default value:** false
|
|
||||||
|
|
||||||
Do not convert the url/path to lowercase.
|
|
||||||
|
|
||||||
### enableEmoji
|
|
||||||
|
|
||||||
**Default value:** false
|
|
||||||
|
|
||||||
Enable Emoji emoticons support for page content; see the [emoji shortcode quick reference guide](/quick-reference/emojis/).
|
|
||||||
|
|
||||||
### enableGitInfo
|
|
||||||
|
|
||||||
**Default value:** false
|
|
||||||
|
|
||||||
Enable `.GitInfo` object for each page (if the Hugo site is versioned by Git). This will then update the `Lastmod` parameter for each page using the last git commit date for that content file.
|
|
||||||
|
|
||||||
### enableInlineShortcodes
|
|
||||||
|
|
||||||
**Default value:** false
|
|
||||||
|
|
||||||
Enable inline shortcode support. See [Inline Shortcodes](/templates/shortcode-templates/#inline-shortcodes).
|
|
||||||
|
|
||||||
### enableMissingTranslationPlaceholders
|
|
||||||
|
|
||||||
**Default value:** false
|
|
||||||
|
|
||||||
Show a placeholder instead of the default value or an empty string if a translation is missing.
|
|
||||||
|
|
||||||
### enableRobotsTXT
|
|
||||||
|
|
||||||
**Default value:** false
|
|
||||||
|
|
||||||
Enable generation of `robots.txt` file.
|
|
||||||
|
|
||||||
### frontmatter
|
|
||||||
|
|
||||||
See [Front matter Configuration](#configure-front-matter).
|
See [Front matter Configuration](#configure-front-matter).
|
||||||
|
|
||||||
### hasCJKLanguage
|
###### hasCJKLanguage
|
||||||
|
|
||||||
**Default value:** false
|
(`bool`) If true, auto-detect Chinese/Japanese/Korean Languages in the content. This will make `.Summary` and `.WordCount` behave correctly for CJK languages. Default is `false`.
|
||||||
|
|
||||||
If true, auto-detect Chinese/Japanese/Korean Languages in the content. This will make `.Summary` and `.WordCount` behave correctly for CJK languages.
|
###### imaging
|
||||||
|
|
||||||
### imaging
|
|
||||||
|
|
||||||
See [image processing configuration](/content-management/image-processing/#imaging-configuration).
|
See [image processing configuration](/content-management/image-processing/#imaging-configuration).
|
||||||
|
|
||||||
### languageCode
|
###### languageCode
|
||||||
|
|
||||||
**Default value:** ""
|
(`string`) A language tag as defined by [RFC 5646](https://datatracker.ietf.org/doc/html/rfc5646). This value is used to populate:
|
||||||
|
|
||||||
A language tag as defined by [RFC 5646](https://datatracker.ietf.org/doc/html/rfc5646). This value is used to populate:
|
|
||||||
|
|
||||||
- The `<language>` element in the internal [RSS template](https://github.com/gohugoio/hugo/blob/master/tpl/tplimpl/embedded/templates/_default/rss.xml)
|
- The `<language>` element in the internal [RSS template](https://github.com/gohugoio/hugo/blob/master/tpl/tplimpl/embedded/templates/_default/rss.xml)
|
||||||
- The `lang` attribute of the `<html>` element in the internal [alias template](https://github.com/gohugoio/hugo/blob/master/tpl/tplimpl/embedded/templates/alias.html)
|
- The `lang` attribute of the `<html>` element in the internal [alias template](https://github.com/gohugoio/hugo/blob/master/tpl/tplimpl/embedded/templates/alias.html)
|
||||||
|
|
||||||
### languages
|
###### languages
|
||||||
|
|
||||||
See [Configure Languages](/content-management/multilingual/#configure-languages).
|
See [Configure Languages](/content-management/multilingual/#configure-languages).
|
||||||
|
|
||||||
### disableLanguages
|
###### disableLanguages
|
||||||
|
|
||||||
See [Disable a Language](/content-management/multilingual/#disable-a-language)
|
See [Disable a Language](/content-management/multilingual/#disable-a-language)
|
||||||
|
|
||||||
### markup
|
###### markup
|
||||||
|
|
||||||
See [Configure Markup](/getting-started/configuration-markup).
|
See [Configure Markup](/getting-started/configuration-markup).
|
||||||
|
|
||||||
### mediaTypes
|
###### mediaTypes
|
||||||
|
|
||||||
See [Configure Media Types](/templates/output-formats/#media-types).
|
See [Configure Media Types](/templates/output-formats/#media-types).
|
||||||
|
|
||||||
### menus
|
###### menus
|
||||||
|
|
||||||
See [Menus](/content-management/menus/#define-in-site-configuration).
|
See [Menus](/content-management/menus/#define-in-site-configuration).
|
||||||
|
|
||||||
### minify
|
###### minify
|
||||||
|
|
||||||
See [Configure Minify](#configure-minify)
|
See [Configure Minify](#configure-minify).
|
||||||
|
|
||||||
### module
|
###### module
|
||||||
|
|
||||||
Module configuration see [module configuration](/hugo-modules/configuration/).
|
Module configuration see [module configuration](/hugo-modules/configuration/).
|
||||||
|
|
||||||
### newContentEditor
|
###### newContentEditor
|
||||||
|
|
||||||
**Default value:** ""
|
(`string`) The editor to use when creating new content.
|
||||||
|
|
||||||
The editor to use when creating new content.
|
###### noChmod
|
||||||
|
|
||||||
### noChmod
|
(`bool`) Don't sync permission mode of files. Default is `false`.
|
||||||
|
|
||||||
**Default value:** false
|
###### noTimes
|
||||||
|
|
||||||
Don't sync permission mode of files.
|
(`bool`) Don't sync modification time of files. Default is `false`.
|
||||||
|
|
||||||
### noTimes
|
###### outputFormats
|
||||||
|
|
||||||
**Default value:** false
|
|
||||||
|
|
||||||
Don't sync modification time of files.
|
|
||||||
|
|
||||||
### outputFormats
|
|
||||||
|
|
||||||
See [Configure Output Formats](#configure-additional-output-formats).
|
See [Configure Output Formats](#configure-additional-output-formats).
|
||||||
|
|
||||||
### paginate
|
###### paginate
|
||||||
|
|
||||||
**Default value:** 10
|
(`int`) Default number of elements per page in [pagination](/templates/pagination/). Default is `10`.
|
||||||
|
|
||||||
Default number of elements per page in [pagination](/templates/pagination/).
|
###### paginatePath
|
||||||
|
|
||||||
### paginatePath
|
(`string`) The path element used during pagination (`https://example.org/page/2`). Default is `page`.
|
||||||
|
|
||||||
**Default value:** "page"
|
###### permalinks
|
||||||
|
|
||||||
The path element used during pagination (`https://example.org/page/2`).
|
|
||||||
|
|
||||||
### permalinks
|
|
||||||
|
|
||||||
See [Content Management](/content-management/urls/#permalinks).
|
See [Content Management](/content-management/urls/#permalinks).
|
||||||
|
|
||||||
### pluralizeListTitles
|
###### pluralizeListTitles
|
||||||
|
|
||||||
**Default value:** true
|
(`bool`) Pluralize titles in lists. Default is `true`.
|
||||||
|
|
||||||
Pluralize titles in lists.
|
###### publishDir
|
||||||
|
|
||||||
### publishDir
|
(`string`) The directory to where Hugo will write the final static site (the HTML files etc.). Default is `public`.
|
||||||
|
|
||||||
**Default value:** "public"
|
###### related
|
||||||
|
|
||||||
The directory to where Hugo will write the final static site (the HTML files etc.).
|
|
||||||
|
|
||||||
### related
|
|
||||||
|
|
||||||
See [Related Content](/content-management/related/#configure-related-content).
|
See [Related Content](/content-management/related/#configure-related-content).
|
||||||
|
|
||||||
### relativeURLs
|
###### relativeURLs
|
||||||
|
|
||||||
**Default value:** false
|
(`bool`) Enable this to make all relative URLs relative to content root. Note that this does not affect absolute URLs. Default is `false`. See [details](/content-management/urls/#relative-urls).
|
||||||
|
|
||||||
Enable this to make all relative URLs relative to content root. Note that this does not affect absolute URLs. See [details](/content-management/urls/#relative-urls).
|
###### refLinksErrorLevel
|
||||||
|
|
||||||
### refLinksErrorLevel
|
(`string`) When using `ref` or `relref` to resolve page links and a link cannot be resolved, it will be logged with this log level. Valid values are `ERROR` (default) or `WARNING`. Any `ERROR` will fail the build (`exit -1`). Default is `ERROR`.
|
||||||
|
|
||||||
**Default value:** "ERROR"
|
###### refLinksNotFoundURL
|
||||||
|
|
||||||
When using `ref` or `relref` to resolve page links and a link cannot be resolved, it will be logged with this log level. Valid values are `ERROR` (default) or `WARNING`. Any `ERROR` will fail the build (`exit -1`).
|
(`string`) URL to be used as a placeholder when a page reference cannot be found in `ref` or `relref`. Is used as-is.
|
||||||
|
|
||||||
### refLinksNotFoundURL
|
###### removePathAccents
|
||||||
|
|
||||||
URL to be used as a placeholder when a page reference cannot be found in `ref` or `relref`. Is used as-is.
|
(`bool`) Removes [non-spacing marks](https://www.compart.com/en/unicode/category/Mn) from [composite characters](https://en.wikipedia.org/wiki/Precomposed_character) in content paths. Default is `false`.
|
||||||
|
|
||||||
### removePathAccents
|
|
||||||
|
|
||||||
**Default value:** false
|
|
||||||
|
|
||||||
Removes [non-spacing marks](https://www.compart.com/en/unicode/category/Mn) from [composite characters](https://en.wikipedia.org/wiki/Precomposed_character) in content paths.
|
|
||||||
|
|
||||||
```text
|
```text
|
||||||
content/post/hügó.md → https://example.org/post/hugo/
|
content/post/hügó.md → https://example.org/post/hugo/
|
||||||
```
|
```
|
||||||
|
|
||||||
### sectionPagesMenu
|
###### sectionPagesMenu
|
||||||
|
|
||||||
See [Menus](/content-management/menus/#define-automatically).
|
See [Menus](/content-management/menus/#define-automatically).
|
||||||
|
|
||||||
### security
|
###### security
|
||||||
|
|
||||||
See [Security Policy](/about/security-model/#security-policy)
|
See [Security Policy](/about/security-model/#security-policy).
|
||||||
|
|
||||||
### sitemap
|
###### sitemap
|
||||||
|
|
||||||
Default [sitemap configuration](/templates/sitemap-template/#configuration).
|
Default [sitemap configuration](/templates/sitemap-template/#configuration).
|
||||||
|
|
||||||
### summaryLength
|
###### summaryLength
|
||||||
|
|
||||||
**Default value:** 70
|
(`int`) The length of text in words to show in a [`.Summary`](/content-management/summaries/#automatic-summary-splitting). Default is `70`.
|
||||||
|
|
||||||
The length of text in words to show in a [`.Summary`](/content-management/summaries/#automatic-summary-splitting).
|
###### taxonomies
|
||||||
|
|
||||||
### taxonomies
|
|
||||||
|
|
||||||
See [Configure Taxonomies](/content-management/taxonomies#configure-taxonomies).
|
See [Configure Taxonomies](/content-management/taxonomies#configure-taxonomies).
|
||||||
|
|
||||||
### theme
|
###### theme
|
||||||
|
|
||||||
: See [module configuration](/hugo-modules/configuration/#module-configuration-imports) for how to import a theme.
|
See [module configuration](/hugo-modules/configuration/#module-configuration-imports) for how to import a theme.
|
||||||
|
|
||||||
### themesDir
|
###### themesDir
|
||||||
|
|
||||||
**Default value:** "themes"
|
(`string`) The directory where Hugo reads the themes from. Default is `themes`.
|
||||||
|
|
||||||
The directory where Hugo reads the themes from.
|
###### timeout
|
||||||
|
|
||||||
### timeout
|
(`string`) Timeout for generating page contents, specified as a [duration](https://pkg.go.dev/time#Duration) or in seconds. *Note:* this is used to bail out of recursive content generation. You might need to raise this limit if your pages are slow to generate (e.g., because they require large image processing or depend on remote contents). Default is `30s`.
|
||||||
|
|
||||||
**Default value:** "30s"
|
###### timeZone
|
||||||
|
|
||||||
Timeout for generating page contents, specified as a [duration](https://pkg.go.dev/time#Duration) or in seconds. *Note:* this is used to bail out of recursive content generation. You might need to raise this limit if your pages are slow to generate (e.g., because they require large image processing or depend on remote contents).
|
(`string`) The time zone (or location), e.g. `Europe/Oslo`, used to parse front matter dates without such information and in the [`time`] function. The list of valid values may be system dependent, but should include `UTC`, `Local`, and any location in the [IANA Time Zone database](https://en.wikipedia.org/wiki/List_of_tz_database_time_zones).
|
||||||
|
|
||||||
### timeZone
|
###### title
|
||||||
|
|
||||||
The time zone (or location), e.g. `Europe/Oslo`, used to parse front matter dates without such information and in the [`time`] function. The list of valid values may be system dependent, but should include `UTC`, `Local`, and any location in the [IANA Time Zone database](https://en.wikipedia.org/wiki/List_of_tz_database_time_zones).
|
(`string`) Site title.
|
||||||
|
|
||||||
### title
|
###### titleCaseStyle
|
||||||
|
|
||||||
Site title.
|
(`string`) Default is `ap`. See [Configure Title Case](#configure-title-case).
|
||||||
|
|
||||||
### titleCaseStyle
|
###### uglyURLs
|
||||||
|
|
||||||
**Default value:** "ap"
|
(`bool`) When enabled, creates URL of the form `/filename.html` instead of `/filename/`. Default is `false`.
|
||||||
|
|
||||||
See [Configure Title Case](#configure-title-case)
|
###### watch
|
||||||
|
|
||||||
### uglyURLs
|
(`bool`) Watch filesystem for changes and recreate as needed. Default is `false`.
|
||||||
|
|
||||||
**Default value:** false
|
|
||||||
|
|
||||||
When enabled, creates URL of the form `/filename.html` instead of `/filename/`.
|
|
||||||
|
|
||||||
### watch
|
|
||||||
|
|
||||||
**Default value:** false
|
|
||||||
|
|
||||||
Watch filesystem for changes and recreate as needed.
|
|
||||||
|
|
||||||
{{% note %}}
|
{{% note %}}
|
||||||
If you are developing your site on a \*nix machine, here is a handy shortcut for finding a configuration option from the command line:
|
If you are developing your site on a \*nix machine, here is a handy shortcut for finding a configuration option from the command line:
|
||||||
|
@ -567,7 +539,7 @@ The `build.cachebusters` configuration option was added to support development u
|
||||||
target = "$1"
|
target = "$1"
|
||||||
{{< /code-toggle >}}
|
{{< /code-toggle >}}
|
||||||
|
|
||||||
Some key points in the above are `writeStats = true`, which writes a `hugo_stats.json` file on each build with HTML classes etc. that's used in the rendered output. Changes to this file will trigger a rebuild of the `styles.css` file. You also need to add `hugo_stats.json` to Hugo's server watcher. See [Hugo Starter Tailwind Basic](https://github.com/bep/hugo-starter-tailwind-basic) for a running example.
|
When `buildStats` {{< new-in 0.115.1 >}} is enabled, Hugo writes a `hugo_stats.json` file on each build with HTML classes etc. that's used in the rendered output. Changes to this file will trigger a rebuild of the `styles.css` file. You also need to add `hugo_stats.json` to Hugo's server watcher. See [Hugo Starter Tailwind Basic](https://github.com/bep/hugo-starter-tailwind-basic) for a running example.
|
||||||
|
|
||||||
source
|
source
|
||||||
: A regexp matching file(s) relative to one of the virtual component directories in Hugo, typically `assets/...`.
|
: A regexp matching file(s) relative to one of the virtual component directories in Hugo, typically `assets/...`.
|
||||||
|
@ -664,35 +636,6 @@ none
|
||||||
HUGO_NUMWORKERMULTIPLIER
|
HUGO_NUMWORKERMULTIPLIER
|
||||||
: Can be set to increase or reduce the number of workers used in parallel processing in Hugo. If not set, the number of logical CPUs will be used.
|
: Can be set to increase or reduce the number of workers used in parallel processing in Hugo. If not set, the number of logical CPUs will be used.
|
||||||
|
|
||||||
## Configuration lookup order
|
|
||||||
|
|
||||||
Similar to the template [lookup order], Hugo has a default set of rules for searching for a configuration file in the root of your website's source directory as a default behavior:
|
|
||||||
|
|
||||||
1. `./hugo.toml`
|
|
||||||
2. `./hugo.yaml`
|
|
||||||
3. `./hugo.json`
|
|
||||||
|
|
||||||
In your configuration file, you can direct Hugo as to how you want your website rendered, control your website's menus, and arbitrarily define site-wide parameters specific to your project.
|
|
||||||
|
|
||||||
## Example configuration
|
|
||||||
|
|
||||||
The following is a typical example of a configuration file. The values nested under `params:` will populate the [`.Site.Params`] variable for use in [templates]:
|
|
||||||
|
|
||||||
{{< code-toggle file=hugo >}}
|
|
||||||
baseURL: "https://yoursite.example.com/"
|
|
||||||
title: "My Hugo Site"
|
|
||||||
permalinks:
|
|
||||||
posts: /:year/:month/:title/
|
|
||||||
params:
|
|
||||||
Subtitle: "Hugo is Absurdly Fast!"
|
|
||||||
AuthorName: "Jon Doe"
|
|
||||||
GitHubUser: "spf13"
|
|
||||||
ListOfFoo:
|
|
||||||
- "foo1"
|
|
||||||
- "foo2"
|
|
||||||
SidebarRecentLimit: 5
|
|
||||||
{{< /code-toggle >}}
|
|
||||||
|
|
||||||
## Configure with environment variables
|
## Configure with environment variables
|
||||||
|
|
||||||
In addition to the 3 configuration options already mentioned, configuration key-values can be defined through operating system environment variables.
|
In addition to the 3 configuration options already mentioned, configuration key-values can be defined through operating system environment variables.
|
||||||
|
@ -789,6 +732,10 @@ Hugo v0.20 introduced the ability to render your content to multiple output form
|
||||||
|
|
||||||
## Configure minify
|
## Configure minify
|
||||||
|
|
||||||
|
See the [tdewolff/minify] project page for details.
|
||||||
|
|
||||||
|
[tdewolff/minify]: https://github.com/tdewolff/minify
|
||||||
|
|
||||||
Default configuration:
|
Default configuration:
|
||||||
|
|
||||||
{{< code-toggle config=minify />}}
|
{{< code-toggle config=minify />}}
|
||||||
|
@ -818,22 +765,6 @@ maxAge
|
||||||
dir
|
dir
|
||||||
: (`string`) The absolute path to where the files for this cache will be stored. Allowed starting placeholders are `:cacheDir` and `:resourceDir` (see above).
|
: (`string`) The absolute path to where the files for this cache will be stored. Allowed starting placeholders are `:cacheDir` and `:resourceDir` (see above).
|
||||||
|
|
||||||
## Configuration format specs
|
|
||||||
|
|
||||||
- [TOML Spec][toml]
|
|
||||||
- [YAML Spec][yaml]
|
|
||||||
- [JSON Spec][json]
|
|
||||||
|
|
||||||
[`.Site.Params`]: /variables/site/
|
|
||||||
[directory structure]: /getting-started/directory-structure
|
|
||||||
[json]: https://www.ecma-international.org/publications/files/ECMA-ST/ECMA-404.pdf
|
|
||||||
[lookup order]: /templates/lookup-order/
|
|
||||||
[Output Formats]: /templates/output-formats/
|
|
||||||
[templates]: /templates/
|
|
||||||
[toml]: https://toml.io/en/latest
|
|
||||||
[yaml]: https://yaml.org/spec/
|
|
||||||
[static-files]: /content-management/static-files/
|
|
||||||
|
|
||||||
## Configure cacheDir
|
## Configure cacheDir
|
||||||
|
|
||||||
This is the directory where Hugo by default will store its file caches. See [Configure File Caches](#configure-file-caches).
|
This is the directory where Hugo by default will store its file caches. See [Configure File Caches](#configure-file-caches).
|
||||||
|
@ -849,3 +780,9 @@ If this is not set, Hugo will use, in order of preference:
|
||||||
If you want to know the current value of `cacheDir`, you can run `hugo config`, e.g: `hugo config | grep cachedir`.
|
If you want to know the current value of `cacheDir`, you can run `hugo config`, e.g: `hugo config | grep cachedir`.
|
||||||
|
|
||||||
[`time`]: /functions/time/astime
|
[`time`]: /functions/time/astime
|
||||||
|
[`.Site.Params`]: /variables/site/
|
||||||
|
[directory structure]: /getting-started/directory-structure
|
||||||
|
[lookup order]: /templates/lookup-order/
|
||||||
|
[Output Formats]: /templates/output-formats/
|
||||||
|
[templates]: /templates/
|
||||||
|
[static-files]: /content-management/static-files/
|
||||||
|
|
|
@ -153,7 +153,7 @@ An [interval](https://en.wikipedia.org/wiki/Interval_(mathematics)) is a range o
|
||||||
|
|
||||||
- A _closed_ interval, denoted by brackets, includes its endpoints. For example, [0, 1] is the interval where `0 <= x <= 1`.
|
- A _closed_ interval, denoted by brackets, includes its endpoints. For example, [0, 1] is the interval where `0 <= x <= 1`.
|
||||||
|
|
||||||
- An _open_ interval, denoted by parenthesis, excludes its endpoints. For example, (0, 1) is the interval where `0 < x < 1`.
|
- An _open_ interval, denoted by parentheses, excludes its endpoints. For example, (0, 1) is the interval where `0 < x < 1`.
|
||||||
|
|
||||||
- A _half-open_ interval includes only one of its endpoints. For example, (0, 1] is the _left-open_ interval where `0 < x <= 1`, while [0, 1) is the _right-open_ interval where `0 <= x < 1`.
|
- A _half-open_ interval includes only one of its endpoints. For example, (0, 1] is the _left-open_ interval where `0 < x <= 1`, while [0, 1) is the _right-open_ interval where `0 <= x < 1`.
|
||||||
|
|
||||||
|
@ -216,6 +216,10 @@ Created by invoking the [`Alphabetical`] or [`ByCount`] method on a [taxonomy ob
|
||||||
|
|
||||||
A directory that encapsulates both content and associated [resources](#resource). There are two types of page bundles: [leaf bundles](#leaf-bundle) and [branch bundles](#branch-bundle). See [details](/content-management/page-bundles/).
|
A directory that encapsulates both content and associated [resources](#resource). There are two types of page bundles: [leaf bundles](#leaf-bundle) and [branch bundles](#branch-bundle). See [details](/content-management/page-bundles/).
|
||||||
|
|
||||||
|
###### page collection
|
||||||
|
|
||||||
|
A slice of page objects.
|
||||||
|
|
||||||
###### page kind
|
###### page kind
|
||||||
|
|
||||||
A classification of pages, one of `home`, `page`, `section`, `taxonomy`, or `term`. See [details](/templates/section-templates/#page-kinds).
|
A classification of pages, one of `home`, `page`, `section`, `taxonomy`, or `term`. See [details](/templates/section-templates/#page-kinds).
|
||||||
|
|
|
@ -10,6 +10,7 @@ menu:
|
||||||
weight: 20
|
weight: 20
|
||||||
toc: true
|
toc: true
|
||||||
aliases: [/quickstart/,/overview/quickstart/]
|
aliases: [/quickstart/,/overview/quickstart/]
|
||||||
|
minVersion: v0.112.0
|
||||||
---
|
---
|
||||||
|
|
||||||
In this tutorial you will:
|
In this tutorial you will:
|
||||||
|
@ -23,7 +24,7 @@ In this tutorial you will:
|
||||||
|
|
||||||
Before you begin this tutorial you must:
|
Before you begin this tutorial you must:
|
||||||
|
|
||||||
1. [Install Hugo] (extended edition, v0.112.0 or later)
|
1. [Install Hugo] (extended edition, {{% param "minVersion" %}} or later)
|
||||||
1. [Install Git]
|
1. [Install Git]
|
||||||
|
|
||||||
You must also be comfortable working from the command line.
|
You must also be comfortable working from the command line.
|
||||||
|
@ -45,6 +46,12 @@ PowerShell and Windows PowerShell [are different applications].
|
||||||
[are different applications]: https://learn.microsoft.com/en-us/powershell/scripting/whats-new/differences-from-windows-powershell?view=powershell-7.3
|
[are different applications]: https://learn.microsoft.com/en-us/powershell/scripting/whats-new/differences-from-windows-powershell?view=powershell-7.3
|
||||||
{{% /note %}}
|
{{% /note %}}
|
||||||
|
|
||||||
|
Verify that you have installed Hugo {{% param "minVersion" %}} or later.
|
||||||
|
|
||||||
|
```text
|
||||||
|
hugo version
|
||||||
|
```
|
||||||
|
|
||||||
Run these commands to create a Hugo site with the [Ananke] theme. The next section provides an explanation of each command.
|
Run these commands to create a Hugo site with the [Ananke] theme. The next section provides an explanation of each command.
|
||||||
|
|
||||||
```text
|
```text
|
||||||
|
@ -109,11 +116,11 @@ hugo new content posts/my-first-post.md
|
||||||
Hugo created the file in the `content/posts` directory. Open the file with your editor.
|
Hugo created the file in the `content/posts` directory. Open the file with your editor.
|
||||||
|
|
||||||
```text
|
```text
|
||||||
---
|
+++
|
||||||
title: "My First Post"
|
title = 'My First Post'
|
||||||
date: 2022-11-20T09:03:20-08:00
|
date = 2024-01-14T07:07:07+01:00
|
||||||
draft: true
|
draft = true
|
||||||
---
|
+++
|
||||||
```
|
```
|
||||||
|
|
||||||
Notice the `draft` value in the [front matter] is `true`. By default, Hugo does not publish draft content when you build the site. Learn more about [draft, future, and expired content].
|
Notice the `draft` value in the [front matter] is `true`. By default, Hugo does not publish draft content when you build the site. Learn more about [draft, future, and expired content].
|
||||||
|
@ -123,11 +130,11 @@ Add some [markdown] to the body of the post, but do not change the `draft` value
|
||||||
[markdown]: https://commonmark.org/help/
|
[markdown]: https://commonmark.org/help/
|
||||||
|
|
||||||
```text
|
```text
|
||||||
---
|
+++
|
||||||
title: "My First Post"
|
title = 'My First Post'
|
||||||
date: 2022-11-20T09:03:20-08:00
|
date = 2024-01-14T07:07:07+01:00
|
||||||
draft: true
|
draft = true
|
||||||
---
|
+++
|
||||||
## Introduction
|
## Introduction
|
||||||
|
|
||||||
This is **bold** text, and this is *emphasized* text.
|
This is **bold** text, and this is *emphasized* text.
|
||||||
|
|
|
@ -99,7 +99,7 @@ jobs:
|
||||||
build:
|
build:
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
env:
|
env:
|
||||||
HUGO_VERSION: 0.120.2
|
HUGO_VERSION: 0.121.0
|
||||||
steps:
|
steps:
|
||||||
- name: Install Hugo CLI
|
- name: Install Hugo CLI
|
||||||
run: |
|
run: |
|
||||||
|
@ -114,7 +114,7 @@ jobs:
|
||||||
fetch-depth: 0
|
fetch-depth: 0
|
||||||
- name: Setup Pages
|
- name: Setup Pages
|
||||||
id: pages
|
id: pages
|
||||||
uses: actions/configure-pages@v3
|
uses: actions/configure-pages@v4
|
||||||
- name: Install Node.js dependencies
|
- name: Install Node.js dependencies
|
||||||
run: "[[ -f package-lock.json || -f npm-shrinkwrap.json ]] && npm ci || true"
|
run: "[[ -f package-lock.json || -f npm-shrinkwrap.json ]] && npm ci || true"
|
||||||
- name: Build with Hugo
|
- name: Build with Hugo
|
||||||
|
@ -142,7 +142,7 @@ jobs:
|
||||||
steps:
|
steps:
|
||||||
- name: Deploy to GitHub Pages
|
- name: Deploy to GitHub Pages
|
||||||
id: deployment
|
id: deployment
|
||||||
uses: actions/deploy-pages@v2
|
uses: actions/deploy-pages@v3
|
||||||
{{< /code >}}
|
{{< /code >}}
|
||||||
|
|
||||||
Step 7
|
Step 7
|
||||||
|
|
|
@ -27,8 +27,8 @@ Define your [CI/CD](https://docs.gitlab.com/ee/ci/quick_start/) jobs by creating
|
||||||
|
|
||||||
{{< code file=.gitlab-ci.yml copy=true >}}
|
{{< code file=.gitlab-ci.yml copy=true >}}
|
||||||
variables:
|
variables:
|
||||||
DART_SASS_VERSION: 1.64.1
|
DART_SASS_VERSION: 1.69.5
|
||||||
HUGO_VERSION: 0.115.4
|
HUGO_VERSION: 0.121.0
|
||||||
NODE_VERSION: 20.x
|
NODE_VERSION: 20.x
|
||||||
GIT_DEPTH: 0
|
GIT_DEPTH: 0
|
||||||
GIT_STRATEGY: clone
|
GIT_STRATEGY: clone
|
||||||
|
|
|
@ -57,14 +57,14 @@ For production:
|
||||||
|
|
||||||
{{< code file=netlify.toml >}}
|
{{< code file=netlify.toml >}}
|
||||||
[context.production.environment]
|
[context.production.environment]
|
||||||
HUGO_VERSION = "0.115.4"
|
HUGO_VERSION = "0.121.0"
|
||||||
{{< /code >}}
|
{{< /code >}}
|
||||||
|
|
||||||
For testing:
|
For testing:
|
||||||
|
|
||||||
{{< code file=netlify.toml >}}
|
{{< code file=netlify.toml >}}
|
||||||
[context.deploy-preview.environment]
|
[context.deploy-preview.environment]
|
||||||
HUGO_VERSION = "0.115.4"
|
HUGO_VERSION = "0.121.0"
|
||||||
{{< /code >}}
|
{{< /code >}}
|
||||||
|
|
||||||
The Netlify configuration file can be a little hard to understand and get right for the different environment, and you may get some inspiration and tips from this site's `netlify.toml`:
|
The Netlify configuration file can be a little hard to understand and get right for the different environment, and you may get some inspiration and tips from this site's `netlify.toml`:
|
||||||
|
|
|
@ -15,29 +15,30 @@ toc: true
|
||||||
|
|
||||||
{{< code-toggle file=hugo >}}
|
{{< code-toggle file=hugo >}}
|
||||||
[module]
|
[module]
|
||||||
noVendor = ""
|
noProxy = 'none'
|
||||||
proxy = "direct"
|
noVendor = ''
|
||||||
noProxy = "none"
|
private = '*.*'
|
||||||
private = "*.*"
|
proxy = 'direct'
|
||||||
replacements = ""
|
replacements = ''
|
||||||
workspace = "off"
|
vendorClosest = false
|
||||||
|
workspace = 'off'
|
||||||
{{< /code-toggle >}}
|
{{< /code-toggle >}}
|
||||||
|
|
||||||
noVendor
|
|
||||||
: A optional Glob pattern matching module paths to skip when vendoring, e.g. "github.com/**"
|
|
||||||
|
|
||||||
vendorClosest
|
|
||||||
: When enabled, we will pick the vendored module closest to the module using it. The default behavior is to pick the first. Note that there can still be only one dependency of a given module path, so once it is in use it cannot be redefined.
|
|
||||||
|
|
||||||
proxy
|
|
||||||
: Defines the proxy server to use to download remote modules. Default is `direct`, which means "git clone" and similar.
|
|
||||||
|
|
||||||
noProxy
|
noProxy
|
||||||
: Comma separated glob list matching paths that should not use the proxy configured above.
|
: Comma separated glob list matching paths that should not use the proxy configured above.
|
||||||
|
|
||||||
|
noVendor
|
||||||
|
: A optional Glob pattern matching module paths to skip when vendoring, e.g. "github.com/**"
|
||||||
|
|
||||||
private
|
private
|
||||||
: Comma separated glob list matching paths that should be treated as private.
|
: Comma separated glob list matching paths that should be treated as private.
|
||||||
|
|
||||||
|
proxy
|
||||||
|
: Defines the proxy server to use to download remote modules. Default is `direct`, which means "git clone" and similar.
|
||||||
|
|
||||||
|
vendorClosest
|
||||||
|
: When enabled, we will pick the vendored module closest to the module using it. The default behavior is to pick the first. Note that there can still be only one dependency of a given module path, so once it is in use it cannot be redefined.
|
||||||
|
|
||||||
workspace
|
workspace
|
||||||
: The workspace file to use. This enables Go workspace mode. Note that this can also be set via OS env, e.g. `export HUGO_MODULE_WORKSPACE=/my/hugo.work` This only works with Go 1.18+. In Hugo `v0.109.0` we changed the default to `off` and we now resolve any relative work file names relative to the working directory.
|
: The workspace file to use. This enables Go workspace mode. Note that this can also be set via OS env, e.g. `export HUGO_MODULE_WORKSPACE=/my/hugo.work` This only works with Go 1.18+. In Hugo `v0.109.0` we changed the default to `off` and we now resolve any relative work file names relative to the working directory.
|
||||||
|
|
||||||
|
|
|
@ -144,7 +144,7 @@ A workspace can be configured in a `*.work` file and activated with the [module.
|
||||||
See the [hugo.work](https://github.com/gohugoio/hugo/blob/master/docs/hugo.work) file in the Hugo Docs repo for an example:
|
See the [hugo.work](https://github.com/gohugoio/hugo/blob/master/docs/hugo.work) file in the Hugo Docs repo for an example:
|
||||||
|
|
||||||
```text
|
```text
|
||||||
go 1.19
|
go 1.20
|
||||||
|
|
||||||
use .
|
use .
|
||||||
use ../gohugoioTheme
|
use ../gohugoioTheme
|
||||||
|
|
|
@ -24,7 +24,7 @@ Hugo Pipe's Babel requires the `@babel/cli` and `@babel/core` JavaScript package
|
||||||
If you are using the Hugo Snap package, Babel and plugin(s) need to be installed locally within your Hugo site directory, e.g., `npm install @babel/cli @babel/core --save-dev` without the `-g` flag.
|
If you are using the Hugo Snap package, Babel and plugin(s) need to be installed locally within your Hugo site directory, e.g., `npm install @babel/cli @babel/core --save-dev` without the `-g` flag.
|
||||||
{{% /note %}}
|
{{% /note %}}
|
||||||
|
|
||||||
### configuration
|
## Configuration
|
||||||
|
|
||||||
We add the main project's `node_modules` to `NODE_PATH` when running Babel and similar tools. There are some known [issues](https://github.com/babel/babel/issues/5618) with Babel in this area, so if you have a `babel.config.js` living in a Hugo Module (and not in the project itself), we recommend using `require` to load the presets/plugins, e.g.:
|
We add the main project's `node_modules` to `NODE_PATH` when running Babel and similar tools. There are some known [issues](https://github.com/babel/babel/issues/5618) with Babel in this area, so if you have a `babel.config.js` living in a Hugo Module (and not in the project itself), we recommend using `require` to load the presets/plugins, e.g.:
|
||||||
|
|
||||||
|
@ -42,7 +42,7 @@ module.exports = {
|
||||||
};
|
};
|
||||||
```
|
```
|
||||||
|
|
||||||
### Options
|
## Options
|
||||||
|
|
||||||
config
|
config
|
||||||
: (`string`) Path to the Babel configuration file. Hugo will, by default, look for a `babel.config.js` in your project. More information on these configuration files can be found here: [babel configuration](https://babeljs.io/docs/en/configuration).
|
: (`string`) Path to the Babel configuration file. Hugo will, by default, look for a `babel.config.js` in your project. More information on these configuration files can be found here: [babel configuration](https://babeljs.io/docs/en/configuration).
|
||||||
|
@ -62,7 +62,7 @@ verbose
|
||||||
sourceMap
|
sourceMap
|
||||||
: (`string`) Output `inline` or `external` sourcemap from the babel compile. External sourcemaps will be written to the target with the output file name + ".map". Input sourcemaps can be read from js.Build and node modules and combined into the output sourcemaps.
|
: (`string`) Output `inline` or `external` sourcemap from the babel compile. External sourcemaps will be written to the target with the output file name + ".map". Input sourcemaps can be read from js.Build and node modules and combined into the output sourcemaps.
|
||||||
|
|
||||||
### Examples
|
## Examples
|
||||||
|
|
||||||
```go-html-template
|
```go-html-template
|
||||||
{{- $transpiled := resources.Get "scripts/main.js" | babel -}}
|
{{- $transpiled := resources.Get "scripts/main.js" | babel -}}
|
||||||
|
|
|
@ -25,7 +25,7 @@ targetPath
|
||||||
: (`string`) If not set, the source path will be used as the base target path.
|
: (`string`) If not set, the source path will be used as the base target path.
|
||||||
Note that the target path's extension may change if the target MIME type is different, e.g. when the source is TypeScript.
|
Note that the target path's extension may change if the target MIME type is different, e.g. when the source is TypeScript.
|
||||||
|
|
||||||
params
|
params {{< new-in "0.96.0" >}}
|
||||||
: (`map` or `slice`) Params that can be imported as JSON in your JS files, e.g.:
|
: (`map` or `slice`) Params that can be imported as JSON in your JS files, e.g.:
|
||||||
|
|
||||||
```go-html-template
|
```go-html-template
|
||||||
|
|
|
@ -17,7 +17,7 @@ action:
|
||||||
|
|
||||||
## Usage
|
## Usage
|
||||||
|
|
||||||
Any CSS, JS, JSON, HTML, SVG or XML resource can be minified using `resources.Minify` which takes for argument the resource object.
|
Any CSS, JS, JSON, HTML, SVG, or XML resource can be minified using `resources.Minify` which takes for argument the resource object.
|
||||||
|
|
||||||
```go-html-template
|
```go-html-template
|
||||||
{{ $css := resources.Get "css/main.css" }}
|
{{ $css := resources.Get "css/main.css" }}
|
||||||
|
|
|
@ -7,7 +7,7 @@
|
||||||
To build the extended edition of Hugo from source you must:
|
To build the extended edition of Hugo from source you must:
|
||||||
|
|
||||||
1. Install [Git]
|
1. Install [Git]
|
||||||
1. Install [Go] version 1.19 or later
|
1. Install [Go] version 1.20 or later
|
||||||
1. Install a C compiler, either [GCC] or [Clang]
|
1. Install a C compiler, either [GCC] or [Clang]
|
||||||
1. Update your `PATH` environment variable as described in the [Go documentation]
|
1. Update your `PATH` environment variable as described in the [Go documentation]
|
||||||
|
|
||||||
|
|
|
@ -4,7 +4,7 @@
|
||||||
|
|
||||||
### Homebrew
|
### Homebrew
|
||||||
|
|
||||||
[Homebrew] is a free and open-source package manager for macOS and Linux. This will install the extended edition of Hugo:
|
[Homebrew] is a free and open-source package manager for macOS and Linux. To install the extended edition of Hugo:
|
||||||
|
|
||||||
```sh
|
```sh
|
||||||
brew install hugo
|
brew install hugo
|
||||||
|
|
|
@ -24,7 +24,7 @@ Most BSD derivatives maintain a repository for commonly installed applications.
|
||||||
|
|
||||||
### DragonFly BSD
|
### DragonFly BSD
|
||||||
|
|
||||||
[DragonFly BSD] includes Hugo in its package repository. This will install the extended edition of Hugo:
|
[DragonFly BSD] includes Hugo in its package repository. To install the extended edition of Hugo:
|
||||||
|
|
||||||
```sh
|
```sh
|
||||||
sudo pkg install gohugo
|
sudo pkg install gohugo
|
||||||
|
@ -34,7 +34,7 @@ sudo pkg install gohugo
|
||||||
|
|
||||||
### FreeBSD
|
### FreeBSD
|
||||||
|
|
||||||
[FreeBSD] includes Hugo in its package repository. This will install the extended edition of Hugo:
|
[FreeBSD] includes Hugo in its package repository. To install the extended edition of Hugo:
|
||||||
|
|
||||||
```sh
|
```sh
|
||||||
sudo pkg install gohugo
|
sudo pkg install gohugo
|
||||||
|
@ -44,7 +44,7 @@ sudo pkg install gohugo
|
||||||
|
|
||||||
### NetBSD
|
### NetBSD
|
||||||
|
|
||||||
[NetBSD] includes Hugo in its package repository. This will install the extended edition of Hugo:
|
[NetBSD] includes Hugo in its package repository. To install the extended edition of Hugo:
|
||||||
|
|
||||||
```sh
|
```sh
|
||||||
sudo pkgin install go-hugo
|
sudo pkgin install go-hugo
|
||||||
|
|
|
@ -24,7 +24,7 @@ toc: true
|
||||||
|
|
||||||
The Hugo snap package is [strictly confined]. Strictly confined snaps run in complete isolation, up to a minimal access level that’s deemed always safe. The sites you create and build must be located within your home directory, or on removable media.
|
The Hugo snap package is [strictly confined]. Strictly confined snaps run in complete isolation, up to a minimal access level that’s deemed always safe. The sites you create and build must be located within your home directory, or on removable media.
|
||||||
|
|
||||||
This will install the extended edition of Hugo:
|
To install the extended edition of Hugo:
|
||||||
|
|
||||||
```sh
|
```sh
|
||||||
sudo snap install hugo
|
sudo snap install hugo
|
||||||
|
@ -55,14 +55,26 @@ sudo snap disconnect hugo:ssh-keys
|
||||||
Most Linux distributions maintain a repository for commonly installed applications.
|
Most Linux distributions maintain a repository for commonly installed applications.
|
||||||
|
|
||||||
{{% note %}}
|
{{% note %}}
|
||||||
Due to Long Term Release (LTR) guidelines, most Linux package repositories will not contain the [latest release].
|
The Hugo version available in package repositories varies based on Linux distribution and release, and in some cases will not be the [latest version].
|
||||||
|
|
||||||
[latest release]: https://github.com/gohugoio/hugo/releases/latest
|
Use one of the other installation methods if your package repository does not provide the desired version.
|
||||||
|
|
||||||
|
[latest version]: https://github.com/gohugoio/hugo/releases/latest
|
||||||
{{% /note %}}
|
{{% /note %}}
|
||||||
|
|
||||||
|
### Alpine Linux
|
||||||
|
|
||||||
|
To install the extended edition of Hugo on [Alpine Linux]:
|
||||||
|
|
||||||
|
```sh
|
||||||
|
doas apk add --no-cache --repository=https://dl-cdn.alpinelinux.org/alpine/edge/community hugo
|
||||||
|
```
|
||||||
|
|
||||||
|
[Alpine Linux]: https://alpinelinux.org/
|
||||||
|
|
||||||
### Arch Linux
|
### Arch Linux
|
||||||
|
|
||||||
Derivatives of the [Arch Linux] distribution of Linux include [EndeavourOS], [Garuda Linux], [Manjaro], and others. This will install the extended edition of Hugo:
|
Derivatives of the [Arch Linux] distribution of Linux include [EndeavourOS], [Garuda Linux], [Manjaro], and others. To install the extended edition of Hugo:
|
||||||
|
|
||||||
```sh
|
```sh
|
||||||
sudo pacman -S hugo
|
sudo pacman -S hugo
|
||||||
|
@ -75,7 +87,7 @@ sudo pacman -S hugo
|
||||||
|
|
||||||
### Debian
|
### Debian
|
||||||
|
|
||||||
Derivatives of the [Debian] distribution of Linux include [elementary OS], [KDE neon], [Linux Lite], [Linux Mint], [MX Linux], [Pop!_OS], [Ubuntu], [Zorin OS], and others. This will install the extended edition of Hugo:
|
Derivatives of the [Debian] distribution of Linux include [elementary OS], [KDE neon], [Linux Lite], [Linux Mint], [MX Linux], [Pop!_OS], [Ubuntu], [Zorin OS], and others. To install the extended edition of Hugo:
|
||||||
|
|
||||||
```sh
|
```sh
|
||||||
sudo apt install hugo
|
sudo apt install hugo
|
||||||
|
@ -95,7 +107,7 @@ You can also download Debian packages from the [latest release] page.
|
||||||
|
|
||||||
### Fedora
|
### Fedora
|
||||||
|
|
||||||
Derivatives of the [Fedora] distribution of Linux include [CentOS], [Red Hat Enterprise Linux], and others. This will install the extended edition of Hugo:
|
Derivatives of the [Fedora] distribution of Linux include [CentOS], [Red Hat Enterprise Linux], and others. To install the extended edition of Hugo:
|
||||||
|
|
||||||
```sh
|
```sh
|
||||||
sudo dnf install hugo
|
sudo dnf install hugo
|
||||||
|
@ -105,9 +117,30 @@ sudo dnf install hugo
|
||||||
[Fedora]: https://getfedora.org/
|
[Fedora]: https://getfedora.org/
|
||||||
[Red Hat Enterprise Linux]: https://www.redhat.com/
|
[Red Hat Enterprise Linux]: https://www.redhat.com/
|
||||||
|
|
||||||
|
### Gentoo
|
||||||
|
|
||||||
|
Derivatives of the [Gentoo] distribution of Linux include [Calculate Linux], [Funtoo], and others. Follow the instructions below to install the extended edition of Hugo:
|
||||||
|
|
||||||
|
1. Specify the `extended` [USE] flag in /etc/portage/package.use/hugo:
|
||||||
|
|
||||||
|
```text
|
||||||
|
www-apps/hugo extended
|
||||||
|
```
|
||||||
|
|
||||||
|
2. Build using the Portage package manager:
|
||||||
|
|
||||||
|
```sh
|
||||||
|
sudo emerge www-apps/hugo
|
||||||
|
```
|
||||||
|
|
||||||
|
[Calculate Linux]: https://www.calculate-linux.org/
|
||||||
|
[Funtoo]: https://www.funtoo.org/
|
||||||
|
[Gentoo]: https://www.gentoo.org/
|
||||||
|
[USE]: https://packages.gentoo.org/packages/www-apps/hugo
|
||||||
|
|
||||||
### openSUSE
|
### openSUSE
|
||||||
|
|
||||||
Derivatives of the [openSUSE] distribution of Linux include [GeckoLinux], [Linux Karmada], and others. This will install the extended edition of Hugo:
|
Derivatives of the [openSUSE] distribution of Linux include [GeckoLinux], [Linux Karmada], and others. To install the extended edition of Hugo:
|
||||||
|
|
||||||
```sh
|
```sh
|
||||||
sudo zypper install hugo
|
sudo zypper install hugo
|
||||||
|
@ -119,7 +152,7 @@ sudo zypper install hugo
|
||||||
|
|
||||||
### Solus
|
### Solus
|
||||||
|
|
||||||
The [Solus] distribution of Linux includes Hugo in its package repository. This will install the _standard_ edition of Hugo:
|
The [Solus] distribution of Linux includes Hugo in its package repository. To install the extended edition of Hugo:
|
||||||
|
|
||||||
```sh
|
```sh
|
||||||
sudo eopkg install hugo
|
sudo eopkg install hugo
|
||||||
|
|
|
@ -22,7 +22,7 @@ toc: true
|
||||||
|
|
||||||
### MacPorts
|
### MacPorts
|
||||||
|
|
||||||
[MacPorts] is a free and open-source package manager for macOS. This will install the extended edition of Hugo:
|
[MacPorts] is a free and open-source package manager for macOS. To install the extended edition of Hugo:
|
||||||
|
|
||||||
```sh
|
```sh
|
||||||
sudo port install hugo
|
sudo port install hugo
|
||||||
|
|
|
@ -10,6 +10,11 @@ menu:
|
||||||
weight: 40
|
weight: 40
|
||||||
toc: true
|
toc: true
|
||||||
---
|
---
|
||||||
|
|
||||||
|
{{% note %}}
|
||||||
|
Hugo v0.121.1 and later require at least Windows 10 or Windows Server 2016.
|
||||||
|
{{% /note %}}
|
||||||
|
|
||||||
{{% include "installation/_common/01-editions.md" %}}
|
{{% include "installation/_common/01-editions.md" %}}
|
||||||
|
|
||||||
{{% include "installation/_common/02-prerequisites.md" %}}
|
{{% include "installation/_common/02-prerequisites.md" %}}
|
||||||
|
@ -20,7 +25,7 @@ toc: true
|
||||||
|
|
||||||
### Chocolatey
|
### Chocolatey
|
||||||
|
|
||||||
[Chocolatey] is a free and open-source package manager for Windows. This will install the extended edition of Hugo:
|
[Chocolatey] is a free and open-source package manager for Windows. To install the extended edition of Hugo:
|
||||||
|
|
||||||
```sh
|
```sh
|
||||||
choco install hugo-extended
|
choco install hugo-extended
|
||||||
|
@ -30,7 +35,7 @@ choco install hugo-extended
|
||||||
|
|
||||||
### Scoop
|
### Scoop
|
||||||
|
|
||||||
[Scoop] is a free and open-source package manager for Windows. This will install the extended edition of Hugo:
|
[Scoop] is a free and open-source package manager for Windows. To install the extended edition of Hugo:
|
||||||
|
|
||||||
```sh
|
```sh
|
||||||
scoop install hugo-extended
|
scoop install hugo-extended
|
||||||
|
@ -40,7 +45,7 @@ scoop install hugo-extended
|
||||||
|
|
||||||
### Winget
|
### Winget
|
||||||
|
|
||||||
[Winget] is Microsoft's official free and open-source package manager for Windows. This will install the extended edition of Hugo:
|
[Winget] is Microsoft's official free and open-source package manager for Windows. To install the extended edition of Hugo:
|
||||||
|
|
||||||
```sh
|
```sh
|
||||||
winget install Hugo.Hugo.Extended
|
winget install Hugo.Hugo.Extended
|
||||||
|
|
|
@ -15,18 +15,18 @@ Use the `Children` method when rendering a nested menu.
|
||||||
With this site configuration:
|
With this site configuration:
|
||||||
|
|
||||||
{{< code-toggle file=hugo >}}
|
{{< code-toggle file=hugo >}}
|
||||||
[[menu.main]]
|
[[menus.main]]
|
||||||
name = 'Products'
|
name = 'Products'
|
||||||
pageRef = '/product'
|
pageRef = '/product'
|
||||||
weight = 10
|
weight = 10
|
||||||
|
|
||||||
[[menu.main]]
|
[[menus.main]]
|
||||||
name = 'Product 1'
|
name = 'Product 1'
|
||||||
pageRef = '/products/product-1'
|
pageRef = '/products/product-1'
|
||||||
parent = 'Products'
|
parent = 'Products'
|
||||||
weight = 1
|
weight = 1
|
||||||
|
|
||||||
[[menu.main]]
|
[[menus.main]]
|
||||||
name = 'Product 2'
|
name = 'Product 2'
|
||||||
pageRef = '/products/product-2'
|
pageRef = '/products/product-2'
|
||||||
parent = 'Products'
|
parent = 'Products'
|
||||||
|
|
|
@ -15,18 +15,18 @@ Use the `HasChildren` method when rendering a nested menu.
|
||||||
With this site configuration:
|
With this site configuration:
|
||||||
|
|
||||||
{{< code-toggle file=hugo >}}
|
{{< code-toggle file=hugo >}}
|
||||||
[[menu.main]]
|
[[menus.main]]
|
||||||
name = 'Products'
|
name = 'Products'
|
||||||
pageRef = '/product'
|
pageRef = '/product'
|
||||||
weight = 10
|
weight = 10
|
||||||
|
|
||||||
[[menu.main]]
|
[[menus.main]]
|
||||||
name = 'Product 1'
|
name = 'Product 1'
|
||||||
pageRef = '/products/product-1'
|
pageRef = '/products/product-1'
|
||||||
parent = 'Products'
|
parent = 'Products'
|
||||||
weight = 1
|
weight = 1
|
||||||
|
|
||||||
[[menu.main]]
|
[[menus.main]]
|
||||||
name = 'Product 2'
|
name = 'Product 2'
|
||||||
pageRef = '/products/product-2'
|
pageRef = '/products/product-2'
|
||||||
parent = 'Products'
|
parent = 'Products'
|
||||||
|
|
|
@ -14,13 +14,13 @@ The `Identifier` method returns the `identifier` property of the menu entry. If
|
||||||
[automatically]: /content-management/menus/#define-automatically
|
[automatically]: /content-management/menus/#define-automatically
|
||||||
|
|
||||||
{{< code-toggle file=hugo >}}
|
{{< code-toggle file=hugo >}}
|
||||||
[[menu.main]]
|
[[menus.main]]
|
||||||
identifier = 'about'
|
identifier = 'about'
|
||||||
name = 'About'
|
name = 'About'
|
||||||
pageRef = '/about'
|
pageRef = '/about'
|
||||||
weight = 10
|
weight = 10
|
||||||
|
|
||||||
[[menu.main]]
|
[[menus.main]]
|
||||||
identifier = 'contact'
|
identifier = 'contact'
|
||||||
name = 'Contact'
|
name = 'Contact'
|
||||||
pageRef = '/contact'
|
pageRef = '/contact'
|
||||||
|
|
|
@ -12,13 +12,13 @@ action:
|
||||||
In this menu definition, the second entry does not contain an `identifier`, so the `Identifier` method returns its `name` property instead:
|
In this menu definition, the second entry does not contain an `identifier`, so the `Identifier` method returns its `name` property instead:
|
||||||
|
|
||||||
{{< code-toggle file=hugo >}}
|
{{< code-toggle file=hugo >}}
|
||||||
[[menu.main]]
|
[[menus.main]]
|
||||||
identifier = 'about'
|
identifier = 'about'
|
||||||
name = 'About'
|
name = 'About'
|
||||||
pageRef = '/about'
|
pageRef = '/about'
|
||||||
weight = 10
|
weight = 10
|
||||||
|
|
||||||
[[menu.main]]
|
[[menus.main]]
|
||||||
name = 'Contact'
|
name = 'Contact'
|
||||||
pageRef = '/contact'
|
pageRef = '/contact'
|
||||||
weight = 20
|
weight = 20
|
||||||
|
|
|
@ -5,7 +5,7 @@ categories: []
|
||||||
keywords: []
|
keywords: []
|
||||||
action:
|
action:
|
||||||
related: []
|
related: []
|
||||||
returnType: hugolib.pageState
|
returnType: page.Page
|
||||||
signatures: [MENUENTRY.Page]
|
signatures: [MENUENTRY.Page]
|
||||||
---
|
---
|
||||||
|
|
||||||
|
@ -14,15 +14,15 @@ Regardless of how you [define menu entries], an entry associated with a page has
|
||||||
In this menu definition, the first two entries are associated with a page, the last entry is not:
|
In this menu definition, the first two entries are associated with a page, the last entry is not:
|
||||||
|
|
||||||
{{< code-toggle file=hugo >}}
|
{{< code-toggle file=hugo >}}
|
||||||
[[menu.main]]
|
[[menus.main]]
|
||||||
pageRef = '/about'
|
pageRef = '/about'
|
||||||
weight = 10
|
weight = 10
|
||||||
|
|
||||||
[[menu.main]]
|
[[menus.main]]
|
||||||
pageRef = '/contact'
|
pageRef = '/contact'
|
||||||
weight = 20
|
weight = 20
|
||||||
|
|
||||||
[[menu.main]]
|
[[menus.main]]
|
||||||
name = 'Hugo'
|
name = 'Hugo'
|
||||||
url = 'https://gohugo.io'
|
url = 'https://gohugo.io'
|
||||||
weight = 30
|
weight = 30
|
||||||
|
|
|
@ -12,21 +12,21 @@ action:
|
||||||
When you define menu entries [in site configuration] or [in front matter], you can include a `params` key to attach additional information to the entry. For example:
|
When you define menu entries [in site configuration] or [in front matter], you can include a `params` key to attach additional information to the entry. For example:
|
||||||
|
|
||||||
{{< code-toggle file=hugo >}}
|
{{< code-toggle file=hugo >}}
|
||||||
[[menu.main]]
|
[[menus.main]]
|
||||||
name = 'About'
|
name = 'About'
|
||||||
pageRef = '/about'
|
pageRef = '/about'
|
||||||
weight = 10
|
weight = 10
|
||||||
|
|
||||||
[[menu.main]]
|
[[menus.main]]
|
||||||
name = 'Contact'
|
name = 'Contact'
|
||||||
pageRef = '/contact'
|
pageRef = '/contact'
|
||||||
weight = 20
|
weight = 20
|
||||||
|
|
||||||
[[menu.main]]
|
[[menus.main]]
|
||||||
name = 'Hugo'
|
name = 'Hugo'
|
||||||
url = 'https://gohugo.io'
|
url = 'https://gohugo.io'
|
||||||
weight = 30
|
weight = 30
|
||||||
[menu.main.params]
|
[menus.main.params]
|
||||||
rel = 'external'
|
rel = 'external'
|
||||||
{{< /code-toggle >}}
|
{{< /code-toggle >}}
|
||||||
|
|
||||||
|
|
|
@ -12,19 +12,18 @@ action:
|
||||||
With this menu definition:
|
With this menu definition:
|
||||||
|
|
||||||
{{< code-toggle file=hugo >}}
|
{{< code-toggle file=hugo >}}
|
||||||
[menu]
|
[[menus.main]]
|
||||||
[[menu.main]]
|
|
||||||
name = 'Products'
|
name = 'Products'
|
||||||
pageRef = '/product'
|
pageRef = '/product'
|
||||||
weight = 10
|
weight = 10
|
||||||
|
|
||||||
[[menu.main]]
|
[[menus.main]]
|
||||||
name = 'Product 1'
|
name = 'Product 1'
|
||||||
pageRef = '/products/product-1'
|
pageRef = '/products/product-1'
|
||||||
parent = 'Products'
|
parent = 'Products'
|
||||||
weight = 1
|
weight = 1
|
||||||
|
|
||||||
[[menu.main]]
|
[[menus.main]]
|
||||||
name = 'Product 2'
|
name = 'Product 2'
|
||||||
pageRef = '/products/product-2'
|
pageRef = '/products/product-2'
|
||||||
parent = 'Products'
|
parent = 'Products'
|
||||||
|
|
|
@ -7,14 +7,14 @@ In this site configuration we enable rendering of [emoji shortcodes], and add em
|
||||||
{{< code-toggle file=hugo >}}
|
{{< code-toggle file=hugo >}}
|
||||||
enableEmoji = true
|
enableEmoji = true
|
||||||
|
|
||||||
[[menu.main]]
|
[[menus.main]]
|
||||||
name = 'About'
|
name = 'About'
|
||||||
pageRef = '/about'
|
pageRef = '/about'
|
||||||
post = ':point_left:'
|
post = ':point_left:'
|
||||||
pre = ':point_right:'
|
pre = ':point_right:'
|
||||||
weight = 10
|
weight = 10
|
||||||
|
|
||||||
[[menu.main]]
|
[[menus.main]]
|
||||||
name = 'Contact'
|
name = 'Contact'
|
||||||
pageRef = '/contact'
|
pageRef = '/contact'
|
||||||
post = ':arrow_left:'
|
post = ':arrow_left:'
|
||||||
|
|
|
@ -14,17 +14,17 @@ The `Sort` method returns the given menu with its entries sorted by `name`.
|
||||||
Consider this menu definition:
|
Consider this menu definition:
|
||||||
|
|
||||||
{{< code-toggle file=hugo >}}
|
{{< code-toggle file=hugo >}}
|
||||||
[[menu.main]]
|
[[menus.main]]
|
||||||
name = 'Services'
|
name = 'Services'
|
||||||
pageRef = '/services'
|
pageRef = '/services'
|
||||||
weight = 10
|
weight = 10
|
||||||
|
|
||||||
[[menu.main]]
|
[[menus.main]]
|
||||||
name = 'About'
|
name = 'About'
|
||||||
pageRef = '/about'
|
pageRef = '/about'
|
||||||
weight = 20
|
weight = 20
|
||||||
|
|
||||||
[[menu.main]]
|
[[menus.main]]
|
||||||
name = 'Contact'
|
name = 'Contact'
|
||||||
pageRef = '/contact'
|
pageRef = '/contact'
|
||||||
weight = 30
|
weight = 30
|
||||||
|
|
|
@ -16,19 +16,19 @@ The `ByWeight` method returns the given menu with its entries sorted by [`weight
|
||||||
Consider this menu definition:
|
Consider this menu definition:
|
||||||
|
|
||||||
{{< code-toggle file=hugo >}}
|
{{< code-toggle file=hugo >}}
|
||||||
[[menu.main]]
|
[[menus.main]]
|
||||||
identifier = 'about'
|
identifier = 'about'
|
||||||
name = 'About'
|
name = 'About'
|
||||||
pageRef = '/about'
|
pageRef = '/about'
|
||||||
weight = 20
|
weight = 20
|
||||||
|
|
||||||
[[menu.main]]
|
[[menus.main]]
|
||||||
identifier = 'services'
|
identifier = 'services'
|
||||||
name = 'Services'
|
name = 'Services'
|
||||||
pageRef = '/services'
|
pageRef = '/services'
|
||||||
weight = 10
|
weight = 10
|
||||||
|
|
||||||
[[menu.main]]
|
[[menus.main]]
|
||||||
identifier = 'contact'
|
identifier = 'contact'
|
||||||
name = 'Contact'
|
name = 'Contact'
|
||||||
pageRef = '/contact'
|
pageRef = '/contact'
|
||||||
|
|
|
@ -14,17 +14,17 @@ The `Limit` method returns the given menu, limited to the first N entries.
|
||||||
Consider this menu definition:
|
Consider this menu definition:
|
||||||
|
|
||||||
{{< code-toggle file=hugo >}}
|
{{< code-toggle file=hugo >}}
|
||||||
[[menu.main]]
|
[[menus.main]]
|
||||||
name = 'Services'
|
name = 'Services'
|
||||||
pageRef = '/services'
|
pageRef = '/services'
|
||||||
weight = 10
|
weight = 10
|
||||||
|
|
||||||
[[menu.main]]
|
[[menus.main]]
|
||||||
name = 'About'
|
name = 'About'
|
||||||
pageRef = '/about'
|
pageRef = '/about'
|
||||||
weight = 20
|
weight = 20
|
||||||
|
|
||||||
[[menu.main]]
|
[[menus.main]]
|
||||||
name = 'Contact'
|
name = 'Contact'
|
||||||
pageRef = '/contact'
|
pageRef = '/contact'
|
||||||
weight = 30
|
weight = 30
|
||||||
|
|
|
@ -14,17 +14,17 @@ The `Reverse` method returns the given menu, reversing the sort order of its ent
|
||||||
Consider this menu definition:
|
Consider this menu definition:
|
||||||
|
|
||||||
{{< code-toggle file=hugo >}}
|
{{< code-toggle file=hugo >}}
|
||||||
[[menu.main]]
|
[[menus.main]]
|
||||||
name = 'Services'
|
name = 'Services'
|
||||||
pageRef = '/services'
|
pageRef = '/services'
|
||||||
weight = 10
|
weight = 10
|
||||||
|
|
||||||
[[menu.main]]
|
[[menus.main]]
|
||||||
name = 'About'
|
name = 'About'
|
||||||
pageRef = '/about'
|
pageRef = '/about'
|
||||||
weight = 20
|
weight = 20
|
||||||
|
|
||||||
[[menu.main]]
|
[[menus.main]]
|
||||||
name = 'Contact'
|
name = 'Contact'
|
||||||
pageRef = '/contact'
|
pageRef = '/contact'
|
||||||
weight = 30
|
weight = 30
|
||||||
|
|
|
@ -63,8 +63,9 @@ And this template:
|
||||||
{{ with .AllTranslations }}
|
{{ with .AllTranslations }}
|
||||||
<ul>
|
<ul>
|
||||||
{{ range . }}
|
{{ range . }}
|
||||||
{{ $lang := .Language.LanguageName}}
|
{{ $langName := or .Language.LanguageName .Language.Lang }}
|
||||||
<li><a href="{{ .RelPermalink }}">{{ .LinkTitle }} ({{ $lang }})</a></li>
|
{{ $langCode := or .Language.LanguageCode .Language.Lang }}
|
||||||
|
<li><a href="{{ .RelPermalink }}" hreflang="{{ $langCode }}">{{ .LinkTitle }} ({{ $langName }})</a></li>
|
||||||
{{ end }}
|
{{ end }}
|
||||||
</ul>
|
</ul>
|
||||||
{{ end }}
|
{{ end }}
|
||||||
|
@ -74,9 +75,9 @@ Hugo will render this list on the "Book 1" page of each site:
|
||||||
|
|
||||||
```html
|
```html
|
||||||
<ul>
|
<ul>
|
||||||
<li><a href="/books/book-1/">Book 1 (English)</a></li>
|
<li><a href="/books/book-1/" hreflang="en-US">Book 1 (English)</a></li>
|
||||||
<li><a href="/de/books/book-1/">Book 1 (Deutsch)</a></li>
|
<li><a href="/de/books/book-1/" hreflang="de-DE">Book 1 (Deutsch)</a></li>
|
||||||
<li><a href="/fr/books/book-1/">Book 1 (Français)</a></li>
|
<li><a href="/fr/books/book-1/" hreflang="fr-FR">Book 1 (Français)</a></li>
|
||||||
</ul>
|
</ul>
|
||||||
```
|
```
|
||||||
|
|
||||||
|
@ -84,7 +85,7 @@ On the "Book 2" page of the English and German sites, Hugo will render this:
|
||||||
|
|
||||||
```html
|
```html
|
||||||
<ul>
|
<ul>
|
||||||
<li><a href="/books/book-1/">Book 1 (English)</a></li>
|
<li><a href="/books/book-1/" hreflang="en-US">Book 1 (English)</a></li>
|
||||||
<li><a href="/de/books/book-1/">Book 1 (Deutsch)</a></li>
|
<li><a href="/de/books/book-1/" hreflang="de-DE">Book 1 (Deutsch)</a></li>
|
||||||
</ul>
|
</ul>
|
||||||
```
|
```
|
||||||
|
|
|
@ -29,7 +29,7 @@ enableGitInfo = true
|
||||||
Consider this project structure:
|
Consider this project structure:
|
||||||
|
|
||||||
```text
|
```text
|
||||||
hugo-testing/
|
my-project/
|
||||||
├── content/
|
├── content/
|
||||||
│ ├── books/
|
│ ├── books/
|
||||||
│ │ └── les-miserables.md
|
│ │ └── les-miserables.md
|
||||||
|
|
|
@ -12,7 +12,7 @@ action:
|
||||||
- methods/page/IsDescendant
|
- methods/page/IsDescendant
|
||||||
- methods/page/Parent
|
- methods/page/Parent
|
||||||
- methods/page/Sections
|
- methods/page/Sections
|
||||||
returnType: hugolib.pageState
|
returnType: page.Page
|
||||||
signatures: [PAGE.CurrentSection]
|
signatures: [PAGE.CurrentSection]
|
||||||
---
|
---
|
||||||
|
|
||||||
|
|
|
@ -30,8 +30,9 @@ Code defensively by verifying file existence as shown in each of the examples be
|
||||||
The path separators (slash or backslash) in `Path`, `Dir`, and `Filename` depend on the operating system.
|
The path separators (slash or backslash) in `Path`, `Dir`, and `Filename` depend on the operating system.
|
||||||
{{% /note %}}
|
{{% /note %}}
|
||||||
|
|
||||||
BaseFileName
|
###### BaseFileName
|
||||||
: (`string`) The file name, excluding the extension.
|
|
||||||
|
(`string`) The file name, excluding the extension.
|
||||||
|
|
||||||
```go-html-template
|
```go-html-template
|
||||||
{{ with .File }}
|
{{ with .File }}
|
||||||
|
@ -39,8 +40,9 @@ BaseFileName
|
||||||
{{ end }}
|
{{ end }}
|
||||||
```
|
```
|
||||||
|
|
||||||
ContentBaseName
|
###### ContentBaseName
|
||||||
: (`string`) If the page is a branch or leaf bundle, the name of the containing directory, else the `TranslationBaseName`.
|
|
||||||
|
(`string`) If the page is a branch or leaf bundle, the name of the containing directory, else the `TranslationBaseName`.
|
||||||
|
|
||||||
```go-html-template
|
```go-html-template
|
||||||
{{ with .File }}
|
{{ with .File }}
|
||||||
|
@ -48,8 +50,9 @@ ContentBaseName
|
||||||
{{ end }}
|
{{ end }}
|
||||||
```
|
```
|
||||||
|
|
||||||
Dir
|
###### Dir
|
||||||
: (`string`) The file path, excluding the file name, relative to the `content` directory.
|
|
||||||
|
(`string`) The file path, excluding the file name, relative to the `content` directory.
|
||||||
|
|
||||||
```go-html-template
|
```go-html-template
|
||||||
{{ with .File }}
|
{{ with .File }}
|
||||||
|
@ -57,8 +60,9 @@ Dir
|
||||||
{{ end }}
|
{{ end }}
|
||||||
```
|
```
|
||||||
|
|
||||||
Ext
|
###### Ext
|
||||||
: (`string`) The file extension.
|
|
||||||
|
(`string`) The file extension.
|
||||||
|
|
||||||
```go-html-template
|
```go-html-template
|
||||||
{{ with .File }}
|
{{ with .File }}
|
||||||
|
@ -66,8 +70,9 @@ Ext
|
||||||
{{ end }}
|
{{ end }}
|
||||||
```
|
```
|
||||||
|
|
||||||
Filename
|
###### Filename
|
||||||
: (`string`) The absolute file path.
|
|
||||||
|
(`string`) The absolute file path.
|
||||||
|
|
||||||
```go-html-template
|
```go-html-template
|
||||||
{{ with .File }}
|
{{ with .File }}
|
||||||
|
@ -75,8 +80,9 @@ Filename
|
||||||
{{ end }}
|
{{ end }}
|
||||||
```
|
```
|
||||||
|
|
||||||
Lang
|
###### Lang
|
||||||
: (`string`) The language associated with the given file.
|
|
||||||
|
(`string`) The language associated with the given file.
|
||||||
|
|
||||||
```go-html-template
|
```go-html-template
|
||||||
{{ with .File }}
|
{{ with .File }}
|
||||||
|
@ -84,8 +90,9 @@ Lang
|
||||||
{{ end }}
|
{{ end }}
|
||||||
```
|
```
|
||||||
|
|
||||||
LogicalName
|
###### LogicalName
|
||||||
: (`string`) The file name.
|
|
||||||
|
(`string`) The file name.
|
||||||
|
|
||||||
```go-html-template
|
```go-html-template
|
||||||
{{ with .File }}
|
{{ with .File }}
|
||||||
|
@ -93,8 +100,9 @@ LogicalName
|
||||||
{{ end }}
|
{{ end }}
|
||||||
```
|
```
|
||||||
|
|
||||||
Path
|
###### Path
|
||||||
: (`string`) The file path, relative to the `content` directory.
|
|
||||||
|
(`string`) The file path, relative to the `content` directory.
|
||||||
|
|
||||||
```go-html-template
|
```go-html-template
|
||||||
{{ with .File }}
|
{{ with .File }}
|
||||||
|
@ -102,8 +110,9 @@ Path
|
||||||
{{ end }}
|
{{ end }}
|
||||||
```
|
```
|
||||||
|
|
||||||
TranslationBaseName
|
###### TranslationBaseName
|
||||||
: (`string`) The file name, excluding the extension and language identifier.
|
|
||||||
|
(`string`) The file name, excluding the extension and language identifier.
|
||||||
|
|
||||||
```go-html-template
|
```go-html-template
|
||||||
{{ with .File }}
|
{{ with .File }}
|
||||||
|
@ -111,8 +120,9 @@ TranslationBaseName
|
||||||
{{ end }}
|
{{ end }}
|
||||||
```
|
```
|
||||||
|
|
||||||
UniqueID
|
###### UniqueID
|
||||||
: (`string`) The MD5 hash of `.File.Path`.
|
|
||||||
|
(`string`) The MD5 hash of `.File.Path`.
|
||||||
|
|
||||||
```go-html-template
|
```go-html-template
|
||||||
{{ with .File }}
|
{{ with .File }}
|
||||||
|
|
|
@ -12,7 +12,7 @@ action:
|
||||||
- methods/page/IsDescendant
|
- methods/page/IsDescendant
|
||||||
- methods/page/Parent
|
- methods/page/Parent
|
||||||
- methods/page/Sections
|
- methods/page/Sections
|
||||||
returnType: hugolib.pageState
|
returnType: page.Page
|
||||||
signatures: [PAGE.FirstSection]
|
signatures: [PAGE.FirstSection]
|
||||||
---
|
---
|
||||||
|
|
||||||
|
|
Some files were not shown because too many files have changed in this diff Show more
Loading…
Reference in a new issue