summaryrefslogtreecommitdiffstats
path: root/resources/kinds/kinds.go
diff options
context:
space:
mode:
Diffstat (limited to 'resources/kinds/kinds.go')
-rw-r--r--resources/kinds/kinds.go107
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
+ }
+}