-- 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 VISIBILITY HANDLERS -- ============================================================================== -- Show zoom control def showZoomControl() set control to document.getElementById('zoom-control') set menuBtn to document.getElementById('show-zoom-menu-btn') if control is not null remove .zoom-hidden from control set localStorage['cv-zoom-visible'] to 'true' end if menuBtn is not null add .zoom-hidden to menuBtn end end -- Hide zoom control def hideZoomControl() set control to document.getElementById('zoom-control') set menuBtn to document.getElementById('show-zoom-menu-btn') if control is not null add .zoom-hidden to control set localStorage['cv-zoom-visible'] to 'false' end if menuBtn is not null remove .zoom-hidden from menuBtn end end -- Toggle zoom control visibility def toggleZoomControl() set control to document.getElementById('zoom-control') if control is not null if control.classList.contains('zoom-hidden') call showZoomControl() else call hideZoomControl() end end end