Blame templates/html/navtree.js

Packit 1c1d7e
/*
Packit 1c1d7e
 @licstart  The following is the entire license notice for the
Packit 1c1d7e
 JavaScript code in this file.
Packit 1c1d7e
Packit 1c1d7e
 Copyright (C) 1997-2017 by Dimitri van Heesch
Packit 1c1d7e
Packit 1c1d7e
 This program is free software; you can redistribute it and/or modify
Packit 1c1d7e
 it under the terms of the GNU General Public License as published by
Packit 1c1d7e
 the Free Software Foundation; either version 2 of the License, or
Packit 1c1d7e
 (at your option) any later version.
Packit 1c1d7e
Packit 1c1d7e
 This program is distributed in the hope that it will be useful,
Packit 1c1d7e
 but WITHOUT ANY WARRANTY; without even the implied warranty of
Packit 1c1d7e
 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
Packit 1c1d7e
 GNU General Public License for more details.
Packit 1c1d7e
Packit 1c1d7e
 You should have received a copy of the GNU General Public License along
Packit 1c1d7e
 with this program; if not, write to the Free Software Foundation, Inc.,
Packit 1c1d7e
 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
Packit 1c1d7e
Packit 1c1d7e
 @licend  The above is the entire license notice
Packit 1c1d7e
 for the JavaScript code in this file
Packit 1c1d7e
 */
