mirror of
https://github.com/bitcoinresearchkit/brk.git
synced 2026-06-18 10:49:44 -07:00
50 lines
1.2 KiB
JavaScript
50 lines
1.2 KiB
JavaScript
import { createPathId } from "../path.js";
|
|
|
|
/**
|
|
* @param {LearnSection} section
|
|
* @param {readonly string[]} path
|
|
*/
|
|
function createContentsItem(section, path) {
|
|
const item = document.createElement("li");
|
|
const anchor = document.createElement("a");
|
|
const children = section.children ?? [];
|
|
const sectionPath = [...path, section.title];
|
|
const id = createPathId(sectionPath);
|
|
|
|
anchor.href = `#${id}`;
|
|
anchor.append(section.title);
|
|
|
|
if (children.length) {
|
|
const details = document.createElement("details");
|
|
const summary = document.createElement("summary");
|
|
const list = document.createElement("ol");
|
|
|
|
for (const child of children) {
|
|
list.append(createContentsItem(child, sectionPath));
|
|
}
|
|
|
|
summary.append(anchor);
|
|
details.append(summary, list);
|
|
item.append(details);
|
|
} else {
|
|
item.append(anchor);
|
|
}
|
|
|
|
return item;
|
|
}
|
|
|
|
/** @param {LearnSection[]} sections */
|
|
export function createContents(sections) {
|
|
const nav = document.createElement("nav");
|
|
const list = document.createElement("ol");
|
|
|
|
nav.setAttribute("aria-label", "Learn contents");
|
|
|
|
for (const section of sections) {
|
|
list.append(createContentsItem(section, []));
|
|
}
|
|
|
|
nav.append(list);
|
|
return nav;
|
|
}
|