⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 whhost.js

📁 阅读您的文件包然后写出其具体功能(至少要20个字)。尽量不要让站长把时间都花费在为您修正说明上。压缩包解压时不能有密码
💻 JS
📖 第 1 页 / 共 2 页
字号:
//	WebHelp 5.10.002
var gaChunks=new Array();
var gaFakes=new Array();
var gaDataCon=null;
var gaData=new Array();

var gbFindCK=false;;
var gbNeedCalc=false;
var gbScrl=false;
var gbProcess=false;
var gbReady=false;

var gnCheck=0;
var gnNum=0;
var gnIns=-1;
var gnLoad=0;
var gnRef=-1;
var gnMaxItems=0;
var gnMaxMargin=32000;
var gnNeeded=0;
var gnNKI=-1;
var gnRE=0;
var gnScrlMgn=30;
var gnSE=0;
var gnVisible=0;
var gnItems=0;
var gnUHeight=1;

var gsBCK=null;
var gsChK=null;
var gsCK=null;
var gsLoadingDivID="LoadingDiv";
var gsLoadingMsg="Loading data, please wait...";
var gsSKA=null;
var gsSKB=null;

var gbLoadInfo=false;

function onLoadXMLError()
{
	if(gbLoadInfo)
	{
		var aChunk=new Array();
		projReady(aChunk);
	}
	else
	{
		var aData=new Array();
		putData(aData);
	}
}

function putDataXML(xmlDoc,sDocPath)
{
	if(gbLoadInfo)
	{
		var node=xmlDoc.lastChild;
		if(node)
		{
			var nTotal=0
			var aChunk=new Array();
			var oC=node.firstChild;
			while(oC)
			{
				if(oC.nodeName=="chunkinfo")
				{
					var item=new Object();
					item.sBK=oC.getAttribute("first");
					item.sEK=oC.getAttribute("last");
					item.sFileName=oC.getAttribute("url");
					item.nNum=parseInt(oC.getAttribute("num"));
					nTotal+=item.nNum;
					item.nTotal=nTotal;
					aChunk[aChunk.length]=item;
				}
				oC=oC.nextSibling;
			}
			projReady(aChunk);
		}
	}
	else
	{
		var node=xmlDoc.lastChild;
		if(node)
		{
			var aData=new Array();
			var nPrev=0;
			var nNext=0;
			var oC=node.firstChild;
			while(oC)
			{
				nPrev=nNext;
				if(oC.nodeName=="key")
				{
					var sName=oC.getAttribute("name");
					if(sName&&sName.length>0)
					{
						var sTarget=oC.getAttribute("target");
						var item=new Object();
						item.nType=2;
						item.sName=sName;
						if(sTarget)
							item.sTarget=sTarget;
						item.nPKOff=nPrev;
						aData[aData.length]=item;
						var nCurIndex=aData.length;
						processKey(oC,aData,item);
						nNext=aData.length-nCurIndex;
						item.nNKOff=nNext;
					}
				}
				else if(oC.nodeName=="letter")
				{
					var name=oC.getAttribute("name");
					if(name&&name.length>0)
					{
						var item=new Object();
						item.nType=1;
						item.sName=name;
						item.nPKOff=nPrev;
						nNext=0;
						item.nNKOff=nNext;
						aData[aData.length]=item;
					}
				}
				else if(oC.nodeName=="entry")
				{
					var name=oC.getAttribute("name");
					var def=oC.getAttribute("value");
					if(name&&name.length>0)
					{
						var item=new Object();
						item.sName=name;
						item.sDef=def;
						item.nPKOff=nPrev;
						nNext=0;
						item.nNKOff=nNext;
						aData[aData.length]=item;
					}
				}
				oC=oC.nextSibling;
			}
			putData(aData);
		}
	}
}

function processKey(element,aData,item)
{
	var i=0;
	var nPrev=0;
	var nNext=0;
	var oC=element.firstChild;
	while(oC)
	{
		if(oC.nodeName=="topic")
		{
			var name=oC.getAttribute("name");
			var url=oC.getAttribute("url");
			if(url&&url.length!=0)
			{
				if(!name||name.length==0)
					name=url;
				var topic=new Object();
				topic.sName=name;
				topic.sURL=url;
				if(!item.aTopics)
					item.aTopics=new Array();
				item.aTopics[item.aTopics.length]=topic;
			}
		}
		else if(oC.nodeName=="key")
		{
			nPrev=nNext;
			var name=oC.getAttribute("name");
			if(name&&name.length!=0)
			{
				var subItem=new Object();
				subItem.sName=name;
				subItem.nType=3;
				subItem.nPKOff=nPrev;
				aData[aData.length]=subItem;
				var nCurIndex=aData.length;
				processKey(oC,aData,subItem);
				nNext=aData.length-nCurIndex;
				subItem.nNKOff=nNext;
			}
		}
		oC=oC.nextSibling;
	}
}

