Skip to content

Commit c05f1bc

Browse files
committed
add mobile responsive support
1 parent a3b6de4 commit c05f1bc

2 files changed

Lines changed: 356 additions & 10 deletions

File tree

scripts/main.js

Lines changed: 68 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -287,6 +287,7 @@
287287
<div id="leftPane">
288288
<div class="nav-header">
289289
<a class="nav-header-home" href="index.html">${homeLinkLabel}</a>
290+
<button class="mobile-nav-toggle" id="mobileNavToggle" aria-label="Toggle navigation">☰</button>
290291
</div>
291292
<div class="search-container" id="navSearchContainer">
292293
<form name="searchForm" id="searchForm" class="search-form" onsubmit="return false;">
@@ -295,10 +296,12 @@
295296
<div class="search-feedback" id="searchStatus"></div>
296297
<ul class="search-results" id="searchResults"></ul>
297298
</div>
298-
<button class="expand-all-btn" onclick="toggleAllSections()">Expand All</button>
299-
<ul class="nav-tree" id="navTree">
300-
<!-- Navigation will be populated here -->
301-
</ul>
299+
<div class="nav-content" id="navContent">
300+
<button class="expand-all-btn" onclick="toggleAllSections()">Expand All</button>
301+
<ul class="nav-tree" id="navTree">
302+
<!-- Navigation will be populated here -->
303+
</ul>
304+
</div>
302305
</div>
303306
<div class="pane-resizer" id="paneResizer"></div>
304307
<div id="contentPane">
@@ -308,6 +311,7 @@
308311
`;
309312

310313
updateHomeLinkLabel();
314+
setupMobileNavToggle();
311315
}
312316

313317
function populateLeftNavigation() {
@@ -1138,6 +1142,66 @@
11381142
return entry.type + '|' + entry.titleLower + '|' + entry.href;
11391143
}
11401144

1145+
function setupMobileNavToggle() {
1146+
var toggleBtn = document.getElementById('mobileNavToggle');
1147+
var navContent = document.getElementById('navContent');
1148+
var leftPane = document.getElementById('leftPane');
1149+
1150+
if (!toggleBtn || !navContent) return;
1151+
1152+
toggleBtn.addEventListener('click', function() {
1153+
var isExpanded = leftPane.classList.contains('nav-expanded');
1154+
1155+
if (isExpanded) {
1156+
leftPane.classList.remove('nav-expanded');
1157+
toggleBtn.textContent = '☰';
1158+
toggleBtn.setAttribute('aria-expanded', 'false');
1159+
} else {
1160+
leftPane.classList.add('nav-expanded');
1161+
toggleBtn.textContent = '✕';
1162+
toggleBtn.setAttribute('aria-expanded', 'true');
1163+
}
1164+
});
1165+
1166+
// Close mobile nav when clicking on content area
1167+
var contentPane = document.getElementById('contentPane');
1168+
if (contentPane) {
1169+
contentPane.addEventListener('click', function() {
1170+
if (leftPane.classList.contains('nav-expanded')) {
1171+
leftPane.classList.remove('nav-expanded');
1172+
toggleBtn.textContent = '☰';
1173+
toggleBtn.setAttribute('aria-expanded', 'false');
1174+
}
1175+
});
1176+
}
1177+
1178+
// Close mobile nav when selecting a navigation item
1179+
document.addEventListener('click', function(event) {
1180+
var navItem = event.target.closest('.nav-item a');
1181+
if (navItem && leftPane.classList.contains('nav-expanded')) {
1182+
setTimeout(function() {
1183+
leftPane.classList.remove('nav-expanded');
1184+
toggleBtn.textContent = '☰';
1185+
toggleBtn.setAttribute('aria-expanded', 'false');
1186+
}, 100);
1187+
}
1188+
});
1189+
1190+
// Improve focus management for mobile
1191+
toggleBtn.setAttribute('aria-expanded', 'false');
1192+
toggleBtn.setAttribute('aria-controls', 'navContent');
1193+
1194+
// Handle escape key to close mobile nav
1195+
document.addEventListener('keydown', function(event) {
1196+
if (event.key === 'Escape' && leftPane.classList.contains('nav-expanded')) {
1197+
leftPane.classList.remove('nav-expanded');
1198+
toggleBtn.textContent = '☰';
1199+
toggleBtn.setAttribute('aria-expanded', 'false');
1200+
toggleBtn.focus();
1201+
}
1202+
});
1203+
}
1204+
11411205
// Make functions globally available for onclick handlers
11421206
window.toggleAllSections = toggleAllSections;
11431207

0 commit comments

Comments
 (0)