initial support for tags and series
This commit is contained in:
parent
2007492c49
commit
1740a44b82
|
@ -1,6 +1,7 @@
|
||||||
---
|
---
|
||||||
title: "Blind Men and an Elephant"
|
title: "Blind Men and an Elephant"
|
||||||
date: 2018-11-29
|
date: 2018-11-29
|
||||||
|
series: conlangs
|
||||||
---
|
---
|
||||||
|
|
||||||
# Blind Men and an Elephant
|
# Blind Men and an Elephant
|
||||||
|
|
|
@ -1,6 +1,7 @@
|
||||||
---
|
---
|
||||||
title: How I Converted my Brain fMRI to a 3D Model
|
title: How I Converted my Brain fMRI to a 3D Model
|
||||||
date: 2019-08-23
|
date: 2019-08-23
|
||||||
|
series: howto
|
||||||
---
|
---
|
||||||
|
|
||||||
# How I Converted my Brain fMRI to a 3D Model
|
# How I Converted my Brain fMRI to a 3D Model
|
||||||
|
|
|
@ -2,6 +2,7 @@
|
||||||
title: "Chaos Magick Debugging"
|
title: "Chaos Magick Debugging"
|
||||||
date: 2018-11-13
|
date: 2018-11-13
|
||||||
thanks: CelestialBoon
|
thanks: CelestialBoon
|
||||||
|
series: magick
|
||||||
---
|
---
|
||||||
|
|
||||||
# Chaos Magick Debugging
|
# Chaos Magick Debugging
|
||||||
|
|
|
@ -1,6 +1,7 @@
|
||||||
---
|
---
|
||||||
title: My Experience Cursing Out God
|
title: My Experience Cursing Out God
|
||||||
date: 2018-11-21
|
date: 2018-11-21
|
||||||
|
series: dreams
|
||||||
---
|
---
|
||||||
|
|
||||||
# My Experience Cursing Out God
|
# My Experience Cursing Out God
|
||||||
|
@ -37,4 +38,4 @@ I was floored and must have amused Him, given that He started to chuckle: "Creat
|
||||||
|
|
||||||
He looked at his wrist as if He was looking at a watch, even though He was not wearing one. "Oh dear, it looks like it's time for you to wake up now. Remember Creator, no time but the present." He snapped His hands and then the volcano started to erupt.
|
He looked at his wrist as if He was looking at a watch, even though He was not wearing one. "Oh dear, it looks like it's time for you to wake up now. Remember Creator, no time but the present." He snapped His hands and then the volcano started to erupt.
|
||||||
|
|
||||||
The world instantly snapped out of existence and I awoke in a sweat, my blankets evenly distributed in my room.
|
The world instantly snapped out of existence and I awoke in a sweat, my blankets evenly distributed in my room.
|
||||||
|
|
|
@ -2,6 +2,7 @@
|
||||||
title: Death
|
title: Death
|
||||||
date: 2018-08-19
|
date: 2018-08-19
|
||||||
thanks: Sygma
|
thanks: Sygma
|
||||||
|
series: magick
|
||||||
---
|
---
|
||||||
|
|
||||||
# Death
|
# Death
|
||||||
|
|
|
@ -3,6 +3,7 @@ title: Fear
|
||||||
date: 2018-07-24
|
date: 2018-07-24
|
||||||
thanks: CelestialBoon, no really this guy is amazing and doesn't get enough credit, I'm so grateful for him.
|
thanks: CelestialBoon, no really this guy is amazing and doesn't get enough credit, I'm so grateful for him.
|
||||||
for: Twilight Sparkle
|
for: Twilight Sparkle
|
||||||
|
series: stories
|
||||||
---
|
---
|
||||||
|
|
||||||
# Fear
|
# Fear
|
||||||
|
|
|
@ -1,6 +1,7 @@
|
||||||
---
|
---
|
||||||
title: A Formal Grammar of h
|
title: A Formal Grammar of h
|
||||||
date: 2019-05-19
|
date: 2019-05-19
|
||||||
|
series: conlangs
|
||||||
---
|
---
|
||||||
|
|
||||||
# A Formal Grammar of `h`
|
# A Formal Grammar of `h`
|
||||||
|
|
|
@ -1,6 +1,7 @@
|
||||||
---
|
---
|
||||||
title: Getting Started with Go
|
title: Getting Started with Go
|
||||||
date: 2015-01-28
|
date: 2015-01-28
|
||||||
|
series: howto
|
||||||
---
|
---
|
||||||
|
|
||||||
Getting Started with Go
|
Getting Started with Go
|
||||||
|
|
|
@ -3,6 +3,7 @@ title: Gratitude
|
||||||
date: 2018-07-20
|
date: 2018-07-20
|
||||||
thanks: CelestialBoon
|
thanks: CelestialBoon
|
||||||
for: Mother Aya
|
for: Mother Aya
|
||||||
|
series: magick
|
||||||
---
|
---
|
||||||
|
|
||||||
# Gratitude
|
# Gratitude
|
||||||
|
|
|
@ -1,6 +1,7 @@
|
||||||
---
|
---
|
||||||
title: How does into Meditation
|
title: How does into Meditation
|
||||||
date: 2017-12-10
|
date: 2017-12-10
|
||||||
|
series: when-then-zen
|
||||||
---
|
---
|
||||||
|
|
||||||
# How does into Meditation
|
# How does into Meditation
|
||||||
|
|
|
@ -1,6 +1,7 @@
|
||||||
---
|
---
|
||||||
title: How to Send Email with Nim
|
title: How to Send Email with Nim
|
||||||
date: 2019-08-28
|
date: 2019-08-28
|
||||||
|
series: howto
|
||||||
---
|
---
|
||||||
|
|
||||||
# How to Send Email with Nim
|
# How to Send Email with Nim
|
||||||
|
|
|
@ -1,6 +1,7 @@
|
||||||
---
|
---
|
||||||
title: How to Automate Discord Message Posting With Webhooks and Cron
|
title: How to Automate Discord Message Posting With Webhooks and Cron
|
||||||
date: 2018-03-29
|
date: 2018-03-29
|
||||||
|
series: howto
|
||||||
---
|
---
|
||||||
|
|
||||||
# How to Automate Discord Message Posting With Webhooks and Cron
|
# How to Automate Discord Message Posting With Webhooks and Cron
|
||||||
|
|
|
@ -1,6 +1,7 @@
|
||||||
---
|
---
|
||||||
title: How to Use User Mode Linux
|
title: How to Use User Mode Linux
|
||||||
date: 2019-07-07
|
date: 2019-07-07
|
||||||
|
series: howto
|
||||||
---
|
---
|
||||||
|
|
||||||
# How to Use User Mode Linux
|
# How to Use User Mode Linux
|
||||||
|
|
|
@ -1,6 +1,7 @@
|
||||||
---
|
---
|
||||||
title: "iPad Smart Keyboard: French Accents/Ligatures"
|
title: "iPad Smart Keyboard: French Accents/Ligatures"
|
||||||
date: 2019-05-10
|
date: 2019-05-10
|
||||||
|
series: howto
|
||||||
---
|
---
|
||||||
|
|
||||||
# iPad Smart Keyboard: French Accents/Ligatures
|
# iPad Smart Keyboard: French Accents/Ligatures
|
||||||
|
|
|
@ -1,6 +1,7 @@
|
||||||
---
|
---
|
||||||
title: "Land 1: Syscalls & File I/O"
|
title: "Land 1: Syscalls & File I/O"
|
||||||
date: 2018-06-18
|
date: 2018-06-18
|
||||||
|
series: olin
|
||||||
---
|
---
|
||||||
|
|
||||||
# Land 1: Syscalls & File I/O
|
# Land 1: Syscalls & File I/O
|
||||||
|
|
|
@ -2,6 +2,7 @@
|
||||||
title: Narrative of Sickness
|
title: Narrative of Sickness
|
||||||
date: 2018-08-13
|
date: 2018-08-13
|
||||||
for: awakening
|
for: awakening
|
||||||
|
series: magick
|
||||||
---
|
---
|
||||||
|
|
||||||
# Narrative of Sickness
|
# Narrative of Sickness
|
||||||
|
|
|
@ -1,6 +1,7 @@
|
||||||
---
|
---
|
||||||
title: "Olin: 1: Why"
|
title: "Olin: 1: Why"
|
||||||
date: 2018-09-01
|
date: 2018-09-01
|
||||||
|
series: olin
|
||||||
---
|
---
|
||||||
|
|
||||||
# [Olin][olin]: 1: Why
|
# [Olin][olin]: 1: Why
|
||||||
|
|
|
@ -1,6 +1,7 @@
|
||||||
---
|
---
|
||||||
title: "Olin: 2: The Future"
|
title: "Olin: 2: The Future"
|
||||||
date: 2018-09-05
|
date: 2018-09-05
|
||||||
|
series: olin
|
||||||
---
|
---
|
||||||
|
|
||||||
# [Olin](https://github.com/Xe/olin): 2: The Future
|
# [Olin](https://github.com/Xe/olin): 2: The Future
|
||||||
|
|
|
@ -2,6 +2,7 @@
|
||||||
title: "One Day"
|
title: "One Day"
|
||||||
date: 2018-11-01
|
date: 2018-11-01
|
||||||
for: "Nicole"
|
for: "Nicole"
|
||||||
|
series: stories
|
||||||
---
|
---
|
||||||
|
|
||||||
# One Day
|
# One Day
|
||||||
|
@ -24,4 +25,4 @@ It asked me "do that again", so I did. I did it more intensely than before someh
|
||||||
|
|
||||||
Probably the most significant part though was being told "I love you".
|
Probably the most significant part though was being told "I love you".
|
||||||
|
|
||||||
I felt **loved**. I still do. I try to love others the way I am loved.
|
I felt **loved**. I still do. I try to love others the way I am loved.
|
||||||
|
|
|
@ -1,6 +1,7 @@
|
||||||
---
|
---
|
||||||
title: The Saga of plt, Part 1
|
title: The Saga of plt, Part 1
|
||||||
date: 2015-02-14
|
date: 2015-02-14
|
||||||
|
series: plt
|
||||||
---
|
---
|
||||||
|
|
||||||
The Saga of plt, Part 1
|
The Saga of plt, Part 1
|
||||||
|
|
|
@ -1,6 +1,7 @@
|
||||||
---
|
---
|
||||||
title: The Saga of plt, Part 2
|
title: The Saga of plt, Part 2
|
||||||
date: 2015-02-14
|
date: 2015-02-14
|
||||||
|
series: plt
|
||||||
---
|
---
|
||||||
|
|
||||||
The Saga of plt, Part 2
|
The Saga of plt, Part 2
|
||||||
|
|
|
@ -1,6 +1,7 @@
|
||||||
---
|
---
|
||||||
title: "Instant Pot Quinoa Taco Bowls"
|
title: "Instant Pot Quinoa Taco Bowls"
|
||||||
date: 2019-08-16
|
date: 2019-08-16
|
||||||
|
series: recipes
|
||||||
---
|
---
|
||||||
|
|
||||||
# Instant Pot Quinoa Taco Bowls
|
# Instant Pot Quinoa Taco Bowls
|
||||||
|
|
|
@ -1,6 +1,7 @@
|
||||||
---
|
---
|
||||||
title: "Site to Site WireGuard: Part 1 - Names and Numbers"
|
title: "Site to Site WireGuard: Part 1 - Names and Numbers"
|
||||||
date: "2019-04-02"
|
date: "2019-04-02"
|
||||||
|
series: site-to-site-wireguard
|
||||||
---
|
---
|
||||||
|
|
||||||
# Site to Site WireGuard: Part 1 - Names and Numbers
|
# Site to Site WireGuard: Part 1 - Names and Numbers
|
||||||
|
|
|
@ -1,6 +1,7 @@
|
||||||
---
|
---
|
||||||
title: "Site to Site WireGuard: Part 2 - DNS"
|
title: "Site to Site WireGuard: Part 2 - DNS"
|
||||||
date: 2019-04-07
|
date: 2019-04-07
|
||||||
|
series: site-to-site-wireguard
|
||||||
---
|
---
|
||||||
|
|
||||||
# Site to Site WireGuard: Part 2 - DNS
|
# Site to Site WireGuard: Part 2 - DNS
|
||||||
|
|
|
@ -1,6 +1,7 @@
|
||||||
---
|
---
|
||||||
title: "Site to Site WireGuard: Part 3 - Custom TLS Certificate Authority"
|
title: "Site to Site WireGuard: Part 3 - Custom TLS Certificate Authority"
|
||||||
date: 2019-04-11
|
date: 2019-04-11
|
||||||
|
series: site-to-site-wireguard
|
||||||
---
|
---
|
||||||
|
|
||||||
# Site to Site WireGuard: Part 3 - Custom TLS Certificate Authority
|
# Site to Site WireGuard: Part 3 - Custom TLS Certificate Authority
|
||||||
|
|
|
@ -1,6 +1,7 @@
|
||||||
---
|
---
|
||||||
title: Tarot for Hackers
|
title: Tarot for Hackers
|
||||||
date: 2019-07-24
|
date: 2019-07-24
|
||||||
|
series: magick
|
||||||
---
|
---
|
||||||
|
|
||||||
# Tarot for Hackers
|
# Tarot for Hackers
|
||||||
|
|
|
@ -1,6 +1,7 @@
|
||||||
---
|
---
|
||||||
title: "TempleOS: 1 - Installation"
|
title: "TempleOS: 1 - Installation"
|
||||||
date: 2019-05-20
|
date: 2019-05-20
|
||||||
|
series: templeos
|
||||||
---
|
---
|
||||||
|
|
||||||
# TempleOS: 1 - Installation
|
# TempleOS: 1 - Installation
|
||||||
|
|
|
@ -1,6 +1,7 @@
|
||||||
---
|
---
|
||||||
title: "Ten Thousand Laughs"
|
title: "Ten Thousand Laughs"
|
||||||
date: "2018-12-01"
|
date: "2018-12-01"
|
||||||
|
series: conlangs
|
||||||
---
|
---
|
||||||
|
|
||||||
# Ten Thousand Laughs
|
# Ten Thousand Laughs
|
||||||
|
|
|
@ -1,6 +1,7 @@
|
||||||
---
|
---
|
||||||
title: The Cult of Kubernetes
|
title: The Cult of Kubernetes
|
||||||
date: 2019-09-07
|
date: 2019-09-07
|
||||||
|
series: howto
|
||||||
---
|
---
|
||||||
|
|
||||||
# The Cult of Kubernetes
|
# The Cult of Kubernetes
|
||||||
|
|
|
@ -1,6 +1,7 @@
|
||||||
---
|
---
|
||||||
title: The Service is Already Down
|
title: The Service is Already Down
|
||||||
date: 2018-10-13
|
date: 2018-10-13
|
||||||
|
series: stories
|
||||||
---
|
---
|
||||||
|
|
||||||
# The Service is Already Down
|
# The Service is Already Down
|
||||||
|
|
|
@ -69,6 +69,34 @@ var postView = promauto.NewCounterVec(prometheus.CounterOpts{
|
||||||
Help: "The number of views per post or talk",
|
Help: "The number of views per post or talk",
|
||||||
}, []string{"base"})
|
}, []string{"base"})
|
||||||
|
|
||||||
|
func (s *Site) listSeries(w http.ResponseWriter, r *http.Request) {
|
||||||
|
s.renderTemplatePage("series.html", s.Series).ServeHTTP(w, r)
|
||||||
|
}
|
||||||
|
|
||||||
|
func (s *Site) showSeries(w http.ResponseWriter, r *http.Request) {
|
||||||
|
if r.RequestURI == "/blog/series/" {
|
||||||
|
http.Redirect(w, r, "/blog/series", http.StatusSeeOther)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
series := filepath.Base(r.URL.Path)
|
||||||
|
var posts []blog.Post
|
||||||
|
|
||||||
|
for _, p := range s.Posts {
|
||||||
|
if p.Series == series {
|
||||||
|
posts = append(posts, p)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
s.renderTemplatePage("serieslist.html", struct {
|
||||||
|
Name string
|
||||||
|
Posts []blog.Post
|
||||||
|
}{
|
||||||
|
Name: series,
|
||||||
|
Posts: posts,
|
||||||
|
}).ServeHTTP(w, r)
|
||||||
|
}
|
||||||
|
|
||||||
func (s *Site) showTalk(w http.ResponseWriter, r *http.Request) {
|
func (s *Site) showTalk(w http.ResponseWriter, r *http.Request) {
|
||||||
if r.RequestURI == "/talks/" {
|
if r.RequestURI == "/talks/" {
|
||||||
http.Redirect(w, r, "/talks", http.StatusSeeOther)
|
http.Redirect(w, r, "/talks", http.StatusSeeOther)
|
||||||
|
@ -142,11 +170,13 @@ func (s *Site) showPost(w http.ResponseWriter, r *http.Request) {
|
||||||
Link string
|
Link string
|
||||||
BodyHTML template.HTML
|
BodyHTML template.HTML
|
||||||
Date string
|
Date string
|
||||||
|
Series string
|
||||||
}{
|
}{
|
||||||
Title: p.Title,
|
Title: p.Title,
|
||||||
Link: p.Link,
|
Link: p.Link,
|
||||||
BodyHTML: p.BodyHTML,
|
BodyHTML: p.BodyHTML,
|
||||||
Date: p.Date.Format(dateFormat),
|
Date: p.Date.Format(dateFormat),
|
||||||
|
Series: p.Series,
|
||||||
}).ServeHTTP(w, r)
|
}).ServeHTTP(w, r)
|
||||||
postView.With(prometheus.Labels{"base": filepath.Base(p.Link)}).Inc()
|
postView.With(prometheus.Labels{"base": filepath.Base(p.Link)}).Inc()
|
||||||
}
|
}
|
||||||
|
|
|
@ -58,6 +58,7 @@ type Site struct {
|
||||||
Posts blog.Posts
|
Posts blog.Posts
|
||||||
Talks blog.Posts
|
Talks blog.Posts
|
||||||
Resume template.HTML
|
Resume template.HTML
|
||||||
|
Series []string
|
||||||
|
|
||||||
rssFeed *feeds.Feed
|
rssFeed *feeds.Feed
|
||||||
jsonFeed *jsonfeed.Feed
|
jsonFeed *jsonfeed.Feed
|
||||||
|
@ -147,6 +148,8 @@ func Build() (*Site, error) {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
s.Posts = posts
|
s.Posts = posts
|
||||||
|
s.Series = posts.Series()
|
||||||
|
sort.Strings(s.Series)
|
||||||
|
|
||||||
talks, err := blog.LoadPosts("./talks", "talks")
|
talks, err := blog.LoadPosts("./talks", "talks")
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
@ -210,6 +213,8 @@ func Build() (*Site, error) {
|
||||||
s.mux.Handle("/blog.atom", middleware.Metrics("blog.atom", http.HandlerFunc(s.createAtom)))
|
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.json", middleware.Metrics("blog.json", http.HandlerFunc(s.createJSONFeed)))
|
||||||
s.mux.Handle("/blog/", middleware.Metrics("blogpost", http.HandlerFunc(s.showPost)))
|
s.mux.Handle("/blog/", middleware.Metrics("blogpost", http.HandlerFunc(s.showPost)))
|
||||||
|
s.mux.Handle("/blog/series", http.HandlerFunc(s.listSeries))
|
||||||
|
s.mux.Handle("/blog/series/", http.HandlerFunc(s.showSeries))
|
||||||
s.mux.Handle("/talks/", middleware.Metrics("talks", http.HandlerFunc(s.showTalk)))
|
s.mux.Handle("/talks/", middleware.Metrics("talks", http.HandlerFunc(s.showTalk)))
|
||||||
s.mux.Handle("/css/", http.FileServer(http.Dir(".")))
|
s.mux.Handle("/css/", http.FileServer(http.Dir(".")))
|
||||||
s.mux.Handle("/static/", http.FileServer(http.Dir(".")))
|
s.mux.Handle("/static/", http.FileServer(http.Dir(".")))
|
||||||
|
|
|
@ -20,6 +20,8 @@ type Post struct {
|
||||||
Summary string `json:"summary,omitifempty"`
|
Summary string `json:"summary,omitifempty"`
|
||||||
Body string `json:"-"`
|
Body string `json:"-"`
|
||||||
BodyHTML template.HTML `json:"body"`
|
BodyHTML template.HTML `json:"body"`
|
||||||
|
Series string `json:"series"`
|
||||||
|
Tags []string `json:"tags"`
|
||||||
SlidesLink string `json:"slides_link"`
|
SlidesLink string `json:"slides_link"`
|
||||||
Date time.Time
|
Date time.Time
|
||||||
DateString string `json:"date"`
|
DateString string `json:"date"`
|
||||||
|
@ -28,6 +30,24 @@ type Post struct {
|
||||||
// Posts implements sort.Interface for a slice of Post objects.
|
// Posts implements sort.Interface for a slice of Post objects.
|
||||||
type Posts []Post
|
type Posts []Post
|
||||||
|
|
||||||
|
func (p Posts) Series() []string {
|
||||||
|
names := map[string]struct{}{}
|
||||||
|
|
||||||
|
for _, ps := range p {
|
||||||
|
if ps.Series != "" {
|
||||||
|
names[ps.Series] = struct{}{}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
var result []string
|
||||||
|
|
||||||
|
for name := range names {
|
||||||
|
result = append(result, name)
|
||||||
|
}
|
||||||
|
|
||||||
|
return result
|
||||||
|
}
|
||||||
|
|
||||||
func (p Posts) Len() int { return len(p) }
|
func (p Posts) Len() int { return len(p) }
|
||||||
func (p Posts) Less(i, j int) bool {
|
func (p Posts) Less(i, j int) bool {
|
||||||
iDate := p[i].Date
|
iDate := p[i].Date
|
||||||
|
@ -42,6 +62,8 @@ func LoadPosts(path string, prepend string) (Posts, error) {
|
||||||
type postFM struct {
|
type postFM struct {
|
||||||
Title string
|
Title string
|
||||||
Date string
|
Date string
|
||||||
|
Series string
|
||||||
|
Tags []string
|
||||||
SlidesLink string `yaml:"slides_link"`
|
SlidesLink string `yaml:"slides_link"`
|
||||||
}
|
}
|
||||||
var result Posts
|
var result Posts
|
||||||
|
@ -91,6 +113,8 @@ func LoadPosts(path string, prepend string) (Posts, error) {
|
||||||
Body: string(remaining),
|
Body: string(remaining),
|
||||||
BodyHTML: template.HTML(output),
|
BodyHTML: template.HTML(output),
|
||||||
SlidesLink: fm.SlidesLink,
|
SlidesLink: fm.SlidesLink,
|
||||||
|
Series: fm.Series,
|
||||||
|
Tags: fm.Tags,
|
||||||
}
|
}
|
||||||
result = append(result, p)
|
result = append(result, p)
|
||||||
|
|
||||||
|
|
|
@ -7,6 +7,8 @@
|
||||||
|
|
||||||
<p>If you have a compatible reader, be sure to check out my <a href="/blog.rss">RSS Feed</a> for automatic updates. Also check out the <a href="/blog.json">JSONFeed</a>.</p>
|
<p>If you have a compatible reader, be sure to check out my <a href="/blog.rss">RSS Feed</a> for automatic updates. Also check out the <a href="/blog.json">JSONFeed</a>.</p>
|
||||||
|
|
||||||
|
<p>For a breakdown by post series, see <a href="/blog/series">here</a>.</p>
|
||||||
|
|
||||||
<p>
|
<p>
|
||||||
<ul>
|
<ul>
|
||||||
{{ range . }}
|
{{ range . }}
|
||||||
|
|
|
@ -55,6 +55,10 @@
|
||||||
|
|
||||||
<p>This article was posted on {{ .Date }}. Facts and circumstances may have changed since publication. Please <a href="/contact">contact me</a> before jumping to conclusions if something seems wrong or unclear.</p>
|
<p>This article was posted on {{ .Date }}. Facts and circumstances may have changed since publication. Please <a href="/contact">contact me</a> before jumping to conclusions if something seems wrong or unclear.</p>
|
||||||
|
|
||||||
|
{{ if ne .Series "" }}
|
||||||
|
<p>Series: <a href="/blog/series/{{ .Series }}">{{ .Series }}</a></p>
|
||||||
|
{{ end }}
|
||||||
|
|
||||||
<script>
|
<script>
|
||||||
|
|
||||||
// The actual function. Set this as an onclick function for your "Share on Mastodon" button
|
// The actual function. Set this as an onclick function for your "Share on Mastodon" button
|
||||||
|
@ -91,6 +95,8 @@ function share_on_mastodon() {
|
||||||
// Hashtags
|
// Hashtags
|
||||||
var hashtags = "#blogpost";
|
var hashtags = "#blogpost";
|
||||||
|
|
||||||
|
{{ if ne .Series "" }}hashtags += " #{{ .Series }}";{{ end }}
|
||||||
|
|
||||||
// Tagging users, such as offical accounts or the author of the post
|
// Tagging users, such as offical accounts or the author of the post
|
||||||
var author = "@cadey@mst3k.interlinked.me";
|
var author = "@cadey@mst3k.interlinked.me";
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,16 @@
|
||||||
|
{{ define "title" }}
|
||||||
|
<title>Blog Series - Christine Dodrill</title>
|
||||||
|
{{ end }}
|
||||||
|
|
||||||
|
{{ define "content" }}
|
||||||
|
<h1>Series</h1>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
<ul>
|
||||||
|
{{ range . }}
|
||||||
|
<li><a href="/blog/series/{{ . }}">{{ . }}</a></li>
|
||||||
|
{{ end }}
|
||||||
|
</ul>
|
||||||
|
</p>
|
||||||
|
|
||||||
|
{{ end }}
|
|
@ -0,0 +1,16 @@
|
||||||
|
{{ define "title" }}
|
||||||
|
<title>Blog {{.Name}} - Christine Dodrill</title>
|
||||||
|
{{ end }}
|
||||||
|
|
||||||
|
{{ define "content" }}
|
||||||
|
<h1>Series: {{ .Name }}</h1>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
<ul>
|
||||||
|
{{ range .Posts }}
|
||||||
|
<li>{{ .DateString }} - <a href="/{{ .Link }}">{{ .Title }}</a></li>
|
||||||
|
{{ end }}
|
||||||
|
</ul>
|
||||||
|
</p>
|
||||||
|
|
||||||
|
{{ end }}
|
Loading…
Reference in New Issue