1(function () { 2 'use strict'; 3 4 var menus = { 5 'all-access': [ 6 { label: 'Games', url: '/guitar-games/' }, 7 { label: 'Roadmap', url: '/course-roadmap/' }, 8 { label: 'Courses', url: '/guitar-courses/' }, 9 { label: 'Articles', url: '/articles/' }, 10 { label: 'Coaching', url: '/support/' }, 11 { label: 'My Account', url: '/my-account/' } 12 ], 13 'logged': [ 14 { label: 'Games', url: '/guitar-games/' }, 15 { label: 'Roadmap', url: '/course-roadmap/' }, 16 { label: 'Courses', url: '/guitar-courses/' }, 17 { label: 'Articles', url: '/articles/' }, 18 { label: 'Questions', url: '/questions/' }, 19 { label: 'Account', url: '/my-account/' }, 20 { label: 'All Access', url: '/join/' } 21 ], 22 'logged-enroll': [ 23 { label: 'My Account', url: '/my-account/' }, 24 { label: 'Support', url: '/support/' } 25 ], 26 'public': [ 27 { label: 'Games', url: '/guitar-games/' }, 28 { label: 'Roadmap', url: '/course-roadmap/' }, 29 { label: 'Courses', url: '/guitar-courses/' }, 30 { label: 'Articles', url: '/articles/' }, 31 { label: 'About', url: '/about/' }, 32 { label: 'Log in', url: '/login/' }, 33 { label: 'Join Now', url: '/join/' } 34 ], 35 'logged-out-enroll': [ 36 { label: 'Log in', url: '/login/' }, 37 { label: 'Contact', url: '/contact/' } 38 ] 39 }; 40 41 function init() { 42 var container = document.getElementById('sk-mobile-menu'); 43 if (!container) { 44 return; 45 } 46 47 var context = container.getAttribute('data-menu-context') || 'public'; 48 var items = menus[context] || menus['public']; 49 var burger = container.querySelector('.sk-menu-burger'); 50 var overlay = container.querySelector('.sk-menu-overlay'); 51 var nav = container.querySelector('.sk-menu-overlay__nav'); 52 53 var isOpen = false; 54 var currentPath = window.location.pathname; 55 56 // Render menu links 57 function renderLinks() { 58 var fragment = document.createDocumentFragment(); 59 for (var i = 0; i < items.length; i++) { 60 var item = items[i]; 61 var link = document.createElement('a'); 62 link.href = item.url; 63 link.className = 'sk-menu-overlay__link'; 64 link.textContent = item.label; 65 66 // Mark current page link as active 67 if (currentPath === item.url) { 68 link.className += ' sk-menu-overlay__link--active'; 69 } 70 71 // CTA button style for join link 72 if (item.url === '/join/') { 73 link.className += ' sk-menu-overlay__link--cta'; 74 } 75 76 fragment.appendChild(link); 77 } 78 nav.appendChild(fragment); 79 } 80 81 // Let link clicks navigate immediately â no close animation. 82 // The page load replaces the screen, so the close animation would 83 // just show the current page briefly before navigating away. 84 // Close animation is only for burger toggle and Escape key. 85 86 function openMenu() { 87 isOpen = true; 88 container.classList.add('sk-menu--open'); 89 overlay.classList.add('sk-menu--open'); 90 burger.setAttribute('aria-expanded', 'true'); 91 overlay.setAttribute('aria-hidden', 'false'); 92 document.documentElement.classList.add('sk-menu-noscroll'); 93 } 94 95 function closeMenu() { 96 isOpen = false; 97 container.classList.remove('sk-menu--open'); 98 overlay.classList.remove('sk-menu--open'); 99 overlay.classList.add('sk-menu--closing'); 100 burger.setAttribute('aria-expanded', 'false'); 101 overlay.setAttribute('aria-hidden', 'true'); 102 document.documentElement.classList.remove('sk-menu-noscroll'); 103 104 overlay.addEventListener('animationend', function onEnd(e) { 105 if (e.target !== overlay) return; 106 overlay.removeEventListener('animationend', onEnd); 107 overlay.classList.remove('sk-menu--closing'); 108 }); 109 } 110 111 function toggleMenu() { 112 if (isOpen) { 113 closeMenu(); 114 } else { 115 openMenu(); 116 } 117 } 118 119 // Hamburger click handler 120 burger.addEventListener('click', toggleMenu); 121 122 // Close on Escape key 123 document.addEventListener('keydown', function (e) { 124 if (e.key === 'Escape' && isOpen) { 125 closeMenu(); 126 } 127 }); 128 129 // Render the links on load 130 renderLinks(); 131 } 132 133 if (document.readyState === 'loading') { 134 document.addEventListener('DOMContentLoaded', init); 135 } else { 136 init(); 137 } 138})();
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.