376 lines
9.3 KiB
JavaScript
376 lines
9.3 KiB
JavaScript
// preload.js
|
|
//
|
|
// This file contains the script necessary for the initial load of the page.
|
|
// We want to minimize this size as much as possible to mitigate the initial
|
|
// hit at load time.
|
|
//
|
|
|
|
|
|
|
|
/*-------------------------------------------------------------------------
|
|
Purpose: Display a generic message box if we hit a script error.
|
|
*/
|
|
function EatErrors(szMsg, szUrl, iLine)
|
|
{
|
|
// Prevent scripting errors from displaying ugly messages
|
|
alert("An unexpected error occurred.\n\n" + szMsg + "\n" + szUrl + "\nLine: " + iLine);
|
|
window.event.returnValue = true; // Suppress IE error messaging
|
|
}
|
|
|
|
|
|
/*-------------------------------------------------------------------------
|
|
Purpose: Load the given script file into the tree
|
|
*/
|
|
function LoadScriptFile(szScriptID, szUrl)
|
|
{
|
|
// Is the script loaded?
|
|
if (null == g_docAll(szScriptID))
|
|
{
|
|
// No; create it
|
|
var elemScript = document.createElement("<SCRIPT id=" + szScriptID + " src='" + szUrl + "' language='javascript'></SCRIPT>");
|
|
|
|
if (elemScript)
|
|
{
|
|
// Load it by adding it to the body
|
|
document.body.insertBefore(elemScript);
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
/*-------------------------------------------------------------------------
|
|
Purpose: Returns true or false for the given policy
|
|
*/
|
|
function Dso_IsRestricted(szPolicy)
|
|
{
|
|
var bResult;
|
|
|
|
bResult = g_docAll.idCtlAppsDso.IsRestricted(szPolicy);
|
|
|
|
/* Fake version
|
|
// alert("IsRestricted: " + szPolicy);
|
|
|
|
bResult = false; // default
|
|
|
|
switch (szPolicy)
|
|
{
|
|
case "ShowPostSetup": bResult = true; break;
|
|
case "NoRemovePage": bResult = false; break;
|
|
case "NoAddPage": bResult = false; break;
|
|
case "NoWindowsSetupPage": bResult = false; break;
|
|
case "NoAddFromCDorFloppy": bResult = false; break;
|
|
case "NoAddFromInternet": bResult = false; break;
|
|
case "NoAddFromNetwork": bResult = false; break;
|
|
case "NoComponents": bResult = false; break;
|
|
case "NoServices": bResult = false; break;
|
|
case "NoSupportInfo": bResult = false; break;
|
|
}
|
|
*/
|
|
|
|
return bResult;
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// --------------------------------------------------------------------------------
|
|
// --------------------------------------------------------------------------------
|
|
|
|
|
|
|
|
/*-------------------------------------------------------------------------
|
|
Purpose: Determine which page to show at startup
|
|
*/
|
|
function _ParseCmdLine()
|
|
{
|
|
var szCmdLine = g_docAll.idAppARP.commandLine;
|
|
|
|
// The command line will be something like:
|
|
// "c:\lfnpath\default.hta <params>"
|
|
|
|
var ichParam = szCmdLine.indexOf("default.hta") + 12;
|
|
var cch = szCmdLine.length;
|
|
|
|
while (ichParam < cch)
|
|
{
|
|
if (szCmdLine.charAt(ichParam) != ' ')
|
|
break;
|
|
ichParam++;
|
|
}
|
|
|
|
// First parameter is the button index indicating which page
|
|
// to open
|
|
|
|
var nPage = parseInt(szCmdLine.charAt(ichParam));
|
|
if (isNaN(nPage) || 2 < nPage)
|
|
nPage = g_iPageDefault;
|
|
|
|
// Set the page by pushing the button
|
|
g_docAll.idPlaces.currentButton = nPage;
|
|
}
|
|
|
|
|
|
/*-------------------------------------------------------------------------
|
|
Purpose: Initialize the Places bar.
|
|
*/
|
|
function _InitPlacesBar()
|
|
{
|
|
var _idPlaces = g_docAll.idPlaces;
|
|
|
|
if (Dso_IsRestricted("NoRemovePage"))
|
|
{
|
|
_idPlaces.ShowButton('idChangeRemove', false);
|
|
g_iPageDefault++;
|
|
}
|
|
|
|
if (Dso_IsRestricted("NoAddPage"))
|
|
{
|
|
_idPlaces.ShowButton('idAdd', false);
|
|
if (1 == g_iPageDefault)
|
|
g_iPageDefault++;
|
|
}
|
|
|
|
if (Dso_IsRestricted("NoWindowsSetupPage"))
|
|
{
|
|
_idPlaces.ShowButton('idConfig', false);
|
|
if (2 == g_iPageDefault)
|
|
g_iPageDefault++;
|
|
}
|
|
}
|
|
|
|
|
|
/*-------------------------------------------------------------------------
|
|
Purpose: Handle the 'onload' event for the whole page.
|
|
This function processes the commandline paremeters passed in and launches
|
|
the correct page.
|
|
*/
|
|
|
|
function Body_OnLoad()
|
|
{
|
|
window.onerror = EatErrors; // Catch onerror events
|
|
|
|
if (document.dir == "rtl")
|
|
{
|
|
//
|
|
// BiDi. Adjust alignment of the "Close", "CD or Floppy"
|
|
// and "Windows Update" buttons
|
|
//
|
|
g_docAll.idTdClose.align = "left";
|
|
g_docAll.idTdCDFloppy.align = "left";
|
|
g_docAll.idTdWindowsUpdate.align = "left";
|
|
}
|
|
|
|
// Bind to some events
|
|
document.body.onkeydown = Body_OnKeyDown;
|
|
g_docAll.idBtnClose.onclick = _CloseWindow;
|
|
|
|
// Determine whether to make the Config page simply exec the OC Manager or not
|
|
var bExecOCMgr;
|
|
|
|
bExecOCMgr = !g_docAll.idCtlAppsDso.ShowPostSetup;
|
|
|
|
/* Fake version
|
|
bExecOCMgr = true;
|
|
*/
|
|
|
|
// The 'ShowPostSetup' policy overrides this. If this is true, show the config page.
|
|
if (Dso_IsRestricted("ShowPostSetup"))
|
|
bExecOCMgr = false;
|
|
else if (Dso_IsRestricted("NoServices"))
|
|
bExecOCMgr = true;
|
|
|
|
// Allow the places bar to switch to this page using ctrl-tab
|
|
// (normally clicking the button would exec the Optional Components Manager)
|
|
var _idPlaces = g_docAll.idPlaces;
|
|
|
|
_idPlaces.SetExecButton("idConfig", bExecOCMgr);
|
|
|
|
// Set the width of the places column. We set this once at start up. We avoid
|
|
// expressions since those are more expensive.
|
|
//
|
|
// Trick: we need to set the width of the dummy image too, to make sure
|
|
// idColPlaces isn't squeezed.
|
|
|
|
g_docAll.idColPlaces.width = g_docAll.idPlaces.offsetWidth;
|
|
g_docAll.idImgDummy1.width = g_docAll.idPlaces.offsetWidth;
|
|
g_docAll.idImgDummy2.width = g_docAll.idPlaces.offsetWidth;
|
|
g_docAll.idImgDummy3.width = g_docAll.idPlaces.offsetWidth;
|
|
|
|
// Parse the command line and set the active page
|
|
_ParseCmdLine();
|
|
}
|
|
|
|
|
|
/*-------------------------------------------------------------------------
|
|
Purpose: Handle the 'onkeydown' for the documents
|
|
*/
|
|
function Body_OnKeyDown()
|
|
{
|
|
// Is this a F5 key?
|
|
if (KC_F5 == event.keyCode)
|
|
{
|
|
// Call the correct refresh functions
|
|
switch (g_idCur)
|
|
{
|
|
case 'idChangeRemove':
|
|
Dso_Refresh("Remove");
|
|
break;
|
|
|
|
case 'idAdd':
|
|
Dso_Refresh("Categories");
|
|
Dso_Refresh("Add");
|
|
break;
|
|
|
|
case 'idConfig':
|
|
Dso_Refresh("ocsetup");
|
|
break;
|
|
}
|
|
|
|
// Block this event
|
|
event.returnValue=false;
|
|
}
|
|
}
|
|
|
|
|
|
function _CloseWindow()
|
|
{
|
|
window.parent.close();
|
|
}
|
|
|
|
|
|
/*-------------------------------------------------------------------------
|
|
Purpose: Switch pages based upon the given idElem (button id)
|
|
*/
|
|
function _SetPage(idElem)
|
|
{
|
|
// Load the corresponding script first
|
|
switch (idElem)
|
|
{
|
|
case 'idChangeRemove':
|
|
LoadScriptFile("idScriptRemove", "remove.js");
|
|
break;
|
|
|
|
case 'idAdd':
|
|
LoadScriptFile("idScriptAdd", "add.js");
|
|
break;
|
|
|
|
case 'idConfig':
|
|
LoadScriptFile("idScriptConfig", "config.js");
|
|
break;
|
|
}
|
|
|
|
|
|
// Clean up after the current page
|
|
switch (g_idCur)
|
|
{
|
|
case 'idChangeRemove':
|
|
Remove_Deactivate();
|
|
break;
|
|
|
|
case 'idAdd':
|
|
Add_Deactivate();
|
|
break;
|
|
|
|
case 'idConfig':
|
|
Config_Deactivate();
|
|
break;
|
|
}
|
|
|
|
|
|
// Now set up for the new page
|
|
switch (idElem)
|
|
{
|
|
case 'idChangeRemove':
|
|
Remove_Activate();
|
|
break;
|
|
|
|
case 'idAdd':
|
|
Add_Activate();
|
|
break;
|
|
|
|
case 'idConfig':
|
|
Config_Activate(false);
|
|
break;
|
|
}
|
|
|
|
g_idCur = idElem;
|
|
}
|
|
|
|
|
|
/*-------------------------------------------------------------------------
|
|
Purpose: Handle the 'onexecitem' for the places bar.
|
|
*/
|
|
function Places_OnExecItem()
|
|
{
|
|
var idElem = window.event.srcID;
|
|
|
|
if ('idConfig' == idElem)
|
|
{
|
|
LoadScriptFile("idScriptConfig", "config.js");
|
|
Config_Activate(true);
|
|
}
|
|
}
|
|
|
|
|
|
/*-------------------------------------------------------------------------
|
|
Purpose: Handle the 'onselectitem' for the places bar
|
|
*/
|
|
function Places_OnSelectItem()
|
|
{
|
|
if (g_idCur == window.event.srcID)
|
|
{
|
|
switch (g_idCur)
|
|
{
|
|
case 'idChangeRemove':
|
|
Remove_SetFocus();
|
|
break;
|
|
|
|
case 'idAdd':
|
|
Add_SetFocus();
|
|
break;
|
|
|
|
case 'idConfig':
|
|
Config_SetFocus();
|
|
break;
|
|
}
|
|
return;
|
|
}
|
|
|
|
_SetPage(window.event.srcID);
|
|
}
|
|
|
|
|
|
/*-------------------------------------------------------------------------
|
|
Purpose: Handle the 'onreadystatechange' for the places bar
|
|
*/
|
|
function Places_OnComplete()
|
|
{
|
|
// Depending on the speed of the machine, this event might get
|
|
// fired before the inline <SCRIPT> in default.hta is run. If this
|
|
// is the case, then initialize g_docAll here, since this code uses
|
|
// it.
|
|
if ("undefined" == typeof g_docAll)
|
|
g_docAll = document.all;
|
|
|
|
_InitPlacesBar();
|
|
}
|
|
|
|
var KC_SPACE = 32;
|
|
var KC_RETURN = 13;
|
|
|
|
/*-------------------------------------------------------------------------
|
|
Purpose: Handle the onKeyDown event
|
|
*/
|
|
function _OnKeyDownFakeAnchor()
|
|
{
|
|
var keyCode = window.event.keyCode;
|
|
|
|
if (KC_SPACE == keyCode || KC_RETURN == keyCode)
|
|
{
|
|
window.event.srcElement.click();
|
|
}
|
|
}
|
|
|