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