Skip to content
Permalink
Browse files
Handle toml.LocalDate and toml.LocalDateTime in front matter
See #8801
  • Loading branch information
bep committed Jul 28, 2021
1 parent bf301da commit b5de37ee793c01f2acccdea7119be05c4182723f
Showing with 21 additions and 6 deletions.
  1. +14 −0 common/htime/time.go
  2. +3 −3 hugolib/dates_test.go
  3. +3 −2 resources/page/pagemeta/page_frontmatter.go
  4. +1 −1 tpl/time/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)
}
@@ -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)

@@ -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
}
@@ -55,7 +55,7 @@ func (ns *Namespace) AsTime(v interface{}, args ...interface{}) (interface{}, er
}
}

return cast.ToTimeInDefaultLocationE(v, loc)
return htime.ToTimeInDefaultLocationE(v, loc)

}

0 comments on commit b5de37e

Please sign in to comment.