Skip to content

Commit

Permalink
docs: add search widget to options page
Browse files Browse the repository at this point in the history
  • Loading branch information
NotAShelf committed Dec 9, 2024
1 parent fca55e1 commit 37dc965
Show file tree
Hide file tree
Showing 4 changed files with 62 additions and 2 deletions.
2 changes: 1 addition & 1 deletion .editorconfig
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ indent_style = space
indent_size = 2
trim_trailing_whitespace = false

[*.{nix,yml,yaml}]
[*.{js,nix,yml,yaml}]
indent_style = space
indent_size = 2
tab_width = 2
Expand Down
4 changes: 3 additions & 1 deletion docs/manual.nix
Original file line number Diff line number Diff line change
Expand Up @@ -62,7 +62,8 @@ in
# Copy anchor scripts to the script directory in document root.
cp -vt "$dest"/script \
${./static/script}/anchor-min.js \
${./static/script}/anchor-use.js
${./static/script}/anchor-use.js \
${./static/script}/search.js
substituteInPlace ./options.md \
--subst-var-by OPTIONS_JSON ./config-options.json
Expand Down Expand Up @@ -100,6 +101,7 @@ in
--script highlightjs/loader.js \
--script script/anchor-use.js \
--script script/anchor-min.js \
--script script/search.js \
--toc-depth 2 \
--section-toc-depth 1 \
manual.md \
Expand Down
40 changes: 40 additions & 0 deletions docs/static/script/search.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
document.addEventListener("DOMContentLoaded", () => {
if (!window.location.pathname.endsWith("options.html")) return;

const searchBar = document.createDocumentFragment();
const searchDiv = document.createElement("div");
searchDiv.id = "search-bar";
searchDiv.innerHTML = `
<input type="text" id="search-input" placeholder="Search options by ID..." />
<div id="search-results"></div>
`;
searchBar.appendChild(searchDiv);
document.body.prepend(searchDiv);

const dtElements = Array.from(document.querySelectorAll("dt"));
const ddElements = Array.from(document.querySelectorAll("dd"));
const dtOptionIds = dtElements.map(
(dt) => dt.querySelector("a")?.id.toLowerCase() || "",
);

if (dtElements.length === 0 || ddElements.length === 0) {
console.warn("Something went wrong, page may be loaded incorrectly.");
return;
}

let debounceTimeout;
document.getElementById("search-input").addEventListener("input", (event) => {
clearTimeout(debounceTimeout);
debounceTimeout = setTimeout(() => {
const query = event.target.value.toLowerCase();
dtElements.forEach((dt, index) => {
const isMatch = dtOptionIds[index].includes(query);

if (dt.classList.contains("hidden") !== !isMatch) {
dt.classList.toggle("hidden", !isMatch);
ddElements[index]?.classList.toggle("hidden", !isMatch);
}
});
}, 200);
});
});
18 changes: 18 additions & 0 deletions docs/static/style.scss
Original file line number Diff line number Diff line change
Expand Up @@ -233,6 +233,24 @@ li {
}
}

#search-bar {
position: sticky;
top: 0;
background: white;
padding: 10px;
border-bottom: 1px solid #ccc;
z-index: 1000;
}
#search-input {
width: 100%;
padding: 8px;
border: 1px solid #ccc;
border-radius: 4px;
}
.hidden {
display: none;
}

div.titlepage {
margin: 40px 0;

Expand Down

0 comments on commit 37dc965

Please sign in to comment.