plumageRender/3rdparty/gli/doc/spec/generateTOC.js

44 lines
1.3 KiB
JavaScript

function nextLevel(nodeList, startIndex, hlevel, prefix, tocString)
{
var hIndex = 1;
var i = startIndex;
while (i < nodeList.length) {
var currentNode = nodeList[i];
if (currentNode.tagName != "H"+hlevel)
break;
if (currentNode.className == "no-toc") {
++i;
continue;
}
var sectionString = prefix+hIndex;
// Update the TOC
var text = currentNode.innerHTML;
// Strip off names specified via <a name="..."></a>
var tocText = text.replace(/<a name=[\'\"][^\'\"]*[\'\"]>([^<]*)<\/a>/g, "$1");
tocString.s += "<li class='toc-h"+hlevel+"'><a href='#"+sectionString+"'><span class='secno'>"+sectionString+"</span>"+tocText+"</a></li>\n";
// Modify the header
currentNode.innerHTML = "<span class=secno>"+sectionString+"</span> "+text;
currentNode.id = sectionString;
// traverse children
i = nextLevel(nodeList, i+1, hlevel+1, sectionString+".", tocString);
hIndex++;
}
return i;
}
function generateTOC(toc)
{
var nodeList = $("h2,h3,h4,h5,h6");
var tocString = { s:"<ul class='toc'>\n" };
nextLevel(nodeList, 0, 2, "", tocString);
toc.innerHTML = tocString.s;
}