truncated filenames
[mono.git] / web / web / deploy / cm / cormissing.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 = 'cm/tp.gif';
13                         elt.className += '_';
14                 }
15                 else
16                 {
17                         eltLink.src = 'cm/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 = 'cm/tp.gif';
32                         elt.className += '_';
33                 }
34                 else if (ich >= 0 && fView)
35                 {
36                         eltLink.src = 'cm/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 rgElts = getChildrenByTagName (elt, 'DIV');
65         var cElts = rgElts.length;
66         if (cElts == 0)
67         {
68                 var rgImages = getChildrenByTagName (elt, 'IMG');
69                 var cImages = rgImages.length;
70                 for (var iImage = 0; iImage < cImages; iImage++)
71                 {
72                         var image = rgImages [iImage];
73                         var strImage = trimSrc (rgImages [iImage].src);
74                         if (dictTypes [strImage])
75                         {
76                                 fView = true;
77                                 break;
78                         }
79                 }
80         }
81         else
82         {
83                 var iElt;
84                 for (iElt = 0; iElt < cElts; iElt ++)
85                         fView |= viewAll (rgElts [iElt], dictTypes);
86         }
87         elt.style.display = fView ? '' : 'none';
88         return fView;
89 }
90
91 function getView (elt)
92 {
93         var eltLink = elt.firstChild;
94         if (eltLink != null && eltLink.className == 't')        // toggle
95         {
96                 var ich = elt.className.indexOf ('_');
97                 if (ich < 0)
98                         return true;
99         }
100         return false;
101 }
102
103 function getParentDiv (elt)
104 {
105         if (elt)
106         {
107                 do
108                 {
109                         elt = elt.parentNode;
110                 }
111                 while (elt && elt.tagName != 'DIV');
112         }
113
114         return elt;
115 }
116
117 function getName (elt)
118 {
119         var rgSpans = getChildrenByTagName (elt, 'SPAN');
120         for (var iSpan = 0; iSpan < rgSpans.length; iSpan ++)
121         {
122                 var span = rgSpans [iSpan];
123                 if (span.className == 'l')      // label
124                 {
125                         if (span.innerText)
126                                 return span.innerText;
127                         else
128                                 return span.firstChild.nodeValue;
129                 }
130         }
131         return null;
132 }
133
134 function clickHandler (evt)
135 {
136         var elt;
137         if (document.layers)
138                 elt = evt.taget;
139         else if (window.event && window.event.srcElement)
140         {
141                 elt = window.event.srcElement;
142                 evt = window.event;
143         }
144         else if (evt && evt.stopPropagation)
145                 elt = evt.target;
146         
147         if (!elt.className && elt.parentNode)
148                 elt = elt.parentNode;
149
150         if (elt.className == 'l')       // label
151         {
152                 var strClass;
153                 var strField;
154
155                 elt = getParentDiv (elt);
156                 if (elt.className == 'm' ||     // method
157                         elt.className == 'p' || // property
158                         elt.className == 'e' || // event
159                         elt.className == 'x' || // constructor
160                         elt.className == 'f')   // field
161                 {
162                         strField = getName (elt).toLowerCase ();
163                         var match = strField.match ( /[A-Z0-9_]*/i );
164                         if (match)
165                                 strField = match [0];
166                         elt = getParentDiv (elt);
167                         elt = getParentDiv (elt);
168                 }
169                 if (elt.className == 'c' ||     // class
170                         elt.className == 's' || // struct
171                         elt.className == 'en')  // enum
172                 {
173                         strClass = getName (elt).toLowerCase () + 'class';
174                         elt = getParentDiv (elt);
175                 }
176                 else if (elt.className == 'd')  // delegate
177                 {
178                         strClass = getName (elt).toLowerCase () + 'eventhandler';
179                         elt = getParentDiv (elt);
180                 }
181                 if (elt.className == 'n')       // namespace
182                 {
183                         var strNamespace = getName (elt).toLowerCase ().replace ('.', '');
184                         if (strClass)
185                                 strNamespace += strClass;
186                         if (strField)
187                                 strNamespace += strField;
188                         if (strClass || strField)
189                                 strNamespace += 'topic';
190
191                         window.open ('http://msdn.microsoft.com/library/default.asp?url=/library/en-us/cpref/html/frlrf' + strNamespace + '.asp', 'MSDN');
192                 }
193         }
194         else
195         {
196                 if (elt.parentNode && elt.parentNode.className == 't')  // toggle
197                         elt = elt.parentNode;
198                 else if (elt.className != 't')  // toggle
199                         return;
200
201                 while (elt != null && elt.tagName != 'DIV')
202                         elt = elt.parentNode;
203                 
204                 if (evt.shiftKey)
205                 {
206                         var rgElts = getChildrenByTagName (elt, 'DIV');
207                         var cElts = rgElts.length;
208                         if (cElts != 0)
209                         {
210                                 var fView = false;
211                                 var iElt;
212                                 for (iElt = 0; iElt < cElts; iElt ++)
213                                 {
214                                         if (getView (rgElts [iElt]))
215                                         {
216                                                 fView = true;
217                                                 break;
218                                         }
219                                 }
220                                 for (iElt = 0; iElt < cElts; iElt ++)
221                                 {
222                                         setView (rgElts [iElt], !fView);
223                                 }
224                         }
225                 }
226                 else if (evt.ctrlKey)
227                 {
228                         setView (elt, true);
229                         var eltParent = getParentDiv (elt);
230                         while (eltParent)
231                         {
232                                 var rgSiblings = getChildrenByTagName (eltParent, 'DIV');
233                                 var cSiblings = rgSiblings.length;
234                                 for (var iSibling = 0; iSibling < cSiblings; iSibling++)
235                                 {
236                                         var eltSibling = rgSiblings [iSibling];
237                                         if (eltSibling != elt)
238                                         {
239                                                 setView (eltSibling, false);
240                                         }
241                                 }
242                                 elt = eltParent;
243                                 eltParent = getParentDiv (elt);
244                         }
245                 }
246                 else
247                         toggle (elt);
248         }
249
250         return false;
251 }
252
253 function filterTree ()
254 {
255         var eltMissing = document.getElementById ('missing');
256         var eltTodo = document.getElementById ('todo');
257
258         var dictTypes = new Object ();
259         if (eltMissing.checked)
260                 dictTypes ['sm'] = true;
261         if (eltTodo.checked)
262                 dictTypes ['st'] = true;
263         dictTypes ['sc'] = true;
264
265         viewAll (document.getElementById ('ROOT'), dictTypes);
266 }
267
268 function selectMissing ()
269 {
270         var eltMissing = document.getElementById ('missing');
271         var eltTodo = document.getElementById ('todo');
272         if (!eltTodo.checked && !eltMissing.checked)
273                 eltTodo.checked = true;
274         filterTree ();
275 }
276
277 function selectTodo ()
278 {
279         var eltMissing = document.getElementById ('missing');
280         var eltTodo = document.getElementById ('todo');
281         if (!eltTodo.checked && !eltMissing.checked)
282                 eltMissing.checked = true;
283         filterTree ();
284 }
285
286 function onLoad ()
287 {
288         var eltMissing = document.getElementById ('missing');
289         var eltTodo = document.getElementById ('todo');
290         eltMissing.checked = true;
291         eltTodo.checked = true;
292 }
293
294 if (document.layers)
295 {
296         document.captureEvents (Event.MOUSEUP);
297         document.onmouseup = clickHandler;
298 }
299 else if (document.attachEvent)
300 {
301         document.attachEvent('onclick', clickHandler);
302 }
303 else if (document.addEventListener)
304 {
305         document.addEventListener('click', clickHandler, false);
306 }
307 else 
308         document.onclick = clickHandler;
309