Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/gohugoio/hugo.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBjørn Erik Pedersen <bjorn.erik.pedersen@gmail.com>2022-04-05 10:57:58 +0300
committerBjørn Erik Pedersen <bjorn.erik.pedersen@gmail.com>2022-04-05 17:11:11 +0300
commit658e11ebaa94de219f941699d119a97a18301eea (patch)
tree76330777138b792bac1dfcf05e9948d9f5839bcc /resources
parente0a882fd3b9825dc9a95b83d72fc330dcbbbcce9 (diff)
Localize all the GroupBy*Date methods
Fixes #9745
Diffstat (limited to 'resources')
-rw-r--r--resources/page/integration_test.go72
-rw-r--r--resources/page/page_matcher_test.go3
-rw-r--r--resources/page/pagegroup.go51
-rw-r--r--resources/page/pages_sort_test.go13
-rw-r--r--resources/page/site.go5
-rw-r--r--resources/page/testhelpers_test.go1
6 files changed, 116 insertions, 29 deletions
diff --git a/resources/page/integration_test.go b/resources/page/integration_test.go
new file mode 100644
index 000000000..285b14342
--- /dev/null
+++ b/resources/page/integration_test.go
@@ -0,0 +1,72 @@
+// Copyright 2021 The Hugo Authors. All rights reserved.
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+package page_test
+
+import (
+ "testing"
+
+ "github.com/gohugoio/hugo/hugolib"
+)
+
+func TestGroupByLocalizedDate(t *testing.T) {
+
+ files := `
+-- config.toml --
+defaultContentLanguage = 'en'
+defaultContentLanguageInSubdir = true
+[languages]
+[languages.en]
+title = 'My blog'
+weight = 1
+[languages.fr]
+title = 'Mon blogue'
+weight = 2
+[languages.nn]
+title = 'Bloggen min'
+weight = 3
+-- content/p1.md --
+---
+title: "Post 1"
+date: "2020-01-01"
+---
+-- content/p2.md --
+---
+title: "Post 2"
+date: "2020-02-01"
+---
+-- content/p1.fr.md --
+---
+title: "Post 1"
+date: "2020-01-01"
+---
+-- content/p2.fr.md --
+---
+title: "Post 2"
+date: "2020-02-01"
+---
+-- layouts/index.html --
+{{ range $k, $v := site.RegularPages.GroupByDate "January, 2006" }}{{ $k }}|{{ $v.Key }}|{{ $v.Pages }}{{ end }}
+
+ `
+
+ b := hugolib.NewIntegrationTestBuilder(
+ hugolib.IntegrationTestConfig{
+ T: t,
+ TxtarString: files,
+ NeedsOsFS: true,
+ }).Build()
+
+ b.AssertFileContent("public/en/index.html", "0|February, 2020|Pages(1)1|January, 2020|Pages(1)")
+ b.AssertFileContent("public/fr/index.html", "0|février, 2020|Pages(1)1|janvier, 2020|Pages(1)")
+}
diff --git a/resources/page/page_matcher_test.go b/resources/page/page_matcher_test.go
index 846ab2c03..4a59dc502 100644
--- a/resources/page/page_matcher_test.go
+++ b/resources/page/page_matcher_test.go
@@ -14,10 +14,11 @@
package page
import (
- "github.com/gohugoio/hugo/common/hugo"
"path/filepath"
"testing"
+ "github.com/gohugoio/hugo/common/hugo"
+
qt "github.com/frankban/quicktest"
)
diff --git a/resources/page/pagegroup.go b/resources/page/pagegroup.go
index 18c98e70e..601af606a 100644
--- a/resources/page/pagegroup.go
+++ b/resources/page/pagegroup.go
@@ -26,6 +26,7 @@ import (
"github.com/gohugoio/hugo/common/collections"
"github.com/gohugoio/hugo/common/hreflect"
"github.com/gohugoio/hugo/compare"
+ "github.com/gohugoio/hugo/langs"
"github.com/gohugoio/hugo/resources/resource"
)
@@ -219,7 +220,7 @@ func (p Pages) GroupByParam(key string, order ...string) (PagesGroup, error) {
return r, nil
}
-func (p Pages) groupByDateField(sorter func(p Pages) Pages, formatter func(p Page) string, order ...string) (PagesGroup, error) {
+func (p Pages) groupByDateField(format string, sorter func(p Pages) Pages, getDate func(p Page) time.Time, order ...string) (PagesGroup, error) {
if len(p) < 1 {
return nil, nil
}
@@ -234,16 +235,24 @@ func (p Pages) groupByDateField(sorter func(p Pages) Pages, formatter func(p Pag
return nil, nil
}
- date := formatter(sp[0].(Page))
+ firstPage := sp[0].(Page)
+ date := getDate(firstPage)
+
+ // Pages may be a mix of multiple languages, so we need to use the language
+ // for the currently rendered Site.
+ currentSite := firstPage.Site().Current()
+ formatter := langs.GetTimeFormatter(currentSite.Language())
+ formatted := formatter.Format(date, format)
var r []PageGroup
- r = append(r, PageGroup{Key: date, Pages: make(Pages, 0)})
+ r = append(r, PageGroup{Key: formatted, Pages: make(Pages, 0)})
r[0].Pages = append(r[0].Pages, sp[0])
i := 0
for _, e := range sp[1:] {
- date = formatter(e.(Page))
- if r[i].Key.(string) != date {
- r = append(r, PageGroup{Key: date})
+ date = getDate(e.(Page))
+ formatted := formatter.Format(date, format)
+ if r[i].Key.(string) != formatted {
+ r = append(r, PageGroup{Key: formatted})
i++
}
r[i].Pages = append(r[i].Pages, e)
@@ -259,10 +268,10 @@ func (p Pages) GroupByDate(format string, order ...string) (PagesGroup, error) {
sorter := func(p Pages) Pages {
return p.ByDate()
}
- formatter := func(p Page) string {
- return p.Date().Format(format)
+ getDate := func(p Page) time.Time {
+ return p.Date()
}
- return p.groupByDateField(sorter, formatter, order...)
+ return p.groupByDateField(format, sorter, getDate, order...)
}
// GroupByPublishDate groups by the given page's PublishDate value in
@@ -273,10 +282,10 @@ func (p Pages) GroupByPublishDate(format string, order ...string) (PagesGroup, e
sorter := func(p Pages) Pages {
return p.ByPublishDate()
}
- formatter := func(p Page) string {
- return p.PublishDate().Format(format)
+ getDate := func(p Page) time.Time {
+ return p.PublishDate()
}
- return p.groupByDateField(sorter, formatter, order...)
+ return p.groupByDateField(format, sorter, getDate, order...)
}
// GroupByExpiryDate groups by the given page's ExpireDate value in
@@ -287,10 +296,10 @@ func (p Pages) GroupByExpiryDate(format string, order ...string) (PagesGroup, er
sorter := func(p Pages) Pages {
return p.ByExpiryDate()
}
- formatter := func(p Page) string {
- return p.ExpiryDate().Format(format)
+ getDate := func(p Page) time.Time {
+ return p.ExpiryDate()
}
- return p.groupByDateField(sorter, formatter, order...)
+ return p.groupByDateField(format, sorter, getDate, order...)
}
// GroupByLastmod groups by the given page's Lastmod value in
@@ -301,10 +310,10 @@ func (p Pages) GroupByLastmod(format string, order ...string) (PagesGroup, error
sorter := func(p Pages) Pages {
return p.ByLastmod()
}
- formatter := func(p Page) string {
- return p.Lastmod().Format(format)
+ getDate := func(p Page) time.Time {
+ return p.Lastmod()
}
- return p.groupByDateField(sorter, formatter, order...)
+ return p.groupByDateField(format, sorter, getDate, order...)
}
// GroupByParamDate groups by a date set as a param on the page in
@@ -340,10 +349,10 @@ func (p Pages) GroupByParamDate(key string, format string, order ...string) (Pag
pageBy(pdate).Sort(r)
return r
}
- formatter := func(p Page) string {
- return dates[p].Format(format)
+ getDate := func(p Page) time.Time {
+ return dates[p]
}
- return p.groupByDateField(sorter, formatter, order...)
+ return p.groupByDateField(format, sorter, getDate, order...)
}
// ProbablyEq wraps compare.ProbablyEqer
diff --git a/resources/page/pages_sort_test.go b/resources/page/pages_sort_test.go
index 85a1cda15..cf4e339ee 100644
--- a/resources/page/pages_sort_test.go
+++ b/resources/page/pages_sort_test.go
@@ -18,18 +18,17 @@ import (
"testing"
"time"
- "github.com/gohugoio/hugo/htesting/hqt"
- "github.com/gohugoio/hugo/source"
-
"github.com/gohugoio/hugo/resources/resource"
+ "github.com/google/go-cmp/cmp"
qt "github.com/frankban/quicktest"
)
-var eq = qt.CmpEquals(hqt.DeepAllowUnexported(
- &testPage{},
- &source.FileInfo{},
-))
+var eq = qt.CmpEquals(
+ cmp.Comparer(func(p1, p2 testPage) bool {
+ return p1.path == p2.path && p1.weight == p2.weight
+ }),
+)
func TestDefaultSort(t *testing.T) {
t.Parallel()
diff --git a/resources/page/site.go b/resources/page/site.go
index 3cc9989ee..b84f17914 100644
--- a/resources/page/site.go
+++ b/resources/page/site.go
@@ -37,6 +37,7 @@ type Site interface {
ServerPort() int
Title() string
Sites() Sites
+ Current() Site
Hugo() hugo.Info
BaseURL() template.URL
Taxonomies() any
@@ -82,6 +83,10 @@ func (t testSite) Sites() Sites {
return nil
}
+func (t testSite) Current() Site {
+ return t
+}
+
func (t testSite) IsServer() bool {
return false
}
diff --git a/resources/page/testhelpers_test.go b/resources/page/testhelpers_test.go
index cee1f99e5..30b8e4dff 100644
--- a/resources/page/testhelpers_test.go
+++ b/resources/page/testhelpers_test.go
@@ -64,6 +64,7 @@ func newTestPageWithFile(filename string) *testPage {
currentSection: &testPage{
sectionEntries: []string{"a", "b", "c"},
},
+ site: testSite{l: langs.NewDefaultLanguage(config.New())},
}
}