home *** CD-ROM | disk | FTP | other *** search
/ Maximum CD 2009 October / maximum-cd-2009-10.iso / DiscContents / Firefox Setup 3.5.exe / nonlocalized / chrome / toolkit.jar / content / passwordmgr / passwordManagerCommon.js < prev    next >
Encoding:
JavaScript  |  2009-06-24  |  7.5 KB  |  249 lines

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