diff options
author | Bjørn Erik Pedersen <bjorn.erik.pedersen@gmail.com> | 2021-06-08 18:47:53 +0200 |
---|---|---|
committer | Bjørn Erik Pedersen <bjorn.erik.pedersen@gmail.com> | 2021-06-08 18:47:53 +0200 |
commit | 162f41d0efdd4a5e12e489cf8ecf8490b45884da (patch) | |
tree | a7e2337c45a581e150d35b3be97afb52b1e4de27 | |
parent | 552cef5c576ae4dbf4626f77f3c8b15b42a9e7f3 (diff) | |
parent | 32ba623541d74ee0b7ae4efb1b8326dc49af28b8 (diff) |
Merge commit '32ba623541d74ee0b7ae4efb1b8326dc49af28b8'
21 files changed, 981 insertions, 84 deletions
diff --git a/docs/.gitignore b/docs/.gitignore index b203a37cd..6f4431f42 100644 --- a/docs/.gitignore +++ b/docs/.gitignore @@ -1,5 +1,6 @@ /.idea /public +node_modules nohup.out .DS_Store trace.out
\ No newline at end of file diff --git a/docs/content/en/content-management/image-processing/index.md b/docs/content/en/content-management/image-processing/index.md index 9eefa1f73..40af0d6ab 100644 --- a/docs/content/en/content-management/image-processing/index.md +++ b/docs/content/en/content-management/image-processing/index.md @@ -167,21 +167,23 @@ For color codes, see https://www.google.com/search?q=color+picker **Note** that you also set a default background color to use, see [Image Processing Config](#image-processing-config). -### JPEG and Webp Quality +### JPEG and WebP Quality -Only relevant for JPEG and Webp images, values 1 to 100 inclusive, higher is better. Default is 75. +Only relevant for JPEG and WebP images, values 1 to 100 inclusive, higher is better. Default is 75. ```go {{ $image.Resize "600x q50" }} ``` -{{< new-in "0.83.0" >}} Webp support was added in Hugo 0.83.0. +{{< new-in "0.83.0" >}} WebP support was added in Hugo 0.83.0. ### Hint {{< new-in "0.83.0" >}} -Hint about what type of image this is. Currently only used when encoding to Webp. + {{< new-in "0.83.0" >}} + +Hint about what type of image this is. Currently only used when encoding to WebP. Default value is `photo`. @@ -227,12 +229,14 @@ See https://github.com/disintegration/imaging for more. If you want to trade qua By default the images is encoded in the source format, but you can set the target format as an option. -Valid values are `jpg`, `png`, `tif`, `bmp`, and `gif`. +Valid values are `jpg`, `png`, `tif`, `bmp`, `gif` and `webp`. ```go {{ $image.Resize "600x jpg" }} ``` +{{< new-in "0.83.0" >}} WebP support was added in Hugo 0.83.0. + ## Image Processing Examples _The photo of the sunset used in the examples below is Copyright [Bjørn Erik Pedersen](https://commons.wikimedia.org/wiki/User:Bep) (Creative Commons Attribution-Share Alike 4.0 International license)_ @@ -274,10 +278,10 @@ You can configure an `imaging` section in `config.toml` with default image proce # See https://github.com/disintegration/imaging resampleFilter = "box" -# Default JPEG or WEBP quality setting. Default is 75. +# Default JPEG or WebP quality setting. Default is 75. quality = 75 -# Default hint about what type of image. Currently only used for Webp encoding. +# Default hint about what type of image. Currently only used for WebP encoding. # Default is "photo". # Valid values are "picture", "photo", "drawing", "icon", or "text". hint = "photo" diff --git a/docs/content/en/functions/scratch.md b/docs/content/en/functions/scratch.md index f42b0ad57..5b155aff9 100644 --- a/docs/content/en/functions/scratch.md +++ b/docs/content/en/functions/scratch.md @@ -1,6 +1,6 @@ --- title: .Scratch -description: Acts as a "scratchpad" to allow for writable page- or shortcode-scoped variables. +description: Acts as a "scratchpad" to store and manipulate data. godocref: date: 2017-02-01 publishdate: 2017-02-01 @@ -20,81 +20,98 @@ draft: false aliases: [/extras/scratch/,/doc/scratch/] --- -In most cases you can do okay without `Scratch`, but due to scoping issues, there are many use cases that aren't solvable in Go Templates without `Scratch`'s help. - -`.Scratch` is available as methods on `Page` and `Shortcode`. Since Hugo 0.43 you can also create a locally scoped `Scratch` using the template func `newScratch`. - +Scratch is a Hugo feature designed to conveniently manipulate data in a Go Template world. It is either a Page or Shortcode method for which the resulting data will be attached to the given context, or it can live as a unique instance stored in a variable. {{% note %}} -See [this Go issue](https://github.com/golang/go/issues/10608) for the main motivation behind Scratch. +Note that Scratch was initially created as a workaround for a [Go template scoping limitation](https://github.com/golang/go/issues/10608) that affected Hugo versions prior to 0.48. For a detailed analysis of `.Scratch` and contextual use cases, see [this blog post](https://regisphilibert.com/blog/2017/04/hugo-scratch-explained-variable/). {{% /note %}} -{{% note %}} -For a detailed analysis of `.Scratch` and in context use cases, see this [post](https://regisphilibert.com/blog/2017/04/hugo-scratch-explained-variable/). -{{% /note %}} +### Contexted `.Scratch` vs. local `newScratch` + +Since Hugo 0.43, there are two different ways of using Scratch: + +#### The Page's `.Scratch` + +`.Scratch` is available as a Page method or a Shortcode method and attaches the "scratched" data to the given page. Either a Page or a Shortcode context is required to use `.Scratch`. + +```go-html-template +{{ .Scratch.Set "greeting" "bonjour" }} +{{ range .Pages }} + {{ .Scratch.Set "greeting" (print "bonjour" .Title) }} +{{ end }} +``` -## Get a Scratch +#### The local `newScratch` -From Hugo `0.43` you can also create a locally scoped `Scratch` by calling `newScratch`: +{{< new-in "0.43.0" >}} A Scratch instance can also be assigned to any variable using the `newScratch` function. In this case, no Page or Shortcode context is required and the scope of the scratch is only local. The methods detailed below are available from the variable the Scratch instance was assigned to. ```go-html-template -$scratch := newScratch -$scratch.Set "greeting" "Hello" +{{ $data := newScratch }} +{{ $data.Set "greeting" "hola" }} ``` -A `Scratch` is also added to both `Page` and `Shortcode`. `Scratch` has the following methods: +### Methods + +A Scratch has the following methods: + +{{% note %}} +Note that the following examples assume a [local Scratch instance](#the-local-newscratch) has been stored in `$scratch`. +{{% /note %}} #### .Set -Set the given value to a given key +Set the value of a given key. ```go-html-template -{{ .Scratch.Set "greeting" "Hello" }} +{{ $scratch.Set "greeting" "Hello" }} ``` + #### .Get -Get the value of a given key + +Get the value of a given key. ```go-html-template -{{ .Scratch.Set "greeting" "Hello" }} +{{ $scratch.Set "greeting" "Hello" }} ---- -{{ .Scratch.Get "greeting" }} > Hello +{{ $scratch.Get "greeting" }} > Hello ``` #### .Add -Will add a given value to existing value of the given key. + +Add 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 -{{ .Scratch.Add "greetings" "Hello" }} -{{ .Scratch.Add "greetings" "Welcome" }} +{{ $scratch.Add "greetings" "Hello" }} +{{ $scratch.Add "greetings" "Welcome" }} ---- -{{ .Scratch.Get "greetings" }} > HelloWelcome +{{ $scratch.Get "greetings" }} > HelloWelcome ``` ```go-html-template -{{ .Scratch.Add "total" 3 }} -{{ .Scratch.Add "total" 7 }} +{{ $scratch.Add "total" 3 }} +{{ $scratch.Add "total" 7 }} ---- -{{ .Scratch.Get "total" }} > 10 +{{ $scratch.Get "total" }} > 10 ``` - ```go-html-template -{{ .Scratch.Add "greetings" (slice "Hello") }} -{{ .Scratch.Add "greetings" (slice "Welcome" "Cheers") }} +{{ $scratch.Add "greetings" (slice "Hello") }} +{{ $scratch.Add "greetings" (slice "Welcome" "Cheers") }} ---- -{{ .Scratch.Get "greetings" }} > []interface {}{"Hello", "Welcome", "Cheers"} +{{ $scratch.Get "greetings" }} > []interface {}{"Hello", "Welcome", "Cheers"} ``` #### .SetInMap -Takes a `key`, `mapKey` and `value` and add 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 -{{ .Scratch.SetInMap "greetings" "english" "Hello" }} -{{ .Scratch.SetInMap "greetings" "french" "Bonjour" }} +{{ $scratch.SetInMap "greetings" "english" "Hello" }} +{{ $scratch.SetInMap "greetings" "french" "Bonjour" }} ---- -{{ .Scratch.Get "greetings" }} > map[french:Bonjour english:Hello] +{{ $scratch.Get "greetings" }} > map[french:Bonjour english:Hello] ``` #### .DeleteInMap @@ -110,32 +127,29 @@ Takes a `key` and `mapKey` and removes the map of `mapKey` from the given `key`. ``` #### .GetSortedMapValues -Returns array of values from `key` sorted by `mapKey` + +Return an array of values from `key` sorted by `mapKey`. ```go-html-template -{{ .Scratch.SetInMap "greetings" "english" "Hello" }} -{{ .Scratch.SetInMap "greetings" "french" "Bonjour" }} +{{ $scratch.SetInMap "greetings" "english" "Hello" }} +{{ $scratch.SetInMap "greetings" "french" "Bonjour" }} ---- -{{ .Scratch.GetSortedMapValues "greetings" }} > [Hello Bonjour] +{{ $scratch.GetSortedMapValues "greetings" }} > [Hello Bonjour] ``` + #### .Delete -Removes the given key + +{{< new-in "0.38.0" >}} Remove the given key. ```go-html-template -{{ .Scratch.Delete "greetings" }} +{{ $scratch.Set "greeting" "Hello" }} +---- +{{ $scratch.Delete "greeting" }} ``` #### .Values -`Values` returns the raw backing map. Note that you should just use this method on the locally scoped `Scratch` instances you obtain via `newScratch`, not - `.Page.Scratch` etc., as that will lead to concurrency issues. - -## Scope -The scope of the backing data is global for the given `Page` or `Shortcode`, and spans partial and shortcode includes. - -Note that `.Scratch` from a shortcode will return the shortcode's `Scratch`, which in most cases is what you want. If you want to store it in the page scoped Scratch, then use `.Page.Scratch`. - - +Return the raw backing map. Note that you should only use this method on the locally scoped Scratch instances you obtain via [`newScratch`](#the-local-newscratch), not `.Page.Scratch` etc., as that will lead to concurrency issues. [pagevars]: /variables/page/ diff --git a/docs/content/en/getting-started/usage.md b/docs/content/en/getting-started/usage.md index 2b41ecb45..32c270270 100644 --- a/docs/content/en/getting-started/usage.md +++ b/docs/content/en/getting-started/usage.md @@ -167,6 +167,11 @@ Most Hugo builds are so fast that you may not notice the change unless looking d Hugo injects the LiveReload `<script>` before the closing `</body>` in your templates and will therefore not work if this tag is not present.. {{% /note %}} +### Redirect automatically to the page you just saved + +When you are working with more than one document and want to see the markup as real-time as possible it's not ideal to keep jumping between them. +Fortunately Hugo has an easy, embedded and simple solution for this. It's the flag `--navigateToChanged`. + ### Disable LiveReload LiveReload works by injecting JavaScript into the pages Hugo generates. The script creates a connection from the browser's web socket client to the Hugo web socket server. diff --git a/docs/content/en/hosting-and-deployment/hosting-on-github.md b/docs/content/en/hosting-and-deployment/hosting-on-github.md index 9b318f45d..443bd4d01 100644 --- a/docs/content/en/hosting-and-deployment/hosting-on-github.md +++ b/docs/content/en/hosting-and-deployment/hosting-on-github.md @@ -17,7 +17,7 @@ toc: true aliases: [/tutorials/github-pages-blog/] --- -GitHub provides free and fast static hosting over SSL for personal, organization, or project pages directly from a GitHub repository via its [GitHub Pages service][] and automate development workflows and build with [GitHub Actions]. +GitHub provides free and fast static hosting over SSL for personal, organization, or project pages directly from a GitHub repository via its [GitHub Pages service][] and automating development workflows and build with [GitHub Actions]. ## Assumptions @@ -45,9 +45,9 @@ This is a much simpler setup as your Hugo files and generated content are publis ## Build Hugo With GitHub Action -GitHub execute your software development workflows. Everytime you push your code on the Github repository, Github Action will build the site automatically. +GitHub executes your software development workflows. Everytime you push your code on the Github repository, Github Actions will build the site automatically. -Create a file in `.github/workflows/gh-pages.yml` containing the following content (based on https://github.com/marketplace/actions/hugo-setup ): +Create a file in `.github/workflows/gh-pages.yml` containing the following content (based on [actions-hugo](https://github.com/marketplace/actions/hugo-setup)): ```yml name: github pages @@ -56,10 +56,11 @@ on: push: branches: - main # Set a branch to deploy + pull_request: jobs: deploy: - runs-on: ubuntu-18.04 + runs-on: ubuntu-20.04 steps: - uses: actions/checkout@v2 with: @@ -77,12 +78,13 @@ jobs: - name: Deploy uses: peaceiris/actions-gh-pages@v3 + if: github.ref == 'refs/heads/main' with: github_token: ${{ secrets.GITHUB_TOKEN }} publish_dir: ./public ``` -For more advanced settings https://github.com/marketplace/actions/hugo-setup +For more advanced settings [actions-hugo](https://github.com/marketplace/actions/hugo-setup) and [actions-gh-pages](https://github.com/marketplace/actions/github-pages-action). ## Use a Custom Domain diff --git a/docs/content/en/hosting-and-deployment/hosting-on-netlify.md b/docs/content/en/hosting-and-deployment/hosting-on-netlify.md index 9dfc010af..1e2da8466 100644 --- a/docs/content/en/hosting-and-deployment/hosting-on-netlify.md +++ b/docs/content/en/hosting-and-deployment/hosting-on-netlify.md @@ -67,14 +67,14 @@ For production: {{< code file="netlify.toml" codeLang="toml" >}} [context.production.environment] - HUGO_VERSION = "0.82.1" + HUGO_VERSION = "0.83.1" {{< /code >}} For testing: {{< code file="netlify.toml" codeLang="toml" >}} [context.deploy-preview.environment] - HUGO_VERSION = "0.82.1" + HUGO_VERSION = "0.83.1" {{< /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`: diff --git a/docs/content/en/hosting-and-deployment/hugo-deploy.md b/docs/content/en/hosting-and-deployment/hugo-deploy.md index d42ffe6c7..da7f77c61 100644 --- a/docs/content/en/hosting-and-deployment/hugo-deploy.md +++ b/docs/content/en/hosting-and-deployment/hugo-deploy.md @@ -4,7 +4,7 @@ linktitle: Hugo Deploy description: You can upload your site to GCS, S3, or Azure using the Hugo CLI. date: 2019-05-30 publishdate: 2019-05-30 -lastmod: 2019-05-30 +lastmod: 2021-05-03 categories: [hosting and deployment] keywords: [s3,gcs,azure,hosting,deployment] authors: [Robert van Gent] @@ -95,10 +95,13 @@ cloudFrontDistributionID = <ID> # [[deployment.matchers]] configure behavior for files that match the Pattern. +# See https://golang.org/pkg/regexp/syntax/ for pattern syntax. +# Pattern searching is stopped on first match. + # Samples: [[deployment.matchers]] -# Cache static assets for 1 year. +# Cache static assets for 1 year. pattern = "^.+\\.(js|css|svg|ttf)$" cacheControl = "max-age=31536000, no-transform, public" gzip = true @@ -109,6 +112,12 @@ cacheControl = "max-age=31536000, no-transform, public" gzip = false [[deployment.matchers]] +# Set custom content type for /sitemap.xml +pattern = "^sitemap\\.xml$" +contentType = "application/xml" +gzip = true + +[[deployment.matchers]] pattern = "^.+\\.(html|xml|json)$" gzip = true ``` diff --git a/docs/content/en/hugo-modules/_index.md b/docs/content/en/hugo-modules/_index.md index dacc1d2ba..2b02a559e 100644 --- a/docs/content/en/hugo-modules/_index.md +++ b/docs/content/en/hugo-modules/_index.md @@ -21,7 +21,7 @@ toc: true You can combine modules in any combination you like, and even mount directories from non-Hugo projects, forming a big, virtual union file system. -Hugo Modules is powered by Go Modules. For more information about Go Modules, see: +Hugo Modules are powered by Go Modules. For more information about Go Modules, see: - [https://github.com/golang/go/wiki/Modules](https://github.com/golang/go/wiki/Modules) - [https://blog.golang.org/using-go-modules](https://blog.golang.org/using-go-modules) diff --git a/docs/content/en/news/0.83.0-relnotes/featured.png b/docs/content/en/news/0.83.0-relnotes/featured.png Binary files differnew file mode 100644 index 000000000..473170efd --- /dev/null +++ b/docs/content/en/news/0.83.0-relnotes/featured.png diff --git a/docs/content/en/news/0.83.0-relnotes/index.md b/docs/content/en/news/0.83.0-relnotes/index.md index 68febe354..987110c3f 100644 --- a/docs/content/en/news/0.83.0-relnotes/index.md +++ b/docs/content/en/news/0.83.0-relnotes/index.md @@ -1,15 +1,22 @@ --- date: 2021-05-01 -title: "0.83.0" -description: "0.83.0" +title: "Hugo 0.83: WebP Support!" +description: "WebP image encoding support, some important i18n fixes, and more." categories: ["Releases"] --- - Hugo `0.83` finally brings [WebP](https://gohugo.io/content-management/image-processing/) image processing support. Note that you need the [extended version](https://gohugo.io/troubleshooting/faq/#i-get-tocss--this-feature-is-not-available-in-your-current-hugo-version) of Hugo to encode to WebP. If you want to target all Hugo versions, you may use a construct such as this: +**Note:** If you use i18n, there is an unfortunate regression bug in this release (see [issue](https://github.com/gohugoio/hugo/issues/8492)). A patch release coming Sunday. + + +Hugo `0.83` finally brings [WebP](https://gohugo.io/content-management/image-processing/) image processing support. Note that you need the [extended version](https://gohugo.io/troubleshooting/faq/#i-get-tocss--this-feature-is-not-available-in-your-current-hugo-version) of Hugo to encode to WebP. If you want to target all Hugo versions, you may use a construct such as this: ```go-html-template -FOO +{{ $images := slice }} +{{ $images = $images | append ($img.Resize "300x") }} +{{ if hugo.IsExtended }} + {{ $images = $images | append ($img.Resize "300x webp") }} +{{ end }} ``` Also worth highlighting: diff --git a/docs/content/en/news/0.83.1-relnotes/index.md b/docs/content/en/news/0.83.1-relnotes/index.md index 6f028a901..e896b04e1 100644 --- a/docs/content/en/news/0.83.1-relnotes/index.md +++ b/docs/content/en/news/0.83.1-relnotes/index.md @@ -1,8 +1,8 @@ --- date: 2021-05-02 -title: "Hugo 0.83.1: A couple of Bug Fixes" -description: "This version fixes a couple of bugs introduced in 0.83.0." +title: "Hugo 0.83.1: One Bug Fix" +description: "This version fixes an issue introduced in 0.83.0." categories: ["Releases"] images: - images/blog/hugo-bug-poster.png diff --git a/docs/content/en/readfiles/pages-vs-site-pages.md b/docs/content/en/readfiles/pages-vs-site-pages.md index 437ec1c22..2ec92251e 100644 --- a/docs/content/en/readfiles/pages-vs-site-pages.md +++ b/docs/content/en/readfiles/pages-vs-site-pages.md @@ -27,9 +27,7 @@ the current _list_ page: current _list_ page. This **excludes** regular pages in nested sections/_list_ pages (those are subdirectories with an `_index.md` file. `.RegularPagesRecursive` -: Collection of **all** _regular_ pages under a _list_ page. This **includes** regular pages in nested sections/_list_ pages. - -This feature was added in Hugo version 0.68.0 +: {{< new-in "0.68.0" >}} Collection of **all** _regular_ pages under a _list_ page. This **includes** regular pages in nested sections/_list_ pages. Note : From the scope of _regular_ pages, `.Pages` and diff --git a/docs/content/en/templates/introduction.md b/docs/content/en/templates/introduction.md index 17fa5475c..fd34842d4 100644 --- a/docs/content/en/templates/introduction.md +++ b/docs/content/en/templates/introduction.md @@ -68,6 +68,22 @@ Accessing the Page Parameter `bar` defined in a piece of content's [front matter {{ if or (isset .Params "alt") (isset .Params "caption") }} Caption {{ end }} ``` +#### A Single Statement Can be Split over Multiple Lines + +```go-html-template +{{ if or + (isset .Params "alt") + (isset .Params "caption") +}} +``` + +#### Raw String Literals Can Include Newlines + +```go-html-template +{{ $msg := `Line one. +Line two.` }} +``` + ## Variables {#variables} Each Go Template gets a data object. In Hugo, each template is passed diff --git a/docs/content/en/templates/lookup-order.md b/docs/content/en/templates/lookup-order.md index e4cb8e552..0d52213c3 100644 --- a/docs/content/en/templates/lookup-order.md +++ b/docs/content/en/templates/lookup-order.md @@ -44,7 +44,7 @@ Section : Is relevant for `section`, `taxonomy` and `term` types. {{% note %}} -**Tip:** The examples below looks long and complex. That is the flexibility talking. Most Hugo sites contain just a handful of templates: +**Tip:** The examples below look long and complex. That is the flexibility talking. Most Hugo sites contain just a handful of templates: ```bash ├── _default diff --git a/docs/content/en/variables/page.md b/docs/content/en/variables/page.md index 8bad66d4f..4ba4d3d91 100644 --- a/docs/content/en/variables/page.md +++ b/docs/content/en/variables/page.md @@ -82,7 +82,7 @@ See [`.Scratch`](/functions/scratch/) for page-scoped, writable variables. : the meta keywords for the content. .Kind -: the page's *kind*. Possible return values are `page`, `home`, `section`, `taxonomy`, or `taxonomyTerm`. Note that there are also `RSS`, `sitemap`, `robotsTXT`, and `404` kinds, but these are only available during the rendering of each of these respective page's kind and therefore *not* available in any of the `Pages` collections. +: the page's *kind*. Possible return values are `page`, `home`, `section`, `taxonomy`, or `term`. Note that there are also `RSS`, `sitemap`, `robotsTXT`, and `404` kinds, but these are only available during the rendering of each of these respective page's kind and therefore *not* available in any of the `Pages` collections. .Language : a language object that points to the language's definition in the site `config`. `.Language.Lang` gives you the language code. @@ -204,7 +204,7 @@ aliased form `.Pages`. ### `.Pages` compared to `.Site.Pages` -{{< readfile file="/content/en/readfiles/pages-vs-site-pages.md" markdown="true" >}} +{{< getcontent path="readfiles/pages-vs-site-pages.md" >}} ## Page-level Params diff --git a/docs/content/en/variables/site.md b/docs/content/en/variables/site.md index 2300c2cb8..03052d053 100644 --- a/docs/content/en/variables/site.md +++ b/docs/content/en/variables/site.md @@ -96,7 +96,7 @@ All the methods below, e.g. `.Site.RegularPages` can also be reached via the glo : top-level directories of the site. .Site.Taxonomies -: the [taxonomies](/taxonomies/usage/) for the entire site. Also see section [Taxonomies elsewhere](#taxonomies-elsewhere). +: the [taxonomies](/taxonomies/usage/) for the entire site. Also see section [Use `.Site.Taxonomies` Outside of Taxonomy Templates](/variables/taxonomy/#use-sitetaxonomies-outside-of-taxonomy-templates). .Site.Title : a string representing the title of the site. @@ -127,7 +127,7 @@ You can use `.Site.Params` in a [partial template](/templates/partials/) to call ### `.Site.Pages` compared to `.Pages` -{{< readfile file="/content/en/readfiles/pages-vs-site-pages.md" markdown="true" >}} +{{< getcontent path="readfiles/pages-vs-site-pages.md" >}} diff --git a/docs/hugo_stats.json b/docs/hugo_stats.json new file mode 100644 |