Blame templates/html/navtree.js

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