Click here to Skip to main content
15,881,715 members
Articles / Web Development / HTML

A Reusable Framework for Connecting Both WebHelp and Compiled Help RoboHelp Projects to Relational Databases Through the Use of JavaScript Object LIterals

Rate me:
Please Sign up or sign in to vote.
2.60/5 (4 votes)
10 May 200518 min read 45.6K   319   16  
This article will describe how to hook up RoboHelp projects to a database to provide data to pages for both WebHelp and Compiled Help using a single architecture. The implementation will rely on the JavaScript interpreter built into almost all web browsers and that is available in Compiled Help too.
<html>
<script language="javascript1.2" src="whver.js"></script>
<script language="javascript1.2" src="whmozemu.js"></script>
<script language="javascript1.2" src="whutils.js"></script>
<script language="javascript1.2">
<!--
if(gbIE4||gbNav61)
{
	document.write("<body></body>");
}
else
{
	document.write("<frameset rows=\"100%,*\"><frame name=\"data_frm\" src=\"about:blank\"><frame name=\"dumb_frm\" src=\"about:blank\"></frameset>");
}
var gCSHFileName="whcshdata.htm";

var gHomePage="International_Staffing_Company_Dynamic_Data_for_RoboHelp.htm";
var gaProj=new Array();
gaProj[0]=new Object();
gaProj[0].sProjPath=_replaceSlash(_getPath(document.location.href));
gaProj[0].nLoadState=0;
var gCurrent=0;

var gsTopicURL="";
var gnCurProj=0;
var gnCommand=-1;
var CMD_SHOWTOC=1;
var CMD_SHOWINDEX=2;
var CMD_SHOWSEARCH=3;
var CMD_SHOWGLOSSARY=4;
var CMD_SHOWNONE=0;

var RHWO_LOCATION=0x01;		/*need location bar?*/
var RHWO_MENUBAR=0x02;		/*need menubar?*/		
var RHWO_RESIZABLE=0x04;	/*resizable window?*/
var RHWO_TOOLBAR=0x08;		/*need toolbar?*/
var RHWO_STATUS=0x10;		/*need statusbar?*/
var RHWO_SCROLLBARS=0x20;	/*need scrollbars?*/

var gsStr="";
var gnId=-1;
var gsWindow="";
var gsJava="false";
var gbUseStr=false;
var gbURLReady=false;
var goWnd=new Object();
goWnd.sName="whCshDefault";
goWnd.nBOptions=RHWO_RESIZABLE|RHWO_SCROLLBARS;
goWnd.sBLeft="49%";
goWnd.sBTop="0";
goWnd.sBWidth="49%";
goWnd.sBHeight="49%";
goWnd.nPanes=1;
var goFullWnd=new Object();
goFullWnd.sName="whDefault";
goFullWnd.nBOptions=RHWO_RESIZABLE|RHWO_SCROLLBARS;
goFullWnd.sBLeft="20%";
goFullWnd.sBTop="0";
goFullWnd.sBWidth="79%";
goFullWnd.sBHeight="79%";
goFullWnd.nPanes=2;

var goNewWnd=null;
var gbLoadWnd=false;
var gsURL="";

function showCSH(sParam)
{
	//id=
	//str=
	//url=
	//cmd=
	//with the format #<a=xxx>>b=xxx>>c=xxx...
	parseParam(sParam);
	SwitchURL();
}

function IsWndReady()
{
	if(gaProj[0].nLoadState==0)
	{
		var sCshFile=_getFullPath(gaProj[0].sProjPath,gCSHFileName);
		gaProj[0].nLoadState=1;
		setTimeout("loadFail("+0+");",3000);
		loadDataCsh(sCshFile);
		gbLoadWnd=true;
		return false;
	}
	else
		return true;
}

