📄 whthost.js
字号:
var sPath=getPath(whichIm.src);
sPath=_getFullPath(sPath,getBookImage(nId,true));
whichIm.src=sPath;
}
if(gbMac&&gbIE5){
this.parent.document.getElementById("tocIFrame").style.width="101%";
this.parent.document.getElementById("tocIFrame").style.width="100%";
}
}
return oDiv;
}
function getChunkId(n)
{
var nCan=-1;
for(var i=0;i<gaTocs.length;i++)
if(gaTocs[i].nMI<=n&&gaTocs[i].nMI!=-1)
{
if(nCan==-1)
nCan=i;
else
if(gaTocs[i].nMI>=gaTocs[nCan].nMI)
nCan=i;
}
if(nCan!=-1)
return nCan;
else
return -1;
}
function getChunk(n)
{
if(gnCC!=-1&&gaTocs[gnCC].nMI<=n&&(gnCC==gaTocs.length-1||
gaTocs[gnCC+1].nMI>n))
{
return gaTocs[gnCC];
}
else{
gnCC=getChunkId(n);
if(gnCC!=-1)
return gaTocs[gnCC];
else
return null;
}
}
function getBookImage(nIdx,bClosed)
{
var nIdx=bClosed?0:1;
var sIcon=getItemIcon(nIdx,nIdx);
if(sIcon=="")
if(bClosed)
sIcon=giBookClose;
else
sIcon=giBookOpen;
return _getFullPath(gaProj[0].sPPath,sIcon);
}
function getItemImage(nIdx,bRemote)
{
var sIcon=getItemIcon(nIdx,0);
if(sIcon=="")
if(bRemote)
sIcon=giURLItem;
else
sIcon=giBookItem;
return _getFullPath(gaProj[0].sPPath,sIcon);
}
function getInnerText2(obj)
{
var sText=getInnerText(obj);
if(sText.length>0&&!gbOpera7)
sText=sText.substring(1);
return sText;
}
function expandToc(oObj,sRest,aIdList)
{
var len=aIdList.length;
var nPos=sRest.indexOf(gsPathSplit);
if(nPos!=-1)
{
sPart=sRest.substring(0,nPos);
sRest=sRest.substring(nPos+1);
}
else
{
sPart=sRest;
var aTagAs=getItemsByBook(oObj);
for(var s=0;s<aTagAs.length;s++)
{
var sText=getInnerText2(aTagAs[s]);
if(sText==sPart)
{
aIdList[len]=aTagAs[s];
return 1;
}
}
return 0;
}
var aChildren=getChildrenByTag(oObj,"DIV");
for(var i=0;i<aChildren.length;i++)
{
var sPId=aChildren[i].id;
if(!isPBId(sPId))
continue;
var sText=getInnerText2(aChildren[i]);
if(sText!=sPart)
continue;
aIdList[len]=getIdByPBId(sPId);
var sCId=getCBId(aIdList[len]);
var oCObj=getElement(sCId);
if(oCObj)
{
if(oCObj.innerHTML=="")
{
var obj=getItemsByBook(aChildren[i]);
if(obj.length>0)
{
if(gbNav6)
{
var sCommand=obj[0].getAttribute("onClick");
var nCommand=sCommand.indexOf(";");
sCommand=sCommand.substring(0,nCommand);
setTimeout(sCommand,1);
}
else
obj[0].click();
}
return -1;
}
var nRet=expandToc(oCObj,sRest,aIdList);
if(nRet)
return nRet;
}
}
aIdList.length=len;
return 0;
}
function getIdByPBId(sPId)
{
return parseInt(sPId.substring(2,sPId.length-1));
}
function getIdByCBId(sCId)
{
return parseInt(sCId.substring(2,sCId.length-1));
}
function isPBId(sId)
{
return (sId&&sId.indexOf("B_")==0&&sId.lastIndexOf("P")==sId.length-1);
}
function isCBId(sId)
{
return (sId&&sId.indexOf("B_")==0&&sId.lastIndexOf("C")==sId.length-1);
}
function getBId(nIdx)
{
return "B_"+nIdx;
}
function getPBId(nIdx)
{
return getBId(nIdx)+"P";
}
function getCBId(nIdx)
{
return getBId(nIdx)+"C";
}
function getClosestTocPath(aPaths)
{
var nMaxSimilarity=0;
var nThatIndex=-1;
var sPath=null;
if(aPaths.length==0) return sPath;
for(var i=0;i<aPaths.length;i++)
{
var nSimilarity=comparePath(gsCTPath,aPaths[i]);
if(nSimilarity>nMaxSimilarity)
{
nMaxSimilarity=nSimilarity;
nThatIndex=i;
}
}
if(nThatIndex!=-1)
sPath=aPaths[nThatIndex];
else
sPath=aPaths[0];
return sPath;
}
function comparePath(sPath1,sPath2)
{
var nMaxSimilarity=0;
var nStartPos1=0;
var nPos1=-1;
var nStartPos2=0;
var nPos2=-1;
do{
var sCheck1=null;
var sCheck2=null;
nPos1=sPath1.indexOf(gsPathSplit,nStartPos1);
if(nPos1!=-1)
{
sCheck1=sPath1.substring(nStartPos1,nPos1);
nStartPos1=nPos1+1;
}
else
{
sCheck1=sPath1.substring(nStartPos1);
nStartPos1=-1;
}
nPos2=sPath2.indexOf(gsPathSplit,nStartPos2);
if(nPos1!=-1)
{
sCheck2=sPath2.substring(nStartPos2,nPos2);
nStartPos2=nPos2+1;
}
else
{
sCheck2=sPath2.substring(nStartPos2);
nStartPos2=-1;
}
if(sCheck1==sCheck2)
nMaxSimilarity++;
else
break;
}while(nStartPos1!=-1&&nStartPos2!=-1);
return nMaxSimilarity;
}
function getTocPaths(oTopicParam)
{
var aRelTocPaths=oTopicParam.aPaths;
var aPaths=new Array();
for(var i=0;i<gaProj.length;i++)
if(isSamePath(gaProj[i].sPPath,oTopicParam.sPPath))
{
for(var j=0;j<aRelTocPaths.length;j++)
for (var k=0;k<gaRoot[i].aRPath.length;k++)
{
var sPath=gaRoot[i].aRPath[k]+aRelTocPaths[j];
aPaths[aPaths.length]=sPath.substring(1);
}
break;
}
return aPaths;
}
function syncInit()
{
if(gsTP&&!gbNeedFillStub)
{
gInSync=true;
var obj=document.body;
var aIdList=new Array();
var nRet=expandToc(obj,gsTP,aIdList);
if(nRet!=-1)
{
if(nRet==1)
{
if(aIdList.length)
for(var i=0;i<aIdList.length-1;i++)
ExpandIt2(aIdList[i],true);
gsCTPath=gsTP;
if(!gbIE55)
aIdList[aIdList.length-1].focus();
else
HighLightElement(aIdList[aIdList.length-1],gsABgColor,"transparent");
}
var aPaths=gaBTPs;
gsTP=null;
gaBTPs=null;
if(aPaths!=null)
{
var sPath=getClosestTocPath(aPaths);
if(sPath!=null)
{
gsTP=sPath;
setTimeout("syncInit()",1);
}
}
}
gInSync=false;
}
}
function loadToc()
{
if(!gbLoadToc)
{
var oResMsg=new whMessage(WH_MSG_GETPROJINFO,this,1,null);
if(SendMessage(oResMsg)&&oResMsg.oParam)
{
gbLoadToc=true;
var oProj=oResMsg.oParam;
gaProj=oProj.aProj;
gbXML=oProj.bXML;
load1B1();
}
}
}
function load1B1()
{
if(gnLT+1<gaProj.length)
for(var i=gnLT+1;i<gaProj.length;i++)
if(gaProj[i].sToc)
{
gbToc=true;
gnLT=i;
setTimeout("loadTocInfo()",1);
return true;
}
return false;
}
function loadTocInfo()
{
loadData2(gaProj[gnLT].sPPath+gaProj[gnLT].sDPath+gaProj[gnLT].sToc);
}
function loadData2(sFile)
{
if(gbXML)
loadDataXML(sFile);
else
loadData(sFile);
}
function projReady(sRoot,aProj)
{
if(gaRoot.length<=gnLT||!gaRoot[gnLT])
gaRoot[gnLT]=new Object();
gaRoot[gnLT].sToc=sRoot;
if(gnLT==0)
{
gaRoot[gnLT].aRPath=new Array();
gaRoot[gnLT].aRPath[0]=gsPathSplit;
}
updatePTPath(gnLT,aProj);
if(!((gnLT+1<gaProj.length)&&load1B1()))
{
gbReady=true;
if(gbIE4)
setTimeout("loadImages();",1);
else
setTimeout("loadTData();",1);
}
}
function loadTData()
{
if(gaProj[0].sToc!="")
{
gbLData=true;
goChunk=addTocChunk(gaProj[0].sPPath,gaProj[0].sDPath);
gbToc=false;
loadData2(gaProj[0].sPPath+gaProj[0].sDPath+gaRoot[0].sToc);
}
}
function updatePTPath(n,aProj)
{
if(aProj)
for(var i=0;i<aProj.length;i++)
{
var sFullPath=_getFullPath(gaProj[n].sPPath,aProj[i].sPPath);
for(var j=0;j<gaProj.length;j++)
if(isSamePath(sFullPath,gaProj[j].sPPath))
{
if(gaRoot.length<=j||!gaRoot[j])
gaRoot[j]=new Object();
if(!gaRoot[j].aRPath)
gaRoot[j].aRPath=new Array();
if(gaRoot[n].aRPath)
for(var k=0;k<gaRoot[n].aRPath.length;k++)
{
var bDup=false;
var sTFPath=gaRoot[n].aRPath[k]+aProj[i].sRPath;
for(var l=0;l<gaRoot[j].aRPath.length;l++)
if(gaRoot[j].aRPath[l]==sTFPath)
{
bDup=true;
break;
}
if(!bDup)
gaRoot[j].aRPath[gaRoot[j].aRPath.length]=sTFPath;
}
else
gaRoot[j].aRPath[gaRoot[j].aRPath.length]=aProj[i].sRPath;
break;
}
}
}
function onLoadXMLError()
{
if(gbToc)
{
var sRoot="";
var aRProj=new Array();
projReady(sRoot,aRProj);
}
else
{
var aToc=new Array();
putData(aToc)
}
}
function putDataXML(xmlDoc,sDocPath)
{
if(gbToc)
{
var tocNode=xmlDoc.getElementsByTagName("toc")[0];
if(tocNode)
{
var sRoot=tocNode.getAttribute("root");
var rmtProject=tocNode.getElementsByTagName("project");
var aRProj=new Array();
if(rmtProject.length>0)
{
for(var i=0;i<rmtProject.length;i++)
{
aRProj[i]=new Object();
var sURL=rmtProject[i].getAttribute("url");
if(sURL)
{
if(sURL.lastIndexOf("/")!=sURL.length-1)
sURL+="/";
}
aRProj[i].sPPath=sURL;
aRProj[i].sRPath = "";
var oSubPath = rmtProject[i].getElementsByTagName("subpath")[0];
if (oSubPath)
{
while (oSubPath)
{
aRProj[i].sRPath += oSubPath.getAttribute("name") + "\n";
oSubPath = oSubPath.getElementsByTagName("subpath")[0];
}
}
else
aRProj[i].sRPath=rmtProject[i].getAttribute("path");
}
}
projReady(sRoot,aRProj);
}
}
else
{
var chunkNode=xmlDoc.getElementsByTagName("tocdata")[0];
if(chunkNode)
{
var aToc=new Array();
processBook(chunkNode,aToc);
putData(aToc);
}
}
}
function processBook(node,aToc)
{
var i=0;
var entry=null;
var prevEntry=null;
var oChild=node.firstChild;
do{
if(oChild)
{
if(oChild.nodeName.indexOf("#")!=0)
{
var sName=oChild.getAttribute("name");
var sURL=oChild.getAttribute("url");
var sRef=oChild.getAttribute("ref");
var sTarget=oChild.getAttribute("target");
var sIcons=oChild.getAttribute("images");
var item=new Object();
item.sItemName=sName;
if(sTarget)
item.sTarget=sTarget;
if(sIcons)
item.sIconRef=sIcons;
if(sURL==null) sURL="";
item.sItemURL=sURL;
if(oChild.nodeName=="book")
{
item.nType=1;
aToc[aToc.length]=item;
var nCurrPos=aToc.length;
processBook(oChild,aToc);
item.nContents=aToc.length-nCurrPos;
}
else if(oChild.nodeName=="item")
{
item.nType=2;
item.nContents=0;
aToc[aToc.length]=item;
}
else if(oChild.nodeName=="remoteitem")
{
item.nType=16;
item.nContents=0;
aToc[aToc.length]=item;
}
else if(oChild.nodeName=="project")
{
if(sRef)
{
if(sRef.lastIndexOf("/")!=sRef.length-1)
sRef+="/";
}
item.nType=4;
item.sRefURL=sRef;
item.nContents=0;
aToc[aToc.length]=item;
}
else if(oChild.nodeName=="chunk")
{
item.nType=8;
item.sRefURL=sRef;
item.nContents=0;
aToc[aToc.length]=item;
}
}
}
else
break;
oChild=oChild.nextSibling;
}while(true);
}
function putData(aTocs)
{
gaTocsNs61Fix=aTocs;
setTimeout("realPutData();",1);
}
function realPutData()
{
removeLoadingDiv();
var aTocs=gaTocsNs61Fix;
if(!aTocs) return;
if(goChunk)
{
var n=gnMinIdx;
goChunk.nMI=gnMinIdx;
goChunk.aTocs=aTocs;
gnMinIdx+=aTocs.length;
if(gnInsIdx!=-1)
{
var oObj=getElement(getPBId(gnInsIdx));
if(oObj)
{
oObj.insertAdjacentHTML("afterEnd",writeBookItems(n-1,aTocs.length));
setTimeout("syncInit()",1);
}
}
else{
document.body.insertAdjacentHTML("beforeEnd",writeBookItems(n-1,aTocs.length));
var oParam=new Object();
oParam.oTocInfo=null;
var oMsg=new whMessage(WH_MSG_GETTOCPATHS,this,1,oParam);
if(SendMessage(oMsg))
{
if(oMsg.oParam.oTocInfo)
syncWithPaths(oMsg.oParam.oTocInfo);
}
}
}
gbLData=false;
checkFillStub();
}
function syncWithPaths(oTopicParam)
{
var aPaths=getTocPaths(oTopicParam);
if(gsTP)
gaBTPs=aPaths;
else{
var sPath=getClosestTocPath(aPaths);
if(sPath!=null)
{
gsTP=sPath;
setTimeout("syncInit()",1);
}
}
}
function window_OnLoad()
{
if(gsBgImage&&gsBgImage.length>0)
{
document.body.background=gsBgImage;
}
if(gsBgColor&&gsBgColor.length>0)
{
document.body.bgColor=gsBgColor;
}
loadToc();
var oMsg=new whMessage(WH_MSG_SHOWTOC,this,1,null)
SendMessage(oMsg);
}
function loadImages()
{
if(giBookClose)
{
gaImgs[gnImages]=giBookClose;
gnImages++;
}
if(giBookOpen)
{
gaImgs[gnImages]=giBookOpen;
gnImages++;
}
if(giBookItem)
{
gaImgs[gnImages]=giBookItem;
gnImages++;
}
if(giURLItem)
{
gaImgs[gnImages]=giURLItem;
gnImages++;
}
if(giNewBookClose)
{
gaImgs[gnImages]=giNewBookClose;
gnImages++;
}
if(giNewBookOpen)
{
gaImgs[gnImages]=giNewBookOpen;
gnImages++;
}
if(giNewBookItem)
{
gaImgs[gnImages]=giNewBookItem;
gnImages++;
}
if(giNewURLItem)
{
gaImgs[gnImages]=giNewURLItem;
gnImages++;
}
if(gnImages>0)
{
setTimeout("loadDataAfter();",1000);
loadImage(gaImgs[0]);
}
else
loadDataAfter();
}
function loadImage(sURL)
{
var oImg=new Image();
oImg.onload=checkImageLoading;
oImg.onerror=errorImageLoading;
oImg.src=_getFullPath(gaProj[0].sPPath,sURL);
}
function loadDataAfter()
{
if(!gbLoadData)
{
gbLoadData=true;
loadTData();
}
}
function errorImageLoading()
{
gnLoadedImages++;
if(gnImages==gnLoadedImages)
loadDataAfter();
else
loadImage(gaImgs[gnLoadedImages]);
}
function checkImageLoading()
{
gnLoadedImages++;
if(gnImages==gnLoadedImages)
loadDataAfter();
else
loadImage(gaImgs[gnLoadedImages]);
}
function window_unload()
{
UnRegisterListener2(this,WH_MSG_PROJECTREADY);
UnRegisterListener2(this,WH_MSG_SYNCTOC);
UnRegisterListener2(this,WH_MSG_SHOWTOC);
}
function onSendMessage(oMsg)
{
if(oMsg)
{
var nMsgId=oMsg.nMessageId;
if(nMsgId==WH_MSG_PROJECTREADY)
{
loadToc();
}
else if(nMsgId==WH_MSG_SYNCTOC)
{
if(gbReady)
{
syncWithPaths(oMsg.oParam);
}
}
else if(nMsgId==WH_MSG_SHOWTOC)
{
if(!gbNav6)
document.body.focus();
}
}
return true;
}
if(window.gbWhUtil&&window.gbWhVer&&window.gbWhMsg&&window.gbWhProxy)
{
RegisterListener2(this,WH_MSG_PROJECTREADY);
RegisterListener2(this,WH_MSG_SYNCTOC);
RegisterListener2(this,WH_MSG_SHOWTOC);
goFont=new whFont("Verdana","8pt","#000000","normal","normal","none");
goHFont=new whFont("Verdana","8pt","#007f00","normal","normal","underline");
window.onload=window_OnLoad;
window.onbeforeunload=window_BUnload;
window.onunload=window_unload;
gbWhTHost=true;
}
else
document.location.reload();
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -