<!--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() { 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" ; } } } </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>