diff --git a/static/hyperscript/utils._hs b/static/hyperscript/utils._hs index 1dc31e5..57a4155 100644 --- a/static/hyperscript/utils._hs +++ b/static/hyperscript/utils._hs @@ -134,6 +134,27 @@ def handleScroll() set :lastScroll to currentScroll end +-- ============================================================================== +-- EXPAND/COLLAPSE ALL SECTIONS +-- ============================================================================== +-- Expand all
elements in the CV +def expandAllSections(evt) + if evt then call evt.preventDefault() end + set details to document.querySelectorAll('details') + for d in details + set d's @open to '' + end +end + +-- Collapse all
elements in the CV +def collapseAllSections(evt) + if evt then call evt.preventDefault() end + set details to document.querySelectorAll('details') + for d in details + call d.removeAttribute('open') + end +end + -- ============================================================================== -- FOOTER HOVER INTERACTION -- ============================================================================== diff --git a/static/hyperscript/zoom._hs b/static/hyperscript/zoom._hs index 2787fba..aff260e 100644 --- a/static/hyperscript/zoom._hs +++ b/static/hyperscript/zoom._hs @@ -100,14 +100,42 @@ def initZoomControl(control) end -- ============================================================================== --- ZOOM CLOSE HANDLER +-- ZOOM VISIBILITY HANDLERS -- ============================================================================== --- Called when clicking the close button on zoom control -def handleZoomClose(control) - add .zoom-hidden to control - set localStorage['cv-zoom-visible'] to 'false' +-- 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 diff --git a/static/js/main.js b/static/js/main.js index 6d91ddf..866ddde 100644 --- a/static/js/main.js +++ b/static/js/main.js @@ -55,24 +55,6 @@ } } - /** - * Expand all
sections in the CV - * @param {Event} event - Click event - */ - window.expandAllSections = function(event) { - event.preventDefault(); - document.querySelectorAll('details').forEach(d => d.setAttribute('open', '')); - }; - - /** - * Collapse all
sections in the CV - * @param {Event} event - Click event - */ - window.collapseAllSections = function(event) { - event.preventDefault(); - document.querySelectorAll('details').forEach(d => d.removeAttribute('open')); - }; - /** * Auto-open sidebar accordions in landscape mobile mode AND desktop * Ensures sidebar content is always visible except in portrait mobile @@ -504,68 +486,6 @@ // INITIALIZATION // ============================================================================= - /** - * Initialize zoom control button handlers - * Handles close button, show button, and toggle button - */ - function initZoomControlButtons() { - const closeBtn = document.getElementById('zoom-close'); - const showBtn = document.getElementById('show-zoom-menu-btn'); - const toggleBtn = document.getElementById('zoom-toggle-button'); - const zoomControl = document.getElementById('zoom-control'); - - // Helper function to toggle zoom visibility - function toggleZoom(show) { - if (show) { - zoomControl.classList.remove('zoom-hidden'); - if (showBtn) showBtn.classList.add('zoom-hidden'); - // Don't add zoom-active class - button stays same color - localStorage.setItem('cv-zoom-visible', 'true'); - } else { - zoomControl.classList.add('zoom-hidden'); - if (showBtn) showBtn.classList.remove('zoom-hidden'); - // Don't remove zoom-active class - wasn't added - localStorage.setItem('cv-zoom-visible', 'false'); - } - } - - // Close button handler - if (closeBtn && zoomControl) { - closeBtn.addEventListener('click', function(e) { - e.preventDefault(); - e.stopPropagation(); - console.log('Zoom close clicked'); - toggleZoom(false); - }); - } - - // Show button handler (hamburger menu) - if (showBtn && zoomControl) { - showBtn.addEventListener('click', function(e) { - e.preventDefault(); - e.stopPropagation(); - console.log('Zoom show clicked'); - toggleZoom(true); - }); - } - - // Toggle button handler (fixed button) - if (toggleBtn && zoomControl) { - toggleBtn.addEventListener('click', function(e) { - e.preventDefault(); - e.stopPropagation(); - const isVisible = !zoomControl.classList.contains('zoom-hidden'); - console.log('Zoom toggle clicked, currently visible:', isVisible); - toggleZoom(!isVisible); - }); - } - - // No need to set initial state since we don't use zoom-active class anymore - const isVisible = localStorage.getItem('cv-zoom-visible'); - - console.log('Zoom control initialized. localStorage cv-zoom-visible:', isVisible); - } - /** * Initialize all CV interactive features when DOM is ready */ @@ -576,8 +496,8 @@ initErrorToastClose(); initHTMXHandlers(); handleLandscapeAccordions(); // Auto-open sidebar accordions in landscape mode - initZoomControlButtons(); // Note: Scroll behavior now handled by hyperscript in index.html body tag + // Note: Zoom control buttons now handled by hyperscript (zoom._hs) // initScrollBehaviorJS() removed - hyperscript handleScroll() is preferred }); diff --git a/templates/partials/navigation/hamburger-menu.html b/templates/partials/navigation/hamburger-menu.html index f44beb7..23f6773 100644 --- a/templates/partials/navigation/hamburger-menu.html +++ b/templates/partials/navigation/hamburger-menu.html @@ -65,15 +65,16 @@ {{if eq .Lang "es"}}Acciones RĂ¡pidas{{else}}Quick Actions{{end}} - + {{if eq .Lang "es"}}Colapsar Todo{{else}}Collapse All{{end}} - + {{if eq .Lang "es"}}Expandir Todo{{else}}Expand All{{end}} - + {{if eq .Lang "es"}}Zoom{{else}}Zoom{{end}} diff --git a/templates/partials/widgets/zoom-control.html b/templates/partials/widgets/zoom-control.html index 088d544..e1c63b0 100644 --- a/templates/partials/widgets/zoom-control.html +++ b/templates/partials/widgets/zoom-control.html @@ -40,7 +40,8 @@ id="zoom-close" class="zoom-close-btn" aria-label="{{if eq .Lang "es"}}Cerrar control de zoom{{else}}Close zoom control{{end}}" - title="{{if eq .Lang "es"}}Cerrar{{else}}Close{{end}}"> + title="{{if eq .Lang "es"}}Cerrar{{else}}Close{{end}}" + _="on click call hideZoomControl()"> diff --git a/templates/partials/widgets/zoom-toggle-button.html b/templates/partials/widgets/zoom-toggle-button.html index 26b89d8..3302079 100644 --- a/templates/partials/widgets/zoom-toggle-button.html +++ b/templates/partials/widgets/zoom-toggle-button.html @@ -5,7 +5,8 @@ class="fixed-btn zoom-toggle-btn no-print has-tooltip" aria-label="{{if eq .Lang "es"}}Alternar control de zoom{{else}}Toggle zoom control{{end}}" data-tooltip="{{if eq .Lang "es"}}Control de zoom{{else}}Zoom control{{end}}" - _="on mouseenter call highlightZoomControl(true) + _="on click call toggleZoomControl() + on mouseenter call highlightZoomControl(true) on mouseleave call highlightZoomControl(false)">