xref: /reactos/sdk/tools/rgenstat/web/rapistatus.js (revision 171a9206)
1function 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
23function 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
42function trimSrc (strSrc)
43{
44	return strSrc.slice (strSrc.lastIndexOf ('/') + 1, strSrc.lastIndexOf ('.'));
45}
46
47function 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
61function 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
87function 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
99function 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
113function 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
130function 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://svn.reactos.org/svn/reactos/trunk/reactos/';
162				var strExtra = '?view=markup';
163				window.open (strRoot + strFilename.innerText + strExtra, 'SVN');
164			}
165		}
166	}
167	else
168	{
169		if (elt.parentNode && elt.parentNode.className == 't')	// toggle
170			elt = elt.parentNode;
171		else if (elt.className != 't')	// toggle
172			return;
173
174		while (elt != null && elt.tagName != 'DIV')
175			elt = elt.parentNode;
176
177		if (evt.shiftKey)
178		{
179			var rgElts = getChildrenByTagName (elt, 'DIV');
180			var cElts = rgElts.length;
181			if (cElts != 0)
182			{
183				var fView = false;
184				var iElt;
185				for (iElt = 0; iElt < cElts; iElt ++)
186				{
187					if (getView (rgElts [iElt]))
188					{
189						fView = true;
190						break;
191					}
192				}
193				for (iElt = 0; iElt < cElts; iElt ++)
194				{
195					setView (rgElts [iElt], !fView);
196				}
197			}
198		}
199		else if (evt.ctrlKey)
200		{
201			setView (elt, true);
202			var eltParent = getParentDiv (elt);
203			while (eltParent)
204			{
205				var rgSiblings = getChildrenByTagName (eltParent, 'DIV');
206				var cSiblings = rgSiblings.length;
207				for (var iSibling = 0; iSibling < cSiblings; iSibling++)
208				{
209					var eltSibling = rgSiblings [iSibling];
210					if (eltSibling != elt)
211					{
212						setView (eltSibling, false);
213					}
214				}
215				elt = eltParent;
216				eltParent = getParentDiv (elt);
217			}
218		}
219		else
220			toggle (elt);
221	}
222
223	return false;
224}
225
226function filterTree ()
227{
228	var eltImplemented = document.getElementById ('implemented');
229	var eltUnimplemented = document.getElementById ('unimplemented');
230
231	var dictTypes = new Object ();
232	if (eltImplemented.checked)
233		dictTypes ['i'] = true;
234	if (eltUnimplemented.checked)
235		dictTypes ['u'] = true;
236
237	viewAll (document.getElementById ('ROOT'), dictTypes);
238}
239
240function selectImplemented ()
241{
242	toggleFilter ('implemented');
243}
244
245function selectUnimplemented ()
246{
247	toggleFilter ('unimplemented');
248}
249
250function toggleFilter (strFilter)
251{
252	var eltImplemented = document.getElementById ('implemented');
253	var eltUnimplemented = document.getElementById ('unimplemented');
254
255	var eltToggle = document.getElementById (strFilter);
256	if (window && window.event && window.event.shiftKey)
257	{
258		eltImplemented.checked = eltUnimplemented.checked;
259		eltUnimplemented.checked = true;
260	}
261	else
262	if (!eltUnimplemented.checked && !eltImplemented.checked)
263	{
264		eltImplemented.checked = eltUnimplemented.checked = true;
265		eltToggle.checked = false;
266	}
267	filterTree ();
268}
269
270function onLoad ()
271{
272	var eltImplemented = document.getElementById ('implemented');
273	var eltUnimplemented = document.getElementById ('unimplemented');
274	eltImplemented.checked = eltUnimplemented.checked = true;
275}
276
277if (document.layers)
278{
279	document.captureEvents (Event.MOUSEUP);
280	document.onmouseup = clickHandler;
281}
282else if (document.attachEvent)
283{
284	document.attachEvent('onclick', clickHandler);
285}
286else if (document.addEventListener)
287{
288	document.addEventListener('click', clickHandler, false);
289}
290else
291	document.onclick = clickHandler;
292