Salome HOME
DCQ : Merge with Ecole_Ete_a6.
[modules/smesh.git] / doc / salome / gui / SMESH / whutils.js
1 var gsFileName="";\r
2 var xmlDoc=null;\r
3 var sdocPath=null;\r
4 var gsInsertBeforeEndHTML="";\r
5 var sReplaceStringsSrc=new Array();\r
6 sReplaceStringsSrc[0]="&";\r
7 sReplaceStringsSrc[1]=">";\r
8 sReplaceStringsSrc[2]="<";\r
9 sReplaceStringsSrc[3]=""";\r
10 sReplaceStringsSrc[4]=" ";\r
11 var sReplaceStringsDst=new Array();\r
12 sReplaceStringsDst[0]="&";\r
13 sReplaceStringsDst[1]=">";\r
14 sReplaceStringsDst[2]="<";\r
15 sReplaceStringsDst[3]="\"";\r
16 sReplaceStringsDst[4]=" ";\r
17 var goHighLighted=null;\r
18 \r
19 function _getRelativePath(strParentPath,strCurrentPath)\r
20 {\r
21         if(_isAbsPath(strCurrentPath)) return _getPath(strCurrentPath);\r
22         strParentPath=_replaceSlash(strParentPath);\r
23         strParentPath=_getPath(strParentPath);\r
24         strCurrentPath=_replaceSlash(strCurrentPath);\r
25         strCurrentPath=_getPath(strCurrentPath);\r
26         for(var i=0;i<strParentPath.length&&i<strCurrentPath.length;i++)\r
27         {\r
28                 if(strParentPath.charAt(i)!=strCurrentPath.charAt(i))\r
29                         break;\r
30         }\r
31         \r
32         strParentPath=strParentPath.substring(i);\r
33         strCurrentPath=strCurrentPath.substring(i);     \r
34         \r
35         var nPathPos=0;\r
36         while(nPathPos!=-1)\r
37         {\r
38                 nPathPos=strParentPath.indexOf("/");\r
39                 if(nPathPos!=-1)\r
40                 {\r
41                         strParentPath=strParentPath.substring(nPathPos+1);\r
42                         strCurrentPath="../"+strCurrentPath;\r
43                 }\r
44         }\r
45         return strCurrentPath;\r
46 }\r
47 \r
48 function _getRelativeFileName(strParentPath, strCurrentPath)\r
49 {\r
50         strParentPath=_replaceSlash(strParentPath);\r
51         strParentPath=_getPath(strParentPath);\r
52         strCurrentPath=_replaceSlash(strCurrentPath);\r
53         for(var i=0;i<strParentPath.length&&i<strCurrentPath.length;i++)\r
54         {\r
55                 if(strParentPath.charAt(i)!=strCurrentPath.charAt(i))\r
56                         break;\r
57         }\r
58         \r
59         strParentPath=strParentPath.substring(i);\r
60         strCurrentPath=strCurrentPath.substring(i);     \r
61         \r
62         var nPathPos=0;\r
63         while(nPathPos!=-1)\r
64         {\r
65                 nPathPos=strParentPath.indexOf("/");\r
66                 if(nPathPos!=-1)\r
67                 {\r
68                         strParentPath=strParentPath.substring(nPathPos+1);\r
69                         strCurrentPath="../"+strCurrentPath;\r
70                 }\r
71         }\r
72         return strCurrentPath;\r
73 }\r
74 \r
75 function _isAbsPathToHost(sPath)\r
76 {\r
77         return (sPath.indexOf("/")==0);\r
78 }\r
79 \r
80 function _getHost(sPath)\r
81 {\r
82         var nPos=sPath.indexOf("//");\r
83         if(nPos>0)\r
84         {\r
85                 var nPosx=sPath.indexOf("/",nPos+2);\r
86                 if(nPosx>0)\r
87                         return sPath.substring(0,nPosx);\r
88                 else\r
89                         return sPath;\r
90         }\r
91         return sPath;\r
92 }\r
93 \r
94 function _getFullPath(sPath,sRelPath)\r
95 {\r
96         if(_isAbsPath(sRelPath))\r
97                 return sRelPath;\r
98         else if(_isAbsPathToHost(sRelPath))\r
99                 return _getHost(sPath)+sRelPath;\r
100         else\r
101         {\r
102                 var sFullPath=sPath;\r
103                 var nPathPos=0;\r
104                 while(nPathPos!=-1)\r
105                 {\r
106                         var nPathPos=sRelPath.indexOf("../");\r
107                         if(nPathPos!=-1)\r
108                         {\r
109                                 sRelPath=sRelPath.substring(nPathPos+3);\r
110                                 sFullPath=sFullPath.substring(0,sFullPath.length-1);\r
111                                 var nPos2 = sFullPath.lastIndexOf("/");\r
112                                 if(nPos2!=-1)\r
113                                         sFullPath=sFullPath.substring(0,nPos2+1);\r
114                                 else\r
115                                         break;\r
116                         }\r
117                 }\r
118                 sFullPath+=sRelPath;\r
119                 return sFullPath;\r
120         }       \r
121 }\r
122 \r
123 function _isAbsPath(strPath)\r
124 {\r
125         var strUpper=strPath.toUpperCase();\r
126         return (strUpper.indexOf(":")!=-1);\r
127 }\r
128 \r
129 function _replaceSlash(strURL)\r
130 {       \r
131         var re=new RegExp("\\\\","g");\r
132         var strReplacedURL=strURL.replace(re,"/");\r
133         return strReplacedURL;\r
134 }\r
135 \r
136 function _getPath(strURL)\r
137 {\r
138         pathpos=strURL.lastIndexOf("/");\r
139         if(pathpos>0)\r
140                 return strURL.substring(0,pathpos+1);\r
141         else\r
142                 return "";\r
143 }\r
144 \r
145 function removeItemFromArray(oArray,i)\r
146 {\r
147         if(oArray.length&&i>=0&&i<oArray.length)\r
148         {\r
149                 var len=oArray.length;\r
150                 for(var s=i;s<len-1;s++)\r
151                         oArray[s]=oArray[s+1];\r
152                 oArray.length=len-1;\r
153         }\r
154 }\r
155 \r
156 function insertItemIntoArray(oArray,i,obj)\r
157 {\r
158         if(oArray.length&&i>=0&&i<=oArray.length)\r
159         {\r
160                 var len=oArray.length;\r
161                 for(var s=len;s>i;s--)\r
162                         oArray[s]=oArray[s-1];\r
163                 oArray[i]=obj;          \r
164         }\r
165 }\r
166 \r
167 function loadData(sFileName)\r
168 {\r
169         if(!getElement("dataDiv"))\r
170         {\r
171                 if(!insertDataDiv())\r
172                 {\r
173                         gsFileName=sFileName;\r
174                         return;\r
175                 }\r
176         }\r
177         var sHTML="";\r
178         if(gbMac)\r
179                 sHTML+="<iframe src="+sFileName+"></iframe>";\r
180         else\r
181                 sHTML+="<iframe style=\"visibility:hidden;width:0;height:0\" src="+sFileName+"></iframe>";\r
182         \r
183         var oDivCon=getElement("dataDiv");\r
184         if(oDivCon)\r
185         {\r
186                 if(gbNav6)\r
187                 {\r
188                         if(oDivCon.getElementsByTagName&&oDivCon.getElementsByTagName("iFrame").length>0)\r
189                         {\r
190                                 oDivCon.getElementsByTagName("iFrame")[0].src=sFileName;\r
191                         }\r
192                         else\r
193                                 oDivCon.innerHTML=sHTML;\r
194                 }\r
195                 else\r
196                         oDivCon.innerHTML=sHTML;\r
197         }\r
198 }\r
199 \r
200 function loadDataXML(sFileName)\r
201 {\r
202         var sCurrentDocPath=_getPath(document.location.href);\r
203         sdocPath=_getFullPath(sCurrentDocPath,sFileName);\r
204         if(gbIE5)\r
205         {\r
206                 xmlDoc=new ActiveXObject("Microsoft.XMLDOM");\r
207                 xmlDoc.async=true;\r
208                 xmlDoc.onreadystatechange=checkState;\r
209                 if(document.body!=null)\r
210                         xmlDoc.load(sdocPath);\r
211         }\r
212         else if(gbNav6)\r
213         {\r
214                 xmlDoc=document.implementation.createDocument("","",null);\r
215                 xmlDoc.addEventListener("load",initializeData,false);\r
216                 xmlDoc.load(sdocPath,"text/xml");\r
217         }\r
218 }\r
219 \r
220 function initializeData()\r
221 {\r
222         if(xmlDoc!=null)\r
223                 putDataXML(xmlDoc,sdocPath);\r
224 }\r
225 \r
226 function checkState()\r
227 {\r
228         if(xmlDoc!=null)\r
229         {\r
230                 var state=xmlDoc.readyState;\r
231                 if(state==4)\r
232                 {\r
233                         var err=xmlDoc.parseError;\r
234                         if(err.errorCode!=0)\r
235                                 alert(err.reason);\r
236                         else\r
237                                 putDataXML(xmlDoc,sdocPath);\r
238                 }\r
239         }\r
240 }\r
241 \r
242 function insertDataDiv()\r
243 {\r
244         var sHTML="";\r
245         if(gbMac)\r
246                 sHTML+="<div id=dataDiv style=\"display:none;\"></div>";\r
247         else\r
248                 sHTML+="<div id=dataDiv style=\"visibility:hidden\"></div>";\r
249         if((gbIE5||gbNav6)&&document.body)\r
250                 document.body.insertAdjacentHTML("beforeEnd",sHTML);\r
251         else\r
252         {\r
253                 gsInsertBeforeEndHTML=sHTML;\r
254                 setTimeout("insertWhenBodyReady();",100);\r
255                 return false;\r
256         }\r
257         return true;\r
258 }\r
259 \r
260 function insertWhenBodyReady()\r
261 {\r
262         if(gsInsertBeforeEndHTML=="") return;\r
263         if(document.body)\r
264         {\r
265                 document.body.insertAdjacentHTML("beforeEnd",gsInsertBeforeEndHTML);\r
266                 gsInsertBeforeEndHTML="";\r
267                 loadData(gsFileName);\r
268         }\r
269         else\r
270         {\r
271                 setTimeout("insertWhenBodyReady();",100);\r
272         }\r
273 }\r
274 \r
275 function window_BUnload()\r
276 {\r
277         var oDivCon=getElement("dataDiv");\r
278         if(oDivCon)\r
279                 oDivCon.innerHTML="";\r
280 }\r
281 \r
282 function removeThis(obj)\r
283 {\r
284         if(obj.parentNode)\r
285                 obj.parentNode.removeChild(obj);\r
286         else\r
287                 obj.outerHTML="";\r
288 }\r
289 \r
290 function getParentNode(obj)\r
291 {\r
292         if(obj.parentNode)\r
293                 return obj.parentNode;\r
294         else if(obj.parentElement)\r
295                 return obj.parentElement;\r
296         return null;\r
297 }\r
298 \r
299 function getElement(sID)\r
300 {\r
301         if(document.getElementById)\r
302                 return document.getElementById(sID);\r
303         else if(document.all)\r
304                 return document.all(sID);\r
305         return null;\r
306 }\r
307 \r
308 function getChildrenByTag(obj,sTagName)\r
309 {\r
310         if(obj.getElementsByTagName)\r
311         {\r
312                 var aChildren=new Array();\r
313                 var aElements=getElementsByTag(obj,sTagName);\r
314                 if(aElements!=null)\r
315                 {\r
316                         for(var i=0;i<aElements.length;i++)\r
317                         {\r
318                                 if(aElements[i].parentNode==obj)\r
319                                         aChildren[aChildren.length]=aElements[i];\r
320                         }\r
321                         return aChildren;\r
322                 }\r
323                 else\r
324                         return new Array();\r
325         }\r
326         else if(obj.children)\r
327                 return obj.children.tags(sTagName);\r
328 }\r
329 \r
330 function getElementsByTag(obj,sTagName)\r
331 {\r
332         if(obj.getElementsByTagName)\r
333                 return obj.getElementsByTagName(sTagName);\r
334         else if(obj.all)\r
335                 return obj.all.tags(sTagName);\r
336         return null;\r
337 }\r
338 \r
339 function _htmlToText(sHTML)\r
340 {\r
341         if(sHTML==null) return null;\r
342         var sText=sHTML;\r
343         for(var i=0;i<sReplaceStringsSrc.length;i++)\r
344         {\r
345                 var re=new RegExp(sReplaceStringsSrc[i],"g");\r
346                 sText=sText.replace(re,sReplaceStringsDst[i]);\r
347         }       \r
348         return sText;\r
349 }\r
350 \r
351 function _textToHtml_nonbsp(sText)\r
352 {\r
353         if(sText==null) return null;\r
354         var sHTML=sText;\r
355         for(var i=0;i<sReplaceStringsSrc.length-1;i++)\r
356         {\r
357                 var re=new RegExp(sReplaceStringsDst[i],"g");\r
358                 sHTML=sHTML.replace(re,sReplaceStringsSrc[i]);\r
359         }       \r
360         return sHTML;\r
361 }\r
362 \r
363 function _textToHtml(sText)\r
364 {\r
365         if(sText==null) return null;\r
366         var sHTML=sText;\r
367         for(var i=0;i<sReplaceStringsSrc.length;i++)\r
368         {\r
369                 var re=new RegExp(sReplaceStringsDst[i],"g");\r
370                 sHTML=sHTML.replace(re,sReplaceStringsSrc[i]);\r
371         }       \r
372         return sHTML;\r
373 }\r
374 \r
375 \r
376 function getInnerText(obj)\r
377 {\r
378         var renbsp2sp=new RegExp("\xa0","g");\r
379         if(obj.innerText)\r
380         {\r
381                 var sText=obj.innerText;\r
382                 sText=sText.replace(renbsp2sp," ");\r
383                 return sText;\r
384         }\r
385         else\r
386         {\r
387                 if(obj.nodeValue)\r
388                 {\r
389                         var sValue=obj.nodeValue;\r
390                         sValue=sValue.replace(renbsp2sp," ");\r
391                         return sValue;\r
392                 }\r
393                 else\r
394                 {\r
395                         var sText="";\r
396                         var oChild=obj.firstChild;\r
397                         while(oChild!=null)\r
398                         {\r
399                                 sText+=getInnerText(oChild);\r
400                                 oChild=oChild.nextSibling;\r
401                         }\r
402                         return sText;\r
403                 }\r
404         }\r
405                 \r
406 }\r
407 \r
408 function HighLightElement(obj,sHighLightColor,sNormalColor)\r
409 {\r
410         if(obj!=null)\r
411         {\r
412                 resetHighLight(sNormalColor);\r
413                 obj.style.backgroundColor=sHighLightColor;\r
414                 goHighLighted=obj;\r
415         }\r
416 }\r
417 \r
418 function resetHighLight(sNormalColor)\r
419 {\r
420         if(goHighLighted!=null)\r
421         {\r
422                 goHighLighted.style.backgroundColor=sNormalColor;\r
423                 goHighLighted=null;\r
424         }\r
425 }\r
426 \r
427 function whFont(sName,sSize,sColor,sStyle,sWeight,sDecoration)\r
428 {\r
429         this.sName=sName;\r
430         this.sSize=sSize;\r
431         this.sColor=sColor;\r
432         this.sStyle=sStyle;\r
433         this.sWeight=sWeight;\r
434         this.sDecoration=sDecoration;\r
435 }\r
436 \r
437 function getFontStyle(oFont)\r
438 {\r
439         var sStyle="";\r
440         if(oFont)\r
441         {\r
442                 sStyle+="font-family:"+oFont.sName+";";\r
443                 if(gbMac)\r
444                 {\r
445                         var nSize=parseInt(oFont.sSize);\r
446                         if(gbIE5)\r
447                                 nSize+=2;\r
448                         else\r
449                                 nSize+=4;\r
450                         sStyle+="font-size:"+nSize+"pt;";\r
451                 }\r
452                 else\r
453                         sStyle+="font-size:"+oFont.sSize+";";\r
454                         \r
455                 sStyle+="font-style:"+oFont.sStyle+";";\r
456                 sStyle+="font-weight:"+oFont.sWeight+";";\r
457                 sStyle+="text-decoration:"+oFont.sDecoration+";";\r
458                 sStyle+="color:"+oFont.sColor+";";\r
459         }\r
460         return sStyle;\r
461 }\r
462 \r
463 var gbWhUtil=true;