1*bf2c3715SXin Li 2*bf2c3715SXin Li// generate a table of contents in the side-nav based on the h1/h2 tags of the current page. 3*bf2c3715SXin Lifunction generate_autotoc() { 4*bf2c3715SXin Li var headers = $("h1, h2"); 5*bf2c3715SXin Li if(headers.length > 1) { 6*bf2c3715SXin Li var toc = $("#side-nav").append('<div id="nav-toc" class="toc"><h3>Table of contents</h3></div>'); 7*bf2c3715SXin Li toc = $("#nav-toc"); 8*bf2c3715SXin Li var footer = $("#nav-path"); 9*bf2c3715SXin Li var footerHeight = footer.height(); 10*bf2c3715SXin Li toc = toc.append('<ul></ul>'); 11*bf2c3715SXin Li toc = toc.find('ul'); 12*bf2c3715SXin Li var indices = new Array(); 13*bf2c3715SXin Li indices[0] = 0; 14*bf2c3715SXin Li indices[1] = 0; 15*bf2c3715SXin Li 16*bf2c3715SXin Li var h1counts = $("h1").length; 17*bf2c3715SXin Li headers.each(function(i) { 18*bf2c3715SXin Li var current = $(this); 19*bf2c3715SXin Li var levelTag = current[0].tagName.charAt(1); 20*bf2c3715SXin Li if(h1counts==0) 21*bf2c3715SXin Li levelTag--; 22*bf2c3715SXin Li var cur_id = current.attr("id"); 23*bf2c3715SXin Li 24*bf2c3715SXin Li indices[levelTag-1]+=1; 25*bf2c3715SXin Li var prefix = indices[0]; 26*bf2c3715SXin Li if (levelTag >1) { 27*bf2c3715SXin Li prefix+="."+indices[1]; 28*bf2c3715SXin Li } 29*bf2c3715SXin Li 30*bf2c3715SXin Li // Uncomment to add number prefixes 31*bf2c3715SXin Li // current.html(prefix + " " + current.html()); 32*bf2c3715SXin Li for(var l = levelTag; l < 2; ++l){ 33*bf2c3715SXin Li indices[l] = 0; 34*bf2c3715SXin Li } 35*bf2c3715SXin Li 36*bf2c3715SXin Li if(cur_id == undefined) { 37*bf2c3715SXin Li current.attr('id', 'title' + i); 38*bf2c3715SXin Li current.addClass('anchor'); 39*bf2c3715SXin Li toc.append("<li class='level" + levelTag + "'><a id='link" + i + "' href='#title" + 40*bf2c3715SXin Li i + "' title='" + current.prop("tagName") + "'>" + current.text() + "</a></li>"); 41*bf2c3715SXin Li } else { 42*bf2c3715SXin Li toc.append("<li class='level" + levelTag + "'><a id='" + cur_id + "' href='#title" + 43*bf2c3715SXin Li i + "' title='" + current.prop("tagName") + "'>" + current.text() + "</a></li>"); 44*bf2c3715SXin Li } 45*bf2c3715SXin Li }); 46*bf2c3715SXin Li resizeHeight(); 47*bf2c3715SXin Li } 48*bf2c3715SXin Li} 49*bf2c3715SXin Li 50*bf2c3715SXin Li 51*bf2c3715SXin Livar global_navtree_object; 52*bf2c3715SXin Li 53*bf2c3715SXin Li// Overloaded to remove links to sections/subsections 54*bf2c3715SXin Lifunction getNode(o, po) 55*bf2c3715SXin Li{ 56*bf2c3715SXin Li po.childrenVisited = true; 57*bf2c3715SXin Li var l = po.childrenData.length-1; 58*bf2c3715SXin Li for (var i in po.childrenData) { 59*bf2c3715SXin Li var nodeData = po.childrenData[i]; 60*bf2c3715SXin Li if((!nodeData[1]) || (nodeData[1].indexOf('#')==-1)) // <- we added this line 61*bf2c3715SXin Li po.children[i] = newNode(o, po, nodeData[0], nodeData[1], nodeData[2], i==l); 62*bf2c3715SXin Li } 63*bf2c3715SXin Li} 64*bf2c3715SXin Li 65*bf2c3715SXin Li// Overloaded to adjust the size of the navtree wrt the toc 66*bf2c3715SXin Lifunction resizeHeight() 67*bf2c3715SXin Li{ 68*bf2c3715SXin Li var header = $("#top"); 69*bf2c3715SXin Li var sidenav = $("#side-nav"); 70*bf2c3715SXin Li var content = $("#doc-content"); 71*bf2c3715SXin Li var navtree = $("#nav-tree"); 72*bf2c3715SXin Li var footer = $("#nav-path"); 73*bf2c3715SXin Li var toc = $("#nav-toc"); 74*bf2c3715SXin Li 75*bf2c3715SXin Li var headerHeight = header.outerHeight(); 76*bf2c3715SXin Li var footerHeight = footer.outerHeight(); 77*bf2c3715SXin Li var tocHeight = toc.height(); 78*bf2c3715SXin Li var windowHeight = $(window).height() - headerHeight - footerHeight; 79*bf2c3715SXin Li content.css({height:windowHeight + "px"}); 80*bf2c3715SXin Li navtree.css({height:(windowHeight-tocHeight) + "px"}); 81*bf2c3715SXin Li sidenav.css({height:windowHeight + "px"}); 82*bf2c3715SXin Li} 83*bf2c3715SXin Li 84*bf2c3715SXin Li// Overloaded to save the root node into global_navtree_object 85*bf2c3715SXin Lifunction initNavTree(toroot,relpath) 86*bf2c3715SXin Li{ 87*bf2c3715SXin Li var o = new Object(); 88*bf2c3715SXin Li global_navtree_object = o; // <- we added this line 89*bf2c3715SXin Li o.toroot = toroot; 90*bf2c3715SXin Li o.node = new Object(); 91*bf2c3715SXin Li o.node.li = document.getElementById("nav-tree-contents"); 92*bf2c3715SXin Li o.node.childrenData = NAVTREE; 93*bf2c3715SXin Li o.node.children = new Array(); 94*bf2c3715SXin Li o.node.childrenUL = document.createElement("ul"); 95*bf2c3715SXin Li o.node.getChildrenUL = function() { return o.node.childrenUL; }; 96*bf2c3715SXin Li o.node.li.appendChild(o.node.childrenUL); 97*bf2c3715SXin Li o.node.depth = 0; 98*bf2c3715SXin Li o.node.relpath = relpath; 99*bf2c3715SXin Li o.node.expanded = false; 100*bf2c3715SXin Li o.node.isLast = true; 101*bf2c3715SXin Li o.node.plus_img = document.createElement("img"); 102*bf2c3715SXin Li o.node.plus_img.src = relpath+"ftv2pnode.png"; 103*bf2c3715SXin Li o.node.plus_img.width = 16; 104*bf2c3715SXin Li o.node.plus_img.height = 22; 105*bf2c3715SXin Li 106*bf2c3715SXin Li if (localStorageSupported()) { 107*bf2c3715SXin Li var navSync = $('#nav-sync'); 108*bf2c3715SXin Li if (cachedLink()) { 109*bf2c3715SXin Li showSyncOff(navSync,relpath); 110*bf2c3715SXin Li navSync.removeClass('sync'); 111*bf2c3715SXin Li } else { 112*bf2c3715SXin Li showSyncOn(navSync,relpath); 113*bf2c3715SXin Li } 114*bf2c3715SXin Li navSync.click(function(){ toggleSyncButton(relpath); }); 115*bf2c3715SXin Li } 116*bf2c3715SXin Li 117*bf2c3715SXin Li navTo(o,toroot,window.location.hash,relpath); 118*bf2c3715SXin Li 119*bf2c3715SXin Li $(window).bind('hashchange', function(){ 120*bf2c3715SXin Li if (window.location.hash && window.location.hash.length>1){ 121*bf2c3715SXin Li var a; 122*bf2c3715SXin Li if ($(location).attr('hash')){ 123*bf2c3715SXin Li var clslink=stripPath($(location).attr('pathname'))+':'+ 124*bf2c3715SXin Li $(location).attr('hash').substring(1); 125*bf2c3715SXin Li a=$('.item a[class$="'+clslink+'"]'); 126*bf2c3715SXin Li } 127*bf2c3715SXin Li if (a==null || !$(a).parent().parent().hasClass('selected')){ 128*bf2c3715SXin Li $('.item').removeClass('selected'); 129*bf2c3715SXin Li $('.item').removeAttr('id'); 130*bf2c3715SXin Li } 131*bf2c3715SXin Li var link=stripPath2($(location).attr('pathname')); 132*bf2c3715SXin Li navTo(o,link,$(location).attr('hash'),relpath); 133*bf2c3715SXin Li } else if (!animationInProgress) { 134*bf2c3715SXin Li $('#doc-content').scrollTop(0); 135*bf2c3715SXin Li $('.item').removeClass('selected'); 136*bf2c3715SXin Li $('.item').removeAttr('id'); 137*bf2c3715SXin Li navTo(o,toroot,window.location.hash,relpath); 138*bf2c3715SXin Li } 139*bf2c3715SXin Li }) 140*bf2c3715SXin Li 141*bf2c3715SXin Li $(window).on("load", showRoot); 142*bf2c3715SXin Li} 143*bf2c3715SXin Li 144*bf2c3715SXin Li// return false if the the node has no children at all, or has only section/subsection children 145*bf2c3715SXin Lifunction checkChildrenData(node) { 146*bf2c3715SXin Li if (!(typeof(node.childrenData)==='string')) { 147*bf2c3715SXin Li for (var i in node.childrenData) { 148*bf2c3715SXin Li var url = node.childrenData[i][1]; 149*bf2c3715SXin Li if(url.indexOf("#")==-1) 150*bf2c3715SXin Li return true; 151*bf2c3715SXin Li } 152*bf2c3715SXin Li return false; 153*bf2c3715SXin Li } 154*bf2c3715SXin Li return (node.childrenData); 155*bf2c3715SXin Li} 156*bf2c3715SXin Li 157*bf2c3715SXin Li// Modified to: 158*bf2c3715SXin Li// 1 - remove the root node 159*bf2c3715SXin Li// 2 - remove the section/subsection children 160*bf2c3715SXin Lifunction createIndent(o,domNode,node,level) 161*bf2c3715SXin Li{ 162*bf2c3715SXin Li var level=-2; // <- we replaced level=-1 by level=-2 163*bf2c3715SXin Li var n = node; 164*bf2c3715SXin Li while (n.parentNode) { level++; n=n.parentNode; } 165*bf2c3715SXin Li if (checkChildrenData(node)) { // <- we modified this line to use checkChildrenData(node) instead of node.childrenData 166*bf2c3715SXin Li var imgNode = document.createElement("span"); 167*bf2c3715SXin Li imgNode.className = 'arrow'; 168*bf2c3715SXin Li imgNode.style.paddingLeft=(16*level).toString()+'px'; 169*bf2c3715SXin Li imgNode.innerHTML=arrowRight; 170*bf2c3715SXin Li node.plus_img = imgNode; 171*bf2c3715SXin Li node.expandToggle = document.createElement("a"); 172*bf2c3715SXin Li node.expandToggle.href = "javascript:void(0)"; 173*bf2c3715SXin Li node.expandToggle.onclick = function() { 174*bf2c3715SXin Li if (node.expanded) { 175*bf2c3715SXin Li $(node.getChildrenUL()).slideUp("fast"); 176*bf2c3715SXin Li node.plus_img.innerHTML=arrowRight; 177*bf2c3715SXin Li node.expanded = false; 178*bf2c3715SXin Li } else { 179*bf2c3715SXin Li expandNode(o, node, false, false); 180*bf2c3715SXin Li } 181*bf2c3715SXin Li } 182*bf2c3715SXin Li node.expandToggle.appendChild(imgNode); 183*bf2c3715SXin Li domNode.appendChild(node.expandToggle); 184*bf2c3715SXin Li } else { 185*bf2c3715SXin Li var span = document.createElement("span"); 186*bf2c3715SXin Li span.className = 'arrow'; 187*bf2c3715SXin Li span.style.width = 16*(level+1)+'px'; 188*bf2c3715SXin Li span.innerHTML = ' '; 189*bf2c3715SXin Li domNode.appendChild(span); 190*bf2c3715SXin Li } 191*bf2c3715SXin Li} 192*bf2c3715SXin Li 193*bf2c3715SXin Li// Overloaded to automatically expand the selected node 194*bf2c3715SXin Lifunction selectAndHighlight(hash,n) 195*bf2c3715SXin Li{ 196*bf2c3715SXin Li var a; 197*bf2c3715SXin Li if (hash) { 198*bf2c3715SXin Li var link=stripPath($(location).attr('pathname'))+':'+hash.substring(1); 199*bf2c3715SXin Li a=$('.item a[class$="'+link+'"]'); 200*bf2c3715SXin Li } 201*bf2c3715SXin Li if (a && a.length) { 202*bf2c3715SXin Li a.parent().parent().addClass('selected'); 203*bf2c3715SXin Li a.parent().parent().attr('id','selected'); 204*bf2c3715SXin Li highlightAnchor(); 205*bf2c3715SXin Li } else if (n) { 206*bf2c3715SXin Li $(n.itemDiv).addClass('selected'); 207*bf2c3715SXin Li $(n.itemDiv).attr('id','selected'); 208*bf2c3715SXin Li } 209*bf2c3715SXin Li if ($('#nav-tree-contents .item:first').hasClass('selected')) { 210*bf2c3715SXin Li $('#nav-sync').css('top','30px'); 211*bf2c3715SXin Li } else { 212*bf2c3715SXin Li $('#nav-sync').css('top','5px'); 213*bf2c3715SXin Li } 214*bf2c3715SXin Li expandNode(global_navtree_object, n, true, true); // <- we added this line 215*bf2c3715SXin Li showRoot(); 216*bf2c3715SXin Li} 217*bf2c3715SXin Li 218*bf2c3715SXin Li 219*bf2c3715SXin Li$(document).ready(function() { 220*bf2c3715SXin Li 221*bf2c3715SXin Li generate_autotoc(); 222*bf2c3715SXin Li 223*bf2c3715SXin Li (function (){ // wait until the first "selected" element has been created 224*bf2c3715SXin Li try { 225*bf2c3715SXin Li 226*bf2c3715SXin Li // this line will triger an exception if there is no #selected element, i.e., before the tree structure is complete. 227*bf2c3715SXin Li document.getElementById("selected").className = "item selected"; 228*bf2c3715SXin Li 229*bf2c3715SXin Li // ok, the default tree has been created, we can keep going... 230*bf2c3715SXin Li 231*bf2c3715SXin Li // expand the "Chapters" node 232*bf2c3715SXin Li if(window.location.href.indexOf('unsupported')==-1) 233*bf2c3715SXin Li expandNode(global_navtree_object, global_navtree_object.node.children[0].children[2], true, true); 234*bf2c3715SXin Li else 235*bf2c3715SXin Li expandNode(global_navtree_object, global_navtree_object.node.children[0].children[1], true, true); 236*bf2c3715SXin Li 237*bf2c3715SXin Li // Hide the root node "Eigen" 238*bf2c3715SXin Li $(document.getElementsByClassName('index.html')[0]).parent().parent().css({display:"none"}); 239*bf2c3715SXin Li 240*bf2c3715SXin Li } catch (err) { 241*bf2c3715SXin Li setTimeout(arguments.callee, 10); 242*bf2c3715SXin Li } 243*bf2c3715SXin Li })(); 244*bf2c3715SXin Li 245*bf2c3715SXin Li $(window).on("load", resizeHeight); 246*bf2c3715SXin Li}); 247*bf2c3715SXin Li 248