function SwitchURL()
{
	if(gbURLReady)
	{
		var sURL="";
		var oWnd=null;
		if(gsTopicURL)
		{
			sURL=_getPath(document.location.href)+gHomePage+"#"+gsTopicURL;
			oWnd=goWnd;
		}
		else
		{
			if(gnCommand!=-1)
				sURL=_getPath(document.location.href)+gHomePage+"#>>cmd="+gnCommand;
			else
				sURL=_getPath(document.location.href)+gHomePage;
			oWnd=goFullWnd;
		}
		if(gsWindow)
		{
			if(!IsWndReady())
				return false;
			if(gaProj[gnCurProj].aWnd)
			{
				var aWnd=gaProj[gnCurProj].aWnd;
				var bFound=false;
				for(var i=0;i<aWnd.length;i++)
				{
					if(aWnd[i].sName.toLowerCase()==gsWindow.toLowerCase())
					{
						oWnd=aWnd[i];
						bFound=true;
						break;
					}
				}
				if(!bFound&&gnCurProj!=0)
				{
					var aWnd=gaProj[0].aWnd;
					for(var j=0;j<aWnd.length;j++)
					{
						if(aWnd[j].sName.toLowerCase()==gsWindow.toLowerCase())
						{
							oWnd=aWnd[j];
							break;
						}
					}
				}
			}
		}

		if(sURL&&oWnd)
		{
			strURLOpt="";
			if(oWnd.sCaption)
				strURLOpt+=">>cap="+oWnd.sCaption;
			if(oWnd.nPanes==1)
				strURLOpt+=">>pan="+oWnd.nPanes;
			else if(oWnd.nPanes==2)
			{
				strURLOpt+=">>pan="+oWnd.nPanes;
				if(oWnd.nPOptions)
					strURLOpt+=">>pot="+oWnd.nPOptions;
				if(oWnd.sPButtons)
					strURLOpt+=">>pbs="+oWnd.sPButtons;
				if(oWnd.sPDefBtn)
					strURLOpt+=">>pdb="+oWnd.sPDefBtn;
			}
			if(strURLOpt)
			{
				if(sURL.indexOf("#")==-1)
					sURL+="#";
				sURL+=strURLOpt;
			}
			if(gsJava=="false")
			{
				var strOpt=getBrowserOptionString(oWnd);
				var sNewName=convertWindowName(oWnd.sName);
				if(gbNav4)
				{
					if (gbNav6)
					{
						gsURL = sURL;
						goNewWnd=window.open("about:blank",sNewName,strOpt);
						setTimeout("postWindowNSOpen();",100);
					}
					else
					{
						window.open("about:blank",sNewName,strOpt);
						var oNewWnd=window.open(sURL,sNewName);
						window.close();
						oNewWnd.focus();
					}
				}
				else
				{
					if(gbIE5)
					{
						window.open("about:blank",sNewName,strOpt);
						goNewWnd=window.open(sURL,sNewName);
					}
					else
					{
						gsURL = sURL; // IE4 had hard time to handle bookmark.
						goNewWnd=window.open("about:blank",sNewName,strOpt);
					}
					setTimeout("postWindowOpen();",100);
				}
			}
			else
				document.location=sURL;
		}
	}
}

function convertWindowName(strName)
{
	var strNewName = strName;
	var strResultName = "";
	var re=new RegExp("_","g");
	strNewName = strName.replace(re,"__");
	for (var i=0;i<strNewName.length;i++)
		if (!(strNewName[i] == '_' ||
			(strNewName[i] <= '9' && strNewName[i] >= '0') ||
			(strNewName[i] <= 'z' && strNewName[i] >= 'a') ||
			(strNewName[i] <= 'Z' && strNewName[i] >= 'A')))
		{
			strResultName += "_" + strNewName.charCodeAt(i);
		}
		else
			strResultName += strNewName[i];
	return strResultName;
}

function postWindowNSOpen()
{
	if(goNewWnd)
	{
		if (gsURL)
			goNewWnd.document.location.href=gsURL;
		window.close();
		goNewWnd.focus();
	}
}

function postWindowOpen()
{
	if(goNewWnd)
	{
		if (gsURL&&!gbIE5&&gbIE4)
			goNewWnd.document.location.href=gsURL;
		goNewWnd.focus();
	}
}

function parseParam(sParam)
{
	if(sParam)
	{
		var nBPos=0;
		do
		{
			var nPos=sParam.indexOf(">>",nBPos);
			if(nPos!=-1)
			{
				if(nPos>0)
				{
					var sPart=sParam.substring(nBPos,nPos);
					parsePart(sPart);
				}
				nBPos=nPos+2;
			}
			else
			{
				var sPart=sParam.substring(nBPos);
				parsePart(sPart);
				break;
			}
		}while(nBPos<sParam.length);
	}
}

