const bodySty = document.body; const htmlSty = document.documentElement.style; // Enable accessibility settings when JavaScript is permitted getElement('a11y').disabled = false; // Close console const closeA11yConsole = () => getElement('has-a11y').removeAttribute('open'); // Color scheme and contrast functions const matchMediaColor = () => { lightSwitch.checked = window.matchMedia('(prefers-color-scheme: dark)').matches; if (window.matchMedia('(prefers-contrast: more)').matches) { moreContrast.checked = true; } else if (window.matchMedia('(prefers-contrast: less)').matches) { lessContrast.checked = true; } else { defaultContrast.checked = true; } }; function setColor() { const styles = { light: { default: '--off: #000; --fg: var(--fg-light); --mid: var(--midtone); --ac: var(--ac-light); --bg: var(--bg-light);', less: '--off: #000; --fg: var(--fg-light-less); --mid: var(--midtone-less); --ac: var(--ac-light-less); --bg: var(--bg-light-less);', more: '--off: #000; --fg: var(--fg-light-more); --mid: var(--midtone-more); --ac: var(--ac-light-more); --bg: var(--bg-light-more); --border: 1pt solid var(--fg); --bound: var(--border);' }, dark: { default: '--off: #fff; --fg: var(--fg-dark); --mid: var(--midtone); --ac: var(--ac-dark); --bg: var(--bg-dark);', less: '--off: #fff; --fg: var(--fg-dark-less); --mid: var(--midtone-less); --ac: var(--ac-dark-less); --bg: var(--bg-dark-less);', more: '--off: #fff; --fg: var(--fg-dark-more); --mid: var(--midtone-more); --ac: var(--ac-dark-more); --bg: var(--bg-dark-more); --border: 1pt solid var(--fg); --bound: var(--border);' } }; const scheme = lightSwitch.checked ? 'dark' : 'light'; const logomarkDark = getElement('logomark--dark'); if (logomarkDark) { const logomark = getElement('logomark'); logomark.style.display = lightSwitch.checked ? 'none' : 'inline-block'; logomarkDark.style.display = lightSwitch.checked ? 'inline-block' : 'none'; } const contrast = lessContrast.checked ? 'less' : (moreContrast.checked ? 'more' : 'default'); bodySty.setAttribute('style', styles[scheme][contrast]); }; // Flash guard addEvent(document, 'DOMContentLoaded', () => { setTimeout(() => htmlSty.setProperty('--flashGuard', '1s ease-in 0.1s'), 99); }); // Switch to keyboard-friendly mode addEvent(document, 'keydown', (element) => { if (element.key === 'Tab') { document.body.classList.add('keydown'); } if (element.key === 'Escape') { document.body.classList.remove('keydown'); } }); // Color palette functions function setColorPalette() { document.body.className = colorPalette.value; }; // OpenDyslexic functions function useOpenDyslexic() { if (OpenDyslexic.checked) { htmlSty.setProperty('--rm', 'OpenDyslexic'); htmlSty.setProperty('--sf', 'OpenDyslexic'); } else { htmlSty.removeProperty('--rm'); htmlSty.removeProperty('--sf'); } recalcLogotypeWidth(); }; // Font size functions function setFontSize() { fontSizeState.value = fontSize.value; htmlSty.setProperty('--fontScale', fontSize.value / 10); }; // Baseline stretch functions function setStretch() { baselineStretchState.value = baselineStretch.value; htmlSty.setProperty('--baselineStretch', baselineStretch.value); }; // Initialize localStorage function hasLocalStorage() { try { localStorage.is = 'enable'; localStorage.removeItem('is'); return true; } catch(e) { defaultContrast.checked = true; getElement('noLocalStorage').className = ''; return false; }; }; if (hasLocalStorage()) { getElement('a11y-menu').className = ''; saveButton.disabled = false; resetButton.disabled = false; // Reset function function resetA11y() { localStorage.clear(); matchMediaColor(); colorPalette.reset; fontSize.value = ''; baselineStretch.value = ''; OpenDyslexic.checked = false; setTimeout(() => window.location.reload(), 100); }; // Save function function saveA11y() { setTimeout(() => closeA11yConsole(), 618); localStorage.scheme = lightSwitch.checked ? 'light' : 'dark'; if (defaultContrast.checked) localStorage.contrast = 'default'; if (lessContrast.checked) localStorage.contrast = 'less'; if (moreContrast.checked) localStorage.contrast = 'more'; localStorage.colorPalette = colorPalette.value; localStorage.font = OpenDyslexic.checked ? 'OpenDyslexic' : ''; localStorage.fontSize = fontSize.value; localStorage.stretchSize = baselineStretch.value; }; // Read settings from localStorage if (!localStorage.getItem('scheme') && !localStorage.getItem('contrast')) { matchMediaColor(); } else { lightSwitch.checked = localStorage.scheme !== 'dark'; if (localStorage.contrast === 'more') { moreContrast.checked = true; } else if (localStorage.contrast === 'less') { lessContrast.checked = true; } else { defaultContrast.checked = true; } setColor(); } if (localStorage.getItem('colorPalette')) { colorPalette.value = localStorage.colorPalette; setColorPalette(); } if (localStorage.font === 'OpenDyslexic') { OpenDyslexic.setAttribute('checked', 'checked'); useOpenDyslexic(); } if (localStorage.getItem('fontSize')) { fontSize.value = localStorage.fontSize; setFontSize(); } if (localStorage.getItem('stretchSize')) { baselineStretch.value = localStorage.stretchSize; setStretch(); } }