/** * CV Site - Core Toggle Functions * ================================= * Global JavaScript functions for CV toggles and interactions * These replace hyperscript def functions to avoid the 3-function parser limit */ /** * Toggle CV Length (Short/Long) * @param {boolean} isLong - true for long CV, false for short */ function toggleCVLength(isLong) { const paper = document.querySelector('.cv-paper'); const otherToggle = document.querySelector('#lengthToggle') || document.querySelector('#lengthToggleMenu'); if (isLong) { paper?.classList.remove('cv-short'); paper?.classList.add('cv-long'); localStorage.setItem('cv-length', 'long'); if (otherToggle) otherToggle.checked = true; } else { paper?.classList.remove('cv-long'); paper?.classList.add('cv-short'); localStorage.setItem('cv-length', 'short'); if (otherToggle) otherToggle.checked = false; } } /** * Toggle Icons Display * @param {boolean} showIcons - true to show icons, false to hide */ function toggleIcons(showIcons) { const paper = document.querySelector('.cv-paper'); const otherToggle = document.querySelector('#iconToggle') || document.querySelector('#iconToggleMenu'); if (showIcons) { paper?.classList.add('show-icons'); localStorage.setItem('cv-icons', 'true'); if (otherToggle) otherToggle.checked = true; } else { paper?.classList.remove('show-icons'); localStorage.setItem('cv-icons', 'false'); if (otherToggle) otherToggle.checked = false; } } /** * Toggle Theme (Default/Clean) * @param {boolean} isClean - true for clean theme, false for default */ function toggleTheme(isClean) { const body = document.body; const otherToggle = document.querySelector('#themeToggle') || document.querySelector('#themeToggleMenu'); if (isClean) { body?.classList.add('theme-clean'); localStorage.setItem('cv-theme', 'clean'); if (otherToggle) otherToggle.checked = true; } else { body?.classList.remove('theme-clean'); localStorage.setItem('cv-theme', 'default'); if (otherToggle) otherToggle.checked = false; } } /** * Sync PDF Button Hover State * @param {boolean} show - true to add hover class, false to remove */ function syncPdfHover(show) { const pdfButtons = document.querySelectorAll('.pdf-btn'); pdfButtons.forEach(button => { if (show) { button.classList.add('pdf-hover-sync'); } else { button.classList.remove('pdf-hover-sync'); } }); } /** * Sync Print Button Hover State * @param {boolean} show - true to add hover class, false to remove */ function syncPrintHover(show) { const printButtons = document.querySelectorAll('.print-btn'); printButtons.forEach(button => { if (show) { button.classList.add('print-hover-sync'); } else { button.classList.remove('print-hover-sync'); } }); } /** * Highlight Zoom Control * @param {boolean} show - true to highlight, false to remove highlight */ function highlightZoomControl(show) { const zoomWrapper = document.querySelector('#zoom-wrapper'); if (show) { zoomWrapper?.classList.add('highlight'); } else { zoomWrapper?.classList.remove('highlight'); } } // Make functions globally available window.toggleCVLength = toggleCVLength; window.toggleIcons = toggleIcons; window.toggleTheme = toggleTheme; window.syncPdfHover = syncPdfHover; window.syncPrintHover = syncPrintHover; window.highlightZoomControl = highlightZoomControl;