v0.3.0
Minor Changes
-
#52
01b5335Thanks @onetogregorio! - Client bundle: real<a href>fallback (SEO), touch support, scheme guard, aria-live.- SEO (issue #49): the client-only fallback now renders real
<a href>
anchors instead of<span>— so when a consuming site forgets to register
the SSR middleware, Googlebot still sees real links to midvash.com and link
equity flows. URLs match the SSR shape exactly (/{lang}/{version}/{slug}/ {ch}/{verse}), with the slug pre-localized server-side. Nonofollow, no
target="_blank"— by design. - Touch / mobile (issue #36): on coarse-pointer devices a single tap on a
reference opens the tooltip and blocks navigation; a second tap on the same
reference (tooltip still open) lets the click through so the user reaches
midvash.com. Tap-outside closes the tooltip. Desktop (pointer: fine)
behavior is unchanged — hover/focus still drives the tooltip, click
navigates normally. - Security defense-in-depth (issue #42):
payload.readMoreUrlis now
validated before being placed in anhref. Onlyhttp:/https:schemes
are accepted;javascript:/data:/ etc. cause the "Ler mais" link to
be omitted (the verse text still renders). - a11y (issue #38): the tooltip body is marked
aria-live="polite"/
aria-atomic="true", so screen readers announce the verse when it
replaces the "Carregando…" placeholder (follow-up to #13).
buildClientPatternis now capturing (m[1..4]= book, chapter, verse,
verseEnd) so the client can extract the parts needed to build a URL; the
non-capturing shape is no longer exported. NewbuildNameToSlughelper
exports a small name→localized-slug map alongside the pattern. - SEO (issue #49): the client-only fallback now renders real
-
#53
cf8c6e2Thanks @onetogregorio! - Tooltip distinguishes "verse not found" from "couldn't load" (issue #41).fetchVersenow returns a tagged result ({ ok: true, data } | { ok: false, kind: "not-found" | "fetch-error" }) so the plugin can tell an upstream 404
(the reference parses but doesn't exist — typically a typo like
"John 99:99") apart from a transient network/timeout/5xx failure. The
/lookuproute propagates{ error, reference, version }on failure; the
client renders the matching localized string from the newnotFoundentry
inClientStrings(added in pt-br / en / es).404 results are NOT cached, so fixing a typo and re-hovering hits the
upstream again. Other failures still aren't cached either (no behavior
change there).Breaking (internal):
fetchVerse's return type changed from
VerseResponse | nulltoVerseResult. No public re-export touches this,
so external consumers should be unaffected. -
#50
49767f6Thanks @onetogregorio! - SSR linkifier: scope references to article content, robustness + perf fixes.- Scope (issue #37): the SSR linkifier no longer wraps references inside
page chrome (<nav>,<header>,<footer>,<aside>,<head>) or non-
content widgets (<title>,<option>,<select>,<optgroup>,
<button>,<svg>,<math>,<noscript>,<iframe>). This matches the
client scanner's defaultselectors(article,.prose,.post-content,
main) and avoids sitewide-repeated links that Google reads as
over-optimization. - Robustness (issue #40): the tag scanner is now attribute-aware — a
>
inside a quoted attribute value (e.g.<img alt="2 > 1">) is correctly
ignored when seeking the tag end, so the body that follows is no longer
mis-parsed. - Perf (issue #39): a cheap probe regex runs first; pages with no
reference candidate are returned unchanged (same string instance), skipping
the full streaming parse entirely. - SEO: linkified anchors now include a
titleattribute matching the
reference (e.g.title="João 3:16") for crawler context. The plugin still
does NOT addrel="nofollow"ortarget="_blank"— link equity flows
in-document to midvash.com, by design.
This is a
minorbump because the default scope changed: references that
used to be linkified inside<nav>/<header>/<footer>(etc.) no
longer are. Sites that relied on that behavior should move the references
into article content. - Scope (issue #37): the SSR linkifier no longer wraps references inside
Patch Changes
-
#54
c78dbd7Thanks @onetogregorio! - Docs: clarify the SEO model + document 0.3.0 changes.- Reframe the SSR middleware section as "recommended" (was "optional") — SEO
is the plugin's stated goal. - Document the two-layer model: SSR middleware + client-side fallback both
produce real<a href>anchors (since 0.3.0 in the client fallback too). - List the SEO contract explicitly: no
nofollow, notarget="_blank",
titleattribute, scope limited to article content (no nav/footer/title
pollution). - Document the new mobile / touch behavior (tap-to-toggle, second-tap to
navigate). - Updates to README.md, README.pt-BR.md, README.es.md — kept in sync.
Patch-level bump (docs only).
- Reframe the SSR middleware section as "recommended" (was "optional") — SEO