hmn/src/website/roles.go

108 lines
2.6 KiB
Go

package website
import (
"net/http"
"git.handmade.network/hmn/hmn/src/hmnurl"
"git.handmade.network/hmn/hmn/src/templates"
)
type Role struct {
Slug string
Name string
Description string
Template string
Url string // weird and redundant
RedirectSlug string
}
var roles = []Role{
{
Slug: "education",
Name: "Education Lead",
Description: "Lead our flagship education initiative and make sure we're putting out a steady stream of content.",
Template: "role_education.html",
Url: hmnurl.BuildStaffRole("education"),
},
{
Slug: "advocacy",
Name: "Advocacy Lead",
Description: "Put the Handmade ethos into the world by advocating for better software and better programming practices.",
Template: "role_advocacy.html",
Url: hmnurl.BuildStaffRole("advocacy"),
},
{
Slug: "design",
Name: "Design Lead",
Description: "Set the visual direction for everything we do. Make key art, design website features, and more.",
Template: "role_design.html",
Url: hmnurl.BuildStaffRole("design"),
},
}
const StaffRolesIndexName = "Roles"
func StaffRolesIndex(c *RequestContext) ResponseData {
type TemplateData struct {
templates.BaseData
Roles []Role
}
var res ResponseData
res.MustWriteTemplate("roles.html", TemplateData{
BaseData: getBaseDataAutocrumb(c, StaffRolesIndexName),
Roles: roles,
}, c.Perf)
return res
}
func StaffRole(c *RequestContext) ResponseData {
type TemplateData struct {
templates.BaseData
Role Role
OtherRoles []Role
}
slug := c.PathParams["slug"]
role, ok := getRole(slug)
if !ok {
return FourOhFour(c) // TODO: Volunteering-specific 404
}
if role.RedirectSlug != "" {
return c.Redirect(hmnurl.BuildStaffRole(role.RedirectSlug), http.StatusSeeOther)
}
var otherRoles []Role
for _, otherRole := range roles {
if otherRole.Slug == role.Slug {
continue
}
otherRoles = append(otherRoles, otherRole)
if len(otherRoles) >= 3 {
break
}
}
var res ResponseData
res.MustWriteTemplate(role.Template, TemplateData{
BaseData: getBaseData(c, role.Name, []templates.Breadcrumb{
{Name: StaffRolesIndexName, Url: hmnurl.BuildStaffRolesIndex()},
{Name: role.Name, Url: ""},
}),
Role: role,
OtherRoles: otherRoles,
}, c.Perf)
return res
}
func getRole(slug string) (Role, bool) {
for _, role := range roles {
if role.Slug == slug {
return role, true
}
}
return Role{}, false
}