capnproto

FORK: Cap'n Proto serialization/RPC system - core tools and C++ library
git clone https://git.neptards.moe/neptards/capnproto.git
Log | Files | Refs | README | LICENSE

main.js (5878B)


      1 function initSidebar() {
      2   var filename = document.location.pathname;
      3 
      4   if (filename.slice(0, 5) == "/next") {
      5     filename = filename.slice(5);
      6   }
      7 
      8   if (filename == "/") {
      9     filename = "/index.html";
     10   } else if (filename.slice(0, 6) == "/news/") {
     11     filename = "/news/";
     12   }
     13 
     14   var menu = document.getElementById("menu");
     15   var setMenuLayout = function() {
     16     if (window.innerWidth < 900) {
     17       document.body.className = "narrow";
     18       menu.className = "";
     19       document.getElementById("main_content").style.minHeight = "0";
     20     } else {
     21       if (document.body.clientWidth < 1340) {
     22         document.body.className = "normal";
     23       } else {
     24         document.body.className = "wide";
     25       }
     26 
     27       var y = (window.pageYOffset !== undefined) ? window.pageYOffset :
     28         (document.documentElement || document.body.parentNode || document.body).scrollTop;
     29 
     30       if (y < 444 || window.innerHeight < menu.clientHeight + 100) {
     31         menu.className = "";
     32       } else {
     33         menu.className = "floating";
     34       }
     35 
     36       setTimeout(function () {
     37         document.getElementById("main_content").style.minHeight = menu.clientHeight + 100 + "px";
     38       }, 10);
     39     }
     40   };
     41   setMenuLayout();
     42   window.onresize = setMenuLayout;
     43   window.onscroll = setMenuLayout;
     44 
     45   var items = menu.getElementsByTagName("li");
     46   var toc = null;
     47   for (var i = 0; i < items.length; i++) {
     48     var link = items[i].getElementsByTagName("a")[0];
     49     var href = link.href;
     50     if (href.lastIndexOf(filename) >= 0) {
     51       var parent = link.parentNode;
     52 
     53       while (link.childNodes.length > 0) {
     54         var child = link.childNodes[0];
     55         link.removeChild(child);
     56         parent.appendChild(child);
     57       }
     58       parent.removeChild(link);
     59       items[i].className = "selected";
     60       toc = document.createElement("ul");
     61       toc.id = "toc";
     62       items[i].appendChild(toc);
     63     }
     64   }
     65 
     66   return toc;
     67 }
     68 
     69 function setupSidebar() {
     70   if (window.CAPNP_NEWS_SIDEBAR) {
     71     setupNewsSidebar(CAPNP_NEWS_SIDEBAR);
     72     return;
     73   }
     74 
     75   var filename = document.location.pathname;
     76 
     77   if (filename.slice(0, 5) == "/next") {
     78     filename = filename.slice(5);
     79   }
     80 
     81   var isNews = filename.slice(0, 6) == "/news/";
     82 
     83   var toc = initSidebar();
     84   if (toc) {
     85     var content = document.getElementById("main_content").childNodes;
     86     var headings = [];
     87 
     88     for (var i = 0; i < content.length; i++) {
     89       if (content[i].tagName == "H2" ||
     90           (!isNews && (content[i].tagName == "H3" || content[i].tagName == "H4"))) {
     91         headings.push(content[i]);
     92       }
     93     }
     94 
     95     var levels = [toc];
     96     for (var i in headings) {
     97       var hl = headings[i].tagName.slice(1) - 1;
     98       while (hl > levels.length) {
     99         var parent = levels[levels.length - 1];
    100         var item = parent.childNodes[parent.childNodes.length - 1];
    101         var sublist = document.createElement("ul");
    102         item.appendChild(sublist);
    103         levels.push(sublist);
    104       }
    105       while (hl < levels.length) {
    106         levels.pop();
    107       }
    108 
    109       var parent = levels[levels.length - 1];
    110       var item = document.createElement("li");
    111       var p = document.createElement("p");
    112       var link = document.createElement("a");
    113       p.appendChild(document.createTextNode(headings[i].innerText || headings[i].textContent));
    114       var hlinks = headings[i].getElementsByTagName("a");
    115       if (hlinks.length == 1) {
    116         link.href = hlinks[0].href;
    117       } else {
    118         link.href = "#" + headings[i].id;
    119       }
    120       link.appendChild(p);
    121       item.appendChild(link);
    122       parent.appendChild(item);
    123     }
    124   }
    125 }
    126 
    127 function setupNewsSidebar(items) {
    128   var toc = initSidebar();
    129   if (toc) {
    130     for (var i in items) {
    131       var item = document.createElement("li");
    132       var p = document.createElement("p");
    133       var link = document.createElement("a");
    134       p.appendChild(document.createTextNode(items[i].title));
    135       link.href = items[i].url;
    136       link.appendChild(p);
    137       item.appendChild(link);
    138       toc.appendChild(item);
    139     }
    140   }
    141 }
    142 
    143 function setupSlides() {
    144   var slides = document.querySelectorAll("body.slides main section");
    145   var headerTitle = document.querySelector("body.slides header .title");
    146   var slideNum = document.querySelector("#slide-num");
    147 
    148   var current = 0;
    149   var hash = document.location.hash;
    150   if (hash) {
    151     current = parseInt(hash.slice(1)) - 1;
    152   }
    153   slides[current].className = "current";
    154   headerTitle.textContent = slides[current].dataset.title || "";
    155   slideNum.textContent = window.location.hash;
    156 
    157   function navSlide(diff) {
    158     slides[current].className = "";
    159     current = Math.min(slides.length - 1, Math.max(0, current + diff));
    160     slides[current].className = "current";
    161 
    162     headerTitle.textContent = slides[current].dataset.title || "";
    163     if (current) {
    164       history.replaceState({}, "", "#" + (current + 1));
    165       slideNum.textContent = "#" + (current + 1);
    166     } else {
    167       history.replaceState({}, "", window.location.pathname);
    168       slideNum.textContent = "";
    169     }
    170   }
    171 
    172   document.body.addEventListener("keydown", event => {
    173     if (event.keyCode == 39) {
    174       navSlide(1);
    175     } else if (event.keyCode == 37) {
    176       navSlide(-1);
    177     }
    178   });
    179 
    180   document.querySelector("body.slides footer button.back").addEventListener("click", event => {
    181     navSlide(-1);
    182   });
    183   document.querySelector("body.slides footer button.forward").addEventListener("click", event => {
    184     navSlide(1);
    185   });
    186 
    187   if (document.location.hostname === "localhost") {
    188     var lastModified = new Date(document.lastModified);
    189     setInterval(function () {
    190       var req = new Request(".", {headers: {
    191           "If-Modified-Since": lastModified.toUTCString()}});
    192       fetch(req).then(response => {
    193         if (response.status == 200 &&
    194             new Date(response.headers.get("Last-Modified")) > lastModified) {
    195           document.location.reload();
    196         }
    197       });
    198     }, 1000);
    199   }
    200 }