v0.8.0
Added
-
[params.hero] fuseSubtitle, which joins the name and the subtitle into a
single<h1>— "Robin Vale — Studio" — and drops the.hero__roleline under
it. That pair is not new:head.htmlhas always built it for the<title>
tag, with the same em dash. What was new was that the page never showed it, so
a theme whose browser tab read "Robin Vale — Studio" had a heading that read
only "Robin Vale", and the h1 an answer engine or a search result quotes was
the half without the role in it. The role line is dropped rather than kept
beside the fused heading, because it renders that same subtitle and two copies
of one string is not a layout.Only an explicit
trueturns it on. It reads throughparams-bool.html, so
that is the same ruleenablefollows insections.htmlrather than a second
spelling of it: an absent key is off and a non-boolean warns instead of being
guessed at. The switch also tests the subtitle before it stands, because the
failure it can otherwise produce is a heading ending in a dash with nothing
after it — and an absent subtitle isnil, whichprintf "%v"renders as the
string<nil>, so the obvious guard is the one that lets it through. CI
asserts both directions of the switch, the missing-subtitle case, the explicit
false, and that a fused headline holds exactly one copy of the subtitle.The subtitle itself is guarded now that it reaches the
<h1>. It is read in
three places — the fused heading, the role line and the terminal'sdata-role
— from oneparams-scalar.htmlcall, so a table written there is warned about
and dropped rather than printingmap[a:1]into the element a search result
quotes and typing it into the terminal besides. -
[params.hero] tagline, one short line under the headline for what a
visitor should know before scrolling — where you are, what you are open to. It
works with either headline shape and emits no element at all when unset, so a
site that does not set it gets no empty<div>where the line would be. It
goes throughparams-scalar.htmllike every other value that reaches the page
as text: a table written here warns and is dropped instead of aborting a build
over one short line.
Changed
[params.hero] introcan now be removed, by writing it as"". It was
read throughdefault, which fires on an empty string, so an empty intro
rendered the theme's "hi, my name is" and there was no way to drop the line at
all. That was survivable while the h1 held a name; it stopped being survivable
next to a fused headline, where "hi, my name is" introduces a name and a job
title, which is not what anyone is called.issetseparates the two states
defaultcannot — absent still gets the theme's string, written-and-empty now
emits no element rather than an empty one. Same shapelatestPostsuses to
keep a configured0from reading as unset. An intro written as a table warns
and drops the line, the same wayparams-scalar.htmltreats every other value
that reaches the page as text — it does not fall back to the theme's string,
which is what an absent key means.
Fixed
-
A site with no
[params.hero] subtitleno longer renders an empty role
line..hero__rolewas emitted unconditionally, so a site that never set a
subtitle shipped<div class="hero__role">> </div>— an orphan chevron
under the name, with 18px of margin below it holding space for a line that had
nothing in it. It was easy to miss while it was one configuration nobody was
steered toward;fuseSubtitlegave that state a second way in, since a site
that fuses without a subtitle falls back to exactly this shape, and "the name
alone" has to mean the name alone. CI pins both routes into it. -
The hero's bio no longer sits flush against a fused headline.
.hero h1
carries 8px of bottom margin, which was only ever half of a gap the.hero__role
line finished with 18 more. Fused with notaglineunder it — the shortest
configuration the README documents — nothing was left to finish it, and the bio
landed 8px under a 46px display heading..hero h1 + .hero__biorestores the
26px of whitespace both other shapes leave there; the adjacent sibling matches
only when nothing rendered in between, which is precisely that case.
Full changelog: v0.7.1...v0.8.0