home *** CD-ROM | disk | FTP | other *** search
/ Maximum CD 2009 May / maximum-cd-2009-05.iso / DiscContents / Firefox Setup 3.0.6.exe / nonlocalized / chrome / toolkit.jar / content / passwordmgr / passwordManagerCommon.js < prev    next >
Encoding:
JavaScript  |  2007-10-18  |  7.3 KB  |  243 lines

  1. //@line 42 "/e/fx19rel/WINNT_5.2_Depend/mozilla/toolkit/components/passwordmgr/content/passwordManagerCommon.js"
  2.  
  3. /*** =================== INITIALISATION CODE =================== ***/
  4.  
  5. var kObserverService;
  6. var gSelectUserInUse = false;
  7.  
  8. // interface variables
  9. var passwordmanager     = null;
  10.  
  11. // password-manager lists
  12. var signons             = [];
  13. var rejects             = [];
  14. var deletedSignons      = [];
  15. var deletedRejects      = [];
  16.  
  17. var signonsTree;
  18. var rejectsTree;
  19.  
  20. var showingPasswords = false;
  21.  
  22. function Startup() {
  23.   // xpconnect to password manager interfaces
  24.   passwordmanager = Components.classes["@mozilla.org/login-manager;1"]
  25.                         .getService(Components.interfaces.nsILoginManager);
  26.  
  27.   // be prepared to reload the display if anything changes
  28.   kObserverService = Components.classes["@mozilla.org/observer-service;1"].getService(Components.interfaces.nsIObserverService);
  29.   kObserverService.addObserver(signonReloadDisplay, "signonChanged", false);
  30.  
  31.   // be prepared to disable the buttons when selectuser dialog is in use
  32.   kObserverService.addObserver(signonReloadDisplay, "signonSelectUser", false);
  33.  
  34.   signonsTree = document.getElementById("signonsTree");
  35.   rejectsTree = document.getElementById("rejectsTree");
  36. }
  37.  
  38. function Shutdown() {
  39.   kObserverService.removeObserver(signonReloadDisplay, "signonChanged");
  40.   kObserverService.removeObserver(signonReloadDisplay, "signonSelectUser");
  41. }
  42.  
  43. var signonReloadDisplay = {
  44.   observe: function(subject, topic, state) {
  45.     if (topic == "signonChanged") {
  46.       if (state == "signons") {
  47.         signons.length = 0;
  48.         if (lastSignonSortColumn == "hostname") {
  49.           lastSignonSortAscending = !lastSignonSortAscending; // prevents sort from being reversed
  50.         }
  51.         LoadSignons();
  52.         // apply the filter if needed
  53.         if (document.getElementById("filter") && document.getElementById("filter").value != "") {
  54.           _filterPasswords();
  55.         }
  56.       } else if (state == "rejects") {
  57.         rejects.length = 0;
  58.         if (lastRejectSortColumn == "hostname") {
  59.           lastRejectSortAscending = !lastRejectSortAscending; // prevents sort from being reversed
  60.         }
  61.         LoadRejects();
  62.       }
  63.     } else if (topic == "signonSelectUser") {
  64.       if (state == "suspend") {
  65.         gSelectUserInUse = true;
  66.         document.getElementById("removeSignon").disabled = true;
  67.         document.getElementById("removeAllSignons").disabled = true;
  68.         document.getElementById("togglePasswords").disabled = true;
  69.       } else if (state == "resume") {
  70.         gSelectUserInUse = false;
  71.         var selections = GetTreeSelections(signonsTree);
  72.         if (selections.length > 0) {
  73.           document.getElementById("removeSignon").disabled = false;
  74.         }
  75.         if (signons.length > 0) {
  76.           document.getElementById("removeAllSignons").disabled = false;
  77.           document.getElementById("togglePasswords").disabled = false;
  78.         }
  79.       } else if (state == "inUse") {
  80.         gSelectUserInUse = true;
  81.       }
  82.     }
  83.   }
  84. }
  85.  
  86. /*** =================== GENERAL CODE =================== ***/
  87.  
  88. function DeleteAllFromTree(tree, view, table, deletedTable, removeButton, removeAllButton) {
  89.  
  90.   // remove all items from table and place in deleted table
  91.   for (var i=0; i<table.length; i++) {
  92.     deletedTable[deletedTable.length] = table[i];
  93.   }
  94.   table.length = 0;
  95.  
  96.   // clear out selections
  97.   view.selection.select(-1); 
  98.  
  99.   // update the tree view and notify the tree
  100.   view.rowCount = 0;
  101.  
  102.   var box = tree.treeBoxObject;
  103.   box.rowCountChanged(0, -deletedTable.length);
  104.   box.invalidate();
  105.  
  106.  
  107.   // disable buttons
  108.   document.getElementById(removeButton).setAttribute("disabled", "true")
  109.   document.getElementById(removeAllButton).setAttribute("disabled","true");
  110. }
  111.  
  112. function DeleteSelectedItemFromTree
  113.     (tree, view, table, deletedTable, removeButton, removeAllButton) {
  114.  
  115.   // Turn off tree selection notifications during the deletion
  116.   tree.view.selection.selectEventsSuppressed = true;
  117.  
  118.   // remove selected items from list (by setting them to null) and place in deleted list
  119.   var selections = GetTreeSelections(tree);
  120.   for (var s=selections.length-1; s>= 0; s--) {
  121.     var i = selections[s];
  122.     deletedTable[deletedTable.length] = table[i];
  123.     table[i] = null;
  124.   }
  125.  
  126.   // collapse list by removing all the null entries
  127.   for (var j=0; j<table.length; j++) {
  128.     if (table[j] == null) {
  129.       var k = j;
  130.       while ((k < table.length) && (table[k] == null)) {
  131.         k++;
  132.       }
  133.       table.splice(j, k-j);
  134.       view.rowCount -= k - j;
  135.       tree.treeBoxObject.rowCountChanged(j, j - k);
  136.     }
  137.   }
  138.  
  139.   // update selection and/or buttons
  140.   if (table.length) {
  141.     // update selection
  142.     var nextSelection = (selections[0] < table.length) ? selections[0] : table.length-1;
  143.     tree.view.selection.select(nextSelection);
  144.     tree.treeBoxObject.ensureRowIsVisible(nextSelection);
  145.   } else {
  146.     // disable buttons
  147.     document.getElementById(removeButton).setAttribute("disabled", "true")
  148.     document.getElementById(removeAllButton).setAttribute("disabled","true");
  149.   }
  150.   tree.view.selection.selectEventsSuppressed = false;
  151. }
  152.  
  153. function GetTreeSelections(tree) {
  154.   var selections = [];
  155.   var select = tree.view.selection;
  156.   if (select) {
  157.     var count = select.getRangeCount();
  158.     var min = new Object();
  159.     var max = new Object();
  160.     for (var i=0; i<count; i++) {
  161.       select.getRangeAt(i, min, max);
  162.       for (var k=min.value; k<=max.value; k++) {
  163.         if (k != -1) {
  164.           selections[selections.length] = k;
  165.         }
  166.       }
  167.     }
  168.   }
  169.   return selections;
  170. }
  171.  
  172. function SortTree(tree, view, table, column, lastSortColumn, lastSortAscending, updateSelection) {
  173.  
  174.   // remember which item was selected so we can restore it after the sort
  175.   var selections = GetTreeSelections(tree);
  176.   var selectedNumber = selections.length ? table[selections[0]].number : -1;
  177.  
  178.   // determine if sort is to be ascending or descending
  179.   var ascending = (column == lastSortColumn) ? !lastSortAscending : true;
  180.  
  181.   // do the sort
  182.   var compareFunc;
  183.   if (ascending) {
  184.     compareFunc = function compare(first, second) {
  185.       return CompareLowerCase(first[column], second[column]);
  186.     }
  187.   } else {
  188.     compareFunc = function compare(first, second) {
  189.       return CompareLowerCase(second[column], first[column]);
  190.     }
  191.   }
  192.   table.sort(compareFunc);
  193.  
  194.   // restore the selection
  195.   var selectedRow = -1;
  196.   if (selectedNumber>=0 && updateSelection) {
  197.     for (var s=0; s<table.length; s++) {
  198.       if (table[s].number == selectedNumber) {
  199.         // update selection
  200.         // note: we need to deselect before reselecting in order to trigger ...Selected()
  201.         tree.view.selection.select(-1);
  202.         tree.view.selection.select(s);
  203.         selectedRow = s;
  204.         break;
  205.       }
  206.     }
  207.   }
  208.  
  209.   // display the results
  210.   tree.treeBoxObject.invalidate();
  211.   if (selectedRow >= 0) {
  212.     tree.treeBoxObject.ensureRowIsVisible(selectedRow)
  213.   }
  214.  
  215.   return ascending;
  216. }
  217.  
  218. /**
  219.  * Case insensitive string comparator.
  220.  */
  221. function CompareLowerCase(first, second) {
  222.   var firstLower, secondLower;
  223.  
  224.   // Are we sorting nsILoginInfo entries or just strings?
  225.   if (first.hostname) {
  226.     firstLower  = first.hostname.toLowerCase();
  227.     secondLower = second.hostname.toLowerCase();
  228.   } else {
  229.     firstLower  = first.toLowerCase();
  230.     secondLower = second.toLowerCase();
  231.   }
  232.  
  233.   if (firstLower < secondLower) {
  234.     return -1;
  235.   }
  236.  
  237.   if (firstLower > secondLower) {
  238.     return 1;
  239.   }
  240.  
  241.   return 0;
  242. }
  243.