Skip to content

Commit 735af8d

Browse files
committed
restore the previously chosen result
1 parent 58baf85 commit 735af8d

File tree

1 file changed

+14
-7
lines changed

1 file changed

+14
-7
lines changed

src/client/search.js

Lines changed: 14 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -38,20 +38,27 @@ input.addEventListener("input", () => {
3838
container.setAttribute("data-shortcut", ""); // prevent conflict with close button
3939
sidebar.classList.add("observablehq-search-results"); // hide pages while showing search results
4040
const results = index.search(currentValue, {boost: {title: 4, keywords: 4}, fuzzy: 0.15, prefix: true});
41+
const previous = sessionStorage.getItem("observablehq-search-chosen");
4142
resultsContainer.innerHTML =
4243
results.length === 0
4344
? "<div>no results</div>"
4445
: `<div>${results.length.toLocaleString("en-US")} result${results.length === 1 ? "" : "s"}</div><ol>${results
45-
.map(renderResult)
46+
.map(({id, score, title}, i) => {
47+
const href = import.meta.resolve(`../${id}`);
48+
return `<li data-score="${Math.min(5, Math.round(0.6 * score))}" class="observablehq-link${
49+
(previous === null ? i === 0 : href === previous) ? ` ${activeClass}` : ""
50+
}"><a href="${escapeDoubleQuote(
51+
href
52+
)}" onclick='sessionStorage.setItem("observablehq-search-chosen",this.getAttribute("href"))'
53+
>${escapeText(String(title ?? "—"))}</a></li>`;
54+
})
4655
.join("")}</ol>`;
56+
if (previous !== null) {
57+
resultsContainer.querySelector(`.${activeClass}`).scrollIntoView({block: "nearest"});
58+
sessionStorage.removeItem("observablehq-search-chosen");
59+
}
4760
});
4861

49-
function renderResult({id, score, title}, i) {
50-
return `<li data-score="${Math.min(5, Math.round(0.6 * score))}" class="observablehq-link${
51-
i === 0 ? ` ${activeClass}` : ""
52-
}"><a href="${escapeDoubleQuote(import.meta.resolve(`../${id}`))}">${escapeText(String(title ?? "—"))}</a></li>`;
53-
}
54-
5562
function escapeDoubleQuote(text) {
5663
return text.replace(/["&]/g, entity);
5764
}

0 commit comments

Comments
 (0)