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 / RELOAD2.JS < prev    next >
Text File  |  2008-01-19  |  13KB  |  357 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.  * taskNotify
  129.  *
  130.  * PURPOSE: Calls MMCCtrl's tasknotify. Uses expando properties instead of
  131.  *          parameters as the event is hooked up using attachEvent.
  132.  *
  133.  *          This is just a dummy function. We cannot do attachEvent with
  134.  *          parameters. So we use this dummy function to call real function
  135.  *          with those properties.
  136.  *
  137.  * RETURNS:
  138.  *    Nothing
  139.  *
  140.  *+-------------------------------------------------------------------------*/
  141. function taskNotify()
  142. {
  143.     var srcElement = window.event.srcElement;
  144.  
  145.     MMCCtrl.TaskNotify(srcElement.param1, srcElement.param2, srcElement.param3);
  146. }
  147.  
  148. /*+-------------------------------------------------------------------------*
  149.  *
  150.  * PopulateTaskpad
  151.  *
  152.  * PURPOSE: Adds all tasks in the taskpad to the HTML. Also holds on to the
  153.  *          task objects using the array s_rgTasks.
  154.  *
  155.  * RETURNS:
  156.  *    Nothing
  157.  *
  158.  *+-------------------------------------------------------------------------*/
  159. function PopulateTaskpad()
  160. {
  161.    var objTask     = MMCCtrl.GetFirstTask(szHash);
  162.    var strTasksHTML = "";
  163.    var strTaskHTML = "";
  164.    var bIsLargeIconMode = true;
  165.    var i = 0;
  166.    var count = 0;
  167.    var tempArray;
  168.  
  169.    var IconSize = (bIsLargeIconMode) ? 32 : 16;
  170.  
  171.    // Add the listpad title and button, if it exists
  172.    var objListviewInfo = MMCCtrl.GetListPadInfo(szHash);
  173.  
  174.    if (objListviewInfo)
  175.    {
  176.       // Set the parameters for button-click handler (see taskNotify).
  177.       btnLV.param1 = objListviewInfo.Clsid;
  178.       btnLV.param2 = objListviewInfo.NotifyID;
  179.       btnLV.param3 = 0;
  180.       btnLV.attachEvent("onclick", taskNotify);
  181.  
  182.       ListViewTitle.innerText = objListviewInfo.Title + "";
  183.       if(objListviewInfo.HasButton)
  184.       {
  185.          btnLV.value = objListviewInfo.Text;
  186.       }
  187.       else
  188.       {
  189.          btnLV.style.display = "none";
  190.       }
  191.    }
  192.  
  193.  
  194.  
  195.    // add the watermark, if it exists
  196.  
  197.    var objWatermark = MMCCtrl.GetBackground( szHash );
  198.  
  199.    if (objWatermark != null)
  200.    {
  201.       // Keep track of the watermark display object type
  202.       var watermarkObjectType = objWatermark.DisplayObjectType;
  203.  
  204.       switch (watermarkObjectType)
  205.       {
  206.       case 1: // MMC_TASK_DISPLAY_TYPE_SYMBOL
  207.          var szWatermarkColor = (screen.colorDepth <= 8) ? "color:threedlightshadow;" : "color:threedshadow;filter:alpha(opacity=15);";
  208.  
  209.          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>";
  210.          TaskpadNameDIV.insertAdjacentHTML("afterEnd", szWatermark);
  211.          break;
  212.  
  213.       case 2: // MMC_TASK_DISPLAY_TYPE_VANILLA_GIF,      // (GIF) index 0 is transparent
  214.       case 3: // MMC_TASK_DISPLAY_TYPE_CHOCOLATE_GIF,    // (GIF) index 1 is transparent
  215.       case 4: // MMC_TASK_DISPLAY_TYPE_BITMAP            // non-transparent raster
  216.           // Note: No distinction made between GIF & Raster for the watermark
  217.           var gszWatermarkImage = objWatermark.MouseOverBitmap;
  218.           break;
  219.       }
  220.    }
  221.  
  222.    // add the taskpad title
  223.    TaskpadName.innerHTML        = "<NOBR>"+MMCCtrl.GetTitle(szHash)+"</NOBR>";
  224.    TaskpadDescription.innerHTML = MMCCtrl.GetDescriptiveText(szHash) + "<BR />";
  225.  
  226.    while (objTask != null)
  227.    {
  228.       s_rgTasks[i]= objTask; // this holds on to the task object.
  229.  
  230.       strTaskHTML = "";
  231.  
  232.       strTaskHTML += "         <SPAN CLASS='cInline'>";
  233.       strTaskHTML += "";
  234.       strTaskHTML += "         <TABLE  BORDER='0' WIDTH='100%'>";
  235.       strTaskHTML += "             <TR>";
  236.       strTaskHTML += "                 <TD>";
  237.       strTaskHTML += "                     <BR />";
  238.       strTaskHTML += "                 </TD>";
  239.       strTaskHTML += "             </TR>";
  240.       strTaskHTML += "             <TR>";
  241.       strTaskHTML += "                 <TD VALIGN='TOP' width='32'height='32' style='border: 0 black solid; overflow:hidden'>";
  242.       strTaskHTML += GetTaskDisplayHTML(objTask, i);
  243.       strTaskHTML += "                 </TD>";
  244.       strTaskHTML += "                 <TD>";
  245.       strTaskHTML += "                     <SPAN CLASS='Task' id='TaskID' onmouseover=\"javascript:window.event.srcElement.className='TaskHover';\" onmouseout=\"javascript:window.event.srcElement.className='Task';\"";
  246.       strTaskHTML += "                         onclick='javascript:Task"+i+"_Clicked();'";
  247.       strTaskHTML += "                         tabIndex=\"0\">";
  248.       strTaskHTML += "                     </SPAN>";
  249.       strTaskHTML += "";
  250.       strTaskHTML += "                 </TD>";
  251.       strTaskHTML += "             </TR>";
  252.       strTaskHTML += "             </TABLE>";
  253.       strTaskHTML += "         </SPAN>";
  254.  
  255.       szScripts += "           function Task"+i+"_Clicked()";
  256.       szScripts += "           {";
  257.       szScripts += "              try";
  258.       szScripts += "              {";
  259.       szScripts += "                 window.event.srcElement.className='Task';";
  260.  
  261.       switch (objTask.ActionType)
  262.       // 3 possibilities for action:  "ID:", "LINK:" and "SCRIPT:"
  263.       {
  264.           case 0:
  265.               // MMC_TASK_ACTION_ID
  266.                szScripts += "MMCCtrl.TaskNotify(s_rgTasks["+i+"].Clsid,s_rgTasks["+i+"].CommandID,0);";
  267.               break;
  268.  
  269.           case 1:
  270.               // MMC_TASK_ACTION_LINK
  271.                szScripts += "window.navigate(s_rgTasks["+i+"].ActionURL);";
  272.               break;
  273.  
  274.           case 2:
  275.               // MMC_TASK_ACTION_SCRIPT
  276.              // Convert script language string to upper case
  277.              var szLanguage = objTask.ScriptLanguage.toUpperCase();
  278.  
  279.              switch (szLanguage)
  280.              {
  281.                  case "JSCRIPT":
  282.                  case "JAVASCRIPT":
  283.                      // Pass a script string to the JSObject to be evaluated and executed
  284.                      // through the eval method (this can be a semi-colon delimited complex expression)
  285.                      szScripts += "eval (s_rgTasks["+i+"].Script);";
  286.                      break;
  287.  
  288.                  case "VBSCRIPT":
  289.                  case "VBS":
  290.                      // Use the window.execScript method to execute a simple or complex VBScript expression
  291.                      szScripts += "window.execScript (s_rgTasks["+i+"].Script, '"+szLanguage+"');";
  292.                      break;
  293.  
  294.                  default:
  295.                      alert (L_UnknownScriptingLanguage_ErrorMessage);
  296.                      break;
  297.              }
  298.              break;
  299.               break;
  300.       }
  301.  
  302.       szScripts += "               ";
  303.       szScripts += "              } catch(e)";
  304.       szScripts += "              {";
  305.       szScripts += "                 window.alert(e.description);";
  306.       szScripts += "              }";
  307.       szScripts += "           }";
  308.  
  309.       strTasksHTML +=  strTaskHTML;
  310.  
  311.       objTask = MMCCtrl.GetNextTask();
  312.       ++i;
  313.    }
  314.  
  315.    count = i; // the total number of tasks
  316.  
  317.    Tasks.innerHTML = strTasksHTML; // add the tasks to the HTML
  318.  
  319.    tempArray= document.all.item("TaskID"); //get the collection of all tasks on the page.
  320.  
  321.    if(count==1)
  322.    {
  323.       // in this case tempArray is not an array at all, but a single object per the DHTML object model
  324.       tempArray.title     =s_rgTasks[0].Help; // set the tooltip
  325.       tempArray.innerText =s_rgTasks[0].Text; // set the title
  326.       eval("Image0.title=s_rgTasks[0].Help;"); // set the tooltip for the image      
  327.    }
  328.    else
  329.    {
  330.        if(tempArray.length != count) // sanity check
  331.        {
  332.           alert("Error!");
  333.        }
  334.  
  335.        // set up the tasks - we do this here rather than expanding the variables in the strings above to
  336.        // prevent Escaping problems. Eg \ would need to be converted to \\ otherwise.
  337.        for(i=0; i<count; i++)
  338.        {
  339.           tempArray(i).title     =s_rgTasks[i].Help; // set the tooltip
  340.           tempArray(i).innerText =s_rgTasks[i].Text; // set the title
  341.  
  342.           eval("Image"+i+".title=s_rgTasks["+i+"].Help;"); // set the tooltip for the image
  343.  
  344.        }
  345.    }
  346.  
  347.    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.
  348.    TaskpadNameDIV.insertAdjacentHTML("afterBegin", szScripts);
  349. }
  350.  
  351. function OnLoad()
  352. {
  353.    document.vlinkColor = document.linkColor; // make sure that visited links don't look different
  354.  
  355.    PopulateTaskpad();
  356.  
  357. }