| ... | ... | @@ -15,6 +15,9 @@ |
| 15 | 15 | var typeKindFnId; |
| 16 | 16 | findTypeKinds(); |
| 17 | 17 | |
| 18 | // for each package, is an array with packages to get to this one |
| 19 | var canonPkgPaths = computeCanonicalPackagePaths(); |
| 20 | |
| 18 | 21 | var curNav = { |
| 19 | 22 | // each element is a package name, e.g. @import("a") then within there @import("b") |
| 20 | 23 | // starting implicitly from root package |
| ... | ... | @@ -180,7 +183,7 @@ |
| 180 | 183 | var liDom = domListPkgs.children[i]; |
| 181 | 184 | var aDom = liDom.children[0]; |
| 182 | 185 | aDom.textContent = list[i].name; |
| 183 | | aDom.setAttribute('href', navLinkPkg(list[i].name)); |
| 186 | aDom.setAttribute('href', navLinkPkg(list[i].pkg)); |
| 184 | 187 | } |
| 185 | 188 | |
| 186 | 189 | domSectPkgs.classList.remove("hidden"); |
| ... | ... | @@ -197,8 +200,8 @@ |
| 197 | 200 | } |
| 198 | 201 | } |
| 199 | 202 | |
| 200 | | function navLinkPkg(childName) { |
| 201 | | return navLink(curNav.pkgNames.concat([childName]), []); |
| 203 | function navLinkPkg(pkgIndex) { |
| 204 | return navLink(canonPkgPaths[pkgIndex], []); |
| 202 | 205 | } |
| 203 | 206 | |
| 204 | 207 | function navLinkDecl(childName) { |
| ... | ... | @@ -349,4 +352,31 @@ |
| 349 | 352 | } |
| 350 | 353 | return null; |
| 351 | 354 | } |
| 355 | |
| 356 | function computeCanonicalPackagePaths() { |
| 357 | var list = new Array(zigAnalysis.packages.length); |
| 358 | // Now we try to find all the packages from root. |
| 359 | var rootPkg = zigAnalysis.packages[zigAnalysis.rootPkg]; |
| 360 | // Breadth-first to keep the path shortest possible. |
| 361 | var stack = [{ |
| 362 | path: [], |
| 363 | pkg: rootPkg, |
| 364 | }]; |
| 365 | while (stack.length !== 0) { |
| 366 | var item = stack.pop(); |
| 367 | for (var key in item.pkg.table) { |
| 368 | var childPkgIndex = item.pkg.table[key]; |
| 369 | if (list[childPkgIndex] != null) continue; |
| 370 | |
| 371 | var newPath = item.path.concat([key]) |
| 372 | list[childPkgIndex] = newPath; |
| 373 | var childPkg = zigAnalysis.packages[childPkgIndex]; |
| 374 | stack.push({ |
| 375 | path: newPath, |
| 376 | pkg: childPkg, |
| 377 | }); |
| 378 | } |
| 379 | } |
| 380 | return list; |
| 381 | } |
| 352 | 382 | })(); |