44 lines
1.3 KiB
JavaScript
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;
|
|
}
|