function initSidebar() { var filename = document.location.pathname; if (filename.slice(0, 5) == "/next") { filename = filename.slice(5); } if (filename == "/") { filename = "/index.html"; } else if (filename.slice(0, 6) == "/news/") { filename = "/news/"; } var menu = document.getElementById("menu"); var setMenuLayout = function() { if (window.innerWidth < 900) { document.body.className = "narrow"; menu.className = ""; document.getElementById("main_content").style.minHeight = "0"; } else { if (document.body.clientWidth < 1340) { document.body.className = "normal"; } else { document.body.className = "wide"; } var y = (window.pageYOffset !== undefined) ? window.pageYOffset : (document.documentElement || document.body.parentNode || document.body).scrollTop; if (y < 444 || window.innerHeight < menu.clientHeight + 100) { menu.className = ""; } else { menu.className = "floating"; } setTimeout(function () { document.getElementById("main_content").style.minHeight = menu.clientHeight + 100 + "px"; }, 10); } }; setMenuLayout(); window.onresize = setMenuLayout; window.onscroll = setMenuLayout; var items = menu.getElementsByTagName("li"); var toc = null; for (var i = 0; i < items.length; i++) { var link = items[i].getElementsByTagName("a")[0]; var href = link.href; if (href.lastIndexOf(filename) >= 0) { var parent = link.parentNode; while (link.childNodes.length > 0) { var child = link.childNodes[0]; link.removeChild(child); parent.appendChild(child); } parent.removeChild(link); items[i].className = "selected"; toc = document.createElement("ul"); toc.id = "toc"; items[i].appendChild(toc); } } return toc; } function setupSidebar() { if (window.CAPNP_NEWS_SIDEBAR) { setupNewsSidebar(CAPNP_NEWS_SIDEBAR); return; } var filename = document.location.pathname; if (filename.slice(0, 5) == "/next") { filename = filename.slice(5); } var isNews = filename.slice(0, 6) == "/news/"; var toc = initSidebar(); if (toc) { var content = document.getElementById("main_content").childNodes; var headings = []; for (var i = 0; i < content.length; i++) { if (content[i].tagName == "H2" || (!isNews && (content[i].tagName == "H3" || content[i].tagName == "H4"))) { headings.push(content[i]); } } var levels = [toc]; for (var i in headings) { var hl = headings[i].tagName.slice(1) - 1; while (hl > levels.length) { var parent = levels[levels.length - 1]; var item = parent.childNodes[parent.childNodes.length - 1]; var sublist = document.createElement("ul"); item.appendChild(sublist); levels.push(sublist); } while (hl < levels.length) { levels.pop(); } var parent = levels[levels.length - 1]; var item = document.createElement("li"); var p = document.createElement("p"); var link = document.createElement("a"); p.appendChild(document.createTextNode(headings[i].innerText || headings[i].textContent)); var hlinks = headings[i].getElementsByTagName("a"); if (hlinks.length == 1) { link.href = hlinks[0].href; } else { link.href = "#" + headings[i].id; } link.appendChild(p); item.appendChild(link); parent.appendChild(item); } } } function setupNewsSidebar(items) { var toc = initSidebar(); if (toc) { for (var i in items) { var item = document.createElement("li"); var p = document.createElement("p"); var link = document.createElement("a"); p.appendChild(document.createTextNode(items[i].title)); link.href = items[i].url; link.appendChild(p); item.appendChild(link); toc.appendChild(item); } } } function setupSlides() { var slides = document.querySelectorAll("body.slides main section"); var headerTitle = document.querySelector("body.slides header .title"); var slideNum = document.querySelector("#slide-num"); var current = 0; var hash = document.location.hash; if (hash) { current = parseInt(hash.slice(1)) - 1; } slides[current].className = "current"; headerTitle.textContent = slides[current].dataset.title || ""; slideNum.textContent = window.location.hash; function navSlide(diff) { slides[current].className = ""; current = Math.min(slides.length - 1, Math.max(0, current + diff)); slides[current].className = "current"; headerTitle.textContent = slides[current].dataset.title || ""; if (current) { history.replaceState({}, "", "#" + (current + 1)); slideNum.textContent = "#" + (current + 1); } else { history.replaceState({}, "", window.location.pathname); slideNum.textContent = ""; } } document.body.addEventListener("keydown", event => { if (event.keyCode == 39) { navSlide(1); } else if (event.keyCode == 37) { navSlide(-1); } }); document.querySelector("body.slides footer button.back").addEventListener("click", event => { navSlide(-1); }); document.querySelector("body.slides footer button.forward").addEventListener("click", event => { navSlide(1); }); if (document.location.hostname === "localhost") { var lastModified = new Date(document.lastModified); setInterval(function () { var req = new Request(".", {headers: { "If-Modified-Since": lastModified.toUTCString()}}); fetch(req).then(response => { if (response.status == 200 && new Date(response.headers.get("Last-Modified")) > lastModified) { document.location.reload(); } }); }, 1000); } }