Skip to content

feat(templates): render inline links in CV entry titles and subtitles#434

Merged
DemchaAV merged 2 commits into
developfrom
feat/cv-entry-title-links
Jul 24, 2026
Merged

feat(templates): render inline links in CV entry titles and subtitles#434
DemchaAV merged 2 commits into
developfrom
feat/cv-entry-title-links

Conversation

@DemchaAV

Copy link
Copy Markdown
Owner

Why

CV project rows and body text already render inline [label](url) Markdown as
clickable links (since v1.6.8), but experience/education entry titles were emitted
as plain text — so a [name](url) in an entry title (a project name, an employer)
showed up literally instead of linking. Subtitles were inconsistent: link-aware in the
canonical renderer, stripped in the compact and hand-rolled ones.

What changed

  • MarkdownInline gains appendTransformed(rich, text, style, UnaryOperator<String>)
    link-aware, applying the transform to the visible label and plain segments but never
    the URL — plus appendUpperCased (now a delegate) and appendIfPresent (the
    link-aware counterpart of appendPlainIfPresent).
  • Entry titles and subtitles route through the link-aware helpers everywhere they
    render: the shared EntryRenderer and EntryCompactRenderer (all five variants,
    upper-case-aware), and the four presets that hand-roll their own titles —
    MonogramSidebar, SidebarPortrait, EngineeringResume, and MintEditorial
    (letter-spaced via appendTransformed(TextOrnaments::spacedUpper)). No CvEntry
    change.
  • TimelineMinimal fuses each entry into one truncatable excerpt line and cannot carry
    a clickable link; it now strips the markdown to the label text instead of rendering
    [..](..) literally. The fused subtitle+date meta line in the MintEditorial /
    SidebarPortrait experience entries flattens the same way. Dates stay plain
    (out of scope).
  • Backward-compatible: a title with no inline-Markdown syntax renders byte-identically —
    all CV visual-parity and layout snapshots are unchanged (no re-bless).

Verification

./mvnw -B -ntp clean verify -pl :graph-compose-templates,:graph-compose-qa -am
BUILD SUCCESS, qa 666 tests, 0 failures; CV visual-parity + layout snapshots
unchanged.

  • MarkdownInlineTest +5: URL preserved under upper-casing, transform hits the
    label not the URL, appendIfPresent emits prefix + link, blank/null is a no-op, and
    a plain title matches the old plainText().toUpperCase().
  • New EntryTitleLinkTest (6): a [label](url) title becomes a link through
    EntryRenderer, the upper-cased EntryCompactRenderer (label upper-cased, URL
    intact), and the hand-rolled MonogramSidebar + EngineeringResume paths; the
    subtitle links too; and a plain-title control (asserted specifically, since the header
    contact block renders its own email/website links).
  • A ModernProfessional render + PDF link-annotation check confirmed the entry-title
    URIs are present as clickable annotations in the output PDF.

Lane: templates (canonical). No engine or public-DSL change; links reuse the existing
RichText.link convention (they inherit the title's style, matching project-row links).

CV project rows and body text already render inline [label](url) Markdown as
clickable links, but experience/education entry titles were emitted as plain
text, so a [name](url) title showed up literally. Route entry titles and
subtitles through link-aware MarkdownInline helpers across every CV preset:
the shared EntryRenderer / EntryCompactRenderer and the four presets that
hand-roll their titles (MonogramSidebar, SidebarPortrait, EngineeringResume,
MintEditorial). Add appendTransformed (transforms the visible label but never
the URL) so upper-cased and letter-spaced titles keep their link, appendUpperCased
as a delegate, and appendIfPresent for prefixed subtitles. TimelineMinimal's
fused excerpt and the fused subtitle+date meta lines strip to the label text.
Plain titles render byte-identically; snapshots and visual parity are unchanged.

@DemchaAV DemchaAV left a comment

Copy link
Copy Markdown
Owner Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

keepWithNext and link title

@DemchaAV
DemchaAV merged commit 1e15ae3 into develop Jul 24, 2026
12 checks passed
@DemchaAV
DemchaAV deleted the feat/cv-entry-title-links branch July 24, 2026 06:40
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant