Files
cv-site/static/js/cv-functions.js
T

120 lines
3.4 KiB
JavaScript
Raw Normal View History

/**
* 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;