mirror of
https://github.com/gohugoio/hugo.git
synced 2025-03-20 09:22:29 +00:00
Make ByCount sort consistently
When two or more taxonomies have the same number of pages, sort them by name to have consistent ByCount sorting of taxonomies. Fixes #1930
This commit is contained in:
parent
c6c2c689d6
commit
7d5c9fbf44
2 changed files with 36 additions and 1 deletions
|
@ -96,9 +96,16 @@ func (i Taxonomy) Alphabetical() OrderedTaxonomy {
|
||||||
}
|
}
|
||||||
|
|
||||||
// ByCount returns an ordered taxonomy sorted by # of pages per key.
|
// ByCount returns an ordered taxonomy sorted by # of pages per key.
|
||||||
|
// If taxonomies have the same # of pages, sort them alphabetical
|
||||||
func (i Taxonomy) ByCount() OrderedTaxonomy {
|
func (i Taxonomy) ByCount() OrderedTaxonomy {
|
||||||
count := func(i1, i2 *OrderedTaxonomyEntry) bool {
|
count := func(i1, i2 *OrderedTaxonomyEntry) bool {
|
||||||
return len(i1.WeightedPages) > len(i2.WeightedPages)
|
li1 := len(i1.WeightedPages)
|
||||||
|
li2 := len(i2.WeightedPages)
|
||||||
|
|
||||||
|
if li1 == li2 {
|
||||||
|
return i1.Name < i2.Name
|
||||||
|
}
|
||||||
|
return li1 > li2
|
||||||
}
|
}
|
||||||
|
|
||||||
ia := i.TaxonomyArray()
|
ia := i.TaxonomyArray()
|
||||||
|
|
|
@ -16,6 +16,8 @@ package hugolib
|
||||||
import (
|
import (
|
||||||
"strings"
|
"strings"
|
||||||
"testing"
|
"testing"
|
||||||
|
|
||||||
|
"github.com/spf13/viper"
|
||||||
)
|
)
|
||||||
|
|
||||||
func TestSitePossibleTaxonomies(t *testing.T) {
|
func TestSitePossibleTaxonomies(t *testing.T) {
|
||||||
|
@ -29,3 +31,29 @@ func TestSitePossibleTaxonomies(t *testing.T) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestByCountOrderOfTaxonomies(t *testing.T) {
|
||||||
|
viper.Reset()
|
||||||
|
defer viper.Reset()
|
||||||
|
|
||||||
|
taxonomies := make(map[string]string)
|
||||||
|
|
||||||
|
taxonomies["tag"] = "tags"
|
||||||
|
taxonomies["category"] = "categories"
|
||||||
|
|
||||||
|
viper.Set("taxonomies", taxonomies)
|
||||||
|
|
||||||
|
site := new(Site)
|
||||||
|
page, _ := NewPageFrom(strings.NewReader(pageYamlWithTaxonomiesA), "path/to/page")
|
||||||
|
site.Pages = append(site.Pages, page)
|
||||||
|
site.assembleTaxonomies()
|
||||||
|
|
||||||
|
st := make([]string, 0)
|
||||||
|
for _, t := range site.Taxonomies["tags"].ByCount() {
|
||||||
|
st = append(st, t.Name)
|
||||||
|
}
|
||||||
|
|
||||||
|
if !compareStringSlice(st, []string{"a", "b", "c"}) {
|
||||||
|
t.Fatalf("ordered taxonomies do not match [a, b, c]. Got: %s", st)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
Loading…
Reference in a new issue