Source code of Windows XP (NT5)
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

169 lines
4.6 KiB

<PUBLIC:HTC URN="shellctls">
//------------------------------------------------------------------------
// Public methods
//------------------------------------------------------------------------
//------------------------------------------------------------------------
// Events
//------------------------------------------------------------------------
//------------------------------------------------------------------------
// Attach to element events
//------------------------------------------------------------------------
<ATTACH event="oncontentready" handler=_OnContentReady />
//------------------------------------------------------------------------
// The code...
//------------------------------------------------------------------------
<SCRIPT language="javascript">
var _bLoading = true; // true if the behavior is still loading
var _idFor = null;
var _szText = null;
var _ichAccel = 0;
var _chAccel;
var c_szAccelStyle = "style = 'text-decoration:underline; accelerator:true'";
// This code is run when the behavior is instantiated...
element.attachEvent("onerror", _OnError);
_GetPropertyDefaults();
// **********************************************************************
// PROPERTY GET/SET FUNCTIONS
// **********************************************************************
// Property: forElem = idElem
//
// Sets the 'for' attribute of the inserted LABEL element
//
function get_forCtl() { return _idFor; }
function put_forCtl(id)
{
if (_bLoading)
return;
_idFor = id;
}
// **********************************************************************
// EVENT HANDLERS
// **********************************************************************
/*-------------------------------------------------------------------------
Purpose: When the behavior is completely loaded, set the loading flag to false.
To improve load time, we don't want the put methods on the properties
to be called. We also need to keep events from getting fired while
the behavior is loading.
*/
function _OnContentReady()
{
_bLoading = false;
_ScanForAccelerator();
_CreateHTML();
}
// **********************************************************************
// HELPER FUNCTIONS
// **********************************************************************
/*-------------------------------------------------------------------------
Purpose: Called when the behavior is instantiated. Sets up the internal
property values.
*/
function _GetPropertyDefaults()
{
if (element.forElem)
_idFor = element.forElem;
}
/*-------------------------------------------------------------------------
Purpose: Walk thru the element's innertext and find which letter is tagged as
the accelerator (as indicated by '&' -- Win32 style).
*/
function _ScanForAccelerator()
{
// Pick off first '&'
var sz = element.innerText;
_ichAccel = sz.indexOf('&');
_szText = sz.substring(0, _ichAccel);
if (_ichAccel < sz.length - 1)
_szText = _szText + sz.substring(_ichAccel+1, sz.length);
if (0 <= _ichAccel)
_chAccel = sz.charAt(_ichAccel+1);
}
/*-------------------------------------------------------------------------
Purpose: Adds the HTML code to the main document to display the accelerator.
Given this innertext: "Cl&ose", this behavior inserts text like
the following:
<LABEL id=idxxxx for=idyyyyy accesskey="o">
Cl<SPAN class=Accelerator>o</SPAN>se
</LABEL>
*/
function _CreateHTML()
{
// Construct the html
element.innerHTML =
'<LABEL id=idLblAccel_' + uniqueID + ' for=' + _idFor + ' accesskey="' + _chAccel + '">' +
_szText.substring(0, _ichAccel) +
'<SPAN ' + c_szAccelStyle + '>' +
_szText.substring(_ichAccel, _ichAccel+1) +
'</SPAN>' +
_szText.substring(_ichAccel+1, _szText.length) +
'</LABEL>';
}
/*-------------------------------------------------------------------------
Purpose: Handle the onerror event
*/
function _OnError(szMsg, szUrl, iLine)
{
// Prevent scripting errors from displaying ugly messages
alert("An unexpected error occurred.\n\n" + szMsg + "\n" + szUrl + "\nLine: " + iLine);
return true; // Suppress IE error messaging
}
</SCRIPT>
//------------------------------------------------------------------------
// Properties
//------------------------------------------------------------------------
<PROPERTY name="forElem" get=get_forCtl put=put_forCtl />
</PUBLIC:HTC>