ICAL: add conflict handling
[citadel.git] / webcit / static / table.js
1 var categories;
2 /** 
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
7  */
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) {
18                                 // Get text child
19                                 if (categoryTd.childNodes.length > 0 &&
20                                         categoryTd.childNodes[0].nodeType == 3) {
21                                                 categories[categoryTd.childNodes[0].nodeValue]
22                                                         = categoryTd.childNodes[0].nodeValue;
23                                         }
24                         }
25                 }
26         }
27 }
28 }
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);
37         }
38 }
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();
47         var curIndex = 0;
48         // Hunt down all the rows with this category using XPath
49         if (document.evaluate) { // Only if we can do so, of course 
50                 var debugText = "";
51                 var toEvaluate = null;
52                 if (cat != 'showall') {
53                 toEvaluate = "//tr[td='"+cat+"']";
54                 } else {
55                         toEvaluate = "//tr[td]";
56                 }
57                 var trNodes = document.evaluate(toEvaluate,
58                 document,
59                 null,
60                 XPathResult.ANY_TYPE,
61                 null);
62         var trNode = trNodes.iterateNext();
63         while(trNode) {
64                 debugText += "<br>"+trNode.nodeName;
65                 nodesToUnhide[curIndex++] = trNode;
66                 trNode = trNodes.iterateNext();
67         } 
68                 
69         }
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");
74                 }
75         }
76 }
77 function hideAllExistingRows() {
78         var nodes = new Array();
79         var curIndex = 0;
80         if (document.evaluate) { // Only if we can do so, of course 
81                 var debugText = "";
82                 var toEvaluate = "//tr/td";
83                 var tdNodes = document.evaluate(toEvaluate,
84                 document,
85                 null,
86                 XPathResult.ANY_TYPE,
87                 null);
88         var tdNode = tdNodes.iterateNext();
89         while(tdNode) {
90                 // Get parent
91                 var parent = tdNode.parentNode;
92                 nodes[curIndex++] = parent;
93                 tdNode = tdNodes.iterateNext();
94         } 
95         }
96         for(i=0;i<curIndex;i++) {
97                 nodes[i].style.display = "none";
98                 nodes[i].removeAttribute("class");
99         }
100 }
101
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();
109         
110         $('selectcategory').observe('change', filterCategories);
111         filterCategories(null); // color the rows first
112         }
113 }
114