blob: 120d4be039fd1af903f128f1c308c0912e20cd3c [file] [log] [blame]
// grab the table of contents filled with all the anchors
function __result_handler() {
function getMap() {
var toc_element = document.getElementById("contents").nextElementSibling;
function getSection() {
function getIds(node) {
var a = [];
var nodes = node.querySelectorAll('*[id]');
for (var i = 0; i < nodes.length; i++) {
a.push(nodes[i].getAttribute("id"));
}
return a;
}
function getTOCIds() {
var a = [];
var nodes = toc_element.querySelectorAll('li');
for (var i = 0; i < nodes.length; i++) {
var href = nodes[i].firstElementChild.getAttribute("href");
a.push(href.substring(1));
}
return a;
}
var obj = new Object();
var ids = getIds(document);
var toc = getTOCIds();
for (var i = 1; i < toc.length; i++) {
var key1 = toc[i-1];
var key2 = toc[i];
var map = [];
var index1 = ids.indexOf(key1);
var index2 = ids.indexOf(key2);
if ((index2-index1) > 1) {
for (var j = index1+1; j < index2;j++) {
map.push(ids[j]);
}
}
obj[key1] = map;
}
{
var key = toc[toc.length-1];
var index = ids.indexOf(key);
var map = [];
for (var j = index+1; j < ids.length;j++) {
map.push(ids[j]);
}
obj[key] = map;
}
return obj;
}
function section(id) {
this.id = id;
}
function addSubSection(section, sub) {
if (typeof section.sections === "undefined") {
section.sections = [];
}
section.sections.push(sub);
}
function li(el, map) {
var obj = new section(el.firstElementChild.getAttribute("href").substring(1));
obj.title = el.firstElementChild.textContent;
var child = el.firstElementChild;
var m = map[obj.id];
for (var i = 0; i < m.length; i++) {
var sub = new section(m[i]);
addSubSection(obj, sub);
}
while (child !== null) {
if (child.nodeName === "OL") ol(child, obj, map);
child = child.nextElementSibling;
}
return obj;
}
function ol(el, section, map) {
var child = el.firstElementChild;
while (child !== null) {
addSubSection(section, li(child, map));
child = child.nextElementSibling;
}
}
var map = getSection();
var main = new section("___main___");
main.title = document.title;
ol(toc_element, main, map);
return main;
}
return getMap();
}