mirror of
https://github.com/writefreely/writefreely
synced 2024-11-10 11:24:13 +00:00
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
This commit is contained in:
parent
ba3cb4b4ff
commit
f541f72224
2 changed files with 40 additions and 7 deletions
41
posts.go
41
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: `<p class="msg">This page is missing.</p>
|
||||
|
||||
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)
|
||||
}
|
||||
|
|
|
@ -8,6 +8,7 @@
|
|||
<link rel="stylesheet" type="text/css" href="/css/write.css" />
|
||||
<link rel="shortcut icon" href="/favicon.ico" />
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
||||
{{ if .IsFound }}
|
||||
<link rel="canonical" href="{{.CanonicalURL}}" />
|
||||
<meta name="generator" content="WriteFreely">
|
||||
<meta name="title" content="{{.PlainDisplayTitle}} {{localhtml "title dash" .Language.String}} {{if .Collection.Title}}{{.Collection.Title}}{{else}}{{.Collection.Alias}}{{end}}">
|
||||
|
@ -29,6 +30,7 @@
|
|||
<meta property="og:updated_time" content="{{.Created8601}}" />
|
||||
{{range .Images}}<meta property="og:image" content="{{.}}" />{{else}}<meta property="og:image" content="{{.Collection.AvatarURL}}">{{end}}
|
||||
<meta property="article:published_time" content="{{.Created8601}}">
|
||||
{{ end }}
|
||||
{{if .Collection.StyleSheet}}<style type="text/css">{{.Collection.StyleSheetDisplay}}</style>{{end}}
|
||||
|
||||
{{if .Collection.RenderMathJax}}
|
||||
|
@ -50,14 +52,14 @@
|
|||
{{if .PinnedPosts}}
|
||||
{{range .PinnedPosts}}<a class="pinned{{if eq .Slug.String $.Slug.String}} selected{{end}}" href="{{if not $.SingleUser}}/{{$.Collection.Alias}}/{{.Slug.String}}{{else}}{{.CanonicalURL}}{{end}}">{{.PlainDisplayTitle}}</a>{{end}}
|
||||
{{end}}
|
||||
{{ if .IsOwner }}<span class="views" dir="ltr"><strong>{{largeNumFmt .Views}}</strong> {{pluralize "view" "views" .Views}}</span>
|
||||
{{ if and .IsOwner .IsFound }}<span class="views" dir="ltr"><strong>{{largeNumFmt .Views}}</strong> {{pluralize "view" "views" .Views}}</span>
|
||||
<a class="xtra-feature" href="/{{if not .SingleUser}}{{.Collection.Alias}}/{{end}}{{.Slug.String}}/edit" dir="{{.Direction}}">Edit</a>
|
||||
{{if .IsPinned}}<a class="xtra-feature unpin" href="/{{.Collection.Alias}}/{{.Slug.String}}/unpin" dir="{{.Direction}}" onclick="unpinPost(event, '{{.ID}}')">Unpin</a>{{end}}
|
||||
{{ end }}
|
||||
</nav>
|
||||
</header>
|
||||
|
||||
<article id="post-body" class="{{.Font}} h-entry">{{if .IsScheduled}}<p class="badge">Scheduled</p>{{end}}{{if .Title.String}}<h2 id="title" class="p-name">{{.FormattedDisplayTitle}}</h2>{{end}}<div class="e-content">{{.HTMLContent}}</div></article>
|
||||
<article id="post-body" class="{{.Font}} h-entry {{if not .IsFound}}error-page{{end}}">{{if .IsScheduled}}<p class="badge">Scheduled</p>{{end}}{{if .Title.String}}<h2 id="title" class="p-name">{{.FormattedDisplayTitle}}</h2>{{end}}<div class="e-content">{{.HTMLContent}}</div></article>
|
||||
|
||||
{{ if .Collection.ShowFooterBranding }}
|
||||
<footer dir="ltr"><hr><nav><p style="font-size: 0.9em">{{localhtml "published with write.as" .Language.String}}</p></nav></footer>
|
||||
|
|
Loading…
Reference in a new issue