function parsePart(sPart)
{
	if(sPart.toLowerCase().indexOf("id=")==0)
	{
		fetchURLById(sPart.substring(3));
		gbURLReady=false;
	}
	else if(sPart.toLowerCase().indexOf("str=")==0)
	{
		fetchURLByStr(sPart.substring(4));
		gbURLReady=false;
	}
	else if(sPart.toLowerCase().indexOf("url=")==0)
	{
		gsTopicURL=sPart.substring(4);
		gbURLReady=true;
	}
	else if(sPart.toLowerCase().indexOf("cmd=")==0)
	{
		var sCmd=sPart.substring(4);
		if(sCmd.toLowerCase()=="toc")
		{
			gnCommand=CMD_SHOWTOC;
		}
		else if(sCmd.toLowerCase()=="idx")
		{
			gnCommand=CMD_SHOWINDEX;
		}
		else if(sCmd.toLowerCase()=="fts")
		{
			gnCommand=CMD_SHOWSEARCH;
		}
		else if(sCmd.toLowerCase()=="glo")
		{
			gnCommand=CMD_SHOWGLOSSARY;
		}
		else if(sCmd.toLowerCase()=="none")
		{
			gnCommand=CMD_SHOWNONE;
		}
		gbURLReady=true;
	}
	else if(sPart.toLowerCase().indexOf("wnd=")==0)
	{
		gsWindow=_browserStringToText(sPart.substring(4));
	}
	else if(sPart.toLowerCase().indexOf("java=")==0)
	{
		gsJava=sPart.substring(5);
	}
}

function fetchURLById(sId)
{
	var nId=parseInt(sId);
	gsTopicURL="";
	fetchURL("",nId,false);
}

function fetchURLByStr(sStr)
{
	gsTopicURL="";
	fetchURL(sStr,0,true);
}

function fetchURL(sStr,nId,bUseStr)
{
	var bNeedLoad=false;
	var bFound=false;
	for(var i=0;i<gaProj.length;i++)
	{
		if(gaProj[i].nLoadState==3)
		{
			if(gaProj[i].aCsh)
			{
				for(var j=0;j<gaProj[i].aCsh.length;j++)
				{
					var sTopicURL="";
					if(bUseStr)
					{
						if(gaProj[i].aCsh[j].strAliasId.toLowerCase()==sStr.toLowerCase())
							sTopicURL=gaProj[i].aCsh[j].strUrl;
					}
					else
					{
						if(gaProj[i].aCsh[j].nTopicNum==nId)
							sTopicURL=gaProj[i].aCsh[j].strUrl;
					}
					if(sTopicURL)
					{
						if(i!=0)
						{
							gnCurProj=i;
							if(gaProj[i].sProjPath.indexOf(gaProj[0].sProjPath)==0)
							{
								var sRelPath=gaProj[i].sProjPath.substring(gaProj[0].sProjPath.length);
								gsTopicURL=sRelPath+sTopicURL;
							}
							else
								gsTopicURL=gaProj[i].sProjPath+sTopicURL;
						}
						else
							gsTopicURL=sTopicURL;
						bFound=true;
						break;
					}
				}
			}
			
		}
		else if(gaProj[i].nLoadState==0)
		{
			gsStr=sStr;
			gnId=nId;
			gbUseStr=bUseStr;
			var sCshFile=_getFullPath(gaProj[i].sProjPath,gCSHFileName);
			gaProj[i].nLoadState=1;
			setTimeout("loadFail("+i+");",3000);
			loadDataCsh(sCshFile);
			bNeedLoad=true;
		}
		if(bFound||bNeedLoad)
			break;
	}
	if(!bNeedLoad)
	{
		gbURLReady=true;
		SwitchURL();
	}
}

function loadDataCsh(sFile)
{
	if(gbIE4||gbNav61)
		loadData(sFile);
	else
	{
		window.frames[0].location=sFile;
	}
}

function loadFail(nProj)
{
	if(gaProj[nProj].nLoadState==1)
	{
		gaProj[nProj].nLoadState=2;
		if(!gbLoadWnd)
			fetchURL(gsStr,gnId,gbUseStr);
		else
			SwitchURL();
	}
}

function putCshData(strProj,aCsh,aWnd,aRmtProj)
{
	if(strProj)
	{
		strProj=_replaceSlash(strProj);
		if(strProj.lastIndexOf("/")!=strProj.length-1)
			strProj+="/";
		for(var i=0;i<gaProj.length;i++)
		{
			if(gaProj[i].sProjPath)
			{
				if(isSamePath(gaProj[i].sProjPath,strProj))
				{
					gaProj[i].nLoadState=3;
					gaProj[i].aCsh=aCsh;
					gaProj[i].aWnd=aWnd;
					break;
				}
			}
		}
		if(aRmtProj&&aRmtProj.length)
		{
			for(var j=0;j<aRmtProj.length;j++)
			{
				var strRPath=_getFullPath(strProj,aRmtProj[j]);
				var bFound=false;
				for (var k=0;k<gaProj.length;k++)
				{
					if(gaProj[k].sProjPath)
					{
						if(isSamePath(gaProj[k].sProjPath,strRPath))
						{
							bFound=true;
							break;
						}
					}
				}
				if(!bFound)
				{
					var len=gaProj.length;
					gaProj[len]=new Object();
					gaProj[len].sProjPath=strRPath;
					gaProj[len].nLoadState=0;
				}
			}
		}
		if(!gbLoadWnd)
			fetchURL(gsStr,gnId,gbUseStr);
		else
			SwitchURL();
			
	}
}

