Files
brk/website_next/learn/contents/index.js
T
2026-06-14 00:46:07 +02:00

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;
}