1
0
Fork 0
mirror of https://github.com/gohugoio/hugo.git synced 2025-03-20 18:31:09 +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 
This commit is contained in:
Robert Basic 2016-04-01 20:17:16 +02:00 committed by Bjørn Erik Pedersen
parent c6c2c689d6
commit 7d5c9fbf44
2 changed files with 36 additions and 1 deletions

View file

@ -96,9 +96,16 @@ func (i Taxonomy) Alphabetical() OrderedTaxonomy {
}
// 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 {
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()

View file

@ -16,6 +16,8 @@ package hugolib
import (
"strings"
"testing"
"github.com/spf13/viper"
)
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)
}
}