aboutsummaryrefslogtreecommitdiff
path: root/cmd
diff options
context:
space:
mode:
authorChristine Dodrill <me@christine.website>2019-05-21 21:47:09 -0400
committerGitHub <noreply@github.com>2019-05-21 21:47:09 -0400
commitd64c666255665c5e03812c47e70d6edb46432510 (patch)
tree1dd44e77f7d57a5a52ccfa0fe96fc073cb3da2fe /cmd
parenta275fc754b4c82a81ba06f0f3cbddb39946db1ac (diff)
downloadxesite-d64c666255665c5e03812c47e70d6edb46432510.tar.xz
xesite-d64c666255665c5e03812c47e70d6edb46432510.zip
add talks support (#40)
* add talks support * gosimplify
Diffstat (limited to 'cmd')
-rw-r--r--cmd/site/html.go46
-rw-r--r--cmd/site/main.go20
2 files changed, 63 insertions, 3 deletions
diff --git a/cmd/site/html.go b/cmd/site/html.go
index 9f208af..b3fa484 100644
--- a/cmd/site/html.go
+++ b/cmd/site/html.go
@@ -66,9 +66,53 @@ func (s *Site) renderTemplatePage(templateFname string, data interface{}) http.H
var postView = promauto.NewCounterVec(prometheus.CounterOpts{
Name: "posts_viewed",
- Help: "The number of views per post",
+ Help: "The number of views per post or talk",
}, []string{"base"})
+func (s *Site) showTalk(w http.ResponseWriter, r *http.Request) {
+ if r.RequestURI == "/talks/" {
+ http.Redirect(w, r, "/talks", http.StatusSeeOther)
+ return
+ }
+
+ cmp := r.URL.Path[1:]
+ var p blog.Post
+ var found bool
+ for _, pst := range s.Talks {
+ if pst.Link == cmp {
+ p = pst
+ found = true
+ }
+ }
+
+ if !found {
+ w.WriteHeader(http.StatusNotFound)
+ s.renderTemplatePage("error.html", "no such post found: "+r.RequestURI).ServeHTTP(w, r)
+ return
+ }
+
+ const dateFormat = `2006-01-02`
+ h := s.renderTemplatePage("talkpost.html", struct {
+ Title string
+ Link string
+ BodyHTML template.HTML
+ Date string
+ SlidesLink string
+ }{
+ Title: p.Title,
+ Link: p.Link,
+ BodyHTML: p.BodyHTML,
+ Date: p.Date.Format(dateFormat),
+ SlidesLink: p.SlidesLink,
+ })
+
+ if h == nil {
+ panic("how did we get here?")
+ }
+
+ h.ServeHTTP(w, r)
+}
+
func (s *Site) showPost(w http.ResponseWriter, r *http.Request) {
if r.RequestURI == "/blog/" {
http.Redirect(w, r, "/blog", http.StatusSeeOther)
diff --git a/cmd/site/main.go b/cmd/site/main.go
index b562017..055320e 100644
--- a/cmd/site/main.go
+++ b/cmd/site/main.go
@@ -6,6 +6,7 @@ import (
"io/ioutil"
"net/http"
"os"
+ "sort"
"time"
"christine.website/internal/blog"
@@ -54,6 +55,7 @@ func main() {
// Site is the parent object for https://christine.website's backend.
type Site struct {
Posts blog.Posts
+ Talks blog.Posts
Resume template.HTML
rssFeed *feeds.Feed
@@ -134,12 +136,24 @@ func Build() (*Site, error) {
xffmw: xffmw,
}
- posts, err := blog.LoadPosts("./blog/")
+ posts, err := blog.LoadPosts("./blog/", "blog")
if err != nil {
return nil, err
}
s.Posts = posts
+ talks, err := blog.LoadPosts("./talks", "talks")
+ if err != nil {
+ return nil, err
+ }
+ s.Talks = talks
+
+ var everything blog.Posts
+ everything = append(everything, posts...)
+ everything = append(everything, talks...)
+
+ sort.Sort(sort.Reverse(everything))
+
resumeData, err := ioutil.ReadFile("./static/resume/resume.md")
if err != nil {
return nil, err
@@ -147,7 +161,7 @@ func Build() (*Site, error) {
s.Resume = template.HTML(blackfriday.Run(resumeData))
- for _, item := range s.Posts {
+ for _, item := range everything {
s.rssFeed.Items = append(s.rssFeed.Items, &feeds.Item{
Title: item.Title,
Link: &feeds.Link{Href: "https://christine.website/" + item.Link},
@@ -184,11 +198,13 @@ func Build() (*Site, error) {
s.mux.Handle("/metrics", promhttp.Handler())
s.mux.Handle("/resume", middleware.Metrics("resume", s.renderTemplatePage("resume.html", s.Resume)))
s.mux.Handle("/blog", middleware.Metrics("blog", s.renderTemplatePage("blogindex.html", s.Posts)))
+ s.mux.Handle("/talks", middleware.Metrics("talks", s.renderTemplatePage("talkindex.html", s.Talks)))
s.mux.Handle("/contact", middleware.Metrics("contact", s.renderTemplatePage("contact.html", nil)))
s.mux.Handle("/blog.rss", middleware.Metrics("blog.rss", http.HandlerFunc(s.createFeed)))
s.mux.Handle("/blog.atom", middleware.Metrics("blog.atom", http.HandlerFunc(s.createAtom)))
s.mux.Handle("/blog.json", middleware.Metrics("blog.json", http.HandlerFunc(s.createJSONFeed)))
s.mux.Handle("/blog/", middleware.Metrics("blogpost", http.HandlerFunc(s.showPost)))
+ s.mux.Handle("/talks/", middleware.Metrics("talks", http.HandlerFunc(s.showTalk)))
s.mux.Handle("/css/", http.FileServer(http.Dir(".")))
s.mux.Handle("/static/", http.FileServer(http.Dir(".")))
s.mux.HandleFunc("/sw.js", func(w http.ResponseWriter, r *http.Request) {