feat(cv): harden multi-page builder
Wrap pathological content, paginate oversized entries, measure A4 and Letter previews correctly, unify section ordering, and gate stored-output actions on saved state.
This commit is contained in:
@@ -76,8 +76,15 @@ variant, never on the profile. Each entry exposes hide, title/subtitle override,
|
||||
editing (`RichTextField` — a markdown toolbar over a textarea; storage stays plain text, the server
|
||||
renderer converts the `**bold** *italic* __underline__ [text](url)` whitelist to safe HTML).
|
||||
|
||||
**Preview** has zoom presets (±, slider, Fit), a measured page count with prev/next page navigation
|
||||
and dashed page-break indicators, and an "updating…" chip. **Customize** badges ATS-friendly themes.
|
||||
**Preview** has zoom presets (±, slider, measured Fit), physical A4/Letter dimensions, a ceiling-based
|
||||
page count with prev/next navigation and page-break indicators, and an "updating…" chip. Three-page
|
||||
and longer documents receive content-focus guidance rather than automatic font shrinking. Preview
|
||||
requests and autosaves are ordered so stale responses cannot replace newer edits; PDF/public actions
|
||||
save the current variant before consuming the stored render. **Customize** badges ATS-friendly themes.
|
||||
|
||||
Profile-backed and custom sections share one section order. Custom-section content remains stored in
|
||||
`CustomSections`, while `Sections` holds its `custom:<key>` position and visibility. Legacy variants
|
||||
without those order rows still append custom sections and acquire the shared order on their next edit.
|
||||
|
||||
## AI
|
||||
|
||||
|
||||
@@ -51,9 +51,11 @@ dense), `ats-classic` (single, no graphics), `nordic` (sidebar-right), `elegant`
|
||||
- **ATS-friendliness** is a data flag: `CvTheme.AtsFriendly` (set on the single-column themes),
|
||||
surfaced in `GET /api/cv/themes` and badged in the Customize tab. Two-column (sidebar) themes are not
|
||||
flagged, as sidebar layouts can trip naive resume parsers.
|
||||
- **Print quality**: the renderer emits `break-inside: avoid` on entries, `break-after: avoid` on
|
||||
section headings, and widow/orphan control, so entries don't split across a page in the Playwright
|
||||
PDF pass.
|
||||
- **Print quality**: ordinary entries use `break-inside: avoid-page`; content classified as too tall
|
||||
for a page is allowed to flow between bullets/paragraphs so Chromium cannot clip an unsplittable
|
||||
block. Section headings avoid a following break, list items carry widow/orphan rules, and long
|
||||
names/titles/contact values/URLs/tags wrap within `minmax(0, …)` columns. Typography is not scaled
|
||||
down to mask overflow.
|
||||
|
||||
## Deliberately not here (yet)
|
||||
|
||||
|
||||
Reference in New Issue
Block a user