xref: /aosp_15_r20/external/eigen/doc/eigen_navtree_hacks.js (revision bf2c37156dfe67e5dfebd6d394bad8b2ab5804d4)
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 = '&#160;';
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