home *** CD-ROM | disk | FTP | other *** search
/ PC World Komputer 2010 April / PCWorld0410.iso / WindowsServerTrial / server.iso / sources / install.wim / 2 / Windows / System32 / mmc.exe / HTML / RELOAD.JS next >
Text File  |  2008-01-19  |  12KB  |  312 lines

  1. // constants
  2. // Taskpad button display types
  3. var CON_TASK_DISPLAY_TYPE_SYMBOL = 1;               // EOT-based symbol | font
  4. var CON_TASK_DISPLAY_TYPE_VANILLA_GIF = 2;          // (GIF) index 0 is transparent
  5. var CON_TASK_DISPLAY_TYPE_CHOCOLATE_GIF = 3;        // (GIF) index 1 is transparent
  6. var CON_TASK_DISPLAY_TYPE_BITMAP = 4;               // non-transparent raster image
  7.  
  8. // global variables
  9. var s_rgTasks          = new Array();
  10. var s_rgURLtoEOTUnique = new Array();
  11. var s_rgFontFamilyNameUnique = new Array();
  12. var szScripts          = "";
  13.  
  14. var szHash = location.hash;
  15.  
  16. if (szHash != "")  // not sure why this is needed.
  17. {
  18.     szHash = szHash.substr(1);
  19. }
  20.  
  21. // need to collect the list of unique EOT URLs and create a <STYLE> @font-face{} </STYLE> rule here
  22. {
  23.    // 1. Add all EOTs to a list
  24.    var objTask     = MMCCtrl.GetFirstTask(szHash);
  25.    while (objTask != null)
  26.    {
  27.       var displayObject = objTask.DisplayObject;
  28.  
  29.       if(displayObject.DisplayObjectType == CON_TASK_DISPLAY_TYPE_SYMBOL)             // EOT-based symbol | font
  30.          AddEOT(displayObject. URLtoEOT, displayObject.FontFamilyName);
  31.  
  32.       objTask = MMCCtrl.GetNextTask();
  33.    }
  34.  
  35.    var szCssText = "";
  36.  
  37.    // 2. Loop through each unique EOT & FontFamilyName
  38.    for (var i = 0; i < s_rgURLtoEOTUnique.length; i++)
  39.    {
  40.        szCssText += "@font-face {font-family:'" + s_rgFontFamilyNameUnique[i] + "';font-style:normal; font-weight:normal; src:url('" + s_rgURLtoEOTUnique[i] + "');}";
  41.    }
  42.  
  43.    szCssText = "<style" +">" + szCssText + "</style" +">";
  44.  
  45.    //alert(szCssText);
  46.  
  47.    document.write(szCssText);
  48. }
  49.  
  50. // Prevent text from being selected and messing up the UI.
  51. function document.onselectstart()
  52. {
  53.     event.returnValue = false;
  54. }
  55.  
  56. function AddEOT(szURLtoEOT, szFontFamilyName)
  57. {
  58.    // 1. determine whether the URL is unique
  59.  
  60.    // Get the length of the unique URL array
  61.    var iLength = s_rgURLtoEOTUnique.length;
  62.    var i       = 0;
  63.  
  64.    // Compare with each existing entry in the array
  65.    if(iLength > 0)
  66.    {
  67.       for (i = 0; i < iLength; i++)
  68.       {
  69.           if (s_rgURLtoEOTUnique[i] == szURLtoEOT)
  70.           {
  71.               // Found a duplicate
  72.               bUnique = false;
  73.               return;
  74.           }
  75.       }
  76.    }
  77.  
  78.    // 2. If we reached here, the URL is unique. Add it to the array.
  79.    s_rgURLtoEOTUnique[iLength]       = szURLtoEOT;
  80.    s_rgFontFamilyNameUnique[iLength] = szFontFamilyName;
  81. }
  82.  
  83. function GetTaskDisplayHTML(objTask, i)
  84. {
  85.    var displayObject = objTask.DisplayObject;
  86.  
  87.    // Build up the HTML for the button
  88.    var szBtnHTML = "";
  89.    var displayObjectType = displayObject.DisplayObjectType;
  90.  
  91.    switch (displayObjectType)
  92.    {
  93.    case CON_TASK_DISPLAY_TYPE_SYMBOL:             // EOT-based symbol | font
  94.       szBtnHTML += "      <span id = 'Image"+i+"' style='cursor:hand' width='100%' height='100%' onclick='javascript:Task"+i+"_Clicked();' style='font-family:\"" + displayObject.FontFamilyName + "\";font-size:23pt;'>" + displayObject.SymbolString +"</span>";
  95.       break;
  96.  
  97.  
  98.    // there is NO difference between CON_TASK_DISPLAY_TYPE_VANILLA_GIF and CON_TASK_DISPLAY_TYPE_CHOCOLATE_GIF. The original intent was never implemented.
  99.    case CON_TASK_DISPLAY_TYPE_VANILLA_GIF:        // transparent
  100.    case CON_TASK_DISPLAY_TYPE_CHOCOLATE_GIF:      // transparent
  101.    case CON_TASK_DISPLAY_TYPE_BITMAP:             // non-transparent raster image
  102.  
  103.        var szFilterCode    = "";
  104.        var szMouseOverCode = "";
  105.  
  106.        if( (displayObjectType == CON_TASK_DISPLAY_TYPE_VANILLA_GIF) || (displayObjectType == CON_TASK_DISPLAY_TYPE_CHOCOLATE_GIF) )
  107.        {
  108.           szFilterCode = "FILTER: mask(color=" + SysColorX.HEXthreedshadow + "); ";
  109.        }
  110.  
  111.  
  112.        if( (displayObject.MouseOverBitmap != "") && (displayObject.MouseOverBitmap != displayObject.MouseOffBitmap))
  113.        {
  114.           szMouseOverCode   = "onmouseover='Image"+i+".src=s_rgTasks["+i+"].DisplayObject.MouseOverBitmap;' ";
  115.           szMouseOverCode  += "onmouseout ='Image"+i+".src=s_rgTasks["+i+"].DisplayObject.MouseOffBitmap;' ";
  116.        }
  117.  
  118.        szBtnHTML += "<span style='cursor:hand' width='100%' height='100%' onclick='javascript:Task"+i+"_Clicked();'> <IMG id='Image"+i+"'"+ szMouseOverCode +"style='" + szFilterCode +"WIDTH: 32px; HEIGHT: 32px' src='"+displayObject.MouseOffBitmap+"'></span>";
  119.  
  120.        break;
  121.    }    
  122.    return szBtnHTML;
  123.  
  124. }
  125.  
  126. /*+-------------------------------------------------------------------------*
  127.  *
  128.  * PopulateTaskpad
  129.  *
  130.  * PURPOSE: Adds all tasks in the taskpad to the HTML. Also holds on to the
  131.  *          task objects using the array s_rgTasks.
  132.  *
  133.  * RETURNS:
  134.  *    Nothing
  135.  *
  136.  *+-------------------------------------------------------------------------*/
  137. function PopulateTaskpad()
  138. {
  139.    var objTask     = MMCCtrl.GetFirstTask(szHash);
  140.    var strTasksHTML = "";
  141.    var strTaskHTML = "";
  142.    var bIsLargeIconMode = true;
  143.    var i = 0;
  144.    var count = 0;
  145.    var tempArray;
  146.  
  147.    var IconSize = (bIsLargeIconMode) ? 32 : 16;
  148.  
  149.    // add the watermark, if it exists
  150.  
  151.    var objWatermark = MMCCtrl.GetBackground( szHash );
  152.  
  153.    if (objWatermark != null)
  154.    {
  155.       // Keep track of the watermark display object type
  156.       var watermarkObjectType = objWatermark.DisplayObjectType;
  157.  
  158.       switch (watermarkObjectType)
  159.       {
  160.       case 1: // MMC_TASK_DISPLAY_TYPE_SYMBOL
  161.          var szWatermarkColor = (screen.colorDepth <= 8) ? "color:threedlightshadow;" : "color:threedshadow;filter:alpha(opacity=15);";
  162.  
  163.          var szWatermark = "<table style=' z-index:-1; position:absolute' width='100%' height='100%' cellspacing='0' cellpadding='10' border='0' frame='none' rules='none'><tr><td style='width:100%'><span></span></td><td valign='bottom' style='"+szWatermarkColor+" font-family:\"" + objWatermark.FontFamilyName + "\";font-weight:normal;font-size:300pt;'>" + objWatermark.SymbolString +"</td></tr></table>";
  164.          TaskpadNameDIV.insertAdjacentHTML("afterEnd", szWatermark);
  165.          break;
  166.  
  167.       case 2: // MMC_TASK_DISPLAY_TYPE_VANILLA_GIF,      // (GIF) index 0 is transparent
  168.       case 3: // MMC_TASK_DISPLAY_TYPE_CHOCOLATE_GIF,    // (GIF) index 1 is transparent
  169.       case 4: // MMC_TASK_DISPLAY_TYPE_BITMAP            // non-transparent raster
  170.           // Note: No distinction made between GIF & Raster for the watermark
  171.           var gszWatermarkImage = objWatermark.MouseOverBitmap;
  172.           break;
  173.       }
  174.    }
  175.  
  176.    // add the taskpad title
  177.    TaskpadName.innerHTML        = "<NOBR>"+MMCCtrl.GetTitle(szHash)+"</NOBR>";
  178.    TaskpadDescription.innerHTML = MMCCtrl.GetDescriptiveText(szHash) + "<BR />";
  179.  
  180.    while (objTask != null)
  181.    {
  182.       s_rgTasks[i]= objTask; // this holds on to the task object.
  183.  
  184.       strTaskHTML = "";
  185.  
  186.       strTaskHTML += "         <SPAN CLASS='cInline'>";
  187.       strTaskHTML += "";
  188.       strTaskHTML += "         <TABLE  BORDER='0' WIDTH='100%'>";
  189.       strTaskHTML += "             <TR>";
  190.       strTaskHTML += "                 <TD>";
  191.       strTaskHTML += "                     <BR />";
  192.       strTaskHTML += "                 </TD>";
  193.       strTaskHTML += "             </TR>";
  194.       strTaskHTML += "             <TR>";
  195.       strTaskHTML += "                 <TD VALIGN='TOP' width='32'height='32' style='border: 0 black solid; overflow:hidden'>";
  196.       strTaskHTML += GetTaskDisplayHTML(objTask, i);
  197.       strTaskHTML += "                 </TD>";
  198.       strTaskHTML += "                 <TD>";
  199.       strTaskHTML += "                     <SPAN CLASS='Task' id='TaskID' onmouseover=\"javascript:window.event.srcElement.className='TaskHover';\" onmouseout=\"javascript:window.event.srcElement.className='Task';\"";
  200.       strTaskHTML += "                         onclick='javascript:Task"+i+"_Clicked();'";
  201.       strTaskHTML += "                         tabIndex=\"0\">";
  202.       strTaskHTML += "                     </SPAN>";
  203.       strTaskHTML += "";
  204.       strTaskHTML += "                 </TD>";
  205.       strTaskHTML += "             </TR>";
  206.       strTaskHTML += "             </TABLE>";
  207.       strTaskHTML += "         </SPAN>";
  208.  
  209.       szScripts += "           function Task"+i+"_Clicked()";
  210.       szScripts += "           {";
  211.       szScripts += "              try";
  212.       szScripts += "              {";
  213.       szScripts += "                 window.event.srcElement.className='Task';";
  214.  
  215.       switch (objTask.ActionType)
  216.       // 3 possibilities for action:  "ID:", "LINK:" and "SCRIPT:"
  217.       {
  218.           case 0:
  219.               // MMC_TASK_ACTION_ID
  220.                szScripts += "MMCCtrl.TaskNotify(s_rgTasks["+i+"].Clsid,s_rgTasks["+i+"].CommandID,0);";
  221.               break;
  222.  
  223.           case 1:
  224.               // MMC_TASK_ACTION_LINK
  225.                szScripts += "window.navigate(s_rgTasks["+i+"].ActionURL);";
  226.               break;
  227.  
  228.           case 2:
  229.               // MMC_TASK_ACTION_SCRIPT
  230.              // Convert script language string to upper case
  231.              var szLanguage = objTask.ScriptLanguage.toUpperCase();
  232.  
  233.              switch (szLanguage)
  234.              {
  235.                  case "JSCRIPT":
  236.                  case "JAVASCRIPT":
  237.                      // Pass a script string to the JSObject to be evaluated and executed
  238.                      // through the eval method (this can be a semi-colon delimited complex expression)
  239.                      szScripts += "eval (s_rgTasks["+i+"].Script);";
  240.                      break;
  241.  
  242.                  case "VBSCRIPT":
  243.                  case "VBS":
  244.                      // Use the window.execScript method to execute a simple or complex VBScript expression
  245.                      szScripts += "window.execScript (s_rgTasks["+i+"].Script, '"+szLanguage+"');";
  246.                      break;
  247.  
  248.                  default:
  249.                      alert (L_UnknownScriptingLanguage_ErrorMessage);
  250.                      break;
  251.              }
  252.              break;
  253.               break;
  254.       }
  255.  
  256.       szScripts += "               ";
  257.       szScripts += "              } catch(e)";
  258.       szScripts += "              {";
  259.       szScripts += "                 window.alert(e.description);";
  260.       szScripts += "              }";
  261.       szScripts += "           }";
  262.  
  263.       strTasksHTML +=  strTaskHTML;
  264.  
  265.       objTask = MMCCtrl.GetNextTask();
  266.       ++i;
  267.    }
  268.  
  269.    count = i; // the total number of tasks
  270.  
  271.    Tasks.innerHTML = strTasksHTML; // add the tasks to the HTML
  272.  
  273.    tempArray= document.all.item("TaskID"); //get the collection of all tasks on the page.
  274.  
  275.    if(count==1)
  276.    {
  277.       // in this case tempArray is not an array at all, but a single object per the DHTML object model
  278.       tempArray.title     =s_rgTasks[0].Help; // set the tooltip
  279.       tempArray.innerText =s_rgTasks[0].Text; // set the title
  280.       eval("Image0.title=s_rgTasks[0].Help;"); // set the tooltip for the image      
  281.    }
  282.    else
  283.    {
  284.        if(tempArray.length != count) // sanity check
  285.        {
  286.           alert("Error!");
  287.        }
  288.  
  289.        // set up the tasks - we do this here rather than expanding the variables in the strings above to
  290.        // prevent Escaping problems. Eg \ would need to be converted to \\ otherwise.
  291.        for(i=0; i<count; i++)
  292.        {
  293.           tempArray(i).title     =s_rgTasks[i].Help; // set the tooltip
  294.           tempArray(i).innerText =s_rgTasks[i].Text; // set the title
  295.  
  296.           eval("Image"+i+".title=s_rgTasks["+i+"].Help;"); // set the tooltip for the image
  297.  
  298.        }
  299.    }
  300.  
  301.  
  302.    szScripts = '<span style="display:none">h</span><SCRIPT DEFER>' + szScripts +'</SCRIPT' + '>'; // see Q185140. The SPAN is needed because it causes the page to be reparsed.
  303.    TaskpadNameDIV.insertAdjacentHTML("afterBegin", szScripts);
  304. }
  305.  
  306. function OnLoad()
  307. {
  308.    document.vlinkColor = document.linkColor; // make sure that visited links don't look different
  309.  
  310.    PopulateTaskpad();
  311.  
  312. }