| // 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(); |
| } |