function putData(aData)
{
	endLoading();
	var oCData=goCData;
	if(oCData)
	{
		oCData.aKs=aData;
		if(gnNKI==-1)
			setTimeout("checkReady();",1);
		else
		{
			gsSKA=getKByIdx(oCData,gnNKI);
			gbNeedCalc=true;
			gbScrl=true;
			gnNKI=-1;
			if(gsSKA)
				setTimeout("checkReady();",1);
			else
			{
				markEnd();
				setTimeout("checkAgain();",50);
			}
		}
	}
}

function markEnd()
{
	if(gbProcess)
		gbProcess=false;
}

function endLoading()
{
	var oDiv=getElement(gsLoadingDivID);
	if(oDiv)
		oDiv.style.visibility="hidden";
}

function markBegin()
{
	gbProcess=true;
}

function beginLoading()
{
	var oDiv=getElement(gsLoadingDivID);
	if(oDiv)
	{
		oDiv.style.top=document.body.scrollTop;
		oDiv.style.visibility="visible";
	}
}

function indexHTMLPart()
{
	this.sHTML="";
	this.nNeeded=0;
	this.nCurrent=0;
	this.nConsumed=0;
	this.sFK=null;
	this.sLK=null;
	this.addHTML=function(sHTML,nConsumed,bDown,bK,sK){
		if(bDown)
			this.sHTML+=sHTML;
		else
			this.sHTML=sHTML+this.sHTML;
		this.nCurrent++;			
		this.nConsumed+=nConsumed;
		if(bK)
		{
			if(!this.sFK)
				this.sFK=sK;
			if(!this.sLK)
				this.sLK=sK;
			if(bDown)
				this.sLK=sK;
			else
				this.sFK=sK;
		}
	}
	this.appendHTML=function(oHTML,bDown){
		this.addSubHTML(oHTML,bDown);
		if(!this.sFK)
			this.sFK=oHTML.sFK;
		if(!this.sLK)
			this.sLK=oHTML.sLK;
		if(bDown)
			this.sLK=oHTML.sLK;
		else
			this.sFK=oHTML.sFK;
	}	
	
	this.addSubHTML=function(oHTML,bDown){
		if(bDown)
			this.sHTML+=oHTML.sHTML;
		else
			this.sHTML=oHTML.sHTML+this.sHTML;
		this.nCurrent+=oHTML.nCurrent;
		this.nConsumed+=oHTML.nConsumed;			
	}
}

function getMaxUnits()
{
	return Math.floor(gnMaxMargin/gnUHeight)+1;
}

function getFakeItemsHTMLbyCount(nB,nCount)
{
	var nMU=getMaxUnits();
	var nNum=Math.floor(nCount/nMU);
	var sHTML="";
	for(var i=0;i<nNum;i++)
		sHTML+=getFakeItemHTML(nB,nMU-1);
		
	var nRest=nCount%nMU;
	sHTML+=getFakeItemHTML(nB,nRest-1);
	return sHTML;
}

function getFakeItemHTML(nB,nNum)
{
	return "<h6 name=fk"+nB+" id=fk"+nB+" style=\"margin-top:"+gnUHeight*nNum+";margin-bottom:0\">&nbsp;</h6>";
}

