Remove table of contents JavaScript file
This commit is contained in:
parent
cbfffe096e
commit
43e77d9cfd
|
@ -1,76 +0,0 @@
|
||||||
// Auto generate table of contents
|
|
||||||
// Code based on https://techindetail.com/table-of-contents-javascript/
|
|
||||||
window.addEventListener('DOMContentLoaded', (event) => {
|
|
||||||
const article = document.querySelector("article");
|
|
||||||
const headings = article.querySelectorAll("h2, h3");
|
|
||||||
const toc = document.querySelector(".toc");
|
|
||||||
const tocSidebar = document.querySelector(".sidebar__toc");
|
|
||||||
const leftSidebar = document.querySelector('.left-sidebar');
|
|
||||||
const totalHeadings = headings.length;
|
|
||||||
let tocOl = document.createElement("ol");
|
|
||||||
let tocFragment = new DocumentFragment();
|
|
||||||
let mainLi = null;
|
|
||||||
let subUl = null;
|
|
||||||
let subLi = null;
|
|
||||||
let isSibling = false;
|
|
||||||
|
|
||||||
if (totalHeadings > 1) {
|
|
||||||
for (let element of headings) {
|
|
||||||
let anchor = document.createElement("a");
|
|
||||||
let anchorText = element.innerText;
|
|
||||||
anchor.innerText = anchorText;
|
|
||||||
let elementId = anchorText.replaceAll(" ", "-").toLowerCase();
|
|
||||||
anchor.href = "#" + elementId;
|
|
||||||
element.id = elementId;
|
|
||||||
let level = element.nodeName;
|
|
||||||
|
|
||||||
if ("H3" === level) {
|
|
||||||
if (mainLi) {
|
|
||||||
subLi = document.createElement("li");
|
|
||||||
subLi.appendChild(anchor);
|
|
||||||
|
|
||||||
if (isSibling === false) {
|
|
||||||
subUl = document.createElement("ul");
|
|
||||||
}
|
|
||||||
subUl.appendChild(subLi);
|
|
||||||
mainLi.appendChild(subUl);
|
|
||||||
|
|
||||||
isSibling = true;
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
mainLi = document.createElement("li");
|
|
||||||
mainLi.appendChild(anchor);
|
|
||||||
tocFragment.appendChild(mainLi);
|
|
||||||
isSibling = false;
|
|
||||||
subUl = null;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
tocOl.append(tocFragment);
|
|
||||||
toc.append(tocOl);
|
|
||||||
|
|
||||||
const tocClone = tocOl.cloneNode(true);
|
|
||||||
if (tocSidebar) {
|
|
||||||
tocSidebar.appendChild(tocClone);
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
toc.classList.add('hidden');
|
|
||||||
leftSidebar.classList.add('hidden');
|
|
||||||
}
|
|
||||||
|
|
||||||
// Close article ToC accordion and the left sidebar for small screen sizes
|
|
||||||
if (window.innerWidth < 480) {
|
|
||||||
toc.removeAttribute("open");
|
|
||||||
leftSidebar.classList.add("hidden");
|
|
||||||
} else {
|
|
||||||
toc.setAttribute("open", true);
|
|
||||||
}
|
|
||||||
|
|
||||||
// Remove the stickiness of the sidebar ToC if it is larger than screen height
|
|
||||||
function preventSidebarOverflow() {
|
|
||||||
if (document.documentElement.clientHeight < tocSidebar.offsetHeight + 50) {
|
|
||||||
tocSidebar.style.marginTop = "0";
|
|
||||||
tocSidebar.style.position = "static";
|
|
||||||
}
|
|
||||||
}
|
|
||||||
preventSidebarOverflow();
|
|
||||||
});
|
|
Loading…
Reference in New Issue