home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: 35 Internet / 35-Internet.zip / mozil06.zip / bin / chrome / messenger.jar / content / messenger / addressbook / abCommon.js < prev    next >
Text File  |  2001-02-14  |  13KB  |  554 lines

  1. var dirTree = 0;
  2. var resultsTree = 0;
  3.  
  4. // functions needed from abMainWindow and abSelectAddresses
  5.  
  6. // Controller object for Results Pane
  7. var ResultsPaneController =
  8. {
  9.     supportsCommand: function(command)
  10.     {
  11.         switch ( command )
  12.         {
  13.             case "cmd_selectAll":
  14.             case "cmd_delete":
  15.             case "button_delete":
  16.                 return true;
  17.             default:
  18.                 return false;
  19.         }
  20.     },
  21.  
  22.     isCommandEnabled: function(command)
  23.     {
  24.         //dump('ResultsPaneController::isCommandEnabled(' + command + ')\n');
  25.         switch ( command )
  26.         {
  27.             case "cmd_selectAll":
  28.                 return true;
  29.             
  30.             case "cmd_delete":
  31.             case "button_delete":
  32.                 var numSelected = 0;
  33.                 if ( resultsTree && resultsTree.selectedItems )
  34.                     numSelected = resultsTree.selectedItems.length;
  35.                 if ( command == "cmd_delete" )
  36.                 {
  37.                     if ( numSelected < 2 )
  38.                         goSetMenuValue(command, 'valueCard');
  39.                     else
  40.                         goSetMenuValue(command, 'valueCards');
  41.                 }
  42.                 return ( numSelected > 0 );
  43.             
  44.             default:
  45.                 return false;
  46.         }
  47.     },
  48.  
  49.     doCommand: function(command)
  50.     {
  51.         switch ( command )
  52.         {
  53.             case "cmd_selectAll":
  54.                 if ( resultsTree )
  55.                 {
  56.                     dump("select all now!!!!!!" + "\n");
  57.                     resultsTree.selectAll();
  58.                 }
  59.                 break;
  60.             
  61.             case "cmd_delete":
  62.             case "button_delete":
  63.                 if ( resultsTree )
  64.                 {
  65.                     var cardList = resultsTree.selectedItems;
  66.                     top.addressbook.deleteCards(resultsTree, resultsTree, cardList);
  67.                 }
  68.                 break;
  69.         }
  70.     },
  71.     
  72.     onEvent: function(event)
  73.     {
  74.         dump("onEvent("+event+")\n");
  75.         // on blur events set the menu item texts back to the normal values
  76.         if ( event == 'blur' )
  77.         {
  78.             goSetMenuValue('cmd_delete', 'valueDefault');
  79.         }
  80.     }
  81. };
  82.  
  83.  
  84. // Controller object for Dir Pane
  85. var DirPaneController =
  86. {
  87.     supportsCommand: function(command)
  88.     {
  89.         switch ( command )
  90.         {
  91.             case "cmd_selectAll":
  92.             case "cmd_delete":
  93.             case "button_delete":
  94.                 return true;
  95.             default:
  96.                 return false;
  97.         }
  98.     },
  99.  
  100.     isCommandEnabled: function(command)
  101.     {
  102.         //dump('DirPaneController::isCommandEnabled(' + command + ')\n');
  103.         switch ( command )
  104.         {
  105.             case "cmd_selectAll":
  106.                 return true;
  107.             case "cmd_delete":
  108.             case "button_delete":
  109.                 if ( command == "cmd_delete" )
  110.                     goSetMenuValue(command, 'valueAddressBook');
  111.                 if ( dirTree && dirTree.selectedItems )
  112.                     return true;
  113.                 else
  114.                     return false;
  115.  
  116.             default:
  117.                 return false;
  118.         }
  119.     },
  120.  
  121.     doCommand: function(command)
  122.     {
  123.         switch ( command )
  124.         {
  125.             case "cmd_selectAll":
  126.                 if ( dirTree )
  127.                 {
  128.                     dump("select all now!!!!!!" + "\n");
  129.                     dirTree.selectAll();
  130.                 }
  131.                 break;
  132.  
  133.             case "cmd_delete":
  134.             case "button_delete":
  135.                 if ( dirTree )
  136.                     AbDeleteDirectory();
  137. //                    top.addressbook.deleteAddressBooks(dirTree.database, dirTree, dirTree.selectedItems);
  138.                 break;
  139.         }
  140.     },
  141.     
  142.     onEvent: function(event)
  143.     {
  144.         dump("onEvent("+event+")\n");
  145.         // on blur events set the menu item texts back to the normal values
  146.         if ( event == 'blur' )
  147.         {
  148.             goSetMenuValue('cmd_delete', 'valueDefault');
  149.         }
  150.     }
  151. };
  152.  
  153. function InitCommonJS()
  154. {
  155.     dirTree = document.getElementById('dirTree');
  156.     resultsTree = document.getElementById('resultsTree');
  157. }
  158.  
  159. function SetupCommandUpdateHandlers()
  160. {
  161.     // dir pane
  162.     if ( dirTree )
  163.         dirTree.controllers.appendController(DirPaneController);
  164.     
  165.     // results pane
  166.     if ( resultsTree )
  167.         resultsTree.controllers.appendController(ResultsPaneController);
  168. }
  169.  
  170.  
  171. function AbNewCard()
  172. {
  173.     var selectedAB = 0;
  174.     if ( dirTree && dirTree.selectedItems && (dirTree.selectedItems.length == 1) )
  175.         selectedAB = dirTree.selectedItems[0].getAttribute('id');
  176.         
  177.     goNewCardDialog(selectedAB);
  178. }
  179.  
  180. function AbEditCard()
  181. {
  182.     var rdf = Components.classes["@mozilla.org/rdf/rdf-service;1"].getService();
  183.     rdf = rdf.QueryInterface(Components.interfaces.nsIRDFService);
  184.  
  185.     if ( resultsTree.selectedItems && resultsTree.selectedItems.length == 1 )
  186.     {
  187.         var uri = resultsTree.selectedItems[0].getAttribute('id');
  188.         var card = rdf.GetResource(uri);
  189.         card = card.QueryInterface(Components.interfaces.nsIAbCard);
  190.         if (card.isMailList)
  191.         {
  192.             var dirUri = dirTree.selectedItems[0].getAttribute('id');
  193.             listUri = dirUri + "/MailList" + card.dbRowID;
  194.             goEditListDialog(resultsTree.getAttribute('ref'), listUri);
  195.         }
  196.         else
  197.         {
  198.             goEditCardDialog(resultsTree.getAttribute('ref'), card, top.gUpdateCardView);
  199.         }
  200.     }
  201. }
  202.  
  203. function AbNewMessage()
  204. {
  205.     var msgComposeType = Components.interfaces.nsIMsgCompType;
  206.     var msgComposFormat = Components.interfaces.nsIMsgCompFormat;
  207.     var msgComposeService = Components.classes["@mozilla.org/messengercompose;1"].getService(); 
  208.     msgComposeService = msgComposeService.QueryInterface(Components.interfaces.nsIMsgComposeService); 
  209.  
  210.     msgComposeService.OpenComposeWindowWithValues(null, msgComposeType.New, msgComposFormat.Default,
  211.                                                   GetSelectedAddresses(), null, null,
  212.                                                   null, null, null, null, null); 
  213. }  
  214.  
  215. function GetSelectedAddresses()
  216. {
  217.     var item, uri, rdf, cardResource, card;
  218.     var selectedAddresses = "";
  219.     
  220.     rdf = Components.classes["@mozilla.org/rdf/rdf-service;1"].getService();
  221.     rdf = rdf.QueryInterface(Components.interfaces.nsIRDFService);
  222.  
  223.     if ( resultsTree.selectedItems && resultsTree.selectedItems.length )
  224.     {
  225.         for ( item = 0; item < resultsTree.selectedItems.length; item++ )
  226.         {
  227.             uri = resultsTree.selectedItems[item].getAttribute('id');
  228.             cardResource = rdf.GetResource(uri);
  229.             card = cardResource.QueryInterface(Components.interfaces.nsIAbCard);
  230.             if ( selectedAddresses )
  231.                 selectedAddresses += ",";
  232.             selectedAddresses += "\"" + card.displayName + "\" <" + card.primaryEmail + ">";
  233.         }
  234.     }
  235.     return selectedAddresses;    
  236. }
  237.  
  238.  
  239. function SelectFirstAddressBook()
  240. {
  241.     var body = document.getElementById('dirTreeBody');
  242.     if ( dirTree && body )
  243.     {
  244.         var treeitems = body.getElementsByTagName('treeitem');
  245.         if ( treeitems && treeitems.length > 0 )
  246.         {
  247.             dirTree.selectItem(treeitems[0]);
  248.             ChangeDirectoryByDOMNode(treeitems[0]);
  249.         }
  250.     }
  251. }
  252.  
  253. function SelectFirstCard()
  254. {
  255.     var body = GetResultsTreeChildren();
  256.  
  257.     if ( resultsTree && body )
  258.     {
  259.         var treeitems = body.getElementsByTagName('treeitem');
  260.         if ( treeitems && treeitems.length > 0 )
  261.         {
  262.             resultsTree.selectItem(treeitems[0]);
  263.             ResultsPaneSelectionChange();
  264.         }
  265.     }
  266. }
  267.  
  268. function DirPaneSelectionChange()
  269. {
  270.     if ( dirTree && dirTree.selectedItems && (dirTree.selectedItems.length == 1) )
  271.     {
  272.         ChangeDirectoryByDOMNode(dirTree.selectedItems[0]);
  273.     }
  274.     else    
  275.     {
  276.         if ( resultsTree )
  277.         {
  278.             ClearResultsTreeSelection();
  279.             resultsTree.setAttribute('ref', null);
  280.         }
  281.     }
  282. }
  283.  
  284. function ChangeDirectoryByDOMNode(dirNode)
  285. {
  286.     var uri = dirNode.getAttribute('id');
  287.     
  288.     if ( resultsTree )
  289.     {
  290.         if ( uri != resultsTree.getAttribute('ref') )
  291.         {
  292.             ClearResultsTreeSelection();
  293.             resultsTree.setAttribute('ref', uri);
  294.             WaitUntilDocumentIsLoaded();
  295.             SortToPreviousSettings();
  296.             SelectFirstCard();
  297.         }
  298.     }
  299. }
  300.  
  301. function ResultsPaneSelectionChange()
  302. {
  303.     if ( top.gUpdateCardView )
  304.         top.gUpdateCardView();
  305.     
  306.     if ( top.gDialogResultsPaneSelectionChanged )
  307.         top.gDialogResultsPaneSelectionChanged();
  308. }
  309.  
  310. function ClearResultsTreeSelection()
  311. {
  312.     if ( resultsTree )
  313.         resultsTree.clearItemSelection();
  314. }
  315.  
  316. function RedrawResultsTree()
  317. {
  318.     if ( resultsTree )
  319.     {
  320.         var ref = resultsTree.getAttribute('ref');
  321.         resultsTree.setAttribute('ref', ref);
  322.     }
  323. }
  324.     
  325. function RememberResultsTreeSelection()
  326. {
  327.     var selectionArray = 0;
  328.     
  329.     if ( resultsTree )
  330.     {
  331.         var selectedItems = resultsTree.selectedItems;
  332.         var numSelected = selectedItems.length;
  333.  
  334.         selectionArray = new Array(numSelected);
  335.  
  336.         for ( var i = 0; i < numSelected; i++ )
  337.         {
  338.             selectionArray[i] = selectedItems[i].getAttribute("id");
  339.             dump("selectionArray["+i+"] = " + selectionArray[i] + "\n");
  340.         }
  341.  
  342.     }
  343.     return selectionArray;
  344. }
  345.  
  346. function RestoreResultsTreeSelection(selectionArray)
  347. {
  348.     if ( resultsTree && selectionArray )
  349.     {
  350.         var numSelected = selectionArray.length;
  351.  
  352.         WaitUntilDocumentIsLoaded();
  353.  
  354.         var rowElement;
  355.         for ( var i = 0 ; i < numSelected; i++ )
  356.         {
  357.             rowElement = document.getElementById(selectionArray[i]);
  358.             resultsTree.addItemToSelection(rowElement);
  359.             if ( rowElement && (i==0) )
  360.                 resultsTree.ensureElementIsVisible(rowElement);
  361.         }
  362.         ResultsPaneSelectionChange();
  363.     }
  364. }
  365.  
  366. function WaitUntilDocumentIsLoaded()
  367. {
  368.     // FIX ME - we should really have this function available in a global place that does not
  369.     // require that we have access to mailnews code (msgNavigationService) from address book.
  370.     var msgNavigationService = Components.classes['@mozilla.org/messenger/msgviewnavigationservice;1'].getService();
  371.     msgNavigationService= msgNavigationService.QueryInterface(Components.interfaces.nsIMsgViewNavigationService);
  372.  
  373.     msgNavigationService.EnsureDocumentIsLoaded(document);
  374. }
  375.  
  376. function GetResultsTreeChildren()
  377. {
  378.     if ( resultsTree && resultsTree.childNodes )
  379.     {
  380.         for ( var index = resultsTree.childNodes.length - 1; index >= 0; index-- )
  381.         {
  382.             if ( resultsTree.childNodes[index].localName == 'treechildren' )
  383.             {
  384.                 return(resultsTree.childNodes[index]);
  385.             }
  386.         }
  387.     }
  388.     return null;
  389. }
  390.  
  391. function GetResultsTreeItem(row)
  392. {
  393.     var treechildren = GetResultsTreeChildren();
  394.     
  395.     if ( treechildren && row > 0)
  396.     {
  397.         var treeitems = treechildren.getElementsByTagName('treeitem');
  398.         if ( treeitems && treeitems.length >= row )
  399.             return treeitems[row-1];
  400.     }
  401.     return null;
  402. }
  403.  
  404. function SortResultPane(column, sortKey)
  405. {
  406.     var node = document.getElementById(column);
  407.     if (!node)    return(false);
  408.  
  409.     var sortDirection = "ascending";
  410.     var currentDirection = node.getAttribute('sortDirection');
  411.     if ( currentDirection == "ascending" )
  412.         sortDirection = "descending";
  413.     else
  414.         sortDirection = "ascending";
  415.     
  416.     UpdateSortIndicator(column, sortDirection);
  417.  
  418.     DoSort(column, sortKey, sortDirection);
  419.     
  420.     SaveSortSetting(column, sortKey, sortDirection);
  421.     return(true);
  422. }
  423.  
  424. function DoSort(column, key, direction)
  425. {
  426.     var isupports = Components.classes["@mozilla.org/rdf/xul-sort-service;1"].getService();
  427.     if (!isupports)    return(false);
  428.     
  429.     var xulSortService = isupports.QueryInterface(Components.interfaces.nsIXULSortService);
  430.     if (!xulSortService)    return(false);
  431.  
  432.     var node = document.getElementById(column);
  433.     
  434.     if ( node )
  435.     {
  436.         var selectionArray = RememberResultsTreeSelection();
  437.         if (selectionArray.length)
  438.         {
  439.             xulSortService.Sort(node, key, direction);
  440.             ClearResultsTreeSelection()    ;
  441.             WaitUntilDocumentIsLoaded();
  442.             RestoreResultsTreeSelection(selectionArray);
  443.         }
  444.     }
  445. }
  446.  
  447. function SortToPreviousSettings()
  448. {
  449.     if ( dirTree && resultsTree )
  450.     {
  451.         var ref = resultsTree.getAttribute('ref');
  452.         var folder = document.getElementById(ref);
  453.         if ( folder )
  454.         {
  455.             var column = folder.getAttribute('sortColumn');    
  456.             var key = folder.getAttribute('sortKey');
  457.             var direction = folder.getAttribute('sortDirection');
  458.             
  459.             if ( !column || !key )
  460.             {
  461.                 column = "NameColumn";
  462.                 key = 'http://home.netscape.com/NC-rdf#Name';
  463.             }
  464.             if ( !direction )
  465.                 direction = 'ascending';
  466.             
  467.             UpdateSortIndicator(column,direction);
  468.             
  469.             DoSort(column, key, direction);
  470.         }    
  471.     }
  472. }
  473.  
  474. function SaveSortSetting(column, key, direction)
  475. {
  476.     if ( dirTree && resultsTree )
  477.     {
  478.         var ref = resultsTree.getAttribute('ref');
  479.         var folder = document.getElementById(ref);
  480.         if ( folder )
  481.         {
  482.             folder.setAttribute('sortColumn', column);    
  483.             folder.setAttribute('sortKey', key);
  484.             folder.setAttribute('sortDirection', direction);
  485.         }    
  486.     }
  487. }
  488.  
  489. //------------------------------------------------------------
  490. // Sets the column header sort icon based on the requested 
  491. // column and direction.
  492. // 
  493. // Notes:
  494. // (1) This function relies on the first part of the 
  495. //     <treecell id> matching the <treecol id>.  The treecell
  496. //     id must have a "Header" suffix.
  497. // (2) By changing the "sortDirection" attribute, a different
  498. //     CSS style will be used, thus changing the icon based on
  499. //     the "sortDirection" parameter.
  500. //------------------------------------------------------------
  501. function UpdateSortIndicator(column,sortDirection)
  502. {
  503.     // Find the <treerow> element
  504.     var treerow = document.getElementById("headRow");
  505.     var id = column + "Header";
  506.     
  507.     if (treerow)
  508.     {
  509.         // Grab all of the <treecell> elements
  510.         var treecell = treerow.getElementsByTagName("treecell");
  511.         if (treecell)
  512.         {
  513.             // Loop through each treecell...
  514.             var node_count = treecell.length;
  515.             for (var i=0; i < node_count; i++)
  516.             {
  517.                 // Is this the requested column ?
  518.                 if (id == treecell[i].getAttribute("id"))
  519.                 {
  520.                     // Set the sortDirection so the class (CSS) will add the
  521.                     // appropriate icon to the header cell
  522.                     treecell[i].setAttribute('sortDirection',sortDirection);
  523.                 }
  524.                 else
  525.                 {
  526.                     // This is not the sorted row
  527.                     treecell[i].removeAttribute('sortDirection');
  528.                 }
  529.             }
  530.         }
  531.     }
  532. }
  533.  
  534. function AbNewList()
  535. {
  536.     var selectedAB = 0;
  537.     if ( dirTree && dirTree.selectedItems && (dirTree.selectedItems.length == 1) )
  538.         selectedAB = dirTree.selectedItems[0].getAttribute('id');
  539.         
  540.     window.openDialog("chrome://messenger/content/addressbook/abMailListDialog.xul",
  541.                       "",
  542.                       "chrome,titlebar,resizeable=no",
  543.                       {selectedAB:selectedAB});
  544. }
  545.  
  546.  
  547. function goEditListDialog(abURI, listURI)
  548. {
  549.     window.openDialog("chrome://messenger/content/addressbook/abEditListDialog.xul",
  550.                       "",
  551.                       "chrome,titlebar,resizeable=no",
  552.                       {abURI:abURI, listURI:listURI});
  553. }
  554.