| ... | @@ -15,6 +15,9 @@ | ... | @@ -15,6 +15,9 @@ |
| 15 | var typeKindFnId; | 15 | var typeKindFnId; |
| 16 | findTypeKinds(); | 16 | findTypeKinds(); |
| 17 | | 17 | |
| | 18 | // for each package, is an array with packages to get to this one |
| | 19 | var canonPkgPaths = computeCanonicalPackagePaths(); |
| | 20 | |
| 18 | var curNav = { | 21 | var curNav = { |
| 19 | // each element is a package name, e.g. @import("a") then within there @import("b") | 22 | // each element is a package name, e.g. @import("a") then within there @import("b") |
| 20 | // starting implicitly from root package | 23 | // starting implicitly from root package |
| ... | @@ -180,7 +183,7 @@ | ... | @@ -180,7 +183,7 @@ |
| 180 | var liDom = domListPkgs.children[i]; | 183 | var liDom = domListPkgs.children[i]; |
| 181 | var aDom = liDom.children[0]; | 184 | var aDom = liDom.children[0]; |
| 182 | aDom.textContent = list[i].name; | 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 | domSectPkgs.classList.remove("hidden"); | 189 | domSectPkgs.classList.remove("hidden"); |
| ... | @@ -197,8 +200,8 @@ | ... | @@ -197,8 +200,8 @@ |
| 197 | } | 200 | } |
| 198 | } | 201 | } |
| 199 | | 202 | |
| 200 | function navLinkPkg(childName) { | 203 | function navLinkPkg(pkgIndex) { |
| 201 | return navLink(curNav.pkgNames.concat([childName]), []); | 204 | return navLink(canonPkgPaths[pkgIndex], []); |
| 202 | } | 205 | } |
| 203 | | 206 | |
| 204 | function navLinkDecl(childName) { | 207 | function navLinkDecl(childName) { |
| ... | @@ -349,4 +352,31 @@ | ... | @@ -349,4 +352,31 @@ |
| 349 | } | 352 | } |
| 350 | return null; | 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 | })(); |