From f541f72224eb294eec4d4de81073145c7e18a931 Mon Sep 17 00:00:00 2001 From: Matt Baer Date: Sun, 21 Jul 2019 15:15:52 -0400 Subject: [PATCH] Style collection 404 page like rest of blog This displays the "page is missing" text within the same page as any other blog post, keeping customizations, pinned pages, and general blog navigation. Ref T493 --- posts.go | 41 +++++++++++++++++++++++++++++----- templates/collection-post.tmpl | 6 +++-- 2 files changed, 40 insertions(+), 7 deletions(-) diff --git a/posts.go b/posts.go index 07902ce..518a07e 100644 --- a/posts.go +++ b/posts.go @@ -1295,14 +1295,32 @@ func viewCollectionPost(app *App, w http.ResponseWriter, r *http.Request) error coll.Owner = owner } + postFound := true p, err := app.db.GetPost(slug, coll.ID) if err != nil { - if err == ErrCollectionPageNotFound && slug == "feed" { - // User tried to access blog feed without a trailing slash, and - // there's no post with a slug "feed" - return impart.HTTPError{http.StatusFound, c.CanonicalURL() + "/feed/"} + if err == ErrCollectionPageNotFound { + postFound = false + + if slug == "feed" { + // User tried to access blog feed without a trailing slash, and + // there's no post with a slug "feed" + return impart.HTTPError{http.StatusFound, c.CanonicalURL() + "/feed/"} + } + + po := &Post{ + Slug: null.NewString(slug, true), + Font: "norm", + Language: zero.NewString("en", true), + RTL: zero.NewBool(false, true), + Content: `

This page is missing.

+ +Are you sure it was ever here?`, + } + pp := po.processPost() + p = &pp + } else { + return err } - return err } p.IsOwner = owner != nil && p.OwnerID.Valid && owner.ID == p.OwnerID.Int64 p.Collection = coll @@ -1324,11 +1342,18 @@ func viewCollectionPost(app *App, w http.ResponseWriter, r *http.Request) error contentType = "text/markdown" } w.Header().Set("Content-Type", fmt.Sprintf("%s; charset=utf-8", contentType)) + if !postFound { + w.WriteHeader(http.StatusNotFound) + } + if isMarkdown && p.Title.String != "" { fmt.Fprintf(w, "# %s\n\n", p.Title.String) } fmt.Fprint(w, p.Content) } else if strings.Contains(r.Header.Get("Accept"), "application/activity+json") { + if !postFound { + w.WriteHeader(http.StatusNotFound) + } p.extractData() ap := p.ActivityObject() ap.Context = []interface{}{activitystreams.Namespace} @@ -1345,14 +1370,20 @@ func viewCollectionPost(app *App, w http.ResponseWriter, r *http.Request) error IsPinned bool IsCustomDomain bool PinnedPosts *[]PublicPost + IsFound bool }{ PublicPost: p, StaticPage: pageForReq(app, r), IsOwner: cr.isCollOwner, IsCustomDomain: cr.isCustomDomain, + IsFound: postFound, } tp.PinnedPosts, _ = app.db.GetPinnedPosts(coll) tp.IsPinned = len(*tp.PinnedPosts) > 0 && PostsContains(tp.PinnedPosts, p) + + if !postFound { + w.WriteHeader(http.StatusNotFound) + } if err := templates["collection-post"].ExecuteTemplate(w, "post", tp); err != nil { log.Error("Error in collection-post template: %v", err) } diff --git a/templates/collection-post.tmpl b/templates/collection-post.tmpl index 06bfa67..7075226 100644 --- a/templates/collection-post.tmpl +++ b/templates/collection-post.tmpl @@ -8,6 +8,7 @@ + {{ if .IsFound }} @@ -29,6 +30,7 @@ {{range .Images}}{{else}}{{end}} + {{ end }} {{if .Collection.StyleSheet}}{{end}} {{if .Collection.RenderMathJax}} @@ -50,14 +52,14 @@ {{if .PinnedPosts}} {{range .PinnedPosts}}{{.PlainDisplayTitle}}{{end}} {{end}} - {{ if .IsOwner }}{{largeNumFmt .Views}} {{pluralize "view" "views" .Views}} + {{ if and .IsOwner .IsFound }}{{largeNumFmt .Views}} {{pluralize "view" "views" .Views}} Edit {{if .IsPinned}}Unpin{{end}} {{ end }} -
{{if .IsScheduled}}

Scheduled

{{end}}{{if .Title.String}}

{{.FormattedDisplayTitle}}

{{end}}
{{.HTMLContent}}
+
{{if .IsScheduled}}

Scheduled

{{end}}{{if .Title.String}}

{{.FormattedDisplayTitle}}

{{end}}
{{.HTMLContent}}
{{ if .Collection.ShowFooterBranding }}