From e2faa1fc332d4fb043be7c2a6e168d5f9508f5a5 Mon Sep 17 00:00:00 2001 From: avidseeker Date: Sun, 9 Apr 2023 23:09:17 -0700 Subject: [PATCH] Feat: wider support for filename date formats Solves #10875 --- .gitignore | 6 +++-- resources/page/pagemeta/page_frontmatter.go | 27 +++++++++------------ 2 files changed, 16 insertions(+), 17 deletions(-) diff --git a/.gitignore b/.gitignore index 00b5b2e8041..71c14625ae4 100644 --- a/.gitignore +++ b/.gitignore @@ -1,2 +1,4 @@ - -*.test \ No newline at end of file +public +hugo +.hugo_build.lock +*.test diff --git a/resources/page/pagemeta/page_frontmatter.go b/resources/page/pagemeta/page_frontmatter.go index bc82773e8c0..d677605ecc9 100644 --- a/resources/page/pagemeta/page_frontmatter.go +++ b/resources/page/pagemeta/page_frontmatter.go @@ -126,19 +126,18 @@ func (f FrontMatterHandler) IsDateKey(key string) bool { func dateAndSlugFromBaseFilename(location *time.Location, name string) (time.Time, string) { withoutExt, _ := paths.FileAndExt(name) - if len(withoutExt) < 10 { - // This can not be a date. - return time.Time{}, "" + slug := strings.TrimLeft(withoutExt, "0123456789-_") + lastIdx := len(withoutExt) - len(slug) + if lastIdx == -1 { + lastIdx = 0 } + prefix := withoutExt[:lastIdx] - d, err := htime.ToTimeInDefaultLocationE(withoutExt[:10], location) + d, err := htime.ToTimeInDefaultLocationE(prefix, location) if err != nil { - return time.Time{}, "" + d = time.Time{} } - - // Be a little lenient with the format here. - slug := strings.Trim(withoutExt[10:], " -_") - + return d, slug } @@ -391,17 +390,15 @@ func (f *frontmatterFieldHandlers) newDateFieldHandler(key string, setter func(d func (f *frontmatterFieldHandlers) newDateFilenameHandler(setter func(d *FrontMatterDescriptor, t time.Time)) frontMatterFieldHandler { return func(d *FrontMatterDescriptor) (bool, error) { date, slug := dateAndSlugFromBaseFilename(d.Location, d.BaseFilename) - if date.IsZero() { - return false, nil - } - - setter(d, date) if _, found := d.Frontmatter["slug"]; !found { // Use slug from filename d.PageURLs.Slug = slug } - + if date.IsZero() { + return false, nil + } + setter(d, date) return true, nil } }