feat: add src endpoint
parent
59707cda58
commit
bc0dd3b48a
|
@ -76,7 +76,8 @@ def htmlOutput (result : AnalyzerResult) (root : String) : IO Unit := do
|
||||||
let name := decl.getName.toString
|
let name := decl.getName.toString
|
||||||
let description := decl.getDocString.getD ""
|
let description := decl.getDocString.getD ""
|
||||||
let link := Id.run <| ReaderT.run (declNameToLink decl.getName) config
|
let link := Id.run <| ReaderT.run (declNameToLink decl.getName) config
|
||||||
let obj := Json.mkObj [("name", name), ("description", description), ("link", link)]
|
let source := Id.run <| ReaderT.run (getSourceUrl mod.name decl.getDeclarationRange) config
|
||||||
|
let obj := Json.mkObj [("name", name), ("description", description), ("link", link), ("source", source)]
|
||||||
declList := declList.push obj
|
declList := declList.push obj
|
||||||
|
|
||||||
let json := Json.arr declList
|
let json := Json.arr declList
|
||||||
|
|
|
@ -1,14 +1,22 @@
|
||||||
import { SITE_ROOT } from "../site-root.js";
|
import { SITE_ROOT } from "../site-root.js";
|
||||||
import { declSearch } from "../search.js";
|
import { declSearch } from "../search.js";
|
||||||
|
|
||||||
|
async function findRedirect(query, isSource) {
|
||||||
|
return declSearch(query).then((results) => {
|
||||||
|
window.location.replace(isSource? results[0].source : results[0].link);
|
||||||
|
}).catch(() => {
|
||||||
|
window.location.replace(`${SITE_ROOT}404.html`);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
let splits = window.location.href.split("#");
|
let splits = window.location.href.split("#");
|
||||||
|
|
||||||
if (splits.length < 2) {
|
if (splits.length < 2) {
|
||||||
window.location.replace(`${SITE_ROOT}/404.html`);
|
window.location.replace(`${SITE_ROOT}/404.html`);
|
||||||
}
|
}
|
||||||
|
|
||||||
declSearch(splits[1]).then((results) => {
|
if (splits[1].endsWith("/src")) {
|
||||||
window.location.replace(results[0].link);
|
findRedirect(splits[1].replace("/src", ""), true);
|
||||||
}).catch(() => {
|
} else {
|
||||||
window.location.replace(`${SITE_ROOT}404.html`);
|
findRedirect(splits[1], false);
|
||||||
});
|
}
|
||||||
|
|
|
@ -25,14 +25,14 @@ function matchCaseSensitive(declName, lowerDeclName, pat) {
|
||||||
}
|
}
|
||||||
|
|
||||||
export function loadDecls(searchableDataCnt) {
|
export function loadDecls(searchableDataCnt) {
|
||||||
return searchableDataCnt.map(({name, description, link}) => [name, name.toLowerCase(), description.toLowerCase(), link]);
|
return searchableDataCnt.map(({name, description, link, source}) => [name, name.toLowerCase(), description.toLowerCase(), link, source]);
|
||||||
}
|
}
|
||||||
|
|
||||||
export function getMatches(decls, pat, maxResults = 30) {
|
export function getMatches(decls, pat, maxResults = 30) {
|
||||||
const lowerPats = pat.toLowerCase().split(/\s/g);
|
const lowerPats = pat.toLowerCase().split(/\s/g);
|
||||||
const patNoSpaces = pat.replace(/\s/g, '');
|
const patNoSpaces = pat.replace(/\s/g, '');
|
||||||
const results = [];
|
const results = [];
|
||||||
for (const [decl, lowerDecl, lowerDoc, link] of decls) {
|
for (const [decl, lowerDecl, lowerDoc, link, source] of decls) {
|
||||||
let err = matchCaseSensitive(decl, lowerDecl, patNoSpaces);
|
let err = matchCaseSensitive(decl, lowerDecl, patNoSpaces);
|
||||||
|
|
||||||
// match all words as substrings of docstring
|
// match all words as substrings of docstring
|
||||||
|
@ -41,7 +41,7 @@ export function getMatches(decls, pat, maxResults = 30) {
|
||||||
}
|
}
|
||||||
|
|
||||||
if (err !== undefined) {
|
if (err !== undefined) {
|
||||||
results.push({decl, err, link});
|
results.push({decl, err, link, source});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return results.sort(({err: a}, {err: b}) => a - b).slice(0, maxResults);
|
return results.sort(({err: a}, {err: b}) => a - b).slice(0, maxResults);
|
||||||
|
|
Loading…
Reference in New Issue