3 * Task view table sorter
4 * Written by Mathew McBride <matt@mcbridematt.dhs.org>
5 * Copyright 2009 The Citadel Team
6 * Licensed under the GPL V3
8 function gatherCategoriesFromTable() {
9 var tbody = document.getElementById("taskview");
10 var childNodes = tbody.childNodes;
11 for (i=0; i<=childNodes.length; i++) {
12 var child = childNodes[i]; // Should be TR
13 if (child != undefined && child.nodeName == "TR") {
14 var childTds = child.getElementsByTagName("TD");
15 if (childTds.length == 4) {
16 var categoryTd = childTds[3];
17 if (categoryTd != undefined) {
19 if (categoryTd.childNodes.length > 0 &&
20 categoryTd.childNodes[0].nodeType == 3) {
21 categories[categoryTd.childNodes[0].nodeValue]
22 = categoryTd.childNodes[0].nodeValue;
29 function addCategoriesToSelector() {
30 var selector = document.getElementById("selectcategory");
31 for (description in categories) {
32 var newOptionElement = document.createElement("option");
33 newOptionElement.setAttribute("value", categories[description]);
34 var text = document.createTextNode(categories[description]);
35 newOptionElement.appendChild(text);
36 selector.appendChild(newOptionElement);
39 function filterCategories(event) {
40 hideAllExistingRows();
41 var selector = document.getElementById("selectcategory");
42 var selected = selector.selectedIndex;
43 var selectedCategory = selector.options[selected];
44 var tbody = document.getElementById("taskview");
45 var cat = selectedCategory.getAttribute("value");
46 var nodesToUnhide = new Array();
48 // Hunt down all the rows with this category using XPath
49 if (document.evaluate) { // Only if we can do so, of course
51 var toEvaluate = null;
52 if (cat != 'showall') {
53 toEvaluate = "//tr[td='"+cat+"']";
55 toEvaluate = "//tr[td]";
57 var trNodes = document.evaluate(toEvaluate,
62 var trNode = trNodes.iterateNext();
64 debugText += "<br>"+trNode.nodeName;
65 nodesToUnhide[curIndex++] = trNode;
66 trNode = trNodes.iterateNext();
70 for (i=0;i<curIndex;i++) {
71 nodesToUnhide[i].style.display = "table-row";
72 if (((i-1) % 2) == 0) {
73 nodesToUnhide[i].setAttribute("class","table-alt-row");
77 function hideAllExistingRows() {
78 var nodes = new Array();
80 if (document.evaluate) { // Only if we can do so, of course
82 var toEvaluate = "//tr/td";
83 var tdNodes = document.evaluate(toEvaluate,
88 var tdNode = tdNodes.iterateNext();
91 var parent = tdNode.parentNode;
92 nodes[curIndex++] = parent;
93 tdNode = tdNodes.iterateNext();
96 for(i=0;i<curIndex;i++) {
97 nodes[i].style.display = "none";
98 nodes[i].removeAttribute("class");
102 function taskViewActivate(event ) {
103 // Do not run if not tasks, do not run without XPath3
104 if (document.getElementById("taskview") != null && document.evaluate != null) {
105 // var count = countRowsInTaskView();
106 categories = new Object();
107 gatherCategoriesFromTable();
108 addCategoriesToSelector();
110 $('selectcategory').observe('change', filterCategories);
111 filterCategories(null); // color the rows first