diff options
| author | Christine Dodrill <me@christine.website> | 2019-05-21 21:47:09 -0400 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2019-05-21 21:47:09 -0400 |
| commit | d64c666255665c5e03812c47e70d6edb46432510 (patch) | |
| tree | 1dd44e77f7d57a5a52ccfa0fe96fc073cb3da2fe /cmd | |
| parent | a275fc754b4c82a81ba06f0f3cbddb39946db1ac (diff) | |
| download | xesite-d64c666255665c5e03812c47e70d6edb46432510.tar.xz xesite-d64c666255665c5e03812c47e70d6edb46432510.zip | |
add talks support (#40)
* add talks support
* gosimplify
Diffstat (limited to 'cmd')
| -rw-r--r-- | cmd/site/html.go | 46 | ||||
| -rw-r--r-- | cmd/site/main.go | 20 |
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) { |
