diff options
Diffstat (limited to 'testing/web-platform/tests/tools/scripts/toc.js')
-rw-r--r-- | testing/web-platform/tests/tools/scripts/toc.js | 107 |
1 files changed, 107 insertions, 0 deletions
diff --git a/testing/web-platform/tests/tools/scripts/toc.js b/testing/web-platform/tests/tools/scripts/toc.js new file mode 100644 index 000000000..120d4be03 --- /dev/null +++ b/testing/web-platform/tests/tools/scripts/toc.js @@ -0,0 +1,107 @@ +// 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(); +} |