1/*
2 @licstart  The following is the entire license notice for the JavaScript code in this file.
3
4 The MIT License (MIT)
5
6 Copyright (C) 1997-2020 by Dimitri van Heesch
7
8 Permission is hereby granted, free of charge, to any person obtaining a copy of this software
9 and associated documentation files (the "Software"), to deal in the Software without restriction,
10 including without limitation the rights to use, copy, modify, merge, publish, distribute,
11 sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is
12 furnished to do so, subject to the following conditions:
13
14 The above copyright notice and this permission notice shall be included in all copies or
15 substantial portions of the Software.
16
17 THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING
18 BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
19 NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
20 DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
21 OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
22
23 @licend  The above is the entire license notice for the JavaScript code in this file
24 */
25var navTreeSubIndices = new Array();
26var arrowDown = '▼';
27var arrowRight = '►';
28
29function getData(varName)
30{
31  var i = varName.lastIndexOf('/');
32  var n = i>=0 ? varName.substring(i+1) : varName;
33  return eval(n.replace(/\-/g,'_'));
34}
35
36function stripPath(uri)
37{
38  return uri.substring(uri.lastIndexOf('/')+1);
39}
40
41function stripPath2(uri)
42{
43  var i = uri.lastIndexOf('/');
44  var s = uri.substring(i+1);
45  var m = uri.substring(0,i+1).match(/\/d\w\/d\w\w\/$/);
46  return m ? uri.substring(i-6) : s;
47}
48
49function hashValue()
50{
51  return $(location).attr('hash').substring(1).replace(/[^\w\-]/g,'');
52}
53
54function hashUrl()
55{
56  return '#'+hashValue();
57}
58
59function pathName()
60{
61  return $(location).attr('pathname').replace(/[^-A-Za-z0-9+&@#/%?=~_|!:,.;\(\)]/g, '');
62}
63
64function localStorageSupported()
65{
66  try {
67    return 'localStorage' in window && window['localStorage'] !== null && window.localStorage.getItem;
68  }
69  catch(e) {
70    return false;
71  }
72}
73
74function storeLink(link)
75{
76  if (!$("#nav-sync").hasClass('sync') && localStorageSupported()) {
77      window.localStorage.setItem('navpath',link);
78  }
79}
80
81function deleteLink()
82{
83  if (localStorageSupported()) {
84    window.localStorage.setItem('navpath','');
85  }
86}
87
88function cachedLink()
89{
90  if (localStorageSupported()) {
91    return window.localStorage.getItem('navpath');
92  } else {
93    return '';
94  }
95}
96
97function getScript(scriptName,func,show)
98{
99  var head = document.getElementsByTagName("head")[0];
100  var script = document.createElement('script');
101  script.id = scriptName;
102  script.type = 'text/javascript';
103  script.onload = func;
104  script.src = scriptName+'.js';
105  head.appendChild(script);
106}
107
108function createIndent(o,domNode,node,level)
109{
110  var level=-1;
111  var n = node;
112  while (n.parentNode) { level++; n=n.parentNode; }
113  if (node.childrenData) {
114    var imgNode = document.createElement("span");
115    imgNode.className = 'arrow';
116    imgNode.style.paddingLeft=(16*level).toString()+'px';
117    imgNode.innerHTML=arrowRight;
118    node.plus_img = imgNode;
119    node.expandToggle = document.createElement("a");
120    node.expandToggle.href = "javascript:void(0)";
121    node.expandToggle.onclick = function() {
122      if (node.expanded) {
123        $(node.getChildrenUL()).slideUp("fast");
124        node.plus_img.innerHTML=arrowRight;
125        node.expanded = false;
126      } else {
127        expandNode(o, node, false, false);
128      }
129    }
130    node.expandToggle.appendChild(imgNode);
131    domNode.appendChild(node.expandToggle);
132  } else {
133    var span = document.createElement("span");
134    span.className = 'arrow';
135    span.style.width   = 16*(level+1)+'px';
136    span.innerHTML = ' ';
137    domNode.appendChild(span);
138  }
139}
140
141var animationInProgress = false;
142
143function gotoAnchor(anchor,aname,updateLocation)
144{
145  var pos, docContent = $('#doc-content');
146  var ancParent = $(anchor.parent());
147  if (ancParent.hasClass('memItemLeft') ||
148      ancParent.hasClass('memtitle') ||
149      ancParent.hasClass('fieldname') ||
150      ancParent.hasClass('fieldtype') ||
151      ancParent.is(':header'))
152  {
153    pos = ancParent.position().top;
154  } else if (anchor.position()) {
155    pos = anchor.position().top;
156  }
157  if (pos) {
158    var dist = Math.abs(Math.min(
159               pos-docContent.offset().top,
160               docContent[0].scrollHeight-
161               docContent.height()-docContent.scrollTop()));
162    animationInProgress=true;
163    docContent.animate({
164      scrollTop: pos + docContent.scrollTop() - docContent.offset().top
165    },Math.max(50,Math.min(500,dist)),function(){
166      if (updateLocation) window.location.href=aname;
167      animationInProgress=false;
168    });
169  }
170}
171
172function newNode(o, po, text, link, childrenData, lastNode)
173{
174  var node = new Object();
175  node.children = Array();
176  node.childrenData = childrenData;
177  node.depth = po.depth + 1;
178  node.relpath = po.relpath;
179  node.isLast = lastNode;
180
181  node.li = document.createElement("li");
182  po.getChildrenUL().appendChild(node.li);
183  node.parentNode = po;
184
185  node.itemDiv = document.createElement("div");
186  node.itemDiv.className = "item";
187
188  node.labelSpan = document.createElement("span");
189  node.labelSpan.className = "label";
190
191  createIndent(o,node.itemDiv,node,0);
192  node.itemDiv.appendChild(node.labelSpan);
193  node.li.appendChild(node.itemDiv);
194
195  var a = document.createElement("a");
196  node.labelSpan.appendChild(a);
197  node.label = document.createTextNode(text);
198  node.expanded = false;
199  a.appendChild(node.label);
200  if (link) {
201    var url;
202    if (link.substring(0,1)=='^') {
203      url = link.substring(1);
204      link = url;
205    } else {
206      url = node.relpath+link;
207    }
208    a.className = stripPath(link.replace('#',':'));
209    if (link.indexOf('#')!=-1) {
210      var aname = '#'+link.split('#')[1];
211      var srcPage = stripPath(pathName());
212      var targetPage = stripPath(link.split('#')[0]);
213      a.href = srcPage!=targetPage ? url : "javascript:void(0)";
214      a.onclick = function(){
215        storeLink(link);
216        if (!$(a).parent().parent().hasClass('selected'))
217        {
218          $('.item').removeClass('selected');
219          $('.item').removeAttr('id');
220          $(a).parent().parent().addClass('selected');
221          $(a).parent().parent().attr('id','selected');
222        }
223        var anchor = $(aname);
224        gotoAnchor(anchor,aname,true);
225      };
226    } else {
227      a.href = url;
228      a.onclick = function() { storeLink(link); }
229    }
230  } else {
231    if (childrenData != null)
232    {
233      a.className = "nolink";
234      a.href = "javascript:void(0)";
235      a.onclick = node.expandToggle.onclick;
236    }
237  }
238
239  node.childrenUL = null;
240  node.getChildrenUL = function() {
241    if (!node.childrenUL) {
242      node.childrenUL = document.createElement("ul");
243      node.childrenUL.className = "children_ul";
244      node.childrenUL.style.display = "none";
245      node.li.appendChild(node.childrenUL);
246    }
247    return node.childrenUL;
248  };
249
250  return node;
251}
252
253function showRoot()
254{
255  var headerHeight = $("#top").height();
256  var footerHeight = $("#nav-path").height();
257  var windowHeight = $(window).height() - headerHeight - footerHeight;
258  (function (){ // retry until we can scroll to the selected item
259    try {
260      var navtree=$('#nav-tree');
261      navtree.scrollTo('#selected',100,{offset:-windowHeight/2});
262    } catch (err) {
263      setTimeout(arguments.callee, 0);
264    }
265  })();
266}
267
268function expandNode(o, node, imm, showRoot)
269{
270  if (node.childrenData && !node.expanded) {
271    if (typeof(node.childrenData)==='string') {
272      var varName    = node.childrenData;
273      getScript(node.relpath+varName,function(){
274        node.childrenData = getData(varName);
275        expandNode(o, node, imm, showRoot);
276      }, showRoot);
277    } else {
278      if (!node.childrenVisited) {
279        getNode(o, node);
280      }
281      $(node.getChildrenUL()).slideDown("fast");
282      node.plus_img.innerHTML = arrowDown;
283      node.expanded = true;
284    }
285  }
286}
287
288function glowEffect(n,duration)
289{
290  n.addClass('glow').delay(duration).queue(function(next){
291    $(this).removeClass('glow');next();
292  });
293}
294
295function highlightAnchor()
296{
297  var aname = hashUrl();
298  var anchor = $(aname);
299  if (anchor.parent().attr('class')=='memItemLeft'){
300    var rows = $('.memberdecls tr[class$="'+hashValue()+'"]');
301    glowEffect(rows.children(),300); // member without details
302  } else if (anchor.parent().attr('class')=='fieldname'){
303    glowEffect(anchor.parent().parent(),1000); // enum value
304  } else if (anchor.parent().attr('class')=='fieldtype'){
305    glowEffect(anchor.parent().parent(),1000); // struct field
306  } else if (anchor.parent().is(":header")) {
307    glowEffect(anchor.parent(),1000); // section header
308  } else {
309    glowEffect(anchor.next(),1000); // normal member
310  }
311}
312
313function selectAndHighlight(hash,n)
314{
315  var a;
316  if (hash) {
317    var link=stripPath(pathName())+':'+hash.substring(1);
318    a=$('.item a[class$="'+link+'"]');
319  }
320  if (a && a.length) {
321    a.parent().parent().addClass('selected');
322    a.parent().parent().attr('id','selected');
323    highlightAnchor();
324  } else if (n) {
325    $(n.itemDiv).addClass('selected');
326    $(n.itemDiv).attr('id','selected');
327  }
328  var topOffset=5;
329  if (typeof page_layout!=='undefined' && page_layout==1) {
330    topOffset+=$('#top').outerHeight();
331  }
332  if ($('#nav-tree-contents .item:first').hasClass('selected')) {
333    topOffset+=25;
334  }
335  $('#nav-sync').css('top',topOffset+'px');
336  showRoot();
337}
338
339function showNode(o, node, index, hash)
340{
341  if (node && node.childrenData) {
342    if (typeof(node.childrenData)==='string') {
343      var varName    = node.childrenData;
344      getScript(node.relpath+varName,function(){
345        node.childrenData = getData(varName);
346        showNode(o,node,index,hash);
347      },true);
348    } else {
349      if (!node.childrenVisited) {
350        getNode(o, node);
351      }
352      $(node.getChildrenUL()).css({'display':'block'});
353      node.plus_img.innerHTML = arrowDown;
354      node.expanded = true;
355      var n = node.children[o.breadcrumbs[index]];
356      if (index+1<o.breadcrumbs.length) {
357        showNode(o,n,index+1,hash);
358      } else {
359        if (typeof(n.childrenData)==='string') {
360          var varName = n.childrenData;
361          getScript(n.relpath+varName,function(){
362            n.childrenData = getData(varName);
363            node.expanded=false;
364            showNode(o,node,index,hash); // retry with child node expanded
365          },true);
366        } else {
367          /* vlamar01: Commented two lines below to ensure nav. tree expands on all selections */
368          //var rootBase = stripPath(o.toroot.replace(/\..+$/, ''));
369          //if (rootBase=="index" || rootBase=="pages" || rootBase=="search")
370          {
371            expandNode(o, n, true, true);
372          }
373          selectAndHighlight(hash,n);
374        }
375      }
376    }
377  } else {
378    selectAndHighlight(hash);
379  }
380}
381
382function removeToInsertLater(element) {
383  var parentNode = element.parentNode;
384  var nextSibling = element.nextSibling;
385  parentNode.removeChild(element);
386  return function() {
387    if (nextSibling) {
388      parentNode.insertBefore(element, nextSibling);
389    } else {
390      parentNode.appendChild(element);
391    }
392  };
393}
394
395function getNode(o, po)
396{
397  var insertFunction = removeToInsertLater(po.li);
398  po.childrenVisited = true;
399  var l = po.childrenData.length-1;
400  for (var i in po.childrenData) {
401    var nodeData = po.childrenData[i];
402    po.children[i] = newNode(o, po, nodeData[0], nodeData[1], nodeData[2],
403      i==l);
404  }
405  insertFunction();
406}
407
408function gotoNode(o,subIndex,root,hash,relpath)
409{
410  var nti = navTreeSubIndices[subIndex][root+hash];
411  o.breadcrumbs = $.extend(true, [], nti ? nti : navTreeSubIndices[subIndex][root]);
412  if (!o.breadcrumbs && root!=NAVTREE[0][1]) { // fallback: show index
413    navTo(o,NAVTREE[0][1],"",relpath);
414    $('.item').removeClass('selected');
415    $('.item').removeAttr('id');
416  }
417  if (o.breadcrumbs) {
418    o.breadcrumbs.unshift(0); // add 0 for root node
419    showNode(o, o.node, 0, hash);
420  }
421}
422
423function navTo(o,root,hash,relpath)
424{
425  var link = cachedLink();
426  if (link) {
427    var parts = link.split('#');
428    root = parts[0];
429    if (parts.length>1) hash = '#'+parts[1].replace(/[^\w\-]/g,'');
430    else hash='';
431  }
432  if (hash.match(/^#l\d+$/)) {
433    var anchor=$('a[name='+hash.substring(1)+']');
434    glowEffect(anchor.parent(),1000); // line number
435    hash=''; // strip line number anchors
436  }
437  var url=root+hash;
438  var i=-1;
439  while (NAVTREEINDEX[i+1]<=url) i++;
440  if (i==-1) { i=0; root=NAVTREE[0][1]; } // fallback: show index
441  if (navTreeSubIndices[i]) {
442    gotoNode(o,i,root,hash,relpath)
443  } else {
444    getScript(relpath+'navtreeindex'+i,function(){
445      navTreeSubIndices[i] = eval('NAVTREEINDEX'+i);
446      if (navTreeSubIndices[i]) {
447        gotoNode(o,i,root,hash,relpath);
448      }
449    },true);
450  }
451}
452
453function showSyncOff(n,relpath)
454{
455    n.html('<img src="'+relpath+'sync_off.png" title="'+SYNCOFFMSG+'"/>');
456}
457
458function showSyncOn(n,relpath)
459{
460    n.html('<img src="'+relpath+'sync_on.png" title="'+SYNCONMSG+'"/>');
461}
462
463function toggleSyncButton(relpath)
464{
465  var navSync = $('#nav-sync');
466  if (navSync.hasClass('sync')) {
467    navSync.removeClass('sync');
468    showSyncOff(navSync,relpath);
469    storeLink(stripPath2(pathName())+hashUrl());
470  } else {
471    navSync.addClass('sync');
472    showSyncOn(navSync,relpath);
473    deleteLink();
474  }
475}
476
477var loadTriggered = false;
478var readyTriggered = false;
479var loadObject,loadToRoot,loadUrl,loadRelPath;
480
481$(window).on('load',function(){
482  if (readyTriggered) { // ready first
483    navTo(loadObject,loadToRoot,loadUrl,loadRelPath);
484    showRoot();
485  }
486  loadTriggered=true;
487});
488
489function initNavTree(toroot,relpath)
490{
491  var o = new Object();
492  o.toroot = toroot;
493  o.node = new Object();
494  o.node.li = document.getElementById("nav-tree-contents");
495  o.node.childrenData = NAVTREE;
496  o.node.children = new Array();
497  o.node.childrenUL = document.createElement("ul");
498  o.node.getChildrenUL = function() { return o.node.childrenUL; };
499  o.node.li.appendChild(o.node.childrenUL);
500  o.node.depth = 0;
501  o.node.relpath = relpath;
502  o.node.expanded = false;
503  o.node.isLast = true;
504  o.node.plus_img = document.createElement("span");
505  o.node.plus_img.className = 'arrow';
506  o.node.plus_img.innerHTML = arrowRight;
507
508  if (localStorageSupported()) {
509    var navSync = $('#nav-sync');
510    if (cachedLink()) {
511      showSyncOff(navSync,relpath);
512      navSync.removeClass('sync');
513    } else {
514      showSyncOn(navSync,relpath);
515    }
516    navSync.click(function(){ toggleSyncButton(relpath); });
517  }
518
519  if (loadTriggered) { // load before ready
520    navTo(o,toroot,hashUrl(),relpath);
521    showRoot();
522  } else { // ready before load
523    loadObject  = o;
524    loadToRoot  = toroot;
525    loadUrl     = hashUrl();
526    loadRelPath = relpath;
527    readyTriggered=true;
528  }
529
530  $(window).bind('hashchange', function(){
531     if (window.location.hash && window.location.hash.length>1){
532       var a;
533       if ($(location).attr('hash')){
534         var clslink=stripPath(pathName())+':'+hashValue();
535         a=$('.item a[class$="'+clslink.replace(/</g,'\\3c ')+'"]');
536       }
537       if (a==null || !$(a).parent().parent().hasClass('selected')){
538         $('.item').removeClass('selected');
539         $('.item').removeAttr('id');
540       }
541       var link=stripPath2(pathName());
542       navTo(o,link,hashUrl(),relpath);
543     } else if (!animationInProgress) {
544       $('#doc-content').scrollTop(0);
545       $('.item').removeClass('selected');
546       $('.item').removeAttr('id');
547       navTo(o,toroot,hashUrl(),relpath);
548     }
549  })
550}
551/* @license-end */
552