smesh/doc/salome/gui/SMESH/whfhost.js
2004-06-18 08:55:35 +00:00

916 lines
18 KiB
JavaScript
Executable File

var gsSK2=null;
var gsSK=null;
var gsFtsBreakChars="\t\r\n\"\\ .,!@#$%^&*()~'`:;<>?/{}[]|+-=\x85\x92\x93\x94\x95\x96\x97\x99\xA9\xAE\xB7";
var gnCLF=0;
var gsHelpCannotSearch="Cannot search for that phrase.";
var gsNoTopics="No Topics Found.";
var gsLoadingDivID="LoadingDiv";
var gsLoadingMsg="Loading data, please wait...";
var gsSearchMsg="Searching...";
var gsResultDivID="ResultDiv";
var gaaFCD=new Array();
var gaaFTCD=new Array();
var goCF=null;
var goCTF=null;
var gaTI=null;
var gnCurrentOp=0;
var gbNot=false;
var gbReady=false;
var gnLoadFts=1;
var gnCacheLimits=5;
var gaCCD=new Array();
var gbXML=false;
var gaData=new Array();
var gsBgColor="#ffffff";
var gsBgImage="";
var gsMargin="0pt";
var gsIndent="0pt";
var gsCheckKey=null;
var gnIndexNum=0;
var gaFtsContentsCon=null;
var gaTopicCheckInfo=null;
var gnTopicCheck=0;
var goFont=null;
var goErrFont=null;
var goHoverFont=null;
var gsABgColor="#cccccc";
var gbWhFHost=false;
function setBackground(sBgImage)
{
gsBgImage=sBgImage;
}
function setBackgroundcolor(sBgColor)
{
gsBgColor=sBgColor;
}
function setFont(sType,sFontName,sFontSize,sFontColor,sFontStyle,sFontWeight,sFontDecoration)
{
var vFont=new whFont(sFontName,sFontSize,sFontColor,sFontStyle,sFontWeight,sFontDecoration);
if(sType=="Normal")
goFont=vFont;
else if(sType=="Error")
goErrFont=vFont;
else if(sType=="Hover")
goHoverFont=vFont;
}
function setActiveBgColor(sBgColor)
{
gsABgColor=sBgColor;
}
function setMargin(sMargin)
{
gsMargin=sMargin;
}
function setIndent(sIndent)
{
gsIndent=sIndent;
}
function updateCache(oCF)
{
var len=gaCCD.length;
if(len<gnCacheLimits*gnCLF)
gaCCD[len]=oCF;
else{
gaCCD[0].aTopics=null;
gaCCD[0].aFtsKeys=null;
removeItemFromArray(gaCCD,0);
gaCCD[len-1]=oCF;
}
}
function addFtsInfo(sPPath,sDPath,sFtsFile)
{
gaData[gaData.length]=new ftsInfo(sPPath,sDPath,sFtsFile);
}
function putDataXML(xmlDoc,sDocPath)
{
if(gnLoadFts==1)
{
var node=xmlDoc.lastChild;
if(node)
{
var oChild=node.firstChild;
var aFCD=new Array();
var aFTCD=new Array();
while(oChild)
{
if(oChild.nodeName=="chunkinfo")
{
var sURL=oChild.getAttribute("url");
var sFirst=oChild.getAttribute("first");
var sLast=oChild.getAttribute("last");
if(sURL&&sFirst&&sLast)
{
item=new Object();
item.sStartKey=sFirst;
item.sEndKey=sLast;
item.sFileName=sURL;
aFCD[aFCD.length]=item;
}
}
else if(oChild.nodeName=="tchunkinfo")
{
var sURL=oChild.getAttribute("url");
var nB=parseInt(oChild.getAttribute("first"));
var nE=parseInt(oChild.getAttribute("last"));
if(sURL&&sFirst&&sLast)
{
item=new Object();
item.nBegin=nB;
item.nEnd=nE;
item.sFileName=sURL;
aFTCD[aFTCD.length]=item;
}
}
oChild=oChild.nextSibling;
}
ftsReady(aFCD,aFTCD);
}
}
else if(gnLoadFts==3)
{
var node=xmlDoc.lastChild;
if(node)
{
var oChild=node.firstChild;
var aTopics=new Array();
while(oChild)
{
if(oChild.nodeName=="topic")
{
var name=oChild.getAttribute("name");
var sURL=oChild.getAttribute("url");
if(name&&name.length>0&&sURL)
{
var topic=new Object();
topic.sTopicTitle=name;
topic.sTopicURL=sURL;
aTopics[aTopics.length]=topic;
}
}
oChild=oChild.nextSibling;
}
putFtsTData(aTopics);
}
}
else if(gnLoadFts==2)
{
var node=xmlDoc.lastChild;
if(node)
{
var oChild=node.firstChild;
var aFtsContents=new Array();
while(oChild)
{
if(oChild.nodeName=="key")
{
var name=oChild.getAttribute("name");
if(name&&name.length>0)
{
var item=new Object();
item.sItemName=name;
aFtsContents[aFtsContents.length]=item;
var oChildChild=oChild.firstChild;
while(oChildChild)
{
if(oChildChild.nodeName=="#text")
{
var sIDs=oChildChild.nodeValue;
if(sIDs)
{
var nBPos=0;
do
{
var nPos=sIDs.indexOf(",",nBPos);
var sID=null;
if(nPos!=-1)
sID=sIDs.substring(nBPos,nPos);
else
sID=sIDs.substring(nBPos);
if(sID)
{
var id=parseInt(sID);
if(!isNaN(id))
{
if(!item.aTopics)
item.aTopics=new Array();
item.aTopics[item.aTopics.length]=id;
}
}
nBPos=nPos+1;
}while(nBPos!=0&&nBPos<sIDs.length);
}
}
oChildChild=oChildChild.nextSibling;
}
}
}
oChild=oChild.nextSibling;
}
putFtsWData(aFtsContents);
}
}
}
function ftsInfo(sPPath,sDPath,sFtsFile)
{
this.sPPath=sPPath;
this.sDPath=sDPath;
this.sFtsFile=sFtsFile;
}
function window_OnLoad()
{
if(gsBgImage&&gsBgImage.length>0)
{
document.body.background=gsBgImage;
}
if(gsBgColor&&gsBgColor.length>0)
{
document.body.bgColor=gsBgColor;
}
writeResultDiv();
loadFts();
var oMsg=new whMessage(WH_MSG_SHOWFTS,this,1,null)
SendMessage(oMsg);
}
function writeResultDiv()
{
var sHTML="<div id=\""+gsResultDivID+"\" style=\"POSITION:absolute;\"></div>";
document.body.insertAdjacentHTML("beforeEnd",sHTML);
}
function loadFts()
{
if(!gbReady)
{
var oResMsg=new whMessage(WH_MSG_GETPROJINFO,this,1,null);
if(SendMessage(oResMsg)&&oResMsg.oParam)
{
gbReady=true;
var oProj=oResMsg.oParam;
var aProj=oProj.aProj;
gbXML=oProj.bXML;
if(aProj.length>0)
{
var sLangId=aProj[0].sLangId;
for(var i=0;i<aProj.length;i++)
{
if(aProj[i].sFts!=null&&aProj[i].sFts!=""&&aProj[i].sLangId==sLangId)
{
addFtsInfo(aProj[i].sPPath,aProj[i].sDPath,aProj[i].sFts);
}
}
}
loadFD();
}
}
}
function loadFD()
{
if(gnCLF<gaData.length)
{
gnLoadFts=1;
loadData2(gaData[gnCLF].sPPath+gaData[gnCLF].sDPath+gaData[gnCLF].sFtsFile);
}
else
{
var oMsg = new whMessage(WH_MSG_BACKUPSEARCH, this, 1, null);
if (SendMessage(oMsg))
{
if (oMsg.oParam)
{
gsSK=oMsg.oParam.toLowerCase();
findFTSKey();
}
}
RegisterListener2(this, WH_MSG_SEARCHFTSKEY);
}
}
function loadData2(sFile)
{
if(gbXML)
loadDataXML(sFile);
else
loadData(sFile);
}
function findFTSKey()
{
gaTI=new Array();
gnCurrentOp=0;
gbNot=false;
displayMsg(gsSearchMsg);
if(gsSK!="")
findOneKey();
}
function findOneKey()
{
if(gsSK && gsSK!="")
{
var sInput=gsSK;
var sCW="";
var nS=-1;
var nSep=-1;
for(var nChar=0;nChar<gsFtsBreakChars.length;nChar++){
var nFound=sInput.indexOf(gsFtsBreakChars.charAt(nChar));
if((nFound!=-1)&&((nS==-1)||(nFound<nS))){
nS=nFound;
nSep=nChar;
}
}
if(nS==-1){
sCW=sInput;
sInput="";
}else{
sCW=sInput.substring(0,nS);
sInput=sInput.substring(nS+1);
}
gsSK=sInput;
if((sCW=="or")||((nSep>=0)&&(gsFtsBreakChars.charAt(nSep)=="|"))){
gnCurrentOp=0;
gbNot=false;
}else if((sCW=="and")||((nSep>=0)&&(gsFtsBreakChars.charAt(nSep)=="&"))){
gnCurrentOp=1;
gbNot=false;
}else if((sCW=="not")||
((nSep>=0)&&(gsFtsBreakChars.charAt(nSep)=="~"))){
gbNot=!gbNot;
}else if(sCW!=""&&!IsStopWord(sCW,gaFtsStop)){
var sCurrentStem=GetStem(sCW);
gsCW=sCurrentStem;
ftsFindKeyword();
return;
}
findOneKey();
return;
}
else{
displayTopics();
checkAgain();
}
}
function checkAgain()
{
gsSK=gsSK2;
gsSK2=null;
if(gsSK!=null)
setTimeout("findFTSKey();",1);
}
function displayTopics()
{
var sHTML="";
var sLine="";
for(var i=0;i<gaTI.length;i++){
sLine+="<dt><nobr><a href='"+_textToHtml(gaTI[i].sTopicURL)+"'>"+_textToHtml(gaTI[i].sTopicTitle)+"</a></nobr></dt>";
if(i>>4<<4==i)
{
sHTML+=sLine;
sLine="";
}
}
if(sLine.length>0)
sHTML+=sLine;
if(sHTML.length==0)
sHTML="<P>"+gsNoTopics+"</P>"
else
sHTML="<dl>"+sHTML+"</dl>";
var resultDiv=getElement(gsResultDivID);
if(resultDiv)
resultDiv.innerHTML=sHTML;
}
function displayMsg(sErrorMsg)
{
var sHTML="<P>"+sErrorMsg+"</P>";
var resultDiv=getElement(gsResultDivID);
if(resultDiv)
resultDiv.innerHTML=sHTML;
}
function ftsFindKeyword()
{
var sKey=gsCW;
var bNeedLoad=false;
var aFtsContentsCon=null;
var s=0;
if(sKey==null) return;
if(!gsCheckKey||sKey!=gsCheckKey||gnIndexNum==0)
{
aFtsContentsCon=new Array();
gnCheck=0;
gsCheckKey=sKey;
gnTopicCheck=0;
gaTopicCheckInfo=null;
}
else{
s=gnIndexNum;
aFtsContentsCon=gaFtsContentsCon;
}
for(var i=gnCheck;i<gaaFCD.length;i++)
{
var oCF=getChunkedFts(i,sKey);
if(oCF)
{
if(!oCF.aFtsKeys&&oCF.sFileName!=null)
{
bNeedLoad=true;
oCF.nProjId=i;
goCF=oCF;
gnIndexNum=s;
gnCheck=i;
gaFtsContentsCon=aFtsContentsCon;
gnLoadFts=2;
beginLoading();
loadData2(gaData[i].sPPath+gaData[i].sDPath+oCF.sFileName);
break;
}
else{
aFtsContentsCon[s++]=oCF;
}
}
}
if(!bNeedLoad)
{
var aTI=gaTopicCheckInfo;
for(var m=gnTopicCheck;m<aFtsContentsCon.length;m++)
{
var aTIPart=getTopics(aFtsContentsCon[m],sKey);
if(aTIPart==null)
{
gnCheck=gaaFCD.length;
gnTopicCheck=m;
gaTopicCheckInfo=aTI;
gaFtsContentsCon=aFtsContentsCon;
return;
}
if(m==0)
aTI=aTIPart;
else
aTI=mergeTopics(aTI,aTIPart);
}
if(mergewithPreviousResult(aTI))
findOneKey();
else
checkAgain();
}
}
function mergewithPreviousResult(aTI)
{
if(aTI!=null&&aTI.length!=0)
{
var nNumTopics=aTI.length;
if(gnCurrentOp==0){
if(gbNot){
displayMsg(gsHelpCannotSearch);
return false;
}else{
var aLS,aSS;
if(gaTI.length>=aTI.length)
{
aLS=gaTI;
aSS=aTI;
}
else
{
aLS=aTI;
aSS=gaTI;
}
var s=0;
for(var i=0;i<aSS.length;i++)
{
var bAlreadyThere=false;
for(var j=s;j<aLS.length;j++)
{
if(aSS[i].equalTo(aLS[j]))
{
bAlreadyThere=true;
s=j;
break;
}
}
if(!bAlreadyThere)
{
insertTopic(aLS,aSS[i]);
}
}
gaTI=aLS;
}
}else if(gnCurrentOp==1){
if(gbNot){
var s=0;
for(var i=0;i<aTI.length;i++)
{
for(var j=s;j<gaTI.length;j++)
{
if(aTI[i].equalTo(gaTI[j]))
{
removeItemFromArray(gaTI,j);
s=j;
break;
}
}
}
}else{
var s=0;
for(var i=0;i<gaTI.length;i++)
{
var bFound=false;
for(var j=s;j<aTI.length;j++)
{
if(gaTI[i].equalTo(aTI[j]))
{
bFound=true;
s=j;
}
}
if(!bFound)
{
removeItemFromArray(gaTI,i);
i--;
}
}
}
}
}else{
if((gnCurrentOp==1)&&(!gbNot)){
gaTI.length=0;
}else if((gnCurrentOp==0)&&(gbNot)){
displayMsg(gsHelpCannotSearch);
return false;
}
}
return true;
}
function insertTopic(aTI,oTI)
{
var nB=0;
var nE=aTI.length-1;
if(nE>=0)
{
var nM;
var bFound=false;
do{
nM=(nB+nE)>>1;
if(compare(aTI[nM].sTopicTitle,oTI.sTopicTitle)>0)
nE=nM-1;
else if(compare(aTI[nM].sTopicTitle,oTI.sTopicTitle)<0)
nB=nM+1;
else
{
bFound=true;
break;
}
}while(nB<=nE);
if(bFound)
insertItemIntoArray(aTI,nM,oTI);
else
{
if(compare(aTI[nM].sTopicTitle,oTI.sTopicTitle)<0)
insertItemIntoArray(aTI,nM+1,oTI);
else
insertItemIntoArray(aTI,nM,oTI);
}
}
else
aTI[0]=oTI;
}
function mergeTopics(aTI1,aTI2)
{
var i1=0;
var i2=0;
var len1=aTI1.length;
var len2=aTI2.length;
var aTopicNew=new Array();
var i=0;
while(i1<len1||i2<len2)
{
if(i1<len1&&i2<len2)
{
if(compare(aTI1[i1].sTopicTitle,aTI2[i2].sTopicTitle)<0)
aTopicNew[i++]=aTI1[i1++];
else
aTopicNew[i++]=aTI2[i2++];
}
else if(i1<len1)
aTopicNew[i++]=aTI1[i1++];
else if(i2<len2)
aTopicNew[i++]=aTI2[i2++];
}
return aTopicNew;
}
function getTopics(oCF,sKey)
{
var aTIPart=new Array();
if(oCF&&oCF.aFtsKeys)
{
var keys=oCF.aFtsKeys;
var nB=0;
var nE=keys.length-1;
var nM=-1;
var bFound=false;
do{
nM=(nB+nE)>>1;
if(compare(keys[nM].sItemName,sKey)>0)
nE=nM-1;
else if(compare(keys[nM].sItemName,sKey)<0)
nB=nM+1;
else{
bFound=true;
break;
}
}while(nB<=nE);
if(bFound)
{
if(keys[nM].aTopics)
{
for(var i=0;i<keys[nM].aTopics.length;i++)
{
var oTC=getTopicChunk(gaaFTCD[oCF.nProjId],keys[nM].aTopics[i]);
if(oTC.aTopics)
{
aTIPart[aTIPart.length]=
new topicInfo(oTC.aTopics[keys[nM].aTopics[i]-oTC.nBegin].sTopicTitle,
gaData[oCF.nProjId].sPPath+oTC.aTopics[keys[nM].aTopics[i]-oTC.nBegin].sTopicURL);
}
else{
goCTF=oTC;
gnLoadFts=3;
beginLoading();
loadData2(gaData[oCF.nProjId].sPPath+gaData[oCF.nProjId].sDPath+oTC.sFileName);
return null;
}
}
}
}
}
return aTIPart;
}
function getTopicChunk(aFTCD,nTopicId)
{
if(aFTCD&&aFTCD.length)
{
var nB=0;
var nE=aFTCD.length-1;
var nM=-1;
var bFound=false;
do{
nM=(nB+nE)>>1;
if(aFTCD[nM].nBegin>nTopicId)
nE=nM-1;
else if(aFTCD[nM].nEnd<nTopicId)
nB=nM+1;
else{
bFound=true;
break;
}
}while(nB<=nE);
if(bFound)
return aFTCD[nM];
}
return null;
}
function endLoading()
{
var oDiv=getElement(gsLoadingDivID);
if(oDiv)
oDiv.style.visibility="hidden";
}
function beginLoading()
{
var oDiv=getElement(gsLoadingDivID);
if(!oDiv)
{
document.body.insertAdjacentHTML("afterBegin",writeLoadingDiv());
oDiv=getElement(gsLoadingDivID);
}
if(oDiv)
{
oDiv.style.top=document.body.scrollTop;
oDiv.style.visibility="visible";
}
}
function writeLoadingDiv(nIIdx)
{
return "<div id=\""+gsLoadingDivID+"\" style=\"position:absolute;top:0;left:0;z-index:600;visibility:hidden;padding-left:4px;background-color:ivory;border-width:1;border-style:solid;border-color:black;width:150px;\">"+gsLoadingMsg+"</div>";
}
function topicInfo(sTopicTitle,sTopicURL)
{
this.sTopicTitle=sTopicTitle;
this.sTopicURL=sTopicURL;
this.equalTo=function(oTI)
{
return ((this.sTopicTitle==oTI.sTopicTitle)&&
(this.sTopicURL==oTI.sTopicURL));
}
}
function getChunkedFts(nIndex,sKey)
{
var oCF=null;
if(nIndex<gaaFCD.length)
{
var len=gaaFCD[nIndex].length;
if(len>0)
{
var nB=0;
var nE=len-1;
var bFound=false;
do{
var nM=(nB+nE)>>1;
if(compare(sKey,gaaFCD[nIndex][nM].sEndKey)>0)
{
nB=nM+1;
}
else if(compare(sKey,gaaFCD[nIndex][nM].sStartKey)<0)
{
nE=nM-1;
}
else{
bFound=true;
break;
}
}while(nE>=nB);
if(bFound)
oCF=gaaFCD[nIndex][nM];
}
}
return oCF;
}
function ftsReady(aFCD,aFTCD)
{
endLoading();
gaaFTCD[gnCLF]=aFTCD;
gaaFCD[gnCLF++]=aFCD;
setTimeout("loadFD();",1);
}
function putFtsTData(aTopics)
{
endLoading();
var oCTF=goCTF;
if(oCTF)
{
oCTF.aTopics=aTopics;
setTimeout("ftsFindKeyword();",1);
}
}
function putFtsWData(aFtsContents)
{
endLoading();
var oCF=goCF;
if(oCF)
{
updateCache(oCF);
oCF.aFtsKeys=aFtsContents;
setTimeout("ftsFindKeyword();",1);
}
}
function IsStopWord(sCW,aFtsStopArray)
{
var nStopArrayLen=aFtsStopArray.length;
var nB=0;
var nE=nStopArrayLen-1;
var nM=0;
var bFound=false;
var sStopWord="";
while(nB<=nE){
nM=(nB+nE);
nM>>=1;
sStopWord=aFtsStopArray[nM];
if(compare(sCW,sStopWord)>0){
nB=(nB==nM)?nM+1:nM;
}else{
if(compare(sCW,sStopWord)<0){
nE=(nE==nM)?nM-1:nM;
}else{
bFound=true;
break;
}
}
}
return bFound;
}
function GetStem(szWord)
{
if(gaFtsStem==null||gaFtsStem.length==0)return szWord;
var aStems=gaFtsStem;
var nStemPos=0;
var csStem="";
for(var iStem=0;iStem<aStems.length;iStem++){
if(aStems[iStem].length>=szWord.length-1) break;
nStemPos=szWord.lastIndexOf(aStems[iStem]);
if(nStemPos>0){
var cssub=szWord.substring(nStemPos);
if(cssub==aStems[iStem]){
csStem=szWord;
if(szWord.charAt(nStemPos-2)==szWord.charAt(nStemPos-1)){
csStem=csStem.substring(0,nStemPos-1);
}else{
csStem=csStem.substring(0,nStemPos);
}
return csStem;
}
}
}
return szWord;
}
function FtsWriteClassStyle()
{
var sStyle="<STYLE TYPE='text/css'>\n";
if (gsBgImage)
sStyle+="body {border-top:"+gsBgColor+" 1px solid;}\n";
else
sStyle+="body {border-top:black 1px solid;}\n";
sStyle+="P {"+getFontStyle(goErrFont)+"margin-left:"+gsIndent+";margin-top:"+gsMargin+";}\n";
sStyle+="dl {"+getFontStyle(goFont)+"margin-left:"+gsIndent+";margin-top:"+gsMargin+";}\n";
sStyle+="A:link {"+getFontStyle(goFont)+"}\n";
sStyle+="A:visited {"+getFontStyle(goFont)+"}\n";
sStyle+="A:active {background-color:"+gsABgColor+";}\n";
sStyle+="A:hover {"+getFontStyle(goHoverFont)+"}\n";
sStyle+="</STYLE>";
document.write(sStyle);
}
function window_Unload()
{
UnRegisterListener2(this,WH_MSG_PROJECTREADY);
UnRegisterListener2(this, WH_MSG_SEARCHFTSKEY);
}
function onSendMessage(oMsg)
{
var nMsgId=oMsg.nMessageId;
if(nMsgId==WH_MSG_SEARCHFTSKEY)
{
if(oMsg.oParam)
{
if(gsSK==null||gsSK=="")
{
gsSK=oMsg.oParam.toLowerCase();
findFTSKey();
}
else
gsSK2=oMsg.oParam.toLowerCase();
}
}
else if(nMsgId==WH_MSG_PROJECTREADY)
{
loadFts();
}
return true;
}
if (window.gbWhUtil&&window.gbWhLang&&window.gbWhProxy&&window.gbWhVer&&window.gbWhMsg)
{
goFont=new whFont("Verdana","8pt","#000000","normal","normal","none");
goErrFont=new whFont("Verdana","8pt","#000000","normal","bold","none");
goHoverFont=new whFont("Verdana","8pt","#007f00","normal","normal","underline");
window.onload=window_OnLoad;
window.onbeforeunload=window_BUnload;
window.onunload=window_Unload;
RegisterListener2(this,WH_MSG_PROJECTREADY);
gbWhFHost=true;
}
else
document.location.reload();