home *** CD-ROM | disk | FTP | other *** search
/ PC World 2006 December / PCWorld_2006-12_cd.bin / komunikace / netscape / nsb-install-8-1-2.exe / chrome / aim.jar / content / aim / msgHdrViewAddresses.js < prev    next >
Text File  |  2006-01-06  |  9KB  |  276 lines

  1. /////////////////////////////////////////////////////////////////////
  2. // These are our hooks into the public mozilla
  3. // header viewing code. This is where we can insert AIM presence 
  4. // information into the message pane.
  5. //////////////////////////////////////////////////////////////////////
  6.  
  7. var gPrefs = Components.classes["@mozilla.org/preferences-service;1"];
  8. gPrefs = gPrefs.getService();
  9. gPrefs = gPrefs.QueryInterface(Components.interfaces.nsIPrefBranch);
  10.  
  11. // list of emails we did not have a buddy list association with
  12. var domNodes = new Object(); 
  13. var emailList = new Array();
  14. var emailNodeList = new Array();
  15. var emailNodeList2 = new Array();
  16.  
  17. // callback for RequestGroupPresenceByEmailAddress()
  18. var LocateCallback = new Object();
  19.  
  20. LocateCallback.OnRequestGroupInfoPresenceComplete = function(pArraySize, pEmailList, pScreenNameList, pPresenceList)
  21. {
  22.   for(i in emailNodeList)
  23.   {
  24.     var emailNode = emailNodeList[i];
  25.     // always set the screen name...even if the user is not online...
  26.     if (pScreenNameList[i])
  27.     {
  28.       emailNode.setTextAttribute("IMScreenName", pScreenNameList[i]);
  29.       if (emailNodeList2[i])
  30.         emailNodeList2[i].setTextAttribute("IMScreenName", pScreenNameList[i]);
  31.     }
  32.  
  33.     if(pPresenceList[i])
  34.     {
  35.       emailNode.setAttribute("BuddyStateString", "ActiveOnline");
  36.  
  37.       // this silly align hack is because css isn't noticing the alignment
  38.       // attribute unless I set it to something...then set it back to what
  39.       // I really want...
  40.       emailNode.setAttribute("align", "left");
  41.       emailNode.setAttribute("align", "right");
  42.       emailNode.setAttribute("max-height", "15px");
  43.       SetSendIMTo (emailNode);
  44.  
  45.       if(emailNodeList2[i])
  46.       {
  47.         emailNode = emailNodeList2[i];
  48.         emailNode.setAttribute("BuddyStateString", "ActiveOnline");
  49.  
  50.         // this silly align hack is because css isn't noticing the alignment
  51.         // attribute unless I set it to something...then set it back to what
  52.         // I really want...
  53.         emailNode.setAttribute("align", "left");
  54.         emailNode.setAttribute("align", "right");
  55.         emailNode.setAttribute("max-height", "15px");
  56.         SetSendIMTo (emailNode);
  57.       }
  58.     }
  59.     else
  60.     {
  61.       // this is a hack to get the email addresses that do not have an aim
  62.       // image to align with the addresses that do have an image next to
  63.       // them.  This hack will add a 1pxX15px transparent image next to
  64.       // the address that does not have the aim icon.
  65.       emailNode.setAttribute("BuddyStateString", "Blank");
  66.  
  67.       // this silly align hack is because css isn't noticing the alignment
  68.       // attribute unless I set it to something...then set it back to what
  69.       // I really want...
  70.       emailNode.setAttribute("align", "left");
  71.       emailNode.setAttribute("align", "right");
  72.       emailNode.setAttribute("max-height", "15px");
  73.       emailNode.removeAttribute("padding-left");
  74.  
  75.       // Clear attributes in case they exist from a cached emailNode
  76.       ClearSendIMTo (emailNode);
  77.     }
  78.   }
  79. }
  80.  
  81. LocateCallback.OnRequestGroupInfoPresenceError = function(pErrMsg) 
  82. {
  83.     //dump("LocateCallback.OnRequestGroupInfoPresenceError\n");
  84.   emailList.length = 0;
  85.   emailNodeList.length = 0;
  86.   emailNodeList2.length = 0;
  87. }
  88.  
  89. /* AddExtraAddressProcessing is called by the msgHdrViewOverlay whenever it encounters
  90.    an email address. This gives us the chance to insert presence information.
  91.    
  92.    It's important to realize that each email address is represented by a borderless
  93.    title button. For presence, we just need to poke the image url associated
  94.    with that title button
  95. */
  96.  
  97. function AddExtraAddressProcessing(emailAddress, emailNode)
  98. {
  99.   // take the email Address, figure out if we have an AIM uri for this
  100.   // email address...if we do, create a titled button element and based on
  101.   // the online presence, give that button a class. Add it to our watch list
  102.   // so we can change this dom element later on. And then insert it into the enclosingNode
  103.  
  104.  
  105.   if (emailAddress && aimBuddyManager())
  106.   {
  107.     if(gPrefs)
  108.     {
  109.       var showPresence = gPrefs.getBoolPref("aim.mail.presence");
  110.       if(!showPresence)
  111.         return;
  112.     }
  113.     else
  114.       return;
  115.  
  116.     var screenName;
  117.     try 
  118.     {
  119.       // Please DO NOT change the 3rd param of getPersonalAbCardFromAttribute() call to 
  120.       // PR_TRUE (ie, case insensitive) without reading bugs #128535 and #121478.
  121.       var card = aimABInfo().getPersonalAbCardFromAttribute("PrimaryEmail", emailAddress, false);
  122.       if (card)
  123.         screenName = card.aimScreenName;
  124.       else {
  125.         screenName = null;
  126.       }
  127.     }
  128.     catch (ex)
  129.     {
  130.       screenName = null;
  131.       dump("ex: " + ex + "\n");
  132.     }
  133.     if (screenName)
  134.     {
  135.        var rdfResourceForName = aimBuddyManager().GetUserResource(screenName);
  136.        if (rdfResourceForName)
  137.        {
  138.           try {
  139.           var target = aimRDFDataSource().GetTarget(rdfResourceForName, buddyStateString, true);
  140.           if (target)
  141.             SetPresence(emailNode, target);
  142.           }
  143.           catch (ex) {
  144.             dump("ex: " + ex + "\n");
  145.           }
  146.           domNodes[rdfResourceForName.Value] = emailNode;
  147.        }
  148.     }
  149.     else
  150.     {
  151.       // add this email address to the list that will be processed later with the LocateManager
  152.  
  153.       var length = emailList.length;
  154.       if(emailList[length-1] == emailAddress && length != 0)
  155.       {
  156.         emailNodeList2[length-1] = emailNode;
  157.       }
  158.       else
  159.       {
  160.         emailList[length] = emailAddress;
  161.         emailNodeList[length] = emailNode;
  162.       }
  163.       emailNode.setAttribute("BuddyStateString", "Blank");
  164.     }
  165.     // be sure to set the screen name as an attribute on the node so we can get it later...
  166.     emailNode.setTextAttribute("IMScreenName", screenName);
  167.   }
  168. }
  169.  
  170. // This will kick off the group processing of presence for email addresses
  171. function FinishEmailProcessing()
  172. {
  173.   //dump("FinishEmailProcessing()\n");
  174.  
  175.   if(gPrefs)
  176.   {
  177.     var showPresence = gPrefs.getBoolPref("aim.mail.presence");
  178.     if(!showPresence)
  179.       return;
  180.   }
  181.   else
  182.     return; 
  183.  
  184.   try
  185.   { aimLocateManager().RequestGroupPresenceByEmailAddress(LocateCallback, emailList.length, emailList); }
  186.   catch(ex)
  187.   {  
  188.     emailList.length = 0;
  189.     emailNodeList.length = 0;
  190.     emailNodeList2.length = 0;
  191.   }
  192. }
  193.  
  194. // NotifyClearAddresses --> use to clear any observers on the email
  195. // addresses that maybe in the hdr view overlay. Each time a new
  196. // message is loaded in message pane, we'll call this function...
  197. function NotifyClearAddresses()
  198. {
  199.   for (i in emailNodeList)
  200.     emailNodeList[i].removeAttribute("BuddyStateString");
  201.       
  202.   for (i in emailNodeList2)
  203.     emailNodeList2[i].removeAttribute("BuddyStateString");
  204.   
  205.   for (i in domNodes)
  206.     domNodes[i].removeAttribute("BuddyStateString");
  207.      
  208. // throw away our knowledge of old data sources..      
  209.   domNodes = new Object(); 
  210.   emailList = new Array();
  211.   emailNodeList = new Array();
  212.   emailNodeList2 = new Array();
  213. }
  214.  
  215. // fillEmailAddressMenu - the onpopupshowing handler for the email address popu menu.
  216. // node --> the popup node that has been selected.
  217. function fillEmailAddressMenu(node)
  218. {
  219.   // we need to determine if we are online or not. If we aren't online, disable the
  220.   // AIM related menu items. If we are online, then make sure they are enabled.
  221.   var target = aimRDFDataSource().GetTarget(aimRDFSession(), aimRDFSessionState(), true);
  222.   var state = target.QueryInterface(Components.interfaces.nsIRDFLiteral).Value;
  223.   var online = false;
  224.   if (state == "Online" || "OnlineAway" == state)
  225.     online = true;
  226.  
  227.   var screenName = node.getAttribute("IMScreenName");
  228.   var buddyStateString = node.getAttribute("BuddyStateString");
  229.   var haveGoodBuddyStateString = true;
  230.   var haveScreenName = false;
  231.   if (screenName && screenName != "")
  232.     haveScreenName = true;
  233.   if((buddyStateString == "Blank") || (buddyStateString == ""))
  234.     haveGoodBuddyStateString = false;
  235.  
  236.   ShowMenuItem("aimEmailAddressSeparator", online);
  237.  
  238.   ShowMenuItem("sendIMForAddress", online);
  239.     EnableMenuItem("sendIMForAddress", online && haveScreenName && haveGoodBuddyStateString);
  240.  
  241.   ShowMenuItem("addAddressToBuddyList", online);
  242.     EnableMenuItem("addAddressToBuddyList", online && haveScreenName && haveGoodBuddyStateString);
  243.   
  244.   return true;
  245. }
  246.  
  247.  
  248. function SetSendIMTo (node)
  249. {
  250.   if (node)
  251.   {
  252.     var screenName = node.getTextAttribute("IMScreenName");
  253.     var buddyStateString = node.getAttribute("BuddyStateString");
  254.     if (screenName)
  255.     {
  256.       node.GetIconNode().setAttribute("data", screenName);
  257.       node.GetIconNode().setAttribute("BuddyStateString", buddyStateString);
  258.       node.GetIconNode().setAttribute("ondblclick", "aimIMInvokeIMForm(getAttribute('data'))"); 
  259.     }
  260.     else
  261.       node.GetIconNode().setAttribute("ondblclick", "aimIMInvokeIMForm(null)");
  262.     }
  263. }
  264.  
  265. // Clear attributes in case they exist from a cached node.
  266. function ClearSendIMTo (node)
  267. {
  268.     if (node)
  269.     {
  270.         node.GetIconNode().removeAttribute("data");
  271.         node.GetIconNode().removeAttribute("BuddyStateString");
  272.         node.GetIconNode().removeAttribute("ondblclick");
  273.     }
  274. }
  275.  
  276.