shithub: hugo

Download patch

ref: e5d66074ce1ed4e0fe329e3fdef66f8b6fd5dc55
parent: d970327d7b994b495ef3bb468c3e0599b0deef5a
author: Bjørn Erik Pedersen <[email protected]>
date: Fri Sep 7 05:05:25 EDT 2018

tpl/strings: Add strings.FirstUpper

Fixes #5174

--- a/docs/content/en/content-management/taxonomies.md
+++ b/docs/content/en/content-management/taxonomies.md
@@ -150,9 +150,9 @@
 {{% /note %}}
 
 {{% warning "`preserveTaxonomyNames` behaviour change" %}}
-Before 0.49, Hugo would title-ize the taxonomy values for titles even if `preserveTaxonomyNames` was active. This no longer the case, which (for instance) makes it possible to have fully lower-case values.
+Before 0.49, Hugo would make the first character upper case for the taxonomy values for titles even if `preserveTaxonomyNames` was active. This no longer the case, which (for instance) makes it possible to have fully lower-case values.
 
-If you actually need to title-ize these values, you can do so using the [`title` template function][].
+If you actually need to title-ize these values, you can do so using the `strings.FirstUpper` template function.
 {{% /warning %}}
 
 ## Add Taxonomies to Content
@@ -211,7 +211,6 @@
 
 You can later use your custom metadata as shown in the [Taxonomy Terms Templates documentation](/templates/taxonomy-templates/#displaying-custom-metadata-in-taxonomy-terms-templates).
 
-[`title` template function]: /functions/title/
 [`urlize` template function]: /functions/urlize/
 [content section]: /content-management/sections/
 [content type]: /content-management/types/
--- a/tpl/strings/init.go
+++ b/tpl/strings/init.go
@@ -155,6 +155,13 @@
 			},
 		)
 
+		ns.AddMethodMapping(ctx.FirstUpper,
+			nil,
+			[][2]string{
+				{`{{ "hugo rocks!" | strings.FirstUpper }}`, `Hugo rocks!`},
+			},
+		)
+
 		ns.AddMethodMapping(ctx.Truncate,
 			[]string{"truncate"},
 			[][2]string{
--- a/tpl/strings/strings.go
+++ b/tpl/strings/strings.go
@@ -325,6 +325,16 @@
 	return ns.titleFunc(ss), nil
 }
 
+// FirstUpper returns a string with the first character as upper case.
+func (ns *Namespace) FirstUpper(s interface{}) (string, error) {
+	ss, err := cast.ToStringE(s)
+	if err != nil {
+		return "", err
+	}
+
+	return helpers.FirstUpper(ss), nil
+}
+
 // ToLower returns a copy of the input s with all Unicode letters mapped to their
 // lower case.
 func (ns *Namespace) ToLower(s interface{}) (string, error) {