diff options
Diffstat (limited to 'src/navtree.js')
-rw-r--r-- | src/navtree.js | 54 |
1 files changed, 43 insertions, 11 deletions
diff --git a/src/navtree.js b/src/navtree.js index a70e854..edaaee3 100644 --- a/src/navtree.js +++ b/src/navtree.js @@ -1,5 +1,5 @@ - var navTreeIndex; +var navTreeSubIndices = new Array(); function getData(varName) { @@ -13,6 +13,14 @@ function stripPath(uri) return uri.substring(uri.lastIndexOf('/')+1); } +function stripPath2(uri) +{ + var i = uri.lastIndexOf('/'); + var s = uri.substring(i+1); + var m = uri.substring(0,i+1).match(/\/d\w\/d\w\w\/$/); + return m ? uri.substring(i-6) : s; +} + function getScript(scriptName,func,show) { var head = document.getElementsByTagName("head")[0]; @@ -297,7 +305,8 @@ function showNode(o, node, index) showNode(o,node,index); // retry with child node expanded },true); } else { - if (o.toroot=="index.html" /*|| n.childrenData*/) { + var rootBase = o.toroot.replace(/\..+$/, ''); + if (rootBase=="index" || rootBase=="pages") { expandNode(o, n, true, true); } selectAndHighlight(n); @@ -320,24 +329,47 @@ function getNode(o, po) } } -function gotoNode(o,root,hash) +function gotoNode(o,subIndex,root,hash) { - var nti = navTreeIndex[root+hash]; - o.breadcrumbs = nti ? nti : navTreeIndex[root]; - if (o.breadcrumbs==null) o.breadcrumbs = navTreeIndex["index.html"]; - o.breadcrumbs.unshift(0); - showNode(o, o.node, 0); + var nti = navTreeSubIndices[subIndex][root+hash]; + o.breadcrumbs = nti ? nti : navTreeSubIndices[subIndex][root]; + if (o.breadcrumbs) + { + o.breadcrumbs.unshift(0); // add 0 for root node + showNode(o, o.node, 0); + } +} + +function gotoSubIndex(o,root,hash,relpath) +{ + if (hash.match(/^#l\d+$/)) + { + hash=''; // strip line number anchors + } + var url=root+hash; + var i=-1; + while (navTreeIndex[i+1]<=url) i++; + if (navTreeSubIndices[i]) { + gotoNode(o,i,root,hash) + } else { + getScript(relpath+'navtreeindex'+i,function(){ + navTreeSubIndices[i] = eval('NAVTREEINDEX'+i); + if (navTreeSubIndices[i]) { + gotoNode(o,i,root,hash); + } + },true); + } } function navTo(o,root,hash,relpath) { if (navTreeIndex){ - gotoNode(o,root,hash); + gotoSubIndex(o,root,hash,relpath); } else { getScript(relpath+"navtreeindex",function(){ navTreeIndex = eval('NAVTREEINDEX'); if (navTreeIndex){ - gotoNode(o,root,hash); + gotoSubIndex(o,root,hash,relpath); } },true); } @@ -377,7 +409,7 @@ function initNavTree(toroot,relpath) $('.item').removeClass('selected'); $('.item').removeAttr('id'); } - var link=stripPath($(location).attr('pathname')); + var link=stripPath2($(location).attr('pathname')); navTo(o,link,$(location).attr('hash'),relpath); } }) |