function fakeItemsArea(nB,n,sKA,sKB,obj)
{
	this.nB=nB;
	this.nNum=n;
	this.sKA=sKA;
	this.sKB=sKB;
	this.obj=obj;
	this.nMargin=(n-1)*gnUHeight;

	this.setNum=function(n)
	{
		var nLastobj=-1;
		var nDelta=this.nMargin;
		this.nMargin=(n-1)*gnUHeight;
		nDelta=nDelta-this.nMargin;
		if(n>0)
		{
			this.nNum=n;
			var nMU=getMaxUnits();
			nLastobj=Math.floor((n-1)/nMU);
			if(this.obj.length)
				this.obj[nLastobj].style.marginTop=((n-1)%nMU)*gnUHeight;
			else
				this.obj.style.marginTop=((n-1)%nMU)*gnUHeight;
		}
		if(this.obj.length)
		{
			for(var i=this.obj.length-1;i>nLastobj;i--)
				removeThis(this.obj[i]);
		}
		else
		{
			if(nLastobj==-1)
				removeThis(this.obj);
		}
		return nDelta;
	}
	this.insertAdjacentHTML=function(sWhere,sHTML)
	{
		if(sWhere=="beforeBegin")
		{
			if(this.obj.length)
				this.obj[0].insertAdjacentHTML(sWhere,sHTML);
			else
				this.obj.insertAdjacentHTML(sWhere,sHTML);
		}
		else if(sWhere=="afterEnd")
		{
			if(this.obj.length)
			{
				if(gbMac&&gbIE5&&this.obj[this.obj.length-1].nextSibling)
					this.obj[this.obj.length-1].nextSibling.insertAdjacentHTML("beforeBegin",sHTML);
				else
					this.obj[this.obj.length-1].insertAdjacentHTML(sWhere,sHTML);
			}
			else
			{
				if(gbMac&&gbIE5&&this.obj.nextSibling)
					this.obj.nextSibling.insertAdjacentHTML("beforeBegin",sHTML);
				else
					this.obj.insertAdjacentHTML(sWhere,sHTML);
			}
		}
	}
	this.getBtm=function()
	{
	if(gbSafari3)
	{
		if(this.obj.length)
			return findPosition(this.obj[this.obj.length-1]);
		else
			return findPosition(this.obj);
	}
		if(this.obj.length)
			return this.obj[this.obj.length-1].offsetTop;
		else
			return this.obj.offsetTop;
	}
	this.getTop=function()
	{
		return this.getBtm()-this.nMargin;
	}
}

function usedItems(nB,nE)
{
	this.nB=nB;
	this.nE=nE;
	this.oN=null;
}

function checkReady()
{
	var len=gaChunks.length;
	var bNeedLoad=false;
	var aDataCon;
	var s=0;
	var bDown=(gsSKB==null);
	var sK=bDown?gsSKA:gsSKB;
	if(sK==null)
	{
		markEnd();
		setTimeout("checkAgain();",50);
		return;
	}
	if(!gsChK||sK!=gsChK||gnNum==0)
	{
		gnCheck=0;
		gsChK=sK;
		aDataCon=new Array();
	}
	else{
		s=gnNum;
		aDataCon=gaDataCon;
	}
	for(var i=gnCheck;i<len;i++)
	{
		var oCData=getChunkedData(i,bDown,sK);
		if(oCData)
		{
			if(!oCData.aKs&&oCData.sFileName!=null)
			{
				bNeedLoad=true;
				goCData=oCData;
				gnNum=s;
				gnCheck=i;
				gaDataCon=aDataCon;
				oCData.nProjId=i;
				gbLoadInfo=false;
				beginLoading();
				loadData2(gaData[i].sPPath+gaData[i].sDPath+oCData.sFileName);
				return;
			}
			else{
				aDataCon[s++]=oCData;
			}
		}
	}
	if(!bNeedLoad)
	{
		gnNum=0;
		gsSKA=gsSKB=gsShowK=null;
		
		var oHTML=new indexHTMLPart();
		var aPos=new Array();
		var aOriPos=new Array();
		var aMaxPos=new Array();
		var aMinPos=new Array();
		
		if(gbNeedCalc||gbFindCK) gnIns=0;
		for(i=0;i<aDataCon.length;i++)
		{
			aPos[i]=getIdxPos(aDataCon[i],bDown,sK);
			if(gbNeedCalc||gbFindCK)
			{
				gnIns+=aPos[i]+aDataCon[i].nTotal-aDataCon[i].nNum;
				if(!bDown)
				{
					if(aPos[i]!=-1)
					{
						if(aDataCon[i].aKs)
							gnIns+=aDataCon[i].aKs[aPos[i]].nNKOff;
						else
						{
							var n=aPos[i]+1;
							while(n<aDataCon[i].aKsOnly.length&&!aDataCon[i].aKsOnly[n])
								n++;
							n=n-aPos[i]-1;
							gnIns+=n;
						}
					}
				}
			}
			aOriPos[i]=aPos[i];
			getLimit(aDataCon,aPos,aMaxPos,aMinPos,i);
		}
		if((gbNeedCalc||gbFindCK)&&!bDown&&gnIns!=-1)
		{
			gnIns+=(aDataCon.length-1)
		}
		if(gnIns!=-1||gbFindCK)
		{
			oHTML.nNeeded=gnNeeded;
			var bDone=writeItems(oHTML,aDataCon,aPos,aMinPos,aMaxPos,bDown,1);
			if(oHTML.nConsumed!=0)
			{
				var nB;
				if(!bDown)
					nB=gnIns-oHTML.nConsumed+1;
				else
					nB=gnIns;
					
				var oldScrollPos=document.body.scrollTop;
				if(insertIdxKs(nB,oHTML,gbScrl))
				{
					updateUsedK(aDataCon,aOriPos,aPos,bDown);
					if(!gbScrl&&gbMac)
					{
						while(document.body.scrollTop!=oldScrollPos)
							document.body.scrollTop=oldScrollPos;
					}
					gbScrl=false;
				}
				if(gbFindCK)
				{
					gbFindCK=false;
					gbNeedCalc=true;
					gsSKB=oHTML.sFK;
					gnIns=-1;
					setTimeout("checkReady();",50);
					return;
				}
			}
			else if(gbFindCK)
			{
				gbFindCK=false;
				gbNeedCalc=true;
				gsSKB=getFirstKeyFromPos(aDataCon,aPos);
				gnIns=-1;
				setTimeout("checkReady();",50);
				return;
			}
			if(!findCKInDom()) return;

			gnNeeded=gnNeeded-oHTML.nCurrent;
			gnIns=-1;
			markEnd();
			setTimeout("checkAgain();",50);
			gbNeedCalc=false;
		}
		else
		{
			if(!findCKInDom()) return;
			markEnd();
			setTimeout("checkAgain();",50);
		}
	}
}

