annotate src/capnproto-git-20161025/doc/javascripts/main.js @ 48:9530b331f8c1

Add Cap'n Proto source
author Chris Cannam <cannam@all-day-breakfast.com>
date Tue, 25 Oct 2016 11:17:01 +0100
parents
children
rev   line source
cannam@48 1 function initSidebar() {
cannam@48 2 var filename = document.location.pathname;
cannam@48 3
cannam@48 4 if (filename.slice(0, 5) == "/next") {
cannam@48 5 filename = filename.slice(5);
cannam@48 6 }
cannam@48 7
cannam@48 8 if (filename == "/") {
cannam@48 9 filename = "/index.html";
cannam@48 10 } else if (filename.slice(0, 6) == "/news/") {
cannam@48 11 filename = "/news/";
cannam@48 12 }
cannam@48 13
cannam@48 14 var menu = document.getElementById("menu");
cannam@48 15 var setMenuLayout = function() {
cannam@48 16 if (window.innerWidth < 900) {
cannam@48 17 document.body.className = "narrow";
cannam@48 18 menu.className = "";
cannam@48 19 } else {
cannam@48 20 if (document.body.clientWidth < 1340) {
cannam@48 21 document.body.className = "normal";
cannam@48 22 } else {
cannam@48 23 document.body.className = "wide";
cannam@48 24 }
cannam@48 25
cannam@48 26 var y = (window.pageYOffset !== undefined) ? window.pageYOffset :
cannam@48 27 (document.documentElement || document.body.parentNode || document.body).scrollTop;
cannam@48 28
cannam@48 29 if (y < 444 || window.innerHeight < menu.clientHeight + 100) {
cannam@48 30 menu.className = "";
cannam@48 31 } else {
cannam@48 32 menu.className = "floating";
cannam@48 33 }
cannam@48 34 }
cannam@48 35 };
cannam@48 36 setMenuLayout();
cannam@48 37 window.onresize = setMenuLayout;
cannam@48 38 window.onscroll = setMenuLayout;
cannam@48 39
cannam@48 40 var items = menu.getElementsByTagName("li");
cannam@48 41 var toc = null;
cannam@48 42 for (var i = 0; i < items.length; i++) {
cannam@48 43 var link = items[i].getElementsByTagName("a")[0];
cannam@48 44 var href = link.href;
cannam@48 45 if (href.lastIndexOf(filename) >= 0) {
cannam@48 46 var parent = link.parentNode;
cannam@48 47
cannam@48 48 while (link.childNodes.length > 0) {
cannam@48 49 var child = link.childNodes[0];
cannam@48 50 link.removeChild(child);
cannam@48 51 parent.appendChild(child);
cannam@48 52 }
cannam@48 53 parent.removeChild(link);
cannam@48 54 items[i].className = "selected";
cannam@48 55 toc = document.createElement("ul");
cannam@48 56 toc.id = "toc";
cannam@48 57 items[i].appendChild(toc);
cannam@48 58 }
cannam@48 59 }
cannam@48 60
cannam@48 61 document.getElementById("main_content").style.minHeight = menu.clientHeight + 100 + "px";
cannam@48 62
cannam@48 63 return toc;
cannam@48 64 }
cannam@48 65
cannam@48 66 function setupSidebar() {
cannam@48 67 var filename = document.location.pathname;
cannam@48 68
cannam@48 69 if (filename.slice(0, 5) == "/next") {
cannam@48 70 filename = filename.slice(5);
cannam@48 71 }
cannam@48 72
cannam@48 73 var isNews = filename.slice(0, 6) == "/news/";
cannam@48 74
cannam@48 75 var toc = initSidebar();
cannam@48 76 if (toc) {
cannam@48 77 var content = document.getElementById("main_content").childNodes;
cannam@48 78 var headings = [];
cannam@48 79
cannam@48 80 for (var i = 0; i < content.length; i++) {
cannam@48 81 if (content[i].tagName == "H2" ||
cannam@48 82 (!isNews && (content[i].tagName == "H3" || content[i].tagName == "H4"))) {
cannam@48 83 headings.push(content[i]);
cannam@48 84 }
cannam@48 85 }
cannam@48 86
cannam@48 87 var levels = [toc];
cannam@48 88 for (var i in headings) {
cannam@48 89 var hl = headings[i].tagName.slice(1) - 1;
cannam@48 90 while (hl > levels.length) {
cannam@48 91 var parent = levels[levels.length - 1];
cannam@48 92 var item = parent.childNodes[parent.childNodes.length - 1];
cannam@48 93 var sublist = document.createElement("ul");
cannam@48 94 item.appendChild(sublist);
cannam@48 95 levels.push(sublist);
cannam@48 96 }
cannam@48 97 while (hl < levels.length) {
cannam@48 98 levels.pop();
cannam@48 99 }
cannam@48 100
cannam@48 101 var parent = levels[levels.length - 1];
cannam@48 102 var item = document.createElement("li");
cannam@48 103 var p = document.createElement("p");
cannam@48 104 var link = document.createElement("a");
cannam@48 105 p.appendChild(document.createTextNode(headings[i].innerText || headings[i].textContent));
cannam@48 106 var hlinks = headings[i].getElementsByTagName("a");
cannam@48 107 if (hlinks.length == 1) {
cannam@48 108 link.href = hlinks[0].href;
cannam@48 109 } else {
cannam@48 110 link.href = "#" + headings[i].id;
cannam@48 111 }
cannam@48 112 link.appendChild(p);
cannam@48 113 item.appendChild(link);
cannam@48 114 parent.appendChild(item);
cannam@48 115 }
cannam@48 116 }
cannam@48 117 }
cannam@48 118
cannam@48 119 function setupNewsSidebar(items) {
cannam@48 120 var toc = initSidebar();
cannam@48 121 if (toc) {
cannam@48 122 for (var i in items) {
cannam@48 123 var item = document.createElement("li");
cannam@48 124 var p = document.createElement("p");
cannam@48 125 var link = document.createElement("a");
cannam@48 126 p.appendChild(document.createTextNode(items[i].title));
cannam@48 127 link.href = items[i].url;
cannam@48 128 link.appendChild(p);
cannam@48 129 item.appendChild(link);
cannam@48 130 toc.appendChild(item);
cannam@48 131 }
cannam@48 132 }
cannam@48 133 }