|
|
<!--NOTE: this file is expected to be ANSI - do not add any localizable strings to it !!! --> <HTML> <head> <style> body {margin:0; font: clientTop:0; icon; color: windowtext; background:window; overflow:none} .cInline { display:inline; width:@@TASKWIDTH@@; margin-right:5px; vertical-align:top; } BottomPanel {overflow:auto} #FolderIcon {height:expression(TaskpadName.clientHeight + 10); width:100%;} #TaskpadName {font: caption; color:captiontext; margin-left:0; margin-right:0; margin-top: 0; width:100%; border:0; padding-left:3; padding-top:5; padding-bottom:7;} #TaskpadDescription {font:icon; padding-left:5px; padding-top:5px; padding-bottom:3px; padding-right:5px} p {font-weight:normal; border:0; margin-top:0} table {font:icon; border:0 solid; padding:0; margin:0;} <!--cellpadding and cellspacing only apply to table, but are NOT CSS attributes. Set them on a per-tag basis --> tr {margin:0; border:0; padding:0} td {margin:0; border:0 solid; padding:0} div {border:0; margin:0; padding:0; }
.Task {color:expression(document.linkColor); text-decoration:underline; cursor:hand;} .TaskHover {color:expression(document.linkColor); text-decoration:underline; cursor:hand;} <!-- Cannot use the user's hover color because once a link has been visited, the hover color never appears. So it is better
to be consistent than correct only part of the time --> </style> </head>
<!--update the task states for all appropriate events --> <script language="JavaScript" for="MMCEvents" EVENT="OnSelectionChange(V, N)">UpdateState();</script> <script language="JavaScript" for="MMCEvents" EVENT="OnContextMenuExecuted(MI)">UpdateState();</script> <script language="JavaScript" for="MMCEvents" EVENT="OnViewChange(V, N)">UpdateState();</script> <script language="JavaScript" for="MMCEvents" EVENT="OnToolbarButtonClicked()">UpdateState();</script> <script language="JavaScript" for="MMCEvents" EVENT="OnListUpdated(V)">UpdateState();</script>
<script language = "JavaScript">
// Prevent text from being selected and messing up the UI. function document.onselectstart() { event.returnValue = false; }
var reColumnPattern=/\$COL<([^>]+)>/; var reNamePattern=/\$NAME<([^>]+)>/; var reClipFmtPattern=/\$CLIPFMT_DATA<([^>]+)>/; var regExpClipFmt = /(.*),(.*)/;
function GetCommandLineTaskState(s) { var iCol, iName, iClip, nName, nCol, cCol;
var Columns = external.Columns;
var bEnabled = true; // enabled by default
while (true) // search for COL tags { iCol = s.search(reColumnPattern); if(iCol==-1) // no more $COL tags break;
nCol=parseInt(RegExp.$1) + 1; // in console taskpads, the column is zero based. Convert it to one-based here.
cCol = Columns.count;
// make sure the column exists if(cCol < nCol) return false;
// make sure the column is visible if(external.Columns(nCol).Hidden) return false;
// must have exactly one item selected for command line tasks that contain column information if(external.Selection.count != 1) return false;
s = s.substr(iCol+1); // skip to the next occurrence }
while (true) // search for CLIPFMT tags { iClip = s.search(reClipFmtPattern); if(iClip==-1) // no more $CLIPFMT tags break;
// Replace the clipfmt tags strRep = RegExp.$1; // the format at this point is item,format where item = r Or R for the current result item, 0 for the current scope item, 1 for the parent, and so on. strRep.search(regExpClipFmt);
curItem = RegExp.$1; // item
if(curItem=='r' || curItem=='R') { if(external.Selection.count != 1) return false; } s = s.substr(iClip+1); // skip to the next occurrence }
return true; }
function UpdateState() { try { var oObject = document.all.tags("SPAN"); //get the collection of all hyperlinks on the page. var str = ""; var thisObject; var selectionmenu = null; var scopemenu = null; var menuItem = null; var selection = external.Selection; var enabled = false; var count = selection.count;
// get the scope node menu scopemenu = external.ScopeNodeContextMenu;
// get the selection menu if(selection.Count != 0) // there is a selection { selectionmenu = external.SelectionContextMenu; }
if(oObject != null) { for(i = 0; i!= oObject.length; i++) { thisObject = oObject(i); enabled = false;
// set the state of result items if(thisObject.id == "ResultTask") { menuItem = null; if(selectionmenu != null) menuItem = selectionmenu(thisObject.parameter); // see if the object exists
if(menuItem != null) if(menuItem.Enabled) enabled = true; }
else if(thisObject.id == "TargetTask") // set the state of target item tasks { menuItem = null; if(scopemenu != null) menuItem = scopemenu(thisObject.parameter); // see if the object exists
if(menuItem != null) if(menuItem.Enabled) enabled = true; }
else if(thisObject.id == "CommandLineTask") // set the state of target item tasks { enabled = GetCommandLineTaskState(thisObject.parameter); }
else // all other tasks are always available. enabled = true;
// enable/disable the task based on the enabled state - the cInline object is displayed or hidden thisObject.parentNode.parentNode.parentNode.parentNode.parentNode.style.display = enabled ? "" : "none" ; } } } catch(err) { } } </script>
<script language="JavaScript">
function GetNthParent(nNode) { var curNode = external.ActiveScopeNode;
for(i = 0; i != nNode; i++) // get the nth parent curNode = external.Document.ScopeNamespace.GetParent(curNode);
return curNode; }
/*+-------------------------------------------------------------------------* * * ParseParameters * * PURPOSE: Performs parameter substitution. Substitute parameters are * specified as follows: * $COL[columnName]: Substitutes the entry under the column * labelled columnName for the currently selected item. * $NAME[scopeNodeIndex]: Substitutes the name of the nth parent * of the currently selected scope node. n=0 is the currently * selected scope node itself. * $CLIPFMT_DATA[node,fmt]: Substitutes the clipboard format specified * by fmt of the object specified by node, where node = * r or R: The currently selected result item * 0, 1, 2...: The nth parent of the currently selected * scope node * * * NOTE: The actual incoming parameters use angle braces, not square braces. * These are converted in a pre-process step to square braces because * jscript-xml interaction makes it difficult to use them here. * * RETURNS: * function * *+-------------------------------------------------------------------------*/ function ParseParameters(s) { var t; var strRep; var strTemp = ""; var re=/>/; var iCol, iName, iClip, nName, nCol;
while (true) // search for COL tags { iCol = s.search(reColumnPattern); if(iCol==-1) // no more $COL tags break;
// Replace the column tags nCol = parseInt(RegExp.$1) + 1; // in console taskpads, the column is zero based. Convert it to one-based here. strRep = external.CellContents(external.Selection(1), nCol); strTemp = s.substr(0, iCol) + strRep;
// move past the closing ">" s = s.substr(iCol); t = s.search(re); s = strTemp + s.substr(t+1); }
while (true) // search for NAME tags { iName = s.search(reNamePattern); if(iName==-1) // no more $NAME tags break;
// Replace the Name tags curNode = GetNthParent(RegExp.$1);
strRep = curNode.Name;
strTemp = s.substr(0, iName) + strRep;
// move past the closing ">" s = s.substr(iName); t = s.search(re); s = strTemp + s.substr(t+1); }
while (true) // search for CLIPFMT tags { iClip = s.search(reClipFmtPattern); if(iClip==-1) // no more $CLIPFMT tags break;
// Replace the clipfmt tags strRep = RegExp.$1; // the format at this point is item,format where item = r Or R for the current result item, 0 for the current scope item, 1 for the parent, and so on. strRep.search(regExpClipFmt);
curItem = RegExp.$1; // item clipfmt = RegExp.$2; // format
if(curItem=='r' || curItem=='R') Node = external.Selection(1); else Node = GetNthParent(curItem);
strRep = Node.Property(clipfmt); // get the clipboard format
strTemp = s.substr(0, iClip) + strRep;
// move past the closing ">" s = s.substr(iClip); t = s.search(re); s = strTemp + s.substr(t+1); }
return s; } </script>
@@ORIENTATIONSPECIFICHTML@@
</HTML>
|