Skip to content

Commit

Permalink
hugolib: Add capitalizeListTitles config option
Browse files Browse the repository at this point in the history
Whether to capitalize automatic page titles, applicable to section,
taxonomy, and term pages. Default is true.

Closes #9793
Closes #12115
  • Loading branch information
jmooring authored and bep committed Feb 23, 2024
1 parent ea0ba97 commit 36bf3cb
Show file tree
Hide file tree
Showing 4 changed files with 78 additions and 4 deletions.
3 changes: 3 additions & 0 deletions config/allconfig/allconfig.go
Expand Up @@ -538,6 +538,9 @@ type RootConfig struct {
// Note that this currently only works for English, but you can provide your own title in the content file's front matter.
PluralizeListTitles bool

// Whether to capitalize automatic page titles, applicable to section, taxonomy, and term pages.
CapitalizeListTitles bool

// Make all relative URLs absolute using the baseURL.
// <docsmeta>{"identifiers": ["baseURL"] }</docsmeta>
CanonifyURLs bool
Expand Down
1 change: 1 addition & 0 deletions config/allconfig/load.go
Expand Up @@ -189,6 +189,7 @@ func (l configLoader) applyDefaultConfig() error {
"menus": maps.Params{},
"disableLiveReload": false,
"pluralizeListTitles": true,
"CapitalizeListTitles": true,
"forceSyncStatic": false,
"footnoteAnchorPrefix": "",
"footnoteReturnLinkContents": "",
Expand Down
19 changes: 15 additions & 4 deletions hugolib/page__meta.go
Expand Up @@ -446,7 +446,7 @@ title: "My Title"
params:
build: "My Build"
---
´
´
`
}
Expand Down Expand Up @@ -746,15 +746,26 @@ func (p *pageMeta) applyDefaultValues() error {
if p.s.conf.PluralizeListTitles {
sectionName = flect.Pluralize(sectionName)
}
p.pageConfig.Title = p.s.conf.C.CreateTitle(sectionName)
if p.s.conf.CapitalizeListTitles {
sectionName = p.s.conf.C.CreateTitle(sectionName)
}
p.pageConfig.Title = sectionName
case kinds.KindTerm:
if p.term != "" {
p.pageConfig.Title = p.s.conf.C.CreateTitle(p.term)
if p.s.conf.CapitalizeListTitles {
p.pageConfig.Title = p.s.conf.C.CreateTitle(p.term)
} else {
p.pageConfig.Title = p.term
}
} else {
panic("term not set")
}
case kinds.KindTaxonomy:
p.pageConfig.Title = strings.Replace(p.s.conf.C.CreateTitle(p.pathInfo.Unnormalized().BaseNameNoIdentifier()), "-", " ", -1)
if p.s.conf.CapitalizeListTitles {
p.pageConfig.Title = strings.Replace(p.s.conf.C.CreateTitle(p.pathInfo.Unnormalized().BaseNameNoIdentifier()), "-", " ", -1)
} else {
p.pageConfig.Title = strings.Replace(p.pathInfo.Unnormalized().BaseNameNoIdentifier(), "-", " ", -1)
}
case kinds.KindStatus404:
p.pageConfig.Title = "404 Page not found"
}
Expand Down
59 changes: 59 additions & 0 deletions hugolib/page__meta_test.go
@@ -0,0 +1,59 @@
// Copyright 2024 The Hugo Authors. All rights reserved.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.

package hugolib_test

import (
"strings"
"testing"

"github.com/gohugoio/hugo/hugolib"
)

// Issue 9793
// Issue 12115
func TestListTitles(t *testing.T) {
t.Parallel()

files := `
-- hugo.toml --
disableKinds = ['home','rss','sitemap']
capitalizeListTitles = true
pluralizeListTitles = true
[taxonomies]
tag = 'tags'
-- content/section-1/page-1.md --
---
title: page-1
tags: 'tag-a'
---
-- layouts/_default/list.html --
{{ .Title }}
-- layouts/_default/single.html --
{{ .Title }}
`

b := hugolib.Test(t, files)

b.AssertFileContent("public/section-1/index.html", "Section-1s")
b.AssertFileContent("public/tags/index.html", "Tags")
b.AssertFileContent("public/tags/tag-a/index.html", "Tag-A")

files = strings.Replace(files, "true", "false", -1)

b = hugolib.Test(t, files)

b.AssertFileContent("public/section-1/index.html", "section-1")
b.AssertFileContent("public/tags/index.html", "tags")
b.AssertFileContent("public/tags/tag-a/index.html", "tag-a")
}

0 comments on commit 36bf3cb

Please sign in to comment.