120 lines
3.4 KiB
JavaScript
120 lines
3.4 KiB
JavaScript
|
|
/**
|
||
|
|
* 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;
|