Packit 1c1d7e
var navTreeSubIndices = new Array();
Packit 1c1d7e
var arrowDown = '▼';
Packit 1c1d7e
var arrowRight = '▶';
Packit 1c1d7e
Packit 1c1d7e
function getData(varName)
Packit 1c1d7e
{
Packit 1c1d7e
  var i = varName.lastIndexOf('/');
Packit 1c1d7e
  var n = i>=0 ? varName.substring(i+1) : varName;
Packit 1c1d7e
  return eval(n.replace(/\-/g,'_'));
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
function stripPath(uri)
Packit 1c1d7e
{
Packit 1c1d7e
  return uri.substring(uri.lastIndexOf('/')+1);
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
function stripPath2(uri)
Packit 1c1d7e
{
Packit 1c1d7e
  var i = uri.lastIndexOf('/');
Packit 1c1d7e
  var s = uri.substring(i+1);
Packit 1c1d7e
  var m = uri.substring(0,i+1).match(/\/d\w\/d\w\w\/$/);
Packit 1c1d7e
  return m ? uri.substring(i-6) : s;
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
function hashValue()
Packit 1c1d7e
{
Packit 1c1d7e
  return $(location).attr('hash').substring(1).replace(/[^\w\-]/g,'');
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
function hashUrl()
Packit 1c1d7e
{
Packit 1c1d7e
  return '#'+hashValue();
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
function pathName()
Packit 1c1d7e
{
Packit 1c1d7e
  return $(location).attr('pathname').replace(/[^-A-Za-z0-9+&@#/%?=~_|!:,.;\(\)]/g, '');
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
function localStorageSupported()
Packit 1c1d7e
{
Packit 1c1d7e
  try {
Packit 1c1d7e
    return 'localStorage' in window && window['localStorage'] !== null && window.localStorage.getItem;
Packit 1c1d7e
  }
Packit 1c1d7e
  catch(e) {
Packit 1c1d7e
    return false;
Packit 1c1d7e
  }
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
Packit 1c1d7e
function storeLink(link)
Packit 1c1d7e
{
Packit 1c1d7e
  if (!$("#nav-sync").hasClass('sync') && localStorageSupported()) {
Packit 1c1d7e
      window.localStorage.setItem('navpath',link);
Packit 1c1d7e
  }
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
function deleteLink()
Packit 1c1d7e
{
Packit 1c1d7e
  if (localStorageSupported()) {
Packit 1c1d7e
    window.localStorage.setItem('navpath','');
Packit 1c1d7e
  }
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
function cachedLink()
Packit 1c1d7e
{
Packit 1c1d7e
  if (localStorageSupported()) {
Packit 1c1d7e
    return window.localStorage.getItem('navpath');
Packit 1c1d7e
  } else {
Packit 1c1d7e
    return '';
Packit 1c1d7e
  }
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
function getScript(scriptName,func,show)
Packit 1c1d7e
{
Packit 1c1d7e
  var head = document.getElementsByTagName("head")[0];
Packit 1c1d7e
  var script = document.createElement('script');
Packit 1c1d7e
  script.id = scriptName;
Packit 1c1d7e
  script.type = 'text/javascript';
Packit 1c1d7e
  script.onload = func;
Packit 1c1d7e
  script.src = scriptName+'.js';
Packit 1c1d7e
  if ($.browser.msie && $.browser.version<=8) {
Packit 1c1d7e
    // script.onload does not work with older versions of IE
Packit 1c1d7e
    script.onreadystatechange = function() {
Packit 1c1d7e
      if (script.readyState=='complete' || script.readyState=='loaded') {
Packit 1c1d7e
        func(); if (show) showRoot();
Packit 1c1d7e
      }
Packit 1c1d7e
    }
Packit 1c1d7e
  }
Packit 1c1d7e
  head.appendChild(script);
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
function createIndent(o,domNode,node,level)
Packit 1c1d7e
{
Packit 1c1d7e
  var level=-1;
Packit 1c1d7e
  var n = node;
Packit 1c1d7e
  while (n.parentNode) { level++; n=n.parentNode; }
Packit 1c1d7e
  if (node.childrenData) {
Packit 1c1d7e
    var imgNode = document.createElement("span");
Packit 1c1d7e
    imgNode.className = 'arrow';
Packit 1c1d7e
    imgNode.style.paddingLeft=(16*level).toString()+'px';
Packit 1c1d7e
    imgNode.innerHTML=arrowRight;
Packit 1c1d7e
    node.plus_img = imgNode;
Packit 1c1d7e
    node.expandToggle = document.createElement("a");
Packit 1c1d7e
    node.expandToggle.href = "javascript:void(0)";
Packit 1c1d7e
    node.expandToggle.onclick = function() {
Packit 1c1d7e
      if (node.expanded) {
Packit 1c1d7e
        $(node.getChildrenUL()).slideUp("fast");
Packit 1c1d7e
        node.plus_img.innerHTML=arrowRight;
Packit 1c1d7e
        node.expanded = false;
Packit 1c1d7e
      } else {
Packit 1c1d7e
        expandNode(o, node, false, false);
Packit 1c1d7e
      }
Packit 1c1d7e
    }
Packit 1c1d7e
    node.expandToggle.appendChild(imgNode);
Packit 1c1d7e
    domNode.appendChild(node.expandToggle);
Packit 1c1d7e
  } else {
Packit 1c1d7e
    var span = document.createElement("span");
Packit 1c1d7e
    span.className = 'arrow';
Packit 1c1d7e
    span.style.width   = 16*(level+1)+'px';
Packit 1c1d7e
    span.innerHTML = ' ';
Packit 1c1d7e
    domNode.appendChild(span);
Packit 1c1d7e
  }
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
var animationInProgress = false;
Packit 1c1d7e
Packit 1c1d7e
function gotoAnchor(anchor,aname,updateLocation)
Packit 1c1d7e
{
Packit 1c1d7e
  var pos, docContent = $('#doc-content');
Packit 1c1d7e
  var ancParent = $(anchor.parent());
Packit 1c1d7e
  if (ancParent.hasClass('memItemLeft') ||
Packit 1c1d7e
      ancParent.hasClass('fieldname') ||
Packit 1c1d7e
      ancParent.hasClass('fieldtype') ||
Packit 1c1d7e
      ancParent.is(':header'))
Packit 1c1d7e
  {
Packit 1c1d7e
    pos = ancParent.position().top;
Packit 1c1d7e
  } else if (anchor.position()) {
Packit 1c1d7e
    pos = anchor.position().top;
Packit 1c1d7e
  }
Packit 1c1d7e
  if (pos) {
Packit 1c1d7e
    var dist = Math.abs(Math.min(
Packit 1c1d7e
               pos-docContent.offset().top,
Packit 1c1d7e
               docContent[0].scrollHeight-
Packit 1c1d7e
               docContent.height()-docContent.scrollTop()));
Packit 1c1d7e
    animationInProgress=true;
Packit 1c1d7e
    docContent.animate({
Packit 1c1d7e
      scrollTop: pos + docContent.scrollTop() - docContent.offset().top
Packit 1c1d7e
    },Math.max(50,Math.min(500,dist)),function(){
Packit 1c1d7e
      if (updateLocation) window.location.href=aname;
Packit 1c1d7e
      animationInProgress=false;
Packit 1c1d7e
    });
Packit 1c1d7e
  }
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
function newNode(o, po, text, link, childrenData, lastNode)
Packit 1c1d7e
{
Packit 1c1d7e
  var node = new Object();
Packit 1c1d7e
  node.children = Array();
Packit 1c1d7e
  node.childrenData = childrenData;
Packit 1c1d7e
  node.depth = po.depth + 1;
Packit 1c1d7e
  node.relpath = po.relpath;
Packit 1c1d7e
  node.isLast = lastNode;
Packit 1c1d7e
Packit 1c1d7e
  node.li = document.createElement("li");
Packit 1c1d7e
  po.getChildrenUL().appendChild(node.li);
Packit 1c1d7e
  node.parentNode = po;
Packit 1c1d7e
Packit 1c1d7e
  node.itemDiv = document.createElement("div");
Packit 1c1d7e
  node.itemDiv.className = "item";
Packit 1c1d7e
Packit 1c1d7e
  node.labelSpan = document.createElement("span");
Packit 1c1d7e
  node.labelSpan.className = "label";
Packit 1c1d7e
Packit 1c1d7e
  createIndent(o,node.itemDiv,node,0);
Packit 1c1d7e
  node.itemDiv.appendChild(node.labelSpan);
Packit 1c1d7e
  node.li.appendChild(node.itemDiv);
Packit 1c1d7e
Packit 1c1d7e
  var a = document.createElement("a");
Packit 1c1d7e
  node.labelSpan.appendChild(a);
Packit 1c1d7e
  node.label = document.createTextNode(text);
Packit 1c1d7e
  node.expanded = false;
Packit 1c1d7e
  a.appendChild(node.label);
Packit 1c1d7e
  if (link) {
Packit 1c1d7e
    var url;
Packit 1c1d7e
    if (link.substring(0,1)=='^') {
Packit 1c1d7e
      url = link.substring(1);
Packit 1c1d7e
      link = url;
Packit 1c1d7e
    } else {
Packit 1c1d7e
      url = node.relpath+link;
Packit 1c1d7e
    }
Packit 1c1d7e
    a.className = stripPath(link.replace('#',':'));
Packit 1c1d7e
    if (link.indexOf('#')!=-1) {
Packit 1c1d7e
      var aname = '#'+link.split('#')[1];
Packit 1c1d7e
      var srcPage = stripPath(pathName());
Packit 1c1d7e
      var targetPage = stripPath(link.split('#')[0]);
Packit 1c1d7e
      a.href = srcPage!=targetPage ? url : "javascript:void(0)";
Packit 1c1d7e
      a.onclick = function(){
Packit 1c1d7e
        storeLink(link);
Packit 1c1d7e
        if (!$(a).parent().parent().hasClass('selected'))
Packit 1c1d7e
        {
Packit 1c1d7e
          $('.item').removeClass('selected');
Packit 1c1d7e
          $('.item').removeAttr('id');
Packit 1c1d7e
          $(a).parent().parent().addClass('selected');
Packit 1c1d7e
          $(a).parent().parent().attr('id','selected');
Packit 1c1d7e
        }
Packit 1c1d7e
        var anchor = $(aname);
Packit 1c1d7e
        gotoAnchor(anchor,aname,true);
Packit 1c1d7e
      };
Packit 1c1d7e
    } else {
Packit 1c1d7e
      a.href = url;
Packit 1c1d7e
      a.onclick = function() { storeLink(link); }
Packit 1c1d7e
    }
Packit 1c1d7e
  } else {
Packit 1c1d7e
    if (childrenData != null)
Packit 1c1d7e
    {
Packit 1c1d7e
      a.className = "nolink";
Packit 1c1d7e
      a.href = "javascript:void(0)";
Packit 1c1d7e
      a.onclick = node.expandToggle.onclick;
Packit 1c1d7e
    }
Packit 1c1d7e
  }
Packit 1c1d7e
Packit 1c1d7e
  node.childrenUL = null;
Packit 1c1d7e
  node.getChildrenUL = function() {
Packit 1c1d7e
    if (!node.childrenUL) {
Packit 1c1d7e
      node.childrenUL = document.createElement("ul");
Packit 1c1d7e
      node.childrenUL.className = "children_ul";
Packit 1c1d7e
      node.childrenUL.style.display = "none";
Packit 1c1d7e
      node.li.appendChild(node.childrenUL);
Packit 1c1d7e
    }
Packit 1c1d7e
    return node.childrenUL;
Packit 1c1d7e
  };
Packit 1c1d7e
Packit 1c1d7e
  return node;
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
function showRoot()
Packit 1c1d7e
{
Packit 1c1d7e
  var headerHeight = $("#top").height();
Packit 1c1d7e
  var footerHeight = $("#nav-path").height();
Packit 1c1d7e
  var windowHeight = $(window).height() - headerHeight - footerHeight;
Packit 1c1d7e
  (function (){ // retry until we can scroll to the selected item
Packit 1c1d7e
    try {
Packit 1c1d7e
      var navtree=$('#nav-tree');
Packit 1c1d7e
      navtree.scrollTo('#selected',0,{offset:-windowHeight/2});
Packit 1c1d7e
    } catch (err) {
Packit 1c1d7e
      setTimeout(arguments.callee, 0);
Packit 1c1d7e
    }
Packit 1c1d7e
  })();
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
function expandNode(o, node, imm, showRoot)
Packit 1c1d7e
{
Packit 1c1d7e
  if (node.childrenData && !node.expanded) {
Packit 1c1d7e
    if (typeof(node.childrenData)==='string') {
Packit 1c1d7e
      var varName    = node.childrenData;
Packit 1c1d7e
      getScript(node.relpath+varName,function(){
Packit 1c1d7e
        node.childrenData = getData(varName);
Packit 1c1d7e
        expandNode(o, node, imm, showRoot);
Packit 1c1d7e
      }, showRoot);
Packit 1c1d7e
    } else {
Packit 1c1d7e
      if (!node.childrenVisited) {
Packit 1c1d7e
        getNode(o, node);
Packit 1c1d7e
      } if (imm || ($.browser.msie && $.browser.version>8)) {
Packit 1c1d7e
        // somehow slideDown jumps to the start of tree for IE9 :-(
Packit 1c1d7e
        $(node.getChildrenUL()).show();
Packit 1c1d7e
      } else {
Packit 1c1d7e
        $(node.getChildrenUL()).slideDown("fast");
Packit 1c1d7e
      }
Packit 1c1d7e
      node.plus_img.innerHTML = arrowDown;
Packit 1c1d7e
      node.expanded = true;
Packit 1c1d7e
    }
Packit 1c1d7e
  }
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
function glowEffect(n,duration)
Packit 1c1d7e
{
Packit 1c1d7e
  n.addClass('glow').delay(duration).queue(function(next){
Packit 1c1d7e
    $(this).removeClass('glow');next();
Packit 1c1d7e
  });
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
function highlightAnchor()
Packit 1c1d7e
{
Packit 1c1d7e
  var aname = hashUrl();
Packit 1c1d7e
  var anchor = $(aname);
Packit 1c1d7e
  if (anchor.parent().attr('class')=='memItemLeft'){
Packit 1c1d7e
    var rows = $('.memberdecls tr[class$="'+hashValue()+'"]');
Packit 1c1d7e
    glowEffect(rows.children(),300); // member without details
Packit 1c1d7e
  } else if (anchor.parent().attr('class')=='fieldname'){
Packit 1c1d7e
    glowEffect(anchor.parent().parent(),1000); // enum value
Packit 1c1d7e
  } else if (anchor.parent().attr('class')=='fieldtype'){
Packit 1c1d7e
    glowEffect(anchor.parent().parent(),1000); // struct field
Packit 1c1d7e
  } else if (anchor.parent().is(":header")) {
Packit 1c1d7e
    glowEffect(anchor.parent(),1000); // section header
Packit 1c1d7e
  } else {
Packit 1c1d7e
    glowEffect(anchor.next(),1000); // normal member
Packit 1c1d7e
  }
Packit 1c1d7e
  gotoAnchor(anchor,aname,false);
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
function selectAndHighlight(hash,n)
Packit 1c1d7e
{
Packit 1c1d7e
  var a;
Packit 1c1d7e
  if (hash) {
Packit 1c1d7e
    var link=stripPath(pathName())+':'+hash.substring(1);
Packit 1c1d7e
    a=$('.item a[class$="'+link+'"]');
Packit 1c1d7e
  }
Packit 1c1d7e
  if (a && a.length) {
Packit 1c1d7e
    a.parent().parent().addClass('selected');
Packit 1c1d7e
    a.parent().parent().attr('id','selected');
Packit 1c1d7e
    highlightAnchor();
Packit 1c1d7e
  } else if (n) {
Packit 1c1d7e
    $(n.itemDiv).addClass('selected');
Packit 1c1d7e
    $(n.itemDiv).attr('id','selected');
Packit 1c1d7e
  }
Packit 1c1d7e
  if ($('#nav-tree-contents .item:first').hasClass('selected')) {
Packit 1c1d7e
    $('#nav-sync').css('top','30px');
Packit 1c1d7e
  } else {
Packit 1c1d7e
    $('#nav-sync').css('top','5px');
Packit 1c1d7e
  }
Packit 1c1d7e
  showRoot();
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
function showNode(o, node, index, hash)
Packit 1c1d7e
{
Packit 1c1d7e
  if (node && node.childrenData) {
Packit 1c1d7e
    if (typeof(node.childrenData)==='string') {
Packit 1c1d7e
      var varName    = node.childrenData;
Packit 1c1d7e
      getScript(node.relpath+varName,function(){
Packit 1c1d7e
        node.childrenData = getData(varName);
Packit 1c1d7e
        showNode(o,node,index,hash);
Packit 1c1d7e
      },true);
Packit 1c1d7e
    } else {
Packit 1c1d7e
      if (!node.childrenVisited) {
Packit 1c1d7e
        getNode(o, node);
Packit 1c1d7e
      }
Packit 1c1d7e
      $(node.getChildrenUL()).css({'display':'block'});
Packit 1c1d7e
      node.plus_img.innerHTML = arrowDown;
Packit 1c1d7e
      node.expanded = true;
Packit 1c1d7e
      var n = node.children[o.breadcrumbs[index]];
Packit 1c1d7e
      if (index+1
Packit 1c1d7e
        showNode(o,n,index+1,hash);
Packit 1c1d7e
      } else {
Packit 1c1d7e
        if (typeof(n.childrenData)==='string') {
Packit 1c1d7e
          var varName = n.childrenData;
Packit 1c1d7e
          getScript(n.relpath+varName,function(){
Packit 1c1d7e
            n.childrenData = getData(varName);
Packit 1c1d7e
            node.expanded=false;
Packit 1c1d7e
            showNode(o,node,index,hash); // retry with child node expanded
Packit 1c1d7e
          },true);
Packit 1c1d7e
        } else {
Packit 1c1d7e
          var rootBase = stripPath(o.toroot.replace(/\..+$/, ''));
Packit 1c1d7e
          if (rootBase=="index" || rootBase=="pages" || rootBase=="search") {
Packit 1c1d7e
            expandNode(o, n, true, true);
Packit 1c1d7e
          }
Packit 1c1d7e
          selectAndHighlight(hash,n);
Packit 1c1d7e
        }
Packit 1c1d7e
      }
Packit 1c1d7e
    }
Packit 1c1d7e
  } else {
Packit 1c1d7e
    selectAndHighlight(hash);
Packit 1c1d7e
  }
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
function removeToInsertLater(element) {
Packit 1c1d7e
  var parentNode = element.parentNode;
Packit 1c1d7e
  var nextSibling = element.nextSibling;
Packit 1c1d7e
  parentNode.removeChild(element);
Packit 1c1d7e
  return function() {
Packit 1c1d7e
    if (nextSibling) {
Packit 1c1d7e
      parentNode.insertBefore(element, nextSibling);
Packit 1c1d7e
    } else {
Packit 1c1d7e
      parentNode.appendChild(element);
Packit 1c1d7e
    }
Packit 1c1d7e
  };
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
function getNode(o, po)
Packit 1c1d7e
{
Packit 1c1d7e
  var insertFunction = removeToInsertLater(po.li);
Packit 1c1d7e
  po.childrenVisited = true;
Packit 1c1d7e
  var l = po.childrenData.length-1;
Packit 1c1d7e
  for (var i in po.childrenData) {
Packit 1c1d7e
    var nodeData = po.childrenData[i];
Packit 1c1d7e
    po.children[i] = newNode(o, po, nodeData[0], nodeData[1], nodeData[2],
Packit 1c1d7e
      i==l);
Packit 1c1d7e
  }
Packit 1c1d7e
  insertFunction();
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
function gotoNode(o,subIndex,root,hash,relpath)
Packit 1c1d7e
{
Packit 1c1d7e
  var nti = navTreeSubIndices[subIndex][root+hash];
Packit 1c1d7e
  o.breadcrumbs = $.extend(true, [], nti ? nti : navTreeSubIndices[subIndex][root]);
Packit 1c1d7e
  if (!o.breadcrumbs && root!=NAVTREE[0][1]) { // fallback: show index
Packit 1c1d7e
    navTo(o,NAVTREE[0][1],"",relpath);
Packit 1c1d7e
    $('.item').removeClass('selected');
Packit 1c1d7e
    $('.item').removeAttr('id');
Packit 1c1d7e
  }
Packit 1c1d7e
  if (o.breadcrumbs) {
Packit 1c1d7e
    o.breadcrumbs.unshift(0); // add 0 for root node
Packit 1c1d7e
    showNode(o, o.node, 0, hash);
Packit 1c1d7e
  }
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
function navTo(o,root,hash,relpath)
Packit 1c1d7e
{
Packit 1c1d7e
  var link = cachedLink();
Packit 1c1d7e
  if (link) {
Packit 1c1d7e
    var parts = link.split('#');
Packit 1c1d7e
    root = parts[0];
Packit 1c1d7e
    if (parts.length>1) hash = '#'+parts[1].replace(/[^\w\-]/g,'');
Packit 1c1d7e
    else hash='';
Packit 1c1d7e
  }
Packit 1c1d7e
  if (hash.match(/^#l\d+$/)) {
Packit 1c1d7e
    var anchor=$('a[name='+hash.substring(1)+']');
Packit 1c1d7e
    glowEffect(anchor.parent(),1000); // line number
Packit 1c1d7e
    hash=''; // strip line number anchors
Packit 1c1d7e
  }
Packit 1c1d7e
  var url=root+hash;
Packit 1c1d7e
  var i=-1;
Packit 1c1d7e
  while (NAVTREEINDEX[i+1]<=url) i++;
Packit 1c1d7e
  if (i==-1) { i=0; root=NAVTREE[0][1]; } // fallback: show index
Packit 1c1d7e
  if (navTreeSubIndices[i]) {
Packit 1c1d7e
    gotoNode(o,i,root,hash,relpath)
Packit 1c1d7e
  } else {
Packit 1c1d7e
    getScript(relpath+'navtreeindex'+i,function(){
Packit 1c1d7e
      navTreeSubIndices[i] = eval('NAVTREEINDEX'+i);
Packit 1c1d7e
      if (navTreeSubIndices[i]) {
Packit 1c1d7e
        gotoNode(o,i,root,hash,relpath);
Packit 1c1d7e
      }
Packit 1c1d7e
    },true);
Packit 1c1d7e
  }
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
function showSyncOff(n,relpath)
Packit 1c1d7e
{
Packit 1c1d7e
    n.html('');
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
function showSyncOn(n,relpath)
Packit 1c1d7e
{
Packit 1c1d7e
    n.html('');
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
function toggleSyncButton(relpath)
Packit 1c1d7e
{
Packit 1c1d7e
  var navSync = $('#nav-sync');
Packit 1c1d7e
  if (navSync.hasClass('sync')) {
Packit 1c1d7e
    navSync.removeClass('sync');
Packit 1c1d7e
    showSyncOff(navSync,relpath);
Packit 1c1d7e
    storeLink(stripPath2(pathName())+hashUrl());
Packit 1c1d7e
  } else {
Packit 1c1d7e
    navSync.addClass('sync');
Packit 1c1d7e
    showSyncOn(navSync,relpath);
Packit 1c1d7e
    deleteLink();
Packit 1c1d7e
  }
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
function initNavTree(toroot,relpath)
Packit 1c1d7e
{
Packit 1c1d7e
  var o = new Object();
Packit 1c1d7e
  o.toroot = toroot;
Packit 1c1d7e
  o.node = new Object();
Packit 1c1d7e
  o.node.li = document.getElementById("nav-tree-contents");
Packit 1c1d7e
  o.node.childrenData = NAVTREE;
Packit 1c1d7e
  o.node.children = new Array();
Packit 1c1d7e
  o.node.childrenUL = document.createElement("ul");
Packit 1c1d7e
  o.node.getChildrenUL = function() { return o.node.childrenUL; };
Packit 1c1d7e
  o.node.li.appendChild(o.node.childrenUL);
Packit 1c1d7e
  o.node.depth = 0;
Packit 1c1d7e
  o.node.relpath = relpath;
Packit 1c1d7e
  o.node.expanded = false;
Packit 1c1d7e
  o.node.isLast = true;
Packit 1c1d7e
  o.node.plus_img = document.createElement("span");
Packit 1c1d7e
  o.node.plus_img.className = 'arrow';
Packit 1c1d7e
  o.node.plus_img.innerHTML = arrowRight;
Packit 1c1d7e
Packit 1c1d7e
  if (localStorageSupported()) {
Packit 1c1d7e
    var navSync = $('#nav-sync');
Packit 1c1d7e
    if (cachedLink()) {
Packit 1c1d7e
      showSyncOff(navSync,relpath);
Packit 1c1d7e
      navSync.removeClass('sync');
Packit 1c1d7e
    } else {
Packit 1c1d7e
      showSyncOn(navSync,relpath);
Packit 1c1d7e
    }
Packit 1c1d7e
    navSync.click(function(){ toggleSyncButton(relpath); });
Packit 1c1d7e
  }
Packit 1c1d7e
Packit 1c1d7e
  $(window).load(function(){
Packit 1c1d7e
    navTo(o,toroot,hashUrl(),relpath);
Packit 1c1d7e
    showRoot();
Packit 1c1d7e
  });
Packit 1c1d7e
Packit 1c1d7e
  $(window).bind('hashchange', function(){
Packit 1c1d7e
     if (window.location.hash && window.location.hash.length>1){
Packit 1c1d7e
       var a;
Packit 1c1d7e
       if ($(location).attr('hash')){
Packit 1c1d7e
         var clslink=stripPath(pathName())+':'+hashValue();
Packit 1c1d7e
         a=$('.item a[class$="'+clslink.replace(/
Packit 1c1d7e
       }
Packit 1c1d7e
       if (a==null || !$(a).parent().parent().hasClass('selected')){
Packit 1c1d7e
         $('.item').removeClass('selected');
Packit 1c1d7e
         $('.item').removeAttr('id');
Packit 1c1d7e
       }
Packit 1c1d7e
       var link=stripPath2(pathName());
Packit 1c1d7e
       navTo(o,link,hashUrl(),relpath);
Packit 1c1d7e
     } else if (!animationInProgress) {
Packit 1c1d7e
       $('#doc-content').scrollTop(0);
Packit 1c1d7e
       $('.item').removeClass('selected');
Packit 1c1d7e
       $('.item').removeAttr('id');
Packit 1c1d7e
       navTo(o,toroot,hashUrl(),relpath);
Packit 1c1d7e
     }
Packit 1c1d7e
  })
Packit 1c1d7e
}
Packit 1c1d7e
/* @license-end */