]> git.maquefel.me Git - brevno-suite/hugo/commitdiff
hugolib: Add capitalizeListTitles config option
authorJoe Mooring <joe.mooring@veriphor.com>
Thu, 22 Feb 2024 19:51:22 +0000 (11:51 -0800)
committerBjørn Erik Pedersen <bjorn.erik.pedersen@gmail.com>
Fri, 23 Feb 2024 08:32:32 +0000 (09:32 +0100)
Whether to capitalize automatic page titles, applicable to section,
taxonomy, and term pages. Default is true.

Closes #9793
Closes #12115

config/allconfig/allconfig.go
config/allconfig/load.go
hugolib/page__meta.go
hugolib/page__meta_test.go [new file with mode: 0644]

index 21d12b0c78bbe3170c723ad2d9d848d47d1caae4..469a164cf64ed89ed9133a005ac18cc90d2783ae 100644 (file)
@@ -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
index cb267422f157fc3e132b2e6460bf107e15537552..8675ced231e7fa6e935530ac9bec3aaced4ad500 100644 (file)
@@ -189,6 +189,7 @@ func (l configLoader) applyDefaultConfig() error {
                "menus":                                maps.Params{},
                "disableLiveReload":                    false,
                "pluralizeListTitles":                  true,
+               "CapitalizeListTitles":                 true,
                "forceSyncStatic":                      false,
                "footnoteAnchorPrefix":                 "",
                "footnoteReturnLinkContents":           "",
index 03f4d4d196510dcf8834672944c4fa07690ca18e..082e3145a494cc62ca389b0bc77c45ffae0a494a 100644 (file)
@@ -446,7 +446,7 @@ title: "My Title"
 params:
   build: "My Build"
 ---
   
 
 `
                }
@@ -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"
                }
diff --git a/hugolib/page__meta_test.go b/hugolib/page__meta_test.go
new file mode 100644 (file)
index 0000000..d4b66ed
--- /dev/null
@@ -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")
+}