- Convert all PHP files from CRLF to LF line endings - Reformat multi-line function calls per WPCS standard (opening paren last on line, closing paren on own line) - Fix assignment-in-conditional in single-peptide.php - Change double quotes to single quotes in content-none.php - Exclude InvalidClassFileName sniff (standard WP functions.php pattern) - Fix archive-peptide.php opening PHP tag placement Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
85 lines
1.9 KiB
JavaScript
85 lines
1.9 KiB
JavaScript
/**
|
|
* Navigation and Mobile Menu Toggle
|
|
* Peptide Starter Theme
|
|
*
|
|
* Handles:
|
|
* - Mobile hamburger menu toggle
|
|
* - Navigation overlay click handling
|
|
* - Menu state persistence
|
|
*/
|
|
|
|
(function() {
|
|
'use strict';
|
|
|
|
const menuToggle = document.querySelector('.menu-toggle');
|
|
const primaryNav = document.querySelector('.primary-navigation');
|
|
const navOverlay = document.querySelector('.nav-overlay');
|
|
|
|
if (!menuToggle || !primaryNav || !navOverlay) {
|
|
return;
|
|
}
|
|
|
|
/**
|
|
* Toggle mobile menu visibility
|
|
*/
|
|
function toggleMenu() {
|
|
const isActive = primaryNav.classList.contains('active');
|
|
|
|
if (isActive) {
|
|
closeMenu();
|
|
} else {
|
|
openMenu();
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Open mobile menu
|
|
*/
|
|
function openMenu() {
|
|
primaryNav.classList.add('active');
|
|
navOverlay.classList.add('active');
|
|
document.body.style.overflow = 'hidden';
|
|
menuToggle.setAttribute('aria-expanded', 'true');
|
|
}
|
|
|
|
/**
|
|
* Close mobile menu
|
|
*/
|
|
function closeMenu() {
|
|
primaryNav.classList.remove('active');
|
|
navOverlay.classList.remove('active');
|
|
document.body.style.overflow = '';
|
|
menuToggle.setAttribute('aria-expanded', 'false');
|
|
}
|
|
|
|
// Menu toggle button click
|
|
menuToggle.addEventListener('click', toggleMenu);
|
|
|
|
// Overlay click
|
|
navOverlay.addEventListener('click', closeMenu);
|
|
|
|
// Close menu when a nav link is clicked
|
|
const navLinks = primaryNav.querySelectorAll('a');
|
|
navLinks.forEach(link => {
|
|
link.addEventListener('click', closeMenu);
|
|
});
|
|
|
|
// Close menu on Escape key
|
|
document.addEventListener('keydown', (e) => {
|
|
if (e.key === 'Escape') {
|
|
closeMenu();
|
|
}
|
|
});
|
|
|
|
// Set initial aria-expanded state
|
|
menuToggle.setAttribute('aria-expanded', 'false');
|
|
|
|
// Close menu when window is resized above mobile breakpoint
|
|
const mediaQuery = window.matchMedia('(min-width: 768px)');
|
|
mediaQuery.addEventListener('change', (e) => {
|
|
if (e.matches) {
|
|
closeMenu();
|
|
}
|
|
});
|
|
})();
|