From: Bjørn Erik Pedersen Date: Wed, 28 Jul 2021 16:02:42 +0000 (+0200) Subject: Handle toml.LocalDate and toml.LocalDateTime in front matter X-Git-Tag: v0.87.0~21 X-Git-Url: http://git.maquefel.me/?a=commitdiff_plain;h=b5de37ee793c01f2acccdea7119be05c4182723f;p=brevno-suite%2Fhugo Handle toml.LocalDate and toml.LocalDateTime in front matter See #8801 --- diff --git a/common/htime/time.go b/common/htime/time.go index cd294b3a..f5a19b96 100644 --- a/common/htime/time.go +++ b/common/htime/time.go @@ -17,6 +17,10 @@ import ( "strings" "time" + "github.com/spf13/cast" + + toml "github.com/pelletier/go-toml/v2" + "github.com/go-playground/locales" ) @@ -125,3 +129,13 @@ func (f TimeFormatter) Format(t time.Time, layout string) string { return s } + +func ToTimeInDefaultLocationE(i interface{}, location *time.Location) (tim time.Time, err error) { + switch vv := i.(type) { + case toml.LocalDate: + return vv.AsTime(location), nil + case toml.LocalDateTime: + return vv.AsTime(location), nil + } + return cast.ToTimeInDefaultLocationE(i, location) +} diff --git a/hugolib/dates_test.go b/hugolib/dates_test.go index 6fe3adfa..c9a33e0f 100644 --- a/hugolib/dates_test.go +++ b/hugolib/dates_test.go @@ -104,6 +104,7 @@ expiryDate=%s if quoted { return fmt.Sprintf("%q", d) } + return d } @@ -124,7 +125,6 @@ expiryDate=%s "short-date-yaml-qouted.nn.md", createPageContent(pageTemplYaml, shortDateTempl, true), "long-date-yaml-unqouted.en.md", createPageContent(pageTemplYaml, longDateTempl, false), "long-date-yaml-unqouted.nn.md", createPageContent(pageTemplYaml, longDateTempl, false), - // TOML "short-date-toml-unqouted.en.md", createPageContent(pageTemplTOML, shortDateTempl, false), "short-date-toml-unqouted.nn.md", createPageContent(pageTemplTOML, shortDateTempl, false), @@ -180,8 +180,8 @@ ExpiryDate: 2099-07-13 15:28:01 +0000 UTC` // TOML // These fails: TOML (Burnt Sushi) defaults to local timezone. // TODO(bep) check go-toml - // b.AssertFileContent("public/en/short-date-toml-unqouted/index.html", expectShortDateEn) - // b.AssertFileContent("public/nn/short-date-toml-unqouted/index.html", expectShortDateNn) + b.AssertFileContent("public/en/short-date-toml-unqouted/index.html", expectShortDateEn) + b.AssertFileContent("public/nn/short-date-toml-unqouted/index.html", expectShortDateNn) b.AssertFileContent("public/en/short-date-toml-qouted/index.html", expectShortDateEn) b.AssertFileContent("public/nn/short-date-toml-qouted/index.html", expectShortDateNn) diff --git a/resources/page/pagemeta/page_frontmatter.go b/resources/page/pagemeta/page_frontmatter.go index 8e03c5f8..d473c69c 100644 --- a/resources/page/pagemeta/page_frontmatter.go +++ b/resources/page/pagemeta/page_frontmatter.go @@ -17,6 +17,7 @@ import ( "strings" "time" + "github.com/gohugoio/hugo/common/htime" "github.com/gohugoio/hugo/common/paths" "github.com/gohugoio/hugo/common/loggers" @@ -130,7 +131,7 @@ func dateAndSlugFromBaseFilename(location *time.Location, name string) (time.Tim return time.Time{}, "" } - d, err := cast.ToTimeInDefaultLocationE(withoutExt[:10], location) + d, err := htime.ToTimeInDefaultLocationE(withoutExt[:10], location) if err != nil { return time.Time{}, "" } @@ -371,7 +372,7 @@ func (f *frontmatterFieldHandlers) newDateFieldHandler(key string, setter func(d return false, nil } - date, err := cast.ToTimeInDefaultLocationE(v, d.Location) + date, err := htime.ToTimeInDefaultLocationE(v, d.Location) if err != nil { return false, nil } diff --git a/tpl/time/time.go b/tpl/time/time.go index a59d85b0..f91bf104 100644 --- a/tpl/time/time.go +++ b/tpl/time/time.go @@ -55,7 +55,7 @@ func (ns *Namespace) AsTime(v interface{}, args ...interface{}) (interface{}, er } } - return cast.ToTimeInDefaultLocationE(v, loc) + return htime.ToTimeInDefaultLocationE(v, loc) }