summary refs log tree commit diff homepage
path: root/main.go
diff options
context:
space:
mode:
authorNguyễn Gia Phong <mcsinyx@disroot.org>2022-06-28 12:17:25 +0900
committerNguyễn Gia Phong <mcsinyx@disroot.org>2022-06-28 12:17:25 +0900
commite405d3f244d074f00658e020795a90ec3f69add7 (patch)
tree6f83f87d024ec64596d87032dfe45e33d559f8b8 /main.go
parent4fa6f1621b406ce58b91a4ae9a58b392d78b7008 (diff)
downloadphylactery-e405d3f244d074f00658e020795a90ec3f69add7.tar.gz
Escape question marks in path
Fixes: https://todo.sr.ht/~cnx/phylactery/1
Diffstat (limited to 'main.go')
-rw-r--r--main.go23
1 files changed, 13 insertions, 10 deletions
diff --git a/main.go b/main.go
index 4dbf016..42db6d2 100644
--- a/main.go
+++ b/main.go
@@ -44,8 +44,8 @@ type Page struct {
 
 type Archive struct {
 	Title   string
-	Prev    template.URL
-	Next    template.URL
+	Prev    string
+	Next    string
 	Entries []Page
 }
 
@@ -54,6 +54,10 @@ type Directory struct {
 	Entries []string
 }
 
+func escape(name string) template.URL {
+	return template.URL(strings.Replace(name, "?", "%3f", -1))
+}
+
 func find(entries []os.DirEntry, name string) int {
 	for i, entry := range entries {
 		if entry.Name() == name {
@@ -65,7 +69,9 @@ func find(entries []os.DirEntry, name string) int {
 
 func main() {
 	http.Handle("/static/", http.FileServer(http.FS(static)))
-	t, err := template.ParseFS(templates, "templates/*.html")
+	t, err := template.New("").Funcs(template.FuncMap{
+		"escape": escape,
+	}).ParseFS(templates, "templates/*.html")
 	if err != nil {
 		log.Fatal(err)
 	}
@@ -138,19 +144,16 @@ func main() {
 			}
 		}
 
-		prev := "";
+		prev := ""
 		if index > 0 {
 			prev = entries[index-1].Name()
 		}
-		next := "";
-		if index < len(entries) - 1 {
+		next := ""
+		if index < len(entries)-1 {
 			next = entries[index+1].Name()
 		}
 		t.ExecuteTemplate(w, "archive.html", Archive{
-			stat.Name(),
-			template.URL(prev),
-			template.URL(next),
-			pages,
+			stat.Name(), prev, next, pages,
 		})
 	})