function isSamePath(strPath1,strPath2)
{
	return strPath1.toLowerCase()==strPath2.toLowerCase();
}

function getRelHomePage(strLocation)
{
	var strCurPPath=_getPath(strLocation);
	var strOriPPath=_getPath(getHomePage());
	var strRelPath=_getRelativeFileName(strOriPPath,strCurPPath);
	var strURL=getHomePage()+"#"+strRelPath;
	return strURL;
}

function getHomePage()
{
	var strHomePage;
	var strTmp=location.toString();
	var nPos=strTmp.indexOf("#");
	if(nPos!=-1)
	{
		strHomePage=strTmp.substring(0,nPos);
	}
	else
	{
		strHomePage=strTmp;
	}
	return strHomePage;
}

function getBrowserOptionString(oWnd)
{
	var strOpts="";
	if(oWnd.bUseDefault)
		return strOpts;
	if(oWnd.nBOptions&RHWO_LOCATION)
		strOpts+="location=yes";
	else
		strOpts+="location=no";
	if(oWnd.nBOptions&RHWO_TOOLBAR)
		strOpts+=",toolbar=yes";		
	else
		strOpts+=",toolbar=no";		
	if(oWnd.nBOptions&RHWO_MENUBAR)
		strOpts+=",menubar=yes";		
	else
		strOpts+=",menubar=no";
	if(oWnd.nBOptions&RHWO_STATUS)
		strOpts+=",status=yes";		
	else
		strOpts+=",status=no";		
	if(oWnd.nBOptions&RHWO_SCROLLBARS)
		strOpts+=",scrollbars=yes";
	else
		strOpts+=",scrollbars=no";	
	if(oWnd.nBOptions&RHWO_RESIZABLE)
		strOpts+=",resizable=yes";
	else
		strOpts+=",resizable=no";
	if(oWnd.sBTop)
	{
		var nTop=getSValue(oWnd.sBTop,screen.height);
		strOpts+=",top="+nTop;
		strOpts+=",screenY="+nTop;
	}
	if(oWnd.sBLeft)
	{
		var nLeft=getSValue(oWnd.sBLeft,screen.width);
		strOpts+=",left="+nLeft;
		strOpts+=",screenX="+nLeft;
	}
	if(oWnd.sBWidth)
	{
		var nWidth=getSValue(oWnd.sBWidth,screen.width);
		strOpts+=",width="+nWidth;
		strOpts+=",outerWidth="+nWidth;
	}
	if(oWnd.sBHeight)
	{
		var nHeight=getSValue(oWnd.sBHeight,screen.height);
		strOpts+=",height="+nHeight;
		strOpts+=",outerHeight="+nHeight;
	}
	return strOpts;
}

function getSValue(sValue,nLength)
{
	var nValue=0;
	var nPos=sValue.indexOf("%");
	if(nPos!=-1)
	{
		if(nPos>0)
		{
			var nPart=parseInt(sValue.substring(0,nPos));
			nValue=nLength*nPart/100;
		}
	}
	else
		nValue=parseInt(sValue);
	return nValue;
}


window.onload=window_OnLoad;

function window_OnLoad()
{
	if(document.location.hash.length>0)
	{
		showCSH(document.location.hash.substring(1));
	}

	if(gsJava=="false")
		window.moveTo(screen.width,screen.height);
}
//-->
</script>
</html>

By viewing downloads associated with this article you agree to the Terms of Service and the article's licence.

If a file you wish to view isn't highlighted, and is a text file (not binary), please let us know and we'll add colourisation support for it.

License

This article has no explicit license attached to it but may contain usage terms in the article text or the download files themselves. If in doubt please contact the author via the discussion board below.

A list of licenses authors might use can be found here


Written By
Web Developer
United States United States
This member has not yet provided a Biography. Assume it's interesting and varied, and probably something to do with programming.

Comments and Discussions