feat: add jump-src.js for #src links

main
Mario Carneiro 2023-09-21 05:27:33 -04:00 committed by Henrik Böving
parent 800041825e
commit 96870507c5
10 changed files with 25 additions and 6 deletions

1
.gitignore vendored
View File

@ -1,2 +1,3 @@
/build /build
/lake-packages/* /lake-packages/*
lakefile.olean

View File

@ -42,6 +42,7 @@ def htmlOutputSetup (config : SiteBaseContext) : IO Unit := do
("declaration-data.js", declarationDataCenterJs), ("declaration-data.js", declarationDataCenterJs),
("color-scheme.js", colorSchemeJs), ("color-scheme.js", colorSchemeJs),
("nav.js", navJs), ("nav.js", navJs),
("jump-src.js", jumpSrcJs),
("expand-nav.js", expandNavJs), ("expand-nav.js", expandNavJs),
("how-about.js", howAboutJs), ("how-about.js", howAboutJs),
("search.html", searchHtml), ("search.html", searchHtml),

View File

@ -149,6 +149,7 @@ are used in documentation generation, notably JS and CSS ones.
def styleCss : String := include_str "../../static/style.css" def styleCss : String := include_str "../../static/style.css"
def declarationDataCenterJs : String := include_str "../../static/declaration-data.js" def declarationDataCenterJs : String := include_str "../../static/declaration-data.js"
def colorSchemeJs : String := include_str "../../static/color-scheme.js" def colorSchemeJs : String := include_str "../../static/color-scheme.js"
def jumpSrcJs : String := include_str "../../static/jump-src.js"
def navJs : String := include_str "../../static/nav.js" def navJs : String := include_str "../../static/nav.js"
def expandNavJs : String := include_str "../../static/expand-nav.js" def expandNavJs : String := include_str "../../static/expand-nav.js"
def howAboutJs : String := include_str "../../static/how-about.js" def howAboutJs : String := include_str "../../static/how-about.js"

View File

@ -32,6 +32,7 @@ def baseHtmlGenerator (title : String) (site : Array Html) : BaseHtmlM Html := d
<script>{s!"const SITE_ROOT={String.quote (← getRoot)};"}</script> <script>{s!"const SITE_ROOT={String.quote (← getRoot)};"}</script>
[moduleConstant] [moduleConstant]
<script type="module" src={s!"{← getRoot}jump-src.js"}></script>
<script type="module" src={s!"{← getRoot}search.js"}></script> <script type="module" src={s!"{← getRoot}search.js"}></script>
<script type="module" src={s!"{← getRoot}expand-nav.js"}></script> <script type="module" src={s!"{← getRoot}expand-nav.js"}></script>
<script type="module" src={s!"{← getRoot}how-about.js"}></script> <script type="module" src={s!"{← getRoot}how-about.js"}></script>

View File

@ -87,15 +87,16 @@ def baseDirBlackList : HashSet String :=
"color-scheme.js", "color-scheme.js",
"declaration-data.js", "declaration-data.js",
"declarations", "declarations",
"expand-nav.js",
"find", "find",
"foundational_types.html",
"how-about.js", "how-about.js",
"index.html", "index.html",
"search.html", "jump-src.js",
"foundational_types.html",
"mathjax-config.js", "mathjax-config.js",
"navbar.html", "navbar.html",
"nav.js", "nav.js",
"expand-nav.js", "search.html",
"search.js", "search.js",
"src", "src",
"style.css" "style.css"

View File

@ -72,6 +72,7 @@ library_facet docs (lib) : FilePath := do
basePath / "declaration-data.js", basePath / "declaration-data.js",
basePath / "color-scheme.js", basePath / "color-scheme.js",
basePath / "nav.js", basePath / "nav.js",
basePath / "jump-src.js",
basePath / "expand-nav.js", basePath / "expand-nav.js",
basePath / "how-about.js", basePath / "how-about.js",
basePath / "search.js", basePath / "search.js",

Binary file not shown.

View File

@ -140,7 +140,7 @@ export class DeclarationDataCenter {
} }
} }
function isSeparater(char) { function isSeparator(char) {
return char === "." || char === "_"; return char === "." || char === "_";
} }
@ -153,11 +153,11 @@ function matchCaseSensitive(declName, lowerDeclName, pattern) {
lastMatch = 0; lastMatch = 0;
while (i < declName.length && j < pattern.length) { while (i < declName.length && j < pattern.length) {
if (pattern[j] === declName[i] || pattern[j] === lowerDeclName[i]) { if (pattern[j] === declName[i] || pattern[j] === lowerDeclName[i]) {
err += (isSeparater(pattern[j]) ? 0.125 : 1) * (i - lastMatch); err += (isSeparator(pattern[j]) ? 0.125 : 1) * (i - lastMatch);
if (pattern[j] !== declName[i]) err += 0.5; if (pattern[j] !== declName[i]) err += 0.5;
lastMatch = i + 1; lastMatch = i + 1;
j++; j++;
} else if (isSeparater(declName[i])) { } else if (isSeparator(declName[i])) {
err += 0.125 * (i + 1 - lastMatch); err += 0.125 * (i + 1 - lastMatch);
lastMatch = i + 1; lastMatch = i + 1;
} }

View File

@ -80,6 +80,9 @@ async function findAndRedirect(pattern, strict, view) {
window.location.replace(result.link); window.location.replace(result.link);
} else if (view == "doc") { } else if (view == "doc") {
window.location.replace(result.docLink); window.location.replace(result.docLink);
} else if (view == "src") {
const [module, decl] = result.docLink.split("#", 2);
window.location.replace(`${module}?jump=src#${decl}`);
} else { } else {
// fallback to doc page // fallback to doc page
window.location.replace(result.docLink); window.location.replace(result.docLink);

10
static/jump-src.js Normal file
View File

@ -0,0 +1,10 @@
document.addEventListener("DOMContentLoaded", () => {
const hash = document.location.hash.substring(1);
const tgt = new URLSearchParams(document.location.search).get("jump");
if (tgt === "src" && hash) {
const target = document.getElementById(hash)
?.querySelector(".gh_link a")
?.getAttribute("href");
if (target) window.location.replace(target);
}
})