hmn/src/website/breadcrumb_helper.go

64 lines
2.0 KiB
Go

package website
import (
"git.handmade.network/hmn/hmn/src/hmnurl"
"git.handmade.network/hmn/hmn/src/models"
"git.handmade.network/hmn/hmn/src/templates"
)
func ProjectBreadcrumb(projectUrlContext *hmnurl.UrlContext) templates.Breadcrumb {
return templates.Breadcrumb{
Name: projectUrlContext.ProjectName,
Url: projectUrlContext.BuildHomepage(),
}
}
func ForumBreadcrumb(projectUrlContext *hmnurl.UrlContext) templates.Breadcrumb {
return templates.Breadcrumb{
Name: "Forums",
Url: projectUrlContext.BuildForum(nil, 1),
}
}
func SubforumBreadcrumbs(projectUrlContext *hmnurl.UrlContext, lineageBuilder *models.SubforumLineageBuilder, subforumID int) []templates.Breadcrumb {
var result []templates.Breadcrumb
result = []templates.Breadcrumb{
ProjectBreadcrumb(projectUrlContext),
ForumBreadcrumb(projectUrlContext),
}
subforums := lineageBuilder.GetSubforumLineage(subforumID)
slugs := lineageBuilder.GetSubforumLineageSlugs(subforumID)
for i, subforum := range subforums {
result = append(result, templates.Breadcrumb{
Name: subforum.Name,
Url: projectUrlContext.BuildForum(slugs[0:i+1], 1),
})
}
return result
}
func ForumThreadBreadcrumbs(projectUrlContext *hmnurl.UrlContext, lineageBuilder *models.SubforumLineageBuilder, thread *models.Thread) []templates.Breadcrumb {
result := SubforumBreadcrumbs(projectUrlContext, lineageBuilder, *thread.SubforumID)
result = append(result, templates.Breadcrumb{
Name: thread.Title,
Url: projectUrlContext.BuildForumThread(lineageBuilder.GetSubforumLineageSlugs(*thread.SubforumID), thread.ID, thread.Title, 1),
})
return result
}
func BlogBreadcrumb(projectUrlContext *hmnurl.UrlContext) templates.Breadcrumb {
return templates.Breadcrumb{
Name: "Blog",
Url: projectUrlContext.BuildBlog(1),
}
}
func BlogThreadBreadcrumbs(projectUrlContext *hmnurl.UrlContext, thread *models.Thread) []templates.Breadcrumb {
result := []templates.Breadcrumb{
BlogBreadcrumb(projectUrlContext),
{Name: thread.Title, Url: projectUrlContext.BuildBlogThread(thread.ID, thread.Title)},
}
return result
}