📄 whfhost.js
字号:
// WebHelp 5.10.003
var gsNoTopics="No Topics Found.";
var gsLoadXmlFailed="Error: Failed to load xml file.";
var gsInitDatabaseFailed="Error: Failed to initialize database.";
var gsNotAllDatabaseInited="Warning: Not all databases have been loaded. Some topics will not be found.";
var gsInvalidExpression_1="The words you typed is not a valid expression.";
var gsInvalidExpression_2="Click";
var gsInvalidExpression_3="Help";
var gsInvalidExpression_4="to learn how to use query expression.(To be finished)";
var gsSearching="Searching...";
var gsTitle="Title";
var gsRank="Rank";
var gsCancel="Cancel";
var gsCanceled="Canceled";
var gsSubstrSrch=0;
var g_RunesVowels="\x61\x65\x69\x6F\x75\x79";
var g_RunesWordBreaks="\x01\x02\x03\x04\x05\x06\x07\x08\x09\x0A\x0B\x0C\x0D\x0E\x0F\x10\x11\x12\x13\x14\x15\x16\x17\x18\x19\x1A\x1B\x1C\x1D\x1E\x1F\x22\x5C\x20\x2E\x2C\x21\x40\x23\x24\x25\x5E\x26\x2A\x28\x29\x7E\x27\x60\x3A\x3B\x3C\x3E\x3F\x2F\x7B\x7D\x5B\x5D\x7C\x2B\x2D\x3D\xC2\x81\xC2\x82\xC2\x83\xC2\x84\xC2\x85\xC2\x86\xC2\x87\xC2\x88\xC2\x89\xC2\x8A\xC2\x8B\xC2\x8C\xC2\x8D\xC2\x8E\xC2\x8F\xC2\x90\xC2\x91\xC2\x92\xC2\x93\xC2\x94\xC2\x95\xC2\x96\xC2\x97\xC2\x98\xC2\x99\xC2\x9A\xC2\x9B\xC2\x9C\xC2\x9D\xC2\x9E\xC2\x9F\xC2\xA1\xC2\xA9\xC2\xAB\xC2\xAE\xC2\xB7\xC2\xBB\xC2\xBF\xC2\xA0";
var g_RunesWhiteSpaces="\x20\x09\x0D\x0A\xC2\xA0";
var g_RunesQuote='\x22';
var g_RunesHelSuffixes=new Array("ed,0","ingly,0","ings,0","ing,0","ly,1","s,1","e,1");
var gbHighLight=true;
var gsHLColorFront="#000000";
var gsHLColorBackground="#b2b4bf";
var gsAscendFlag = "△";
var gsDescendFlag = "▽";
var gAIRSearchObject;
var gsResultDivID="ResultDiv";
var gbReady=false;
var gbXML=false;
var gsBgColor="#ffffff";
var gsBgImage="";
var gsMargin="0pt";
var gsIndent="0pt";
var goFont=null;
var goErrFont=null;
var goHoverFont=null;
var gsABgColor="#cccccc";
var gbWhFHost=false;
var gbAIRSearchResultDisplayDoneFn=dummySearchResultFn;
var gbAIRSearchResultDoneSteps=0;
var gbAIRSearchResultDone=false;
var g_nSortType = 0;
var g_nX0 = 0;
var g_nInitWidth = 0;
var g_bDraging = false;
var g_nRankWidthMin = 20;
var ECS_NONE = 0;
var ECS_FTSREADY = 1;
var ECS_SEARCHING = 2;
var ECS_FATALERROR = 3;
var ECS_CANCELED = 4;
var ECS_SEARCHFAILED = 5;
var ECS_FOUND = 6;
var g_CurState = null;
var g_CurPage = 1;
var g_nMaxPages = 3 ;
var g_sQuestion='';
var g_bServerResult=false;
gbSearchPage=true;
var gbAIRSynonymString='';
var gbAIRSearchString='';
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 window_OnLoad()
{
if(gsBgImage&&gsBgImage.length>0)
{
document.body.background=gsBgImage;
}
if(gsBgColor&&gsBgColor.length>0)
{
document.body.bgColor=gsBgColor;
}
writeResultDiv();
if(gbAIR)
return;
if(gbAIRSSL)
{
var strProjectDir=_getPath(document.location.href);
SeeForSearch(strProjectDir);
return;
}
loadFts();
var oMsg=new whMessage(WH_MSG_SHOWFTS,this,1,null)
SendMessage(oMsg);
oMsg = new whMessage(WH_MSG_GETSEARCHSTR, this, 1, null);
var strTerms = "";
if (SendMessage(oMsg))
{
strTerms = oMsg.oParam;
if (strTerms != " " )
{
oMsg = new whMessage(WH_MSG_SEARCHTHIS, this, 1, strTerms);
SendMessage(oMsg);
}
}
}
function writeResultDiv()
{
var sHTML= "<div id='" + gsResultDivID+ "' style='position:absolute; width:100%'></div>";
if(gbAIRSSL)
document.body.innerHTML = sHTML;
else document.body.insertAdjacentHTML("beforeEnd",sHTML);
}
function registListener( a_Context, a_this )
{
if(!gbAIRSSL)
RegisterListener2( a_this, WH_MSG_SEARCHFTSKEY );
}
function FtsWriteClassStyle()
{
var sStyle="<STYLE TYPE='text/css'>\n";
if (gsBgImage)
sStyle+="body {border-top:"+gsBgColor+" 1px solid;}\n";
else if(gbAIR)
sStyle+="body {border-top:white 1px solid;}\n";
else
sStyle+="body {border-top:black 1px solid;}\n";
sStyle+="P.msg {"+getFontStyle(goErrFont)+"margin-left:"+gsIndent+";margin-top:"+gsMargin+";}\n";
sStyle+="dl {"+getFontStyle(goFont)+"margin-left:"+gsIndent+";margin-top:"+gsMargin+";}\n";
sStyle+="A.fr_tc:link {"+getFontStyle(goFont)+"font-weight:bold;}\n";
sStyle+="A.fr_tc:visited {"+getFontStyle(goFont)+"font-weight:bold;}\n";
sStyle+="A.fr_tc:hover {"+getFontStyle(goHoverFont)+"font-weight:bold;}\n";
sStyle+="A.fr_act {background-color:"+gsABgColor+";}\n";
sStyle+="A.fr_act:link {"+getFontStyle(goFont)+"}\n";
sStyle+="A.fr_act:visited {"+getFontStyle(goFont)+"}\n";
sStyle+="A.fr_act:hover {"+getFontStyle(goHoverFont)+"}\n";
sStyle+="LI.sl_page{display:block;display:inline-block;float:left;cursor:pointer;text-decoration:none;border:1px solid #ccc;padding:.3em .7em;margin:0 .38em 0 0;text-align:center}\n";
sStyle+="LI.sl_pageC{background:#f0f7e8;border:1px solid #83bc46;display:block;display:inline-block;float:left;cursor:pointer;text-decoration:none;padding:.3em .7em;margin:0 .38em 0 0;text-align:center}\n";
sStyle+="LI.sl_pageN{cursor:pointer;padding:.2em .5em;margin:0 .38em 0 0;border:none;text-decoration:underline}\n";
sStyle+="TD.fr_tt, TD.fr_tc, TD.fr_ts {"+getFontStyle(goFont)+"height:auto;}\n";
if(gbAIRSSL)
sStyle+="TD.fr_ts {padding:0.2em 0em;border-style:solid solid solid none;border-color:"+gsABgColor+";border-width:1px;}\n";
else
sStyle+="TD.fr_ts {padding:0.2em 0em;border-style:none solid solid none;border-color:"+gsABgColor+";border-width:1px;}\n";
if(gbAIRSSL)
sStyle+="TD.fr_tt {padding:0.2em 0.5em;border-style:solid none solid none;border-color:"+gsABgColor+";border-width:1px;}\n";
else
sStyle+="TD.fr_tt {padding:0.2em 0.5em;border-style:none none solid none;border-color:"+gsABgColor+";border-width:1px;}\n";
sStyle+="TD.fr_tc {padding:0.2em 0.5em;}\n";
sStyle+="P.pb_tt {"+getFontStyle(goErrFont)+"padding:0;margin:3px;}\n";
sStyle+="P.pb_in {"+getFontStyle(goErrFont)+"position:relative;padding:0;margin:0;left:0%;top:0%;height:10px;border-style:none;background-color:blue;}\n";
sStyle+="DIV.pb_out {width:100%;border-style:solid;border-width:1px;padding:0;margin:0;background-color:"+gsABgColor+";}\n";
sStyle+="P.pb_cancel {"+getFontStyle(goHoverFont)+"cursor:pointer;padding:0;margin:3px}\n";
sStyle+="</STYLE>";
document.write(sStyle);
}
function window_Unload()
{
if(!gbAIRSSL)
{
UnRegisterListener2(this,WH_MSG_PROJECTREADY);
UnRegisterListener2(this, WH_MSG_SEARCHFTSKEY);
}
}
function mrFindFTSKey()
{
if( goOdinHunter.aProjPathes.length<=0 )
return;
// request the server
var sUrl=goOdinHunter.aProjPathes[0].strOdbPath+'&question='+escape(g_sQuestion)+'&log=1';
g_bServerResult=true;
loadDataXML(sUrl,false);
};
function onSendMessage(oMsg)
{
if(gbAIRSSL)
return true;
var nMsgId = oMsg.nMessageId;
if ( nMsgId == WH_MSG_SEARCHFTSKEY )
{
if ( oMsg.oParam )
{
// redirect to roboengine search if gbEngine==true
if( mrIsOnEngine()==true )
{
// this is server side fts
g_sQuestion=oMsg.oParam;
mrFindFTSKey();
}else
{
// this is client side fts
goOdinHunter.strQuery = oMsg.oParam;
setTimeout( "Query()", 1 );
};
}
}
else if ( nMsgId == WH_MSG_PROJECTREADY )
{
loadFts();
}
return true;
}
////////////// ODIN FULL-TEXT SEARCH--------------------------------------
// Odin global variables------------------------
var context = new HuginContext();
var goOdinHunter = null;
// XmlUtility.js--------------------------------
var theXmlReader = new XmlReader();
function XmlNode()
{
this.strTagName = null;
this.aAttrs = new Array();
}
function XmlData()
{
this.strFilePath = null;
this.strRoot = null;
this.aNodes = new Array();
}
function XmlReader()
{
this.strFilePath = null; //in
this.funcCallback = null; //in
this.bSucceed = false; //out
this.xmlDoc = null;
this.aCache = new Array();
this.bCache = false;
this.curData = null;
this.loadFromCache = function()
{
for ( var i = 0; i < this.aCache.length; i++ )
{
if ( this.aCache[i].strFilePath == this.strFilePath )
{
this.curData = this.aCache[i];
return true;
}
}
return false;
}
this.loadFromFile = function( a_funcCallback, a_bCache )
{
this.funcCallback = a_funcCallback;
this.bCache = ( a_bCache == true ) ? true : false;
if ( this.loadFromCache() )
{
this.funcCallback();
return;
}
loadDataXML( this.strFilePath,false );
}
this.receiveDom = function( a_XmlDoc )
{
this.curData = null;
if ( a_XmlDoc.documentElement == null )
return;
this.curData = new XmlData();
this.curData.strFilePath = this.strFilePath;
with( a_XmlDoc.documentElement )
{
this.curData.strRoot = tagName;
for ( var i = 0; i < childNodes.length; i++ )
{
with( a_XmlDoc.documentElement.childNodes.item( i ) )
{
if( nodeType == 3 )
continue;
var nLen = this.curData.aNodes.length;
this.curData.aNodes[nLen] = new XmlNode();
this.curData.aNodes[nLen].strTagName = tagName;
for ( var j = 0; j < attributes.length; j++ )
{
this.curData.aNodes[nLen].aAttrs[attributes.item( j ).name] = attributes.item( j ).value;
}
}
}
}
if ( this.bCache )
{
this.aCache[this.aCache.length] = this.curData;
}
}
this.getNumOfNodes = function()
{
return this.curData.aNodes.length ;
}
this.getNumOfTopics = function(i)
{
with( this.curData )
{
if( i < aNodes.length)
{
var num ;
try
{
num = parseInt(aNodes[i].aAttrs["num"]);
}
catch(e)
{
return 0 ;
}
return num ;
}
else
return 0 ;
}
}
this.checkRoot = function( a_strRootName )
{
return this.curData.strRoot == a_strRootName;
}
this.getSynonyms = function ( a_strQuery )
{
if (gsSubstrSrch)
{
var synonyms = "" ;
with( this.curData )
{
for ( var i = 0; i < aNodes.length; i++ )
{
if (aNodes[i].aAttrs["nm"].indexOf(a_strQuery) != -1)
synonyms += "," + aNodes[i].aAttrs["sy"];
}
}
return synonyms ;
}
else
{
return this.getAttr( "wd", "nm", a_strQuery, "sy" ) ;
}
}
this.getWordRec = function ( a_strQuery , bPhraseSearch)
{
var begin = 0 ;
var end = this.curData.aNodes.length ;
var mid = Math.floor((end -begin ) / 2) ;
while (mid > 0 )
{
mid = mid + begin ;
var term = this.curData.aNodes[mid].aAttrs["nm"] ;
if (a_strQuery < term)
end = mid ;
else if (a_strQuery > term)
begin = mid ;
else
break ;
mid = Math.floor((end -begin ) / 2) ;
}
if (((end-begin) == 1)&&(!this.matchPrefix(a_strQuery,this.curData.aNodes[mid].aAttrs["nm"])))
{
mid = end ;
}
if (mid < this.curData.aNodes.length)
{
if (!bPhraseSearch && gsSubstrSrch)
{
//get all the records with matching prefix
var arrTopicRecs = new Array();
while( mid<this.curData.aNodes.length)
{
if (this.curData.aNodes[mid].aAttrs["sp"])
{
mid++ ;
continue ;
}
else if (this.matchPrefix(a_strQuery,this.curData.aNodes[mid].aAttrs["nm"]))
{
arrTopicRecs[arrTopicRecs.length] = this.curData.aNodes[mid].aAttrs["rd"] ;
mid++ ;
}
else
break ;
}
if (arrTopicRecs.length == 0 )
return "" ;
var mergedRec = arrTopicRecs[0] ;
for (var i = 1 ; i < arrTopicRecs.length ; i++)
{
mergedRec = mergeTopicRec(mergedRec , arrTopicRecs[i]);
}
return mergedRec ;
}
else
{
//get the one with exact match
if ((this.curData.aNodes[mid].aAttrs["nm"])==a_strQuery)
{
if (bPhraseSearch || gsSubstrSrch)
return this.curData.aNodes[mid].aAttrs["rd"] ;
else
{
//do not return stop words
if (this.curData.aNodes[mid].aAttrs["sp"])
return "" ;
else
return this.curData.aNodes[mid].aAttrs["rd"] ;
}
}
else
return "" ;
}
}
}
this.getTopicRec = function ( a_nTopicId)
{
if ((a_nTopicId >= 0)&&(a_nTopicId < this.curData.aNodes.length ))
{
var objResult = new Object() ;
objResult.rd = this.curData.aNodes[a_nTopicId].aAttrs["rd"];
objResult.ct = this.curData.aNodes[a_nTopicId].aAttrs["ct"];
return objResult ;
}
else
return null ;
}
this.getPackageIndex = function (a_strQuery)
{
var begin = 0 ;
var end = this.curData.aNodes.length - 1 ;
var mid;
while (begin <= end)
{
mid = Math.floor((begin+end)/2);
var startWord = this.curData.aNodes[mid].aAttrs["fm"] ;
var endWord = this.curData.aNodes[mid].aAttrs["to"] ;
if (end == begin)
{
if ((a_strQuery >= startWord )&&(a_strQuery <= endWord))
return mid ;
else
return -1 ;
}
if (a_strQuery < startWord )
end = mid - 1 ;
else if (a_strQuery > endWord )
begin = mid + 1;
else
return mid ;
}
return -1 ;
}
this.matchPrefix = function (a_strQuery , a_strTerm )
{
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -