diff options
Diffstat (limited to 'resources/kinds/kinds.go')
-rw-r--r-- | resources/kinds/kinds.go | 107 |
1 files changed, 107 insertions, 0 deletions
diff --git a/resources/kinds/kinds.go b/resources/kinds/kinds.go new file mode 100644 index 000000000..b1d1c18f4 --- /dev/null +++ b/resources/kinds/kinds.go @@ -0,0 +1,107 @@ +// Copyright 2023 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 kinds + +import ( + "sort" + "strings" +) + +const ( + KindPage = "page" + + // The rest are node types; home page, sections etc. + + KindHome = "home" + KindSection = "section" + + // Note that before Hugo 0.73 these were confusingly named + // taxonomy (now: term) + // taxonomyTerm (now: taxonomy) + KindTaxonomy = "taxonomy" + KindTerm = "term" + + // The following are (currently) temporary nodes, + // i.e. nodes we create just to render in isolation. + KindRSS = "rss" + KindSitemap = "sitemap" + KindRobotsTXT = "robotstxt" + Kind404 = "404" +) + +var ( + // This is all the kinds we can expect to find in .Site.Pages. + AllKindsInPages []string + // This is all the kinds, including the temporary ones. + AllKinds []string +) + +func init() { + for k := range kindMapMain { + AllKindsInPages = append(AllKindsInPages, k) + AllKinds = append(AllKinds, k) + } + + for k := range kindMapTemporary { + AllKinds = append(AllKinds, k) + } + + // Sort the slices for determinism. + sort.Strings(AllKindsInPages) + sort.Strings(AllKinds) +} + +var kindMapMain = map[string]string{ + KindPage: KindPage, + KindHome: KindHome, + KindSection: KindSection, + KindTaxonomy: KindTaxonomy, + KindTerm: KindTerm, + + // Legacy, pre v0.53.0. + "taxonomyterm": KindTaxonomy, +} + +var kindMapTemporary = map[string]string{ + KindRSS: KindRSS, + KindSitemap: KindSitemap, + KindRobotsTXT: KindRobotsTXT, + Kind404: Kind404, +} + +// GetKindMain gets the page kind given a string, empty if not found. +// Note that this will not return any temporary kinds (e.g. robotstxt). +func GetKindMain(s string) string { + return kindMapMain[strings.ToLower(s)] +} + +// GetKindAny gets the page kind given a string, empty if not found. +func GetKindAny(s string) string { + if pkind := GetKindMain(s); pkind != "" { + return pkind + } + return kindMapTemporary[strings.ToLower(s)] +} + +// IsDeprecated returns whether the given kind is deprecated. +func IsDeprecated(s string) bool { + s = strings.ToLower(s) + + switch s { + case "taxonomyterm": + return true + default: + return false + } +} |