2025-04-23 Oddμ templates
==========================
I've been working on a rewrite of the Oddmu upload template. My
problem is that Oddmu, like Oddmuse before it, derives filenames from
the URL path. Thus, a page like this one uses
2025-04-23-oddmu-templates as the filename. Which is fine. If I want
to link to this page, I'll use something like
[templates](https://alexschroeder.ch/edit/?id=2025-04-23-oddmu-templates)
. This is also fine.
Oddμ allows people to upload files, including Markdown files, and it
allows people to edit the data files directly, using a regular editor
(if they have access to the data directory). That means any UNIX
filename can be used. This includes filenames containing reserved
characters in URLs such as ? and #.
When using HTML templates in Go, I take filenames and use them as
local URLs. The HTML template library uses appropriate percent
encoding. Sadly, it wants to handle URLs such as
https://example.org/foo?bar#baz and therefore doesn't percent-encode
characters such ? and #.
The Go library takes context into account when deciding on the
escaping required. If an attribute is used as a link, percent-encoding
is used. If the same attribute is used as regular text, HTML escaping
is used. This is why there is no good solution for me. If I
unconditionally percent-escape characters such ? and #, they don't
show up correctly where plain HTML is expected. If I don't
percent-escape the characters, the links don't work.
This is why the old templates didn't work for certain filenames:
{{.Name}}
I now provide a special .Path attribute. It has the same value as the
.Name attribute, with a few important characters escaped. Use it
where you need a link:
{{.Name}}
#Oddμ #GoLang