mirror of
https://github.com/gohugoio/hugo.git
synced 2025-08-20 21:31:32 +02:00
Adding support for date field in front matter as date (as TOML provides)
This commit is contained in:
@@ -8,10 +8,35 @@ import (
|
|||||||
"time"
|
"time"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
func interfaceToTime(i interface{}) time.Time {
|
||||||
|
switch s := i.(type) {
|
||||||
|
case time.Time:
|
||||||
|
return s
|
||||||
|
case string:
|
||||||
|
d, e := stringToDate(s)
|
||||||
|
if e == nil {
|
||||||
|
return d
|
||||||
|
}
|
||||||
|
errorf("Invalid Time/Date format")
|
||||||
|
default:
|
||||||
|
errorf("Only Time is supported for this key")
|
||||||
|
}
|
||||||
|
|
||||||
|
return *new(time.Time)
|
||||||
|
}
|
||||||
|
|
||||||
func interfaceToStringToDate(i interface{}) time.Time {
|
func interfaceToStringToDate(i interface{}) time.Time {
|
||||||
s := interfaceToString(i)
|
s := interfaceToString(i)
|
||||||
|
|
||||||
if d, e := parseDateWith(s, []string{
|
if d, e := stringToDate(s); e == nil {
|
||||||
|
return d
|
||||||
|
}
|
||||||
|
|
||||||
|
return time.Unix(0, 0)
|
||||||
|
}
|
||||||
|
|
||||||
|
func stringToDate(s string) (time.Time, error) {
|
||||||
|
return parseDateWith(s, []string{
|
||||||
time.RFC3339,
|
time.RFC3339,
|
||||||
time.RFC1123Z,
|
time.RFC1123Z,
|
||||||
time.RFC1123,
|
time.RFC1123,
|
||||||
@@ -24,11 +49,7 @@ func interfaceToStringToDate(i interface{}) time.Time {
|
|||||||
"02 Jan 06 15:04 MST",
|
"02 Jan 06 15:04 MST",
|
||||||
"2006-01-02",
|
"2006-01-02",
|
||||||
"02 Jan 2006",
|
"02 Jan 2006",
|
||||||
}); e == nil {
|
})
|
||||||
return d
|
|
||||||
}
|
|
||||||
|
|
||||||
return time.Unix(0, 0)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// TODO remove this and return a proper error.
|
// TODO remove this and return a proper error.
|
||||||
@@ -118,17 +139,6 @@ func interfaceToInt(i interface{}) int {
|
|||||||
return 0
|
return 0
|
||||||
}
|
}
|
||||||
|
|
||||||
func interfaceToTime(i interface{}) time.Time {
|
|
||||||
switch s := i.(type) {
|
|
||||||
case time.Time:
|
|
||||||
return s
|
|
||||||
default:
|
|
||||||
errorf("Only Time is supported for this key")
|
|
||||||
}
|
|
||||||
|
|
||||||
return *new(time.Time)
|
|
||||||
}
|
|
||||||
|
|
||||||
func interfaceToString(i interface{}) string {
|
func interfaceToString(i interface{}) string {
|
||||||
switch s := i.(type) {
|
switch s := i.(type) {
|
||||||
case string:
|
case string:
|
||||||
|
@@ -348,7 +348,7 @@ func (page *Page) update(f interface{}) error {
|
|||||||
case "keywords":
|
case "keywords":
|
||||||
page.Keywords = interfaceArrayToStringArray(v)
|
page.Keywords = interfaceArrayToStringArray(v)
|
||||||
case "date", "pubdate":
|
case "date", "pubdate":
|
||||||
page.Date = interfaceToStringToDate(v)
|
page.Date = interfaceToTime(v)
|
||||||
case "draft":
|
case "draft":
|
||||||
page.Draft = interfaceToBool(v)
|
page.Draft = interfaceToBool(v)
|
||||||
case "layout":
|
case "layout":
|
||||||
@@ -384,7 +384,7 @@ func (page *Page) update(f interface{}) error {
|
|||||||
for i, u := range vvv {
|
for i, u := range vvv {
|
||||||
a[i] = interfaceToString(u)
|
a[i] = interfaceToString(u)
|
||||||
}
|
}
|
||||||
page.Params[strings.ToLower(k)] = a
|
page.Params[loki] = a
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -75,8 +75,8 @@ Page With Date HugoLong`
|
|||||||
|
|
||||||
func TestDegenerateDateFrontMatter(t *testing.T) {
|
func TestDegenerateDateFrontMatter(t *testing.T) {
|
||||||
p, _ := ReadFrom(strings.NewReader(PAGE_WITH_INVALID_DATE), "page/with/invalid/date")
|
p, _ := ReadFrom(strings.NewReader(PAGE_WITH_INVALID_DATE), "page/with/invalid/date")
|
||||||
if p.Date != time.Unix(0, 0) {
|
if p.Date != *new(time.Time) {
|
||||||
t.Fatalf("Date should be set to computer epoch. Got: %s", p.Date)
|
t.Fatalf("Date should be set to time.Time zero value. Got: %s", p.Date)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user