|
10 | 10 | initSidebarResize(); |
11 | 11 | initMobileMenu(); |
12 | 12 | initFileTree(); |
| 13 | + initNavOverride(); |
13 | 14 | initBreadcrumbs(); |
14 | 15 | initSearch(); |
15 | 16 | initSorting(); |
|
413 | 414 | collapseSingleChildDirs(window.GCOVR_TREE_DATA); |
414 | 415 | deduplicateTree(window.GCOVR_TREE_DATA); |
415 | 416 | renderTree(treeContainer, window.GCOVR_TREE_DATA); |
416 | | - // Re-run breadcrumbs and search now that the tree exists |
| 417 | + // Re-run dependent init now that the tree exists |
| 418 | + initNavOverride(); |
417 | 419 | initBreadcrumbs(); |
418 | 420 | initSearch(); |
419 | 421 | }) |
|
1297 | 1299 | }); |
1298 | 1300 | } |
1299 | 1301 |
|
| 1302 | + // =========================================== |
| 1303 | + // Nav Override (prev/next follows tree order) |
| 1304 | + // =========================================== |
| 1305 | + |
| 1306 | + function initNavOverride() { |
| 1307 | + if (!window.GCOVR_TREE_DATA) return; |
| 1308 | + |
| 1309 | + var navPrevs = document.querySelectorAll('.nav-prev'); |
| 1310 | + var navNexts = document.querySelectorAll('.nav-next'); |
| 1311 | + if (navPrevs.length === 0 && navNexts.length === 0) return; |
| 1312 | + |
| 1313 | + // DFS-flatten tree to collect file links in sidebar order |
| 1314 | + function collectLinks(nodes) { |
| 1315 | + var links = []; |
| 1316 | + for (var i = 0; i < nodes.length; i++) { |
| 1317 | + var node = nodes[i]; |
| 1318 | + if (node.isDirectory && node.children && node.children.length > 0) { |
| 1319 | + links = links.concat(collectLinks(node.children)); |
| 1320 | + } else if (!node.isDirectory && node.link) { |
| 1321 | + links.push(node.link); |
| 1322 | + } |
| 1323 | + } |
| 1324 | + return links; |
| 1325 | + } |
| 1326 | + |
| 1327 | + var fileLinks = collectLinks(window.GCOVR_TREE_DATA); |
| 1328 | + if (fileLinks.length === 0) return; |
| 1329 | + |
| 1330 | + var currentPage = window.location.pathname.split('/').pop() || 'index.html'; |
| 1331 | + var idx = fileLinks.indexOf(currentPage); |
| 1332 | + if (idx === -1) return; |
| 1333 | + |
| 1334 | + var prev = idx > 0 ? fileLinks[idx - 1] : 'index.html'; |
| 1335 | + var next = idx < fileLinks.length - 1 ? fileLinks[idx + 1] : 'index.html'; |
| 1336 | + |
| 1337 | + navPrevs.forEach(function(el) { el.setAttribute('href', prev); }); |
| 1338 | + navNexts.forEach(function(el) { el.setAttribute('href', next); }); |
| 1339 | + } |
| 1340 | + |
1300 | 1341 | // =========================================== |
1301 | 1342 | // TLA Navigation (HIT/MIS/PAR links) |
1302 | 1343 | // =========================================== |
|
0 commit comments