function getFirstKeyFromPos(aDataCon,aPos)
{
	var sCurrentK=getBiggestChar();
	for(var i=0;i<aPos.length;i++)
	{
		if(aDataCon[i].aKs&&aDataCon[i].aKs.length>0&&aPos[i]>=0&&aPos[i]<aDataCon[i].aKs.length)
		{
			if(sCurrentK==""||
				compare(sCurrentK,aDataCon[i].aKs[aPos[i]].sName)>0)
			{
				sCurrentK=aDataCon[i].aKs[aPos[i]].sName;
			}
		}
	}
	return sCurrentK;
}

function checkAgain()
{
	if(!gbProcess)
	{
		if(gsBCK!=null)
		{
			gsCK=gsBCK;
			gsBCK=null;
			findCK();
		}
		else
		{
			markBegin();
		    getUnitIdx(document.body.scrollTop,getClientHeight());
		}
	}
	else
		setTimeout("checkAgain()",50);
}

function getLimit(aDataCon,aPos,aMaxPos,aMinPos,i)
{
	aMaxPos[i]=aDataCon[i].nNum;
	aMinPos[i]=-1;
	var oPNode=null;
	if(aDataCon[i].oUsedItems)
	{
		var oUsedItems=aDataCon[i].oUsedItems;
		do{
			if(oUsedItems.nB>aPos[i])
			{
				aMaxPos[i]=oUsedItems.nB;
				break;
			}
			oPNode=oUsedItems;
			oUsedItems=oUsedItems.oN;
		}while(oUsedItems!=null);
		if(oPNode)
			aMinPos[i]=oPNode.nE;
	}
	else if(aDataCon[i].aKs==null)
	{
		aMaxPos[i]=aMinPos[i]=aPos[i];
	}
	if(aMinPos[i]>=aPos[i]||aMaxPos[i]<=aPos[i])
	{
		aMaxPos[i]=aMinPos[i]=aPos[i];
	}
}

function getIdxPos(oIdx,bDown,sK)
{
	var aKs=oIdx.aKs;
	var nIdx;
	if(bDown)
		nIdx=oIdx.nNum;
	else
		nIdx=-1;
	if(aKs!=null)
	{
		for(var i=0;i<aKs.length;i++)
		{	
			if(bDown)
			{
				if(compare(aKs[i].sName,sK)>0)
				{
					nIdx=i;
					break;
				}
			}
			else
			{
				if(compare(aKs[i].sName,sK)<0)
					nIdx=i;
				else
					break;
			}
			i+=aKs[i].nNKOff;
		}
	}
	else if(oIdx.aKsOnly)
	{
		var aKsOnly=oIdx.aKsOnly;
		for(var i=0;i<aKsOnly.length;i++)
		{	
			if(aKsOnly[i])
			{
				if(bDown)
				{
					if(compare(aKsOnly[i],sK)>0)
					{

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -