About {{ .Project.Name }}
diff --git a/src/templates/types.go b/src/templates/types.go
index b53e832c..cac1a3e0 100644
--- a/src/templates/types.go
+++ b/src/templates/types.go
@@ -75,6 +75,7 @@ type Header struct {
Project *ProjectHeader
Breadcrumbs []Breadcrumb
+ Actions []Action
SuppressBreadcrumbs bool
BannerEvent *BannerEvent
@@ -451,6 +452,11 @@ type Breadcrumb struct {
Project *Project
}
+type Action struct {
+ Name, Url string
+ Icon string
+}
+
type Pagination struct {
Current int
Total int
diff --git a/src/website/base_data.go b/src/website/base_data.go
index fb8c54b4..6036e775 100644
--- a/src/website/base_data.go
+++ b/src/website/base_data.go
@@ -43,6 +43,7 @@ func getBaseData(c *RequestContext, title string, breadcrumbs []templates.Breadc
loginUrl = hmnurl.BuildLoginPage(c.FullUrl(), "")
}
+ // Prepend the project breadcrumb
if !c.UrlContext.IsHMN() {
projectUrl := c.UrlContext.BuildHomepage()
rootBreadcrumb := templates.Breadcrumb{
diff --git a/src/website/blogs.go b/src/website/blogs.go
index b0b6949d..2bca419a 100644
--- a/src/website/blogs.go
+++ b/src/website/blogs.go
@@ -24,9 +24,6 @@ func BlogIndex(c *RequestContext) ResponseData {
FirstPost *templates.BlogIndexEntry
Posts []templates.BlogIndexEntry
Pagination templates.Pagination
-
- CanCreatePost bool
- NewPostUrl string
}
const postsPerPage = 21
@@ -93,6 +90,13 @@ func BlogIndex(c *RequestContext) ResponseData {
canCreate = c.CurrentUser.IsStaff || isProjectOwner
}
+ if canCreate {
+ baseData.Header.Actions = append(baseData.Header.Actions, templates.Action{
+ Name: "Create Post",
+ Url: c.UrlContext.BuildBlogNewThread(),
+ Icon: "add-small",
+ })
+ }
var res ResponseData
res.MustWriteTemplate("blog_index.html", blogIndexData{
@@ -108,9 +112,6 @@ func BlogIndex(c *RequestContext) ResponseData {
PreviousUrl: c.UrlContext.BuildBlog(utils.Clamp(1, page-1, numPages)),
NextUrl: c.UrlContext.BuildBlog(utils.Clamp(1, page+1, numPages)),
},
-
- CanCreatePost: canCreate,
- NewPostUrl: c.UrlContext.BuildBlogNewThread(),
}, c.Perf)
return res
}
@@ -179,6 +180,23 @@ func BlogThread(c *RequestContext) ResponseData {
Value: posts[0].Post.PreviewPlaintext,
})
+ mainPost := templatePosts[0]
+ canEdit := c.CurrentUser != nil && (mainPost.Author.ID == c.CurrentUser.ID || c.CurrentUser.IsStaff)
+ if canEdit {
+ baseData.Header.Actions = append(baseData.Header.Actions, []templates.Action{
+ {
+ Name: "Edit",
+ Url: mainPost.EditUrl,
+ Icon: "edit-line",
+ },
+ {
+ Name: "Delete",
+ Url: mainPost.DeleteUrl,
+ Icon: "delete",
+ },
+ }...)
+ }
+
var res ResponseData
res.MustWriteTemplate("blog_post.html", blogPostData{
BaseData: baseData,
diff --git a/src/website/breadcrumb_helper.go b/src/website/breadcrumb_helper.go
index b9d74d6e..0759672c 100644
--- a/src/website/breadcrumb_helper.go
+++ b/src/website/breadcrumb_helper.go
@@ -22,9 +22,6 @@ func ForumBreadcrumb(projectUrlContext *hmnurl.UrlContext) templates.Breadcrumb
func SubforumBreadcrumbs(projectUrlContext *hmnurl.UrlContext, lineageBuilder *models.SubforumLineageBuilder, subforumID int) []templates.Breadcrumb {
var result []templates.Breadcrumb
- // if projectUrlContext.ProjectID != models.HMNProjectID {
- // result = append(result, ProjectBreadcrumb(projectUrlContext))
- // }
result = append(result, ForumBreadcrumb(projectUrlContext))
subforums := lineageBuilder.GetSubforumLineage(subforumID)
slugs := lineageBuilder.GetSubforumLineageSlugs(subforumID)
diff --git a/src/website/hsf.go b/src/website/hsf.go
index 2184f0b4..78e61c8e 100644
--- a/src/website/hsf.go
+++ b/src/website/hsf.go
@@ -1,6 +1,7 @@
package website
import (
+ "git.handmade.network/hmn/hmn/src/hmnurl"
"git.handmade.network/hmn/hmn/src/templates"
)
@@ -11,13 +12,23 @@ func HSFLanding(c *RequestContext) ResponseData {
}
func HSFDetails(c *RequestContext) ResponseData {
+ breadcrumbs := []templates.Breadcrumb{
+ hsfBaseBreadcrumb,
+ {Name: "Details", Url: hmnurl.BuildHSFDetails()},
+ }
+
var res ResponseData
- res.MustWriteTemplate("hsf_details.html", getHSFBaseData(c, "Details", nil), c.Perf)
+ res.MustWriteTemplate("hsf_details.html", getHSFBaseData(c, "Details", breadcrumbs), c.Perf)
return res
}
func HSFMembership(c *RequestContext) ResponseData {
- baseData := getHSFBaseData(c, "Membership", nil)
+ breadcrumbs := []templates.Breadcrumb{
+ hsfBaseBreadcrumb,
+ {Name: "Membership", Url: hmnurl.BuildHSFMembership()},
+ }
+
+ baseData := getHSFBaseData(c, "Membership", breadcrumbs)
baseData.HideMembershipCTA = true
var res ResponseData
@@ -25,6 +36,8 @@ func HSFMembership(c *RequestContext) ResponseData {
return res
}
+var hsfBaseBreadcrumb = templates.Breadcrumb{Name: "Handmade Software Foundation", Url: hmnurl.BuildHSFLanding()}
+
func getHSFBaseData(c *RequestContext, title string, breadcrumbs []templates.Breadcrumb) templates.BaseData {
baseData := getBaseData(c, title, breadcrumbs)
baseData.SiteTitleOverride = "Handmade Software Foundation"
diff --git a/src/website/projects.go b/src/website/projects.go
index 3f882f71..2af39423 100644
--- a/src/website/projects.go
+++ b/src/website/projects.go
@@ -377,6 +377,16 @@ func ProjectHomepage(c *RequestContext) ResponseData {
if err != nil {
return c.ErrorResponse(http.StatusInternalServerError, oops.New(err, "failed to fetch following status"))
}
+
+ if c.CurrentUserCanEditCurrentProject {
+ templateData.Header.Actions = []templates.Action{
+ {
+ Name: "Edit Project",
+ Url: c.UrlContext.BuildProjectEdit(""),
+ Icon: "edit-line",
+ },
+ }
+ }
}
templateData.FollowUrl = followUrl
templateData.Following = following