Handle toml.LocalDate and toml.LocalDateTime in front matter

See #8801
This commit is contained in:
Bjørn Erik Pedersen 2021-07-28 18:02:42 +02:00
parent bf301daf15
commit b5de37ee79
No known key found for this signature in database
GPG key ID: 330E6E2BD4859D8F
4 changed files with 21 additions and 6 deletions

View file

@ -17,6 +17,10 @@ import (
"strings" "strings"
"time" "time"
"github.com/spf13/cast"
toml "github.com/pelletier/go-toml/v2"
"github.com/go-playground/locales" "github.com/go-playground/locales"
) )
@ -125,3 +129,13 @@ func (f TimeFormatter) Format(t time.Time, layout string) string {
return s 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)
}

View file

@ -104,6 +104,7 @@ expiryDate=%s
if quoted { if quoted {
return fmt.Sprintf("%q", d) return fmt.Sprintf("%q", d)
} }
return d return d
} }
@ -124,7 +125,6 @@ expiryDate=%s
"short-date-yaml-qouted.nn.md", createPageContent(pageTemplYaml, shortDateTempl, true), "short-date-yaml-qouted.nn.md", createPageContent(pageTemplYaml, shortDateTempl, true),
"long-date-yaml-unqouted.en.md", createPageContent(pageTemplYaml, longDateTempl, false), "long-date-yaml-unqouted.en.md", createPageContent(pageTemplYaml, longDateTempl, false),
"long-date-yaml-unqouted.nn.md", createPageContent(pageTemplYaml, longDateTempl, false), "long-date-yaml-unqouted.nn.md", createPageContent(pageTemplYaml, longDateTempl, false),
// TOML // TOML
"short-date-toml-unqouted.en.md", createPageContent(pageTemplTOML, shortDateTempl, false), "short-date-toml-unqouted.en.md", createPageContent(pageTemplTOML, shortDateTempl, false),
"short-date-toml-unqouted.nn.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 // TOML
// These fails: TOML (Burnt Sushi) defaults to local timezone. // These fails: TOML (Burnt Sushi) defaults to local timezone.
// TODO(bep) check go-toml // TODO(bep) check go-toml
// b.AssertFileContent("public/en/short-date-toml-unqouted/index.html", expectShortDateEn) 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/nn/short-date-toml-unqouted/index.html", expectShortDateNn)
b.AssertFileContent("public/en/short-date-toml-qouted/index.html", expectShortDateEn) b.AssertFileContent("public/en/short-date-toml-qouted/index.html", expectShortDateEn)
b.AssertFileContent("public/nn/short-date-toml-qouted/index.html", expectShortDateNn) b.AssertFileContent("public/nn/short-date-toml-qouted/index.html", expectShortDateNn)

View file

@ -17,6 +17,7 @@ import (
"strings" "strings"
"time" "time"
"github.com/gohugoio/hugo/common/htime"
"github.com/gohugoio/hugo/common/paths" "github.com/gohugoio/hugo/common/paths"
"github.com/gohugoio/hugo/common/loggers" "github.com/gohugoio/hugo/common/loggers"
@ -130,7 +131,7 @@ func dateAndSlugFromBaseFilename(location *time.Location, name string) (time.Tim
return time.Time{}, "" return time.Time{}, ""
} }
d, err := cast.ToTimeInDefaultLocationE(withoutExt[:10], location) d, err := htime.ToTimeInDefaultLocationE(withoutExt[:10], location)
if err != nil { if err != nil {
return time.Time{}, "" return time.Time{}, ""
} }
@ -371,7 +372,7 @@ func (f *frontmatterFieldHandlers) newDateFieldHandler(key string, setter func(d
return false, nil return false, nil
} }
date, err := cast.ToTimeInDefaultLocationE(v, d.Location) date, err := htime.ToTimeInDefaultLocationE(v, d.Location)
if err != nil { if err != nil {
return false, nil return false, nil
} }

View file

@ -55,7 +55,7 @@ func (ns *Namespace) AsTime(v interface{}, args ...interface{}) (interface{}, er
} }
} }
return cast.ToTimeInDefaultLocationE(v, loc) return htime.ToTimeInDefaultLocationE(v, loc)
} }