When the world was young, and this “blogging” thing was new, I
maintained my site by
hand, typing new content into index.html
as I thought of it. Then I
spent a great deal of time customizing MovableType to suit my needs,
and used it for the next 14 years.
One of the common plugins was SmartyPants, which turned scruffy old
typewriter quotes into pretty curved ones. As a long-time type nerd,
of course I had to use it. The MT implementation was pretty good, and
only rarely guessed wrong about open quotes. The one used by Hugo is,
unfortunately, always wrong in a specific case that I use quite often:
quotations that start with an ellipsis. For those, I’ve had to go
through the archives and manually insert the Unicode zero-width space
character ​
after the opening quote.
I never used MT’s web form for posting content, because, like so many other people have discovered, it’s too easy to lose an hour of work with a single mis-click or fumble-finger. Ecto was a great tool until it just stopped working one day (long after it stopped being supported), with only one quirk: at random intervals it would lose track of the UTF-8 encoding, and post garbage instead of kanji. A refresh would always fix the problem, so it was just a minor annoyance.
When it stopped working, I switched to MarsEdit, which is an excellent tool, and if I could easily connect it to Hugo, I would. As it is, I’ve gone back to running Emacs in a terminal window, with Perl/Bash scripts and Makefiles wrapped around an assortment of command-line tools.
For images, I insist on supplying proper height
and width
attributes so that the browser can layout the page properly while
waiting for the download. Hugo can automatically insert those for
pictures stored locally, but I upload them all to an S3 bucket with
s3cmd, so I run them all through
ImageMagick’s
convert
for cleanup and resizing, then
Guetzli for JPEG conversion, and
embed them with this shortcode:
{{ $link := (.Get "link" | default (.Get "href"))}}
{{ $me := . }}
<div align="center" style="padding:12pt">
{{if $link}}
<a href="{{$link}}">
{{end}}
<img
{{ range (split "src width height class title alt" " ") }}
{{ if $me.Get . }}
{{. | safeHTMLAttr}}="{{$me.Get .}}"
{{end}}
{{end}}
>
{{if $link}}
</a>
{{end}}
</div>
None of the arguments are mandatory (even src
, without which there’s
not much point), but it will add any of the listed ones if you’ve
supplied them, and allow you to add a link with either “link” or
“href”. This can be embedded in the new spoiler shortcode I wrote
yesterday (which relies on Bootstrap’s
collapse.js
):
{{ $id := substr (md5 .Inner) 0 16 }}
{{ $label := (.Get 0 | default "view/hide") }}
{{ $class := (index .Params 1 | default "") }}
<div class="collapse {{$class}}" id="collapse{{$id}}">{{ .Inner }}</div>
<p><a role="button" class="btn btn-default btn-sm"
data-toggle="collapse" href="#collapse{{$id}}"
aria-expanded="false" aria-controls="collapse">{{$label}}</a>
</p>
The results look like this, and yes, the picture behind the NSFW tag is NSFW:
{{< spoiler NSFW >}}
{{< blogpic
src="https://dotclue.s3.amazonaws.com/img/tumblr_o3wrl58ICr1rlk3g8o1_1280.jpg"
width="560" height="420"
class="img-rounded img-responsive"
>}}
{{< /spoiler >}}
It took about 30 seconds to convert my Gelbooru mass-posting script to generate shortcodes instead of HTML, so my most-recent cheesecake post was done this way. Now that I have the NSFW shortcode, I’ll likely include some racier images in the next one…
At some point I’ll pull out all my scripts and customizations into a demo blog on Github, so that I have something to point to when someone asks how to do something that is either not directly supported in Hugo (like monthly archive pages), or is just poorly documented (“damn near everything”).
Markdown formatting and simple HTML accepted.
Sometimes you have to double-click to enter text in the form (interaction between Isso and Bootstrap?). Tab is more reliable.