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>2016-11-13 14:33:11 +0300
committerBjørn Erik Pedersen <bjorn.erik.pedersen@gmail.com>2016-11-22 11:57:03 +0300
commit9347084d61a91c73bba1e04790b029163c38bacf (patch)
tree1d5dcda22b28529c72f4757f9ef34fc326ee59e0 /hugolib
parent9fba2a30a9ab5e17a699920079b3ca192686afd4 (diff)
node to page: Make Kind a string
Having a custom string type isn't worth it when it doesn't work with `where`, `eq` etc. Fixes #2689 Updates #2297
Diffstat (limited to 'hugolib')
-rw-r--r--hugolib/hugo_sites.go12
-rw-r--r--hugolib/node.go2
-rw-r--r--hugolib/page.go68
-rw-r--r--hugolib/page_collections.go14
-rw-r--r--hugolib/page_test.go16
-rw-r--r--hugolib/pagination.go4
-rw-r--r--hugolib/site.go4
7 files changed, 58 insertions, 62 deletions
diff --git a/hugolib/hugo_sites.go b/hugolib/hugo_sites.go
index 0783f47ce..78137f6c1 100644
--- a/hugolib/hugo_sites.go
+++ b/hugolib/hugo_sites.go
@@ -192,7 +192,7 @@ func (h *HugoSites) renderCrossSitesArtifacts() error {
func (h *HugoSites) assignMissingTranslations() error {
// This looks heavy, but it should be a small number of nodes by now.
allPages := h.findAllPagesByNodeTypeNotIn(KindPage)
- for _, nodeType := range []Kind{KindHome, KindSection, KindTaxonomy, KindTaxonomyTerm} {
+ for _, nodeType := range []string{KindHome, KindSection, KindTaxonomy, KindTaxonomyTerm} {
nodes := h.findPagesByNodeTypeIn(nodeType, allPages)
// Assign translations
@@ -304,7 +304,7 @@ func (h *HugoSites) createMissingPages() error {
// TODO(bep) np move
// Move the new* methods after cleanup in site.go
-func (s *Site) newNodePage(typ Kind) *Page {
+func (s *Site) newNodePage(typ string) *Page {
return &Page{
Kind: typ,
Node: Node{
@@ -566,19 +566,19 @@ func (s *Site) updateBuildStats(page *Page) {
}
// TODO(bep) np remove
-func (h *HugoSites) findAllPagesByNodeType(n Kind) Pages {
+func (h *HugoSites) findAllPagesByNodeType(n string) Pages {
return h.Sites[0].findAllPagesByNodeType(n)
}
-func (h *HugoSites) findPagesByNodeTypeNotIn(n Kind, inPages Pages) Pages {
+func (h *HugoSites) findPagesByNodeTypeNotIn(n string, inPages Pages) Pages {
return h.Sites[0].findPagesByNodeTypeNotIn(n, inPages)
}
-func (h *HugoSites) findPagesByNodeTypeIn(n Kind, inPages Pages) Pages {
+func (h *HugoSites) findPagesByNodeTypeIn(n string, inPages Pages) Pages {
return h.Sites[0].findPagesByNodeTypeIn(n, inPages)
}
-func (h *HugoSites) findAllPagesByNodeTypeNotIn(n Kind) Pages {
+func (h *HugoSites) findAllPagesByNodeTypeNotIn(n string) Pages {
return h.findPagesByNodeTypeNotIn(n, h.Sites[0].AllPages)
}
diff --git a/hugolib/node.go b/hugolib/node.go
index 87ca6b726..21bdbba5b 100644
--- a/hugolib/node.go
+++ b/hugolib/node.go
@@ -291,7 +291,7 @@ func sectionsFromFilename(filename string) []string {
}
// TODO(bep) np node identificator
-func nodeTypeFromFilename(filename string) Kind {
+func kindFromFilename(filename string) string {
if !strings.Contains(filename, "_index") {
return KindPage
}
diff --git a/hugolib/page.go b/hugolib/page.go
index 698725635..73924587b 100644
--- a/hugolib/page.go
+++ b/hugolib/page.go
@@ -49,53 +49,35 @@ var (
cjk = regexp.MustCompile(`\p{Han}|\p{Hangul}|\p{Hiragana}|\p{Katakana}`)
)
-// Kind is the discriminator that identifies the different page types
-// in the different page collections. This can, as an example, be used
-// to to filter regular pages, find sections etc.
-// NOTE: THe exported constants below are used to filter pages from
-// templates in the wild, so do not change the values!
-type Kind string
-
const (
- KindPage Kind = "page"
+ KindPage = "page"
// The rest are node types; home page, sections etc.
- KindHome Kind = "home"
- KindSection Kind = "section"
- KindTaxonomy Kind = "taxonomy"
- KindTaxonomyTerm Kind = "taxonomyTerm"
+ KindHome = "home"
+ KindSection = "section"
+ KindTaxonomy = "taxonomy"
+ KindTaxonomyTerm = "taxonomyTerm"
// Temporary state.
- kindUnknown Kind = "unknown"
+ kindUnknown = "unknown"
// The following are (currently) temporary nodes,
// i.e. nodes we create just to render in isolation.
- kindSitemap Kind = "sitemap"
- kindRobotsTXT Kind = "robotsTXT"
- kind404 Kind = "404"
+ kindSitemap = "sitemap"
+ kindRobotsTXT = "robotsTXT"
+ kind404 = "404"
)
-// IsNode returns whether this is an item of one of the list types in Hugo,
-// i.e. not a regular content page.
-func (k Kind) IsNode() bool {
- return k != KindPage
-}
-
-// IsHome returns whether this is the home page.
-func (k Kind) IsHome() bool {
- return k == KindHome
-}
-
-// IsPage returns whether this is a regular content page.
-func (k Kind) IsPage() bool {
- return k == KindPage
-}
-
type Page struct {
+ // Kind is the discriminator that identifies the different page types
+ // in the different page collections. This can, as an example, be used
+ // to to filter regular pages, find sections etc.
// Kind will, for the pages available to the templates, be one of:
// page, home, section, taxonomy and taxonomyTerm.
- Kind
+ // It is of string type to make it easy to reason about in
+ // the templates.
+ Kind string
// Since Hugo 0.18 we got rid of the Node type. So now all pages are ...
// pages (regular pages, home page, sections etc.).
@@ -171,6 +153,22 @@ type Page struct {
site *Site
}
+// IsNode returns whether this is an item of one of the list types in Hugo,
+// i.e. not a regular content page.
+func (p *Page) IsNode() bool {
+ return p.Kind != KindPage
+}
+
+// IsHome returns whether this is the home page.
+func (p *Page) IsHome() bool {
+ return p.Kind == KindHome
+}
+
+// IsPage returns whether this is a regular content page.
+func (p *Page) IsPage() bool {
+ return p.Kind == KindPage
+}
+
type Source struct {
Frontmatter []byte
Content []byte
@@ -485,7 +483,7 @@ func (p *Page) getRenderingConfig() *helpers.Blackfriday {
func newPage(filename string) *Page {
page := Page{
- Kind: nodeTypeFromFilename(filename),
+ Kind: kindFromFilename(filename),
contentType: "",
Source: Source{File: *source.NewFile(filename)},
Node: Node{Keywords: []string{}, Sitemap: Sitemap{Priority: -1}},
@@ -1378,7 +1376,7 @@ func (p *Page) updatePageDates() {
// TODO(bep) np there is a potential issue with page sorting for home pages
// etc. without front matter dates set, but let us wrap the head around
// that in another time.
- if !p.Kind.IsNode() {
+ if !p.IsNode() {
return
}
diff --git a/hugolib/page_collections.go b/hugolib/page_collections.go
index 4d29f23e0..84e77bdd7 100644
--- a/hugolib/page_collections.go
+++ b/hugolib/page_collections.go
@@ -61,11 +61,11 @@ func newPageCollectionsFromPages(pages Pages) *PageCollections {
// TODO(bep) np clean and remove finders
-func (c *PageCollections) findPagesByNodeType(n Kind) Pages {
+func (c *PageCollections) findPagesByNodeType(n string) Pages {
return c.findPagesByNodeTypeIn(n, c.Pages)
}
-func (c *PageCollections) getPage(typ Kind, path ...string) *Page {
+func (c *PageCollections) getPage(typ string, path ...string) *Page {
pages := c.findPagesByNodeTypeIn(typ, c.Pages)
if len(pages) == 0 {
@@ -94,11 +94,11 @@ func (c *PageCollections) getPage(typ Kind, path ...string) *Page {
return nil
}
-func (c *PageCollections) findIndexNodesByNodeType(n Kind) Pages {
+func (c *PageCollections) findIndexNodesByNodeType(n string) Pages {
return c.findPagesByNodeTypeIn(n, c.indexPages)
}
-func (*PageCollections) findPagesByNodeTypeIn(n Kind, inPages Pages) Pages {
+func (*PageCollections) findPagesByNodeTypeIn(n string, inPages Pages) Pages {
var pages Pages
for _, p := range inPages {
if p.Kind == n {
@@ -108,7 +108,7 @@ func (*PageCollections) findPagesByNodeTypeIn(n Kind, inPages Pages) Pages {
return pages
}
-func (*PageCollections) findPagesByNodeTypeNotIn(n Kind, inPages Pages) Pages {
+func (*PageCollections) findPagesByNodeTypeNotIn(n string, inPages Pages) Pages {
var pages Pages
for _, p := range inPages {
if p.Kind != n {
@@ -118,11 +118,11 @@ func (*PageCollections) findPagesByNodeTypeNotIn(n Kind, inPages Pages) Pages {
return pages
}
-func (c *PageCollections) findAllPagesByNodeType(n Kind) Pages {
+func (c *PageCollections) findAllPagesByNodeType(n string) Pages {
return c.findPagesByNodeTypeIn(n, c.Pages)
}
-func (c *PageCollections) findRawAllPagesByNodeType(n Kind) Pages {
+func (c *PageCollections) findRawAllPagesByNodeType(n string) Pages {
return c.findPagesByNodeTypeIn(n, c.rawAllPages)
}
diff --git a/hugolib/page_test.go b/hugolib/page_test.go
index 7792be3dc..8530759d6 100644
--- a/hugolib/page_test.go
+++ b/hugolib/page_test.go
@@ -1278,17 +1278,15 @@ func TestIndexPageSimpleMethods(t *testing.T) {
}
}
-func TestPageType(t *testing.T) {
+func TestKind(t *testing.T) {
// Add tests for these constants to make sure they don't change
- require.Equal(t, Kind("page"), KindPage)
- require.Equal(t, Kind("home"), KindHome)
- require.Equal(t, Kind("section"), KindSection)
- require.Equal(t, Kind("taxonomy"), KindTaxonomy)
- require.Equal(t, Kind("taxonomyTerm"), KindTaxonomyTerm)
-
- require.False(t, KindPage.IsNode())
- require.True(t, KindHome.IsNode())
+ require.Equal(t, "page", KindPage)
+ require.Equal(t, "home", KindHome)
+ require.Equal(t, "section", KindSection)
+ require.Equal(t, "taxonomy", KindTaxonomy)
+ require.Equal(t, "taxonomyTerm", KindTaxonomyTerm)
+
}
func TestChompBOM(t *testing.T) {
diff --git a/hugolib/pagination.go b/hugolib/pagination.go
index c1f19212d..3e3bb59c6 100644
--- a/hugolib/pagination.go
+++ b/hugolib/pagination.go
@@ -260,7 +260,7 @@ func splitPageGroups(pageGroups PagesGroup, size int) []paginatedElement {
// Paginator gets this Node's paginator if it's already created.
// If it's not, one will be created with all pages in Data["Pages"].
func (n *Page) Paginator(options ...interface{}) (*Pager, error) {
- if !n.Kind.IsNode() {
+ if !n.IsNode() {
return nil, fmt.Errorf("Paginators not supported for pages of type %q (%q)", n.Kind, n.Title)
}
pagerSize, err := resolvePagerSize(options...)
@@ -303,7 +303,7 @@ func (n *Page) Paginator(options ...interface{}) (*Pager, error) {
// If it's not, one will be created with the qiven sequence.
// Note that repeated calls will return the same result, even if the sequence is different.
func (n *Page) Paginate(seq interface{}, options ...interface{}) (*Pager, error) {
- if !n.Kind.IsNode() {
+ if !n.IsNode() {
return nil, fmt.Errorf("Paginators not supported for pages of type %q (%q)", n.Kind, n.Title)
}
diff --git a/hugolib/site.go b/hugolib/site.go
index e7f009ac7..c8d38b909 100644
--- a/hugolib/site.go
+++ b/hugolib/site.go
@@ -1561,7 +1561,7 @@ func (s *Site) assembleSections() {
}
}
-func (s *Site) nodeTypeFromSections(sections []string) Kind {
+func (s *Site) nodeTypeFromSections(sections []string) string {
if _, isTaxonomy := s.Taxonomies[sections[0]]; isTaxonomy {
if len(sections) == 1 {
return KindTaxonomyTerm
@@ -1662,7 +1662,7 @@ func (s *Site) Stats() {
// This will return nil when no page could be found.
//
// The valid page types are: home, section, taxonomy and taxonomyTerm
-func (s *SiteInfo) GetPage(typ Kind, path ...string) *Page {
+func (s *SiteInfo) GetPage(typ string, path ...string) *Page {
return s.getPage(typ, path...)
}