refactor: Major hyperscript refactoring and JS elimination

Inline Hyperscript Refactoring:
- Body tag keyboard handlers: 20→8 lines (using helper functions)
- Zoom control handlers: 85→35 lines (using zoom._hs)
- PDF modal card selection: 90→6 lines (3 identical blocks eliminated)

New Hyperscript Files:
- zoom._hs: handleZoomInput, handleZoomReset, initZoomControl
- pdf-modal._hs: selectPdfCard, handlePdfCardKey

JavaScript Elimination (232 lines removed):
- cv-functions.js: REMOVED - hyperscript defs are globally available
- scroll-at-bottom-handler.js: REMOVED - duplicate of handleScroll()
- footer-buttons-interaction.js: REMOVED - moved to hyperscript

Added Tests:
- 32-hyperscript-multi-src.test.mjs: Verifies multi-file loading
- 33-keyboard-shortcuts-refactored.test.mjs: Keyboard shortcuts
- 34-hyperscript-refactor-comprehensive.test.mjs: Full test suite

Key Findings:
- No hyperscript multi-file bug in 0.9.14
- Hyperscript def statements are globally accessible
- Previous refactoring failures were syntax errors, not library bugs
This commit is contained in:
juanatsap
2025-11-30 05:58:44 +00:00
parent 4a02c0a328
commit ba44b435e7
12 changed files with 841 additions and 266 deletions
+113
View File
@@ -0,0 +1,113 @@
-- File: zoom._hs
-- Purpose: Zoom control helper functions
-- Last Updated: 2025-11-30
-- ==============================================================================
-- ZOOM SLIDER INPUT HANDLER
-- ==============================================================================
-- Called from zoom-slider input event to update zoom level
def handleZoomInput(slider)
set zoomValue to slider.value as a Number
set zoomLevel to zoomValue / 100
-- Update display
set valueEl to document.getElementById('zoom-value-current')
if valueEl is not null
put zoomValue into valueEl
end
set slider's @aria-valuenow to zoomValue
set slider's @aria-valuetext to `${zoomValue}%`
-- Toggle reset button class
set resetBtn to document.getElementById('zoom-reset')
if resetBtn is not null
if zoomValue is not 100
add .zoom-not-default to resetBtn
else
remove .zoom-not-default from resetBtn
end
end
-- Apply zoom to wrapper
set wrapper to document.getElementById('zoom-wrapper')
if wrapper is not null
set wrapper's *zoom to zoomLevel
-- Handle width for zoom > 100%
if zoomLevel > 1
set wrapper's *width to 'auto'
set wrapper's *minWidth to '100%'
set wrapper's *maxWidth to 'none'
else
set wrapper's *width to ''
set wrapper's *minWidth to ''
set wrapper's *maxWidth to ''
end
end
-- Save to localStorage
set localStorage['cv-zoom'] to zoomValue
end
-- ==============================================================================
-- ZOOM RESET HANDLER
-- ==============================================================================
-- Called from reset button to reset zoom to 100%
def handleZoomReset()
set slider to document.getElementById('zoom-slider')
if slider is not null
set slider.value to 100
call handleZoomInput(slider)
call slider.focus()
end
end
-- ==============================================================================
-- ZOOM CONTROL VISIBILITY
-- ==============================================================================
-- Initialize zoom control visibility on load
def initZoomControl(control)
-- Skip on mobile
if window.innerWidth <= 768
exit
end
-- Load saved zoom level
set savedZoom to localStorage.getItem('cv-zoom')
set slider to document.getElementById('zoom-slider')
if savedZoom and slider
set slider.value to savedZoom
call handleZoomInput(slider)
end
-- Check visibility preference
set isVisible to localStorage.getItem('cv-zoom-visible')
if isVisible is 'true'
remove .zoom-hidden from control
set menuBtn to document.getElementById('show-zoom-menu-btn')
if menuBtn is not null
add .zoom-hidden to menuBtn
end
end
-- Load saved position
set savedPos to localStorage.getItem('cv-zoom-position')
if savedPos
set pos to JSON.parse(savedPos)
set control's *bottom to pos.bottom
set control's *left to pos.left
set control's *transform to 'none'
end
end
-- ==============================================================================
-- ZOOM CLOSE HANDLER
-- ==============================================================================
-- Called when clicking the close button on zoom control
def handleZoomClose(control)
add .zoom-hidden to control
set localStorage['cv-zoom-visible'] to 'false'
set menuBtn to document.getElementById('show-zoom-menu-btn')
if menuBtn is not null
remove .zoom-hidden from menuBtn
end
end