This commit was manufactured by cvs2svn to create branch 'captive'.
[reactos.git] / tools / rgenstat / web / rapistatus.js
1 function toggle (elt)
2 {
3         if (elt == null)
4                 return;
5
6         var eltLink = elt.firstChild;
7         if (eltLink != null && eltLink.className == 't')        // toggle
8         {
9                 var ich = elt.className.indexOf ('_');
10                 if (ich < 0)
11                 {
12                         eltLink.src = 'tp.gif';
13                         elt.className += '_';  
14                 }
15                 else
16                 {
17                         eltLink.src = 'tm.gif';
18                         elt.className = elt.className.slice (0, ich);
19                 }
20         }
21 }
22
23 function setView (elt, fView)
24 {
25         var eltLink = elt.firstChild;
26         if (eltLink != null && eltLink.className == 't')        // toggle
27         {
28                 var ich = elt.className.indexOf ('_');
29                 if (ich < 0 && !fView)
30                 {
31                         eltLink.src = 'tp.gif';
32                         elt.className += '_';
33                 }
34                 else if (ich >= 0 && fView)
35                 {
36                         eltLink.src = 'tm.gif';
37                         elt.className = elt.className.slice (0, ich);
38                 }
39         }
40 }
41
42 function trimSrc (strSrc)
43 {
44         return strSrc.slice (strSrc.lastIndexOf ('/') + 1, strSrc.lastIndexOf ('.'));
45 }
46
47 function getChildrenByTagName (elt, strTag)
48 {
49         strTag = strTag.toLowerCase ();
50         var rgChildren = new Array ();
51         var eltChild = elt.firstChild;
52         while (eltChild)
53         {
54                 if (eltChild.tagName && eltChild.tagName.toLowerCase () == strTag)
55                         rgChildren.push (eltChild);
56                 eltChild = eltChild.nextSibling;
57         }
58         return rgChildren;
59 }
60
61 function viewAll (elt, dictTypes)
62 {
63         var fView = false;
64         var rgImages = getChildrenByTagName (elt, 'IMG');
65         var cImages = rgImages.length;
66         for (var iImage = 0; iImage < cImages; iImage++)
67         {
68                 var strImage = trimSrc (rgImages [iImage].src);
69                 if (dictTypes [strImage])
70                 {
71                         fView = true;
72                         break;
73                 }
74         }
75         var rgElts = getChildrenByTagName (elt, 'DIV');
76         var cElts = rgElts.length;
77         if (cElts != 0)
78         {
79                 var iElt;
80                 for (iElt = 0; iElt < cElts; iElt ++)
81                         fView |= viewAll (rgElts [iElt], dictTypes);
82         }
83         elt.style.display = fView ? '' : 'none';
84         return fView;
85 }
86
87 function getView (elt)
88 {
89         var eltLink = elt.firstChild;
90         if (eltLink != null && eltLink.className == 't')        // toggle
91         {
92                 var ich = elt.className.indexOf ('_');
93                 if (ich < 0)
94                         return true;
95         }
96         return false;
97 }
98
99 function getParentDiv (elt)
100 {
101         if (elt)
102         {
103                 do
104                 {
105                         elt = elt.parentNode;
106                 }
107                 while (elt && elt.tagName != 'DIV');
108         }
109
110         return elt;
111 }
112
113 function getName (elt)
114 {
115         var rgSpans = getChildrenByTagName (elt, 'SPAN');
116         for (var iSpan = 0; iSpan < rgSpans.length; iSpan ++)
117         {
118                 var span = rgSpans [iSpan];
119                 if (span.className == 'l')      // label
120                 {
121                         if (span.innerText)
122                                 return span.innerText;
123                         else
124                                 return span.firstChild.nodeValue;
125                 }
126         }
127         return null;
128 }
129
130 function clickHandler (evt)
131 {
132         var elt;
133         if (document.layers)
134                 elt = evt.taget;
135         else if (window.event && window.event.srcElement)
136         {
137                 elt = window.event.srcElement;
138                 evt = window.event;
139         }
140         else if (evt && evt.stopPropagation)
141                 elt = evt.target;
142         
143         if (!elt.className && elt.parentNode)
144                 elt = elt.parentNode;
145
146         if (elt.className == 'l')       // label
147         {
148     var strName;
149
150                 eltDiv = getParentDiv (elt);
151                 var strEltClass = eltDiv.className;
152                 if (strEltClass.charAt (strEltClass.length - 1) == '_')
153                         strEltClass = strEltClass.slice (0, strEltClass.length - 1);
154           strName = getName (eltDiv);
155
156                 if (strEltClass == 'f') // Function
157                 {
158       var strFilename = elt.nextSibling;
159                         if (strFilename && strFilename.innerText)
160                         {
161         var strRoot = 'http://mok.lvcm.com/cgi-bin/reactos/ros-cvs/~checkout~/';
162         var strExtra = '?content-type=text/plain';
163
164                                 window.open (strRoot + strFilename.innerText + strExtra, 'CVS');
165                         }
166                 }
167         }
168         else
169         {
170                 if (elt.parentNode && elt.parentNode.className == 't')  // toggle
171                         elt = elt.parentNode;
172                 else if (elt.className != 't')  // toggle
173                         return;
174
175                 while (elt != null && elt.tagName != 'DIV')
176                         elt = elt.parentNode;
177
178                 if (evt.shiftKey)
179                 {
180                         var rgElts = getChildrenByTagName (elt, 'DIV');
181                         var cElts = rgElts.length;
182                         if (cElts != 0)
183                         {
184                                 var fView = false;
185                                 var iElt;
186                                 for (iElt = 0; iElt < cElts; iElt ++)
187                                 {
188                                         if (getView (rgElts [iElt]))
189                                         {
190                                                 fView = true;
191                                                 break;
192                                         }
193                                 }
194                                 for (iElt = 0; iElt < cElts; iElt ++)
195                                 {
196                                         setView (rgElts [iElt], !fView);
197                                 }
198                         }
199                 }
200                 else if (evt.ctrlKey)
201                 {
202                         setView (elt, true);
203                         var eltParent = getParentDiv (elt);
204                         while (eltParent)
205                         {
206                                 var rgSiblings = getChildrenByTagName (eltParent, 'DIV');
207                                 var cSiblings = rgSiblings.length;
208                                 for (var iSibling = 0; iSibling < cSiblings; iSibling++)
209                                 {
210                                         var eltSibling = rgSiblings [iSibling];
211                                         if (eltSibling != elt)
212                                         {
213                                                 setView (eltSibling, false);
214                                         }
215                                 }
216                                 elt = eltParent;
217                                 eltParent = getParentDiv (elt);
218                         }
219                 }
220                 else
221                         toggle (elt);
222         }
223
224         return false;
225 }
226
227 function filterTree ()
228 {
229         var eltImplemented = document.getElementById ('implemented');
230         var eltUnimplemented = document.getElementById ('unimplemented');
231
232         var dictTypes = new Object ();
233         if (eltImplemented.checked)
234                 dictTypes ['i'] = true;
235         if (eltUnimplemented.checked)
236                 dictTypes ['u'] = true;
237
238         viewAll (document.getElementById ('ROOT'), dictTypes);
239 }
240
241 function selectImplemented ()
242 {
243         toggleFilter ('implemented');
244 }
245
246 function selectUnimplemented ()
247 {
248         toggleFilter ('unimplemented');
249 }
250
251 function toggleFilter (strFilter)
252 {
253         var eltImplemented = document.getElementById ('implemented');
254         var eltUnimplemented = document.getElementById ('unimplemented');
255
256         var eltToggle = document.getElementById (strFilter);
257         if (window && window.event && window.event.shiftKey)
258         {
259                 eltImplemented.checked = eltUnimplemented.checked;
260                 eltUnimplemented.checked = true;
261         }
262         else
263         if (!eltUnimplemented.checked && !eltImplemented.checked)
264         {
265                 eltImplemented.checked = eltUnimplemented.checked = true;
266                 eltToggle.checked = false;
267         }
268         filterTree ();
269 }
270
271 function onLoad ()
272 {
273         var eltImplemented = document.getElementById ('implemented');
274         var eltUnimplemented = document.getElementById ('unimplemented');
275         eltImplemented.checked = eltUnimplemented.checked = true;
276 }
277
278 if (document.layers)
279 {
280         document.captureEvents (Event.MOUSEUP);
281         document.onmouseup = clickHandler;
282 }
283 else if (document.attachEvent)
284 {
285         document.attachEvent('onclick', clickHandler);
286 }
287 else if (document.addEventListener)
288 {
289         document.addEventListener('click', clickHandler, false);
290 }
291 else 
292         document.onclick = clickHandler;