cannam@62: function initSidebar() { cannam@62: var filename = document.location.pathname; cannam@62: cannam@62: if (filename.slice(0, 5) == "/next") { cannam@62: filename = filename.slice(5); cannam@62: } cannam@62: cannam@62: if (filename == "/") { cannam@62: filename = "/index.html"; cannam@62: } else if (filename.slice(0, 6) == "/news/") { cannam@62: filename = "/news/"; cannam@62: } cannam@62: cannam@62: var menu = document.getElementById("menu"); cannam@62: var setMenuLayout = function() { cannam@62: if (window.innerWidth < 900) { cannam@62: document.body.className = "narrow"; cannam@62: menu.className = ""; cannam@62: } else { cannam@62: if (document.body.clientWidth < 1340) { cannam@62: document.body.className = "normal"; cannam@62: } else { cannam@62: document.body.className = "wide"; cannam@62: } cannam@62: cannam@62: var y = (window.pageYOffset !== undefined) ? window.pageYOffset : cannam@62: (document.documentElement || document.body.parentNode || document.body).scrollTop; cannam@62: cannam@62: if (y < 444 || window.innerHeight < menu.clientHeight + 100) { cannam@62: menu.className = ""; cannam@62: } else { cannam@62: menu.className = "floating"; cannam@62: } cannam@62: } cannam@62: }; cannam@62: setMenuLayout(); cannam@62: window.onresize = setMenuLayout; cannam@62: window.onscroll = setMenuLayout; cannam@62: cannam@62: var items = menu.getElementsByTagName("li"); cannam@62: var toc = null; cannam@62: for (var i = 0; i < items.length; i++) { cannam@62: var link = items[i].getElementsByTagName("a")[0]; cannam@62: var href = link.href; cannam@62: if (href.lastIndexOf(filename) >= 0) { cannam@62: var parent = link.parentNode; cannam@62: cannam@62: while (link.childNodes.length > 0) { cannam@62: var child = link.childNodes[0]; cannam@62: link.removeChild(child); cannam@62: parent.appendChild(child); cannam@62: } cannam@62: parent.removeChild(link); cannam@62: items[i].className = "selected"; cannam@62: toc = document.createElement("ul"); cannam@62: toc.id = "toc"; cannam@62: items[i].appendChild(toc); cannam@62: } cannam@62: } cannam@62: cannam@62: document.getElementById("main_content").style.minHeight = menu.clientHeight + 100 + "px"; cannam@62: cannam@62: return toc; cannam@62: } cannam@62: cannam@62: function setupSidebar() { cannam@62: var filename = document.location.pathname; cannam@62: cannam@62: if (filename.slice(0, 5) == "/next") { cannam@62: filename = filename.slice(5); cannam@62: } cannam@62: cannam@62: var isNews = filename.slice(0, 6) == "/news/"; cannam@62: cannam@62: var toc = initSidebar(); cannam@62: if (toc) { cannam@62: var content = document.getElementById("main_content").childNodes; cannam@62: var headings = []; cannam@62: cannam@62: for (var i = 0; i < content.length; i++) { cannam@62: if (content[i].tagName == "H2" || cannam@62: (!isNews && (content[i].tagName == "H3" || content[i].tagName == "H4"))) { cannam@62: headings.push(content[i]); cannam@62: } cannam@62: } cannam@62: cannam@62: var levels = [toc]; cannam@62: for (var i in headings) { cannam@62: var hl = headings[i].tagName.slice(1) - 1; cannam@62: while (hl > levels.length) { cannam@62: var parent = levels[levels.length - 1]; cannam@62: var item = parent.childNodes[parent.childNodes.length - 1]; cannam@62: var sublist = document.createElement("ul"); cannam@62: item.appendChild(sublist); cannam@62: levels.push(sublist); cannam@62: } cannam@62: while (hl < levels.length) { cannam@62: levels.pop(); cannam@62: } cannam@62: cannam@62: var parent = levels[levels.length - 1]; cannam@62: var item = document.createElement("li"); cannam@62: var p = document.createElement("p"); cannam@62: var link = document.createElement("a"); cannam@62: p.appendChild(document.createTextNode(headings[i].innerText || headings[i].textContent)); cannam@62: var hlinks = headings[i].getElementsByTagName("a"); cannam@62: if (hlinks.length == 1) { cannam@62: link.href = hlinks[0].href; cannam@62: } else { cannam@62: link.href = "#" + headings[i].id; cannam@62: } cannam@62: link.appendChild(p); cannam@62: item.appendChild(link); cannam@62: parent.appendChild(item); cannam@62: } cannam@62: } cannam@62: } cannam@62: cannam@62: function setupNewsSidebar(items) { cannam@62: var toc = initSidebar(); cannam@62: if (toc) { cannam@62: for (var i in items) { cannam@62: var item = document.createElement("li"); cannam@62: var p = document.createElement("p"); cannam@62: var link = document.createElement("a"); cannam@62: p.appendChild(document.createTextNode(items[i].title)); cannam@62: link.href = items[i].url; cannam@62: link.appendChild(p); cannam@62: item.appendChild(link); cannam@62: toc.appendChild(item); cannam@62: } cannam@62: } cannam@62: }