home *** CD-ROM | disk | FTP | other *** search
/ Chip 2002 January / 01_02.iso / software / netscape62win / mail.xpi / bin / chrome / messenger.jar / content / messenger / addressbook / addressbook.js < prev    next >
Text File  |  2001-08-04  |  12KB  |  446 lines

  1. var cvPrefs = 0;
  2. var addressbook = 0;
  3. var gUpdateCardView = 0;
  4. var gAddressBookBundle;
  5.  
  6. var gTotalCardsElement = null;
  7.  
  8. var addressBookObserver = {
  9.   onAssert: function(aDataSource, aSource, aProperty, aTarget)
  10.   {
  11.     UpdateAddDeleteCounts();
  12.   },
  13.  
  14.   onUnassert: function(aDataSource, aSource, aProperty, aTarget)
  15.   {
  16.     UpdateAddDeleteCounts();
  17.   },
  18.  
  19.   onChange: function(aDataSource, aSource, aProperty, aOldTarget, aNewTarget)
  20.   { },
  21.  
  22.   onMove: function(aDataSource,
  23.                 aOldSource,
  24.                 aNewSource,
  25.                 aProperty,
  26.                 aTarget)
  27.   {},
  28.  
  29.   beginUpdateBatch: function(aDataSource)
  30.   {},
  31.  
  32.   endUpdateBatch: function(aDataSource)
  33.   {}
  34. }
  35.  
  36. function OnUnloadAddressBook()
  37. {
  38.     try
  39.     {
  40.         var dataSource = top.rdf.GetDataSource("rdf:addressdirectory");
  41.         dataSource.RemoveObserver (addressBookObserver);
  42.     }
  43.     catch (ex)
  44.     {
  45.         dump(ex + "\n");
  46.         dump("Error removing from RDF datasource\n");
  47.     }
  48. }
  49.  
  50. function OnLoadAddressBook()
  51. {
  52.     gAddressBookBundle = document.getElementById("bundle_addressBook");
  53.     verifyAccounts();     // this will do migration, if we need to.
  54.  
  55.     top.addressbook = Components.classes["@mozilla.org/addressbook;1"].createInstance();
  56.     top.addressbook = top.addressbook.QueryInterface(Components.interfaces.nsIAddressBook);
  57.     top.gUpdateCardView = UpdateCardView;
  58.  
  59.     InitCommonJS();
  60.     GetCurrentPrefs();
  61.  
  62.     // FIX ME - later we will be able to use onload from the overlay
  63.     OnLoadCardView();
  64.     
  65.     try {
  66.         top.addressbook.setWebShellWindow(window)
  67.     }
  68.     catch (ex) {
  69.         dump("failed to set webshell window\n");
  70.     }
  71.  
  72.     SetupCommandUpdateHandlers();
  73.  
  74.     //workaround - add setTimeout to make sure dynamic overlays get loaded first
  75.     setTimeout('SelectFirstAddressBook()',0);
  76.  
  77.     try
  78.     {
  79.         var dataSource = top.rdf.GetDataSource("rdf:addressdirectory");
  80.         dataSource.AddObserver (addressBookObserver);
  81.     }
  82.     catch (ex)
  83.     {
  84.         dump(ex + "\n");
  85.         dump("Error adding to RDF datasource\n");
  86.     }
  87. }
  88.  
  89.  
  90. function GetCurrentPrefs()
  91. {
  92.     // prefs
  93.     if ( cvPrefs == 0 )
  94.         cvPrefs = new Object;
  95.  
  96.     var prefs = Components.classes["@mozilla.org/preferences;1"];
  97.     if ( prefs )
  98.     {
  99.         prefs = prefs.getService();
  100.         if ( prefs )
  101.             prefs = prefs.QueryInterface(Components.interfaces.nsIPref);
  102.     }
  103.             
  104.     if ( prefs )
  105.     {
  106.         try {
  107.             cvPrefs.prefs = prefs;
  108.             cvPrefs.displayLastNameFirst = prefs.GetBoolPref("mail.addr_book.displayName.lastnamefirst");
  109.             cvPrefs.nameColumn = prefs.GetIntPref("mail.addr_book.lastnamefirst");
  110.             cvPrefs.lastFirstSeparator = ", ";
  111.             cvPrefs.firstLastSeparator = " ";
  112.         }
  113.         catch (ex) {
  114.             dump("failed to get the mail.addr_book.displayName.lastnamefirst pref\n");
  115.         }
  116.     }
  117.     
  118.     // check "Show Name As" menu item based on pref
  119.     var menuitemID;
  120.     switch ( cvPrefs.nameColumn )
  121.     {
  122.         case 2:
  123.             menuitemID = 'firstLastCmd';
  124.             break;
  125.         case 1:
  126.             menuitemID = 'lastFirstCmd';
  127.             break;
  128.         case 0:
  129.         default:
  130.             menuitemID = 'displayNameCmd';
  131.             break;
  132.     }
  133.     menuitem = top.document.getElementById(menuitemID);
  134.     if ( menuitem )
  135.         menuitem.setAttribute('checked', 'true');
  136. }
  137.  
  138.  
  139. function SetNameColumn(cmd)
  140. {
  141.     var prefValue;
  142.     
  143.     switch ( cmd )
  144.     {
  145.         case 'firstLastCmd':
  146.             prefValue = 2;
  147.             break;
  148.         case 'lastFirstCmd':
  149.             prefValue = 1;
  150.             break;
  151.         case 'displayNameCmd':
  152.             prefValue = 0;
  153.             break;
  154.     }
  155.     
  156.     // set pref in file and locally
  157.     cvPrefs.prefs.SetIntPref("mail.addr_book.lastnamefirst", prefValue);
  158.     cvPrefs.nameColumn = prefValue;
  159.     
  160.     var selectionArray = RememberResultsTreeSelection();
  161.     ClearResultsTreeSelection()    ;
  162.     
  163.     RedrawResultsTree();
  164.     
  165.     WaitUntilDocumentIsLoaded();
  166.     SortToPreviousSettings();
  167.     RestoreResultsTreeSelection(selectionArray);
  168. }
  169.  
  170.  
  171. function CommandUpdate_AddressBook()
  172. {
  173.     goUpdateCommand('button_delete');
  174.     
  175.     // get selection info from dir pane
  176.     var oneAddressBookSelected = false;
  177.     if ( dirTree && dirTree.selectedItems && (dirTree.selectedItems.length == 1) )
  178.         oneAddressBookSelected = true;
  179.         
  180.     // get selection info from results pane
  181.     var selectedCards = GetSelectedAddresses();
  182.     var oneOrMoreCardsSelected = false;
  183.     if ( selectedCards )
  184.         oneOrMoreCardsSelected = true;
  185.     
  186.     // set commands to enabled / disabled
  187.     //goSetCommandEnabled('cmd_PrintCard', oneAddressBookSelected);
  188.     goSetCommandEnabled('cmd_SortByName', oneAddressBookSelected);
  189.     goSetCommandEnabled('cmd_SortByEmail', oneAddressBookSelected);
  190.     goSetCommandEnabled('cmd_SortByWorkPhone', oneAddressBookSelected);
  191.     goSetCommandEnabled('cmd_SortByOrganization', oneAddressBookSelected);
  192. }
  193.  
  194.  
  195. function UpdateCardView()
  196. {
  197.     if ( resultsTree && resultsTree.selectedItems && (resultsTree.selectedItems.length == 1) )
  198.         DisplayCardViewPane(resultsTree.selectedItems[0]);
  199.     else
  200.         ClearCardViewPane();
  201. }
  202.  
  203.  
  204. function AbClose()
  205. {
  206.     top.close();
  207. }
  208.  
  209. function AbNewAddressBook()
  210. {
  211.     var dialog = window.openDialog("chrome://messenger/content/addressbook/abAddressBookNameDialog.xul",
  212.                                    "",
  213.                                    "chrome,titlebar",
  214.                                    {okCallback:AbCreateNewAddressBook});
  215. }
  216.  
  217. function AbCreateNewAddressBook(name)
  218. {
  219.     var prefsAttr = new Array;
  220.     var prefsValue = new Array;
  221.     prefsAttr[0]  = "description";
  222.     prefsValue[0]  = name;  
  223.     top.addressbook.newAddressBook(dirTree.database, resultsTree, 1, prefsAttr, prefsValue);
  224. }
  225.  
  226. function AbPrintCard()
  227. {
  228.     dump("print card\n");
  229.  
  230.     var selectedItems = resultsTree.selectedItems;
  231.     var numSelected = selectedItems.length;
  232.  
  233.     if (numSelected == 0)
  234.     {
  235.         dump("AbPrintCard(): No card selected.\n");
  236.         return false;
  237.     }  
  238.     var statusFeedback;
  239.     statusFeedback = Components.classes["@mozilla.org/messenger/statusfeedback;1"].createInstance();
  240.     statusFeedback = statusFeedback.QueryInterface(Components.interfaces.nsIMsgStatusFeedback);
  241.  
  242.     var selectionArray = new Array(numSelected);
  243.  
  244.     var totalCard = 0;
  245.     for(var i = 0; i < numSelected; i++)
  246.     {
  247.         var uri = selectedItems[i].getAttribute("id");
  248.         var cardResource = top.rdf.GetResource(uri);
  249.         var card = cardResource.QueryInterface(Components.interfaces.nsIAbCard);
  250.         if (card.printCardUrl.length)
  251.         {
  252.             selectionArray[totalCard++] = card.printCardUrl;
  253.             dump("printCardUrl = " + card.printCardUrl + "\n");
  254.         }
  255.     }
  256.  
  257.     printEngineWindow = window.openDialog("chrome://messenger/content/msgPrintEngine.xul",
  258.                                         "",
  259.                                         "chrome,dialog=no,all",
  260.                                         totalCard, selectionArray, statusFeedback);
  261.  
  262.     return true;
  263. }
  264.  
  265. function AbPrintAddressBook()
  266. {
  267.         dump("print address book \n");
  268.         try {
  269.                 addressbook.PrintAddressbook();
  270.         }
  271.         catch (ex) {
  272.                 dump("failed to print address book\n");
  273.         }
  274. }
  275.  
  276. function AbImport()
  277. {
  278.     try {
  279.         addressbook.importAddressBook();
  280.     }
  281.     catch (ex) {
  282.         alert("failed to import the addressbook.\n");
  283.         dump("import failed:  " + ex + "\n");
  284.     }
  285. }
  286.  
  287. /*
  288. function AbDelete()
  289. {
  290. //    dump("\AbDelete from XUL\n");
  291.     var tree = document.getElementById('resultsTree');
  292.     if ( tree )
  293.     {
  294.         //get the selected elements
  295.         var cardList = tree.selectedItems;
  296.         //get the current folder
  297.         var srcDirectory = document.getElementById('resultsTree');
  298.         dump("srcDirectory = " + srcDirectory + "\n");
  299.         top.addressbook.deleteCards(tree, srcDirectory, cardList);
  300.     }
  301. }
  302. */
  303.  
  304.  
  305. function AbDeleteDirectory()
  306. {
  307.     dump("\AbDeleteDirectory from XUL\n");
  308.  
  309.     var promptService = Components.classes["@mozilla.org/embedcomp/prompt-service;1"].getService();
  310.     promptService = promptService.QueryInterface(Components.interfaces.nsIPromptService);
  311.  
  312.     var selArray = dirTree.selectedItems;
  313.     var count = selArray.length;
  314.     debugDump("selArray.length = " + count + "\n");
  315.     if (count == 0)
  316.         return;
  317.  
  318.     var isPersonalOrCollectedAbsSelectedForDeletion = false;
  319.     var parentArray = Components.classes["@mozilla.org/supports-array;1"].createInstance(Components.interfaces.nsISupportsArray);
  320.     if ( !parentArray ) return (false); 
  321.  
  322.     for ( var i = 0; i < count; ++i )
  323.     {
  324.         debugDump("    nodeId #" + i + " = " + selArray[i].getAttribute("id") + "\n");
  325.         
  326.         // check to see if personal or collected address books is selected for deletion.
  327.         // if yes, prompt the user an appropriate message saying these cannot be deleted
  328.         // if no, mark the selected items for deletion
  329.         if ((selArray[i].getAttribute("id") != "moz-abmdbdirectory://history.mab") &&
  330.              (selArray[i].getAttribute("id") != "moz-abmdbdirectory://abook.mab"))
  331.         {
  332.             var parent = selArray[i].parentNode.parentNode;
  333.             if (parent)
  334.             {
  335.                 if (parent == dirTree)
  336.                     var parentId = "moz-abdirectory://";
  337.                 else    
  338.                     var parentId = parent.getAttribute("id");
  339.  
  340.                 debugDump("    parentId #" + i + " = " + parentId + "\n");
  341.                 var dirResource = rdf.GetResource(parentId);
  342.                 var parentDir = dirResource.QueryInterface(Components.interfaces.nsIAbDirectory);
  343.                 parentArray.AppendElement(parentDir);
  344.             }
  345.         }
  346.         else 
  347.         {
  348.             if (promptService)
  349.             {
  350.                 promptService.alert(window,
  351.                     gAddressBookBundle.getString("cannotDeleteTitle"), 
  352.                     gAddressBookBundle.getString("cannotDeleteMessage"));
  353.             }
  354.  
  355.             isPersonalOrCollectedAbsSelectedForDeletion = true;
  356.             break;
  357.         }
  358.     }
  359.  
  360.     if (!isPersonalOrCollectedAbsSelectedForDeletion) {
  361.         var confirmDeleteAddressbook =
  362.             gAddressBookBundle.getString("confirmDeleteAddressbook");
  363.  
  364.         if(!window.confirm(confirmDeleteAddressbook))
  365.             return;
  366.  
  367.         top.addressbook.deleteAddressBooks(dirTree.database, parentArray, dirTree.selectedItems);
  368.     }
  369. }
  370.  
  371. function clickResultsTree(event)
  372. {
  373.     // we only care about button 0 (left click) events
  374.     if (event.button != 0) return;
  375.  
  376.     if (event.target.localName != "treecell" &&
  377.         event.target.localName != "treeitem")
  378.         return;
  379.  
  380.     if ( event.detail == 2 ) top.AbEditCard();
  381. }
  382.  
  383. function UpdateAddDeleteCounts()
  384. {
  385.   if ( dirTree && dirTree.selectedItems && (dirTree.selectedItems.length == 1) )
  386.   {
  387.     var dirUri = dirTree.selectedItems[0].getAttribute("id");
  388.     UpdateStatusCardCounts(dirUri);
  389.   }
  390. }
  391.  
  392. function GetTotalCardCountElement()
  393. {
  394.   if(gTotalCardsElement) return gTotalCardsElement;
  395.   var totalCardCountElement = document.getElementById('statusText');
  396.   gTotalCardsElement = totalCardCountElement;
  397.   return totalCardCountElement;
  398. }
  399.  
  400. function UpdateStatusCardCounts(uri)
  401. {
  402.   if (top.addressbook)
  403.   {
  404.     try
  405.     {
  406.       var dirResource = rdf.GetResource(uri);
  407.       var parentDir = dirResource.QueryInterface(Components.interfaces.nsIAbDirectory);
  408.       if (parentDir && !parentDir.isMailList)
  409.       {
  410.         try
  411.         {
  412.           var totalCards = parentDir.getTotalCards(false);
  413.           SetTotalCardStatus(parentDir.dirName, totalCards);
  414.         }
  415.         catch(ex)
  416.         {
  417.           dump("Fail to get card total from "+uri+"\n");
  418.         }
  419.       }
  420.     }
  421.     catch(ex)
  422.     {
  423.       dump("Fail to get directory from "+uri+"\n");
  424.     }
  425.   }
  426. }
  427.  
  428. function SetTotalCardStatus(name, total)
  429. {
  430.   var totalElement = GetTotalCardCountElement();
  431.   if (totalElement)
  432.   {
  433.     try 
  434.     {
  435.       var numTotal = gAddressBookBundle.getFormattedString("totalCardStatus", [name, total]);   
  436.       totalElement.setAttribute("label", numTotal);
  437.     }
  438.     catch(ex)
  439.     {
  440.       dump("Fail to set total cards in status\n");
  441.     }
  442.   }
  443.   else
  444.       dump("Can't find status bar\n");
  445. }
  446.