Files
juanatsap b44f9b9a99 refactor: Rename 'extended' → 'long' + add compact sidebar fonts
BREAKING CHANGE: API parameter renamed from 'extended' to 'long'

## Breaking Change: Terminology Standardization

Renamed 'extended' to 'long' across entire codebase for consistency:

**Backend (Go):**
- internal/handlers/cv.go (7 locations)
  - Migration logic to auto-convert 'extended' → 'long' cookies
  - API validation now rejects 'extended', requires 'long'
  - Toggle state logic updated
- internal/handlers/pdf_test.go (17 occurrences)
  - Test function renamed: TestExportPDF_ExtendedWithSkills → TestExportPDF_LongWithSkills
  - All test cases, parameters, and expected filenames updated
- internal/pdf/generator.go (2 comment updates)

**Frontend:**
- PDF-EXPORT-FEATURE.md (3 occurrences)
- doc/3-API.md (parameter documentation)
- doc/7-CUSTOMIZATION.md (examples updated)
- templates/partials/modals/pdf-modal.html (button text, URLs)
- static/js/main.js (migration logic)
- static/hyperscript/toggles._hs (toggle logic)
- tests/mjs/24-pdf-download-params.test.mjs (test expectations)
- tests/mjs/test-preference-migration.test.mjs (NEW)
- tests/mjs/verify-migration.test.mjs (NEW)

**PDFs Renamed:**
- cv-extended-with_skills-jamr-2025-en.pdf → cv-long-with_skills-jamr-2025-en.pdf
- cv-extended-with_skills-jamr-2025-es.pdf → cv-long-with_skills-jamr-2025-es.pdf

**Migration:** Automatic cookie migration from 'extended' → 'long' for seamless UX

## New Feature: Compact Sidebar Fonts

Reduces page count for short CV with skills from 6 → 5 pages:

**Implementation:**
- Location: internal/pdf/generator.go (lines 154-215)
- Cookie detection: `cookies["cv-length"] == "short"`
- Font reduction: 2-6% (0.94-0.98em) - very subtle
- Only activates for: `length=short` + `version=with_skills`
- Long version: Always uses full-size fonts

**Impact:**
- Page count: 6 pages → 5 pages (16.7% reduction)
- Readability: Maintained - fonts remain professional
- Design philosophy: Subtle, natural content flow

**Testing:**
- New test: TestPDFGenerator_CompactSidebarFonts
- Comprehensive coverage of cookie detection and PDF generation
- Manual verification: 5-page PDF with compact but readable fonts

**Documentation:**
- doc/LONG-PDF-GENERATION.md (NEW, 13 KB)
  - Complete feature documentation
  - Implementation details with code examples
  - Font size breakdown table
  - Testing and troubleshooting guides
  - Compact sidebar fonts section (comprehensive)

**Files Changed:**
- 11 modified (backend + frontend + docs)
- 5 new files (2 PDFs, 1 doc, 2 tests)
- 2 files renamed (PDFs)

**Tests:** All Go tests passing, API validation verified, PDF generation tested
2025-11-20 11:21:43 +00:00

74 lines
2.8 KiB
Plaintext

-- ==============================================================================
-- CV Site - Toggle Functions
-- ==============================================================================
-- Toggle functions for CV customization (length, icons, theme)
-- Migrated from JavaScript (cv-functions.js) after confirming no def limit
-- ==============================================================================
-- CV LENGTH TOGGLE
-- ==============================================================================
def toggleCVLength(isLong)
set paper to the first .cv-paper
set actionBarToggle to #lengthToggle
set menuToggle to #lengthToggleMenu
if isLong is true
remove .cv-short from paper
add .cv-long to paper
call localStorage.setItem('cv-length', 'long')
if actionBarToggle exists then set actionBarToggle's checked to true end
if menuToggle exists then set menuToggle's checked to true end
else
remove .cv-long from paper
add .cv-short to paper
call localStorage.setItem('cv-length', 'short')
if actionBarToggle exists then set actionBarToggle's checked to false end
if menuToggle exists then set menuToggle's checked to false end
end
end
-- ==============================================================================
-- ICONS TOGGLE
-- ==============================================================================
def toggleIcons(showIcons)
set paper to the first .cv-paper
set actionBarToggle to #iconToggle
set menuToggle to #iconToggleMenu
if showIcons is true
add .show-icons to paper
call localStorage.setItem('cv-icons', 'show')
if actionBarToggle exists then set actionBarToggle's checked to true end
if menuToggle exists then set menuToggle's checked to true end
else
remove .show-icons from paper
call localStorage.setItem('cv-icons', 'hide')
if actionBarToggle exists then set actionBarToggle's checked to false end
if menuToggle exists then set menuToggle's checked to false end
end
end
-- ==============================================================================
-- THEME TOGGLE
-- ==============================================================================
def toggleTheme(isClean)
set container to the first .cv-container
set actionBarToggle to #themeToggle
set menuToggle to #themeToggleMenu
if isClean is true
add .theme-clean to container
call localStorage.setItem('cv-theme', 'clean')
if actionBarToggle exists then set actionBarToggle's checked to true end
if menuToggle exists then set menuToggle's checked to true end
else
remove .theme-clean from container
call localStorage.setItem('cv-theme', 'default')
if actionBarToggle exists then set actionBarToggle's checked to false end
if menuToggle exists then set menuToggle's checked to false end
end
end