viewpasswords.js

来自「现在很火的邮件客户端软件thunderbird的源码」· JavaScript 代码 · 共 621 行 · 第 1/2 页

JS
621
字号
                        // clicking 'Cancel' or entering the correct password.  } catch (e) {    // An exception will be thrown if the user cancels the login prompt dialog.    // User is also logged out of Software Security Device.  }  return token.isLoggedIn();}function FinalizeSignonDeletions() {  for (var s=0; s<deletedSignons.length; s++) {    passwordmanager.removeUser(deletedSignons[s].host, deletedSignons[s].rawuser);  }  deletedSignons.length = 0;}function HandleSignonKeyPress(e) {  if (e.keyCode == 46) {    DeleteSignonSelected();  }}var lastSignonSortColumn = "";var lastSignonSortAscending = false;function SignonColumnSort(column) {  lastSignonSortAscending =    SortTree(signonsTree, signonsTreeView, signons,                 column, lastSignonSortColumn, lastSignonSortAscending);  lastSignonSortColumn = column;}/*** =================== REJECTED SIGNONS CODE =================== ***/var rejectsTreeView = {  rowCount : 0,  setTree : function(tree){},  getImageSrc : function(row,column) {},  getProgressMode : function(row,column) {},  getCellValue : function(row,column) {},  getCellText : function(row,column){    var rv="";    if (column.id=="rejectCol") {      rv = rejects[row].host;    }    return rv;  },  isSeparator : function(index) {return false;},  isSorted: function() { return false; },  isContainer : function(index) {return false;},  cycleHeader : function(column) {},  getRowProperties : function(row,prop){},  getColumnProperties : function(column,prop){},  getCellProperties : function(row,column,prop){} };var rejectsTree;function Reject(number, host) {  this.number = number;  this.host = host;}function LoadRejects() {  var enumerator = passwordmanager.rejectEnumerator;  var count = 0;  while (enumerator.hasMoreElements()) {    var nextReject = enumerator.getNext();    nextReject = nextReject.QueryInterface(Components.interfaces.nsIPassword);    var host = nextReject.host;    rejects[count] = new Reject(count++, host);  }  rejectsTreeView.rowCount = rejects.length;  // sort and display the table  rejectsTree.treeBoxObject.view = rejectsTreeView;  RejectColumnSort('host');  var element = document.getElementById("removeAllRejects");  if (rejects.length == 0) {    element.setAttribute("disabled","true");  } else {    element.removeAttribute("disabled");  }}function RejectSelected() {  var selections = GetTreeSelections(rejectsTree);  if (selections.length) {    document.getElementById("removeReject").removeAttribute("disabled");  }}function DeleteReject() {  DeleteSelectedItemFromTree(rejectsTree, rejectsTreeView,                                 rejects, deletedRejects,                                 "removeReject", "removeAllRejects");  FinalizeRejectDeletions();}function DeleteAllRejects() {  DeleteAllFromTree(rejectsTree, rejectsTreeView,                        rejects, deletedRejects,                        "removeReject", "removeAllRejects");  FinalizeRejectDeletions();}function FinalizeRejectDeletions() {  for (var r=0; r<deletedRejects.length; r++) {    passwordmanager.removeReject(deletedRejects[r].host);  }  deletedRejects.length = 0;}function HandleRejectKeyPress(e) {  if (e.keyCode == 46) {    DeleteRejectSelected();  }}var lastRejectSortColumn = "";var lastRejectSortAscending = false;function RejectColumnSort(column) {  lastRejectSortAscending =    SortTree(rejectsTree, rejectsTreeView, rejects,                 column, lastRejectSortColumn, lastRejectSortAscending);  lastRejectSortColumn = column;}/*** =================== GENERAL CODE =================== ***/// Remove whitespace from both ends of a stringfunction TrimString(string){  if (!string) {    return "";  }  return string.replace(/(^\s+)|(\s+$)/g, '')}function DeleteAllFromTree    (tree, view, table, deletedTable, removeButton, removeAllButton) {  // remove all items from table and place in deleted table  for (var i=0; i<table.length; i++) {    deletedTable[deletedTable.length] = table[i];  }  table.length = 0;  // clear out selections  view.selection.select(-1);   // update the tree view and notify the tree  view.rowCount = 0;  var box = tree.treeBoxObject;  box.rowCountChanged(0, -deletedTable.length);  box.invalidate();  // disable buttons  document.getElementById(removeButton).setAttribute("disabled", "true")  document.getElementById(removeAllButton).setAttribute("disabled","true");}function DeleteSelectedItemFromTree    (tree, view, table, deletedTable, removeButton, removeAllButton) {  var box = tree.treeBoxObject;  // Remove selected items from list (by setting them to null) and place in  // deleted list.  At the same time, notify the tree of the row count changes.  var selection = box.view.selection;  var oldSelectStart = table.length;  box.beginUpdateBatch();  var selCount = selection.getRangeCount();  var min = new Object();  var max = new Object();  for (var s = 0; s < selCount; ++s) {    selection.getRangeAt(s, min, max);    var minVal = min.value;    var maxVal = max.value;    oldSelectStart = minVal < oldSelectStart ? minVal : oldSelectStart;    var rowCount = maxVal - minVal + 1;    view.rowCount -= rowCount;    box.rowCountChanged(minVal, -rowCount);    for (var i = minVal; i <= maxVal; ++i) {      deletedTable[deletedTable.length] = table[i];      table[i] = null;    }  }  // collapse list by removing all the null entries  for (var j = 0; j < table.length; ++j) {    if (!table[j]) {      var k = j;      while (k < table.length && !table[k])        k++;      table.splice(j, k-j);    }  }  box.endUpdateBatch();  // update selection and/or buttons  var removeButton = document.getElementById(removeButton);  var removeAllButton = document.getElementById(removeAllButton);  if (table.length) {    removeButton.removeAttribute("disabled");    removeAllButton.removeAttribute("disabled");    selection.select(oldSelectStart < table.length ? oldSelectStart : table.length - 1);  } else {    removeButton.setAttribute("disabled", "true");    removeAllButton.setAttribute("disabled", "true");  }}function GetTreeSelections(tree) {  var selections = [];  var select = tree.view.selection;  if (select) {    var count = select.getRangeCount();    var min = new Object();    var max = new Object();    for (var i=0; i<count; i++) {      select.getRangeAt(i, min, max);      for (var k=min.value; k<=max.value; k++) {        if (k != -1) {          selections[selections.length] = k;        }      }    }  }  return selections;}function SortTree(tree, view, table, column, lastSortColumn, lastSortAscending, updateSelection) {  // remember which item was selected so we can restore it after the sort  var selections = GetTreeSelections(tree);  var selectedNumber = selections.length ? table[selections[0]].number : -1;  // determine if sort is to be ascending or descending  var ascending = (column == lastSortColumn) ? !lastSortAscending : true;  // do the sort  var compareFunc;  if (ascending) {    compareFunc = function compare(first, second) {      return CompareLowerCase(first[column], second[column]);    }  } else {    compareFunc = function compare(first, second) {      return CompareLowerCase(second[column], first[column]);    }  }  table.sort(compareFunc);  // restore the selection  var selectedRow = -1;  if (selectedNumber>=0 && updateSelection) {    for (var s=0; s<table.length; s++) {      if (table[s].number == selectedNumber) {        // update selection        // note: we need to deselect before reselecting in order to trigger ...Selected()        tree.view.selection.select(-1);        tree.view.selection.select(s);        selectedRow = s;        break;      }    }  }  // display the results  tree.treeBoxObject.invalidate();  if (selectedRow >= 0) {    tree.treeBoxObject.ensureRowIsVisible(selectedRow)  }  return ascending;}/** * Case insensitive string comparator. */function CompareLowerCase(first, second) {  var firstLower  = first.toLowerCase();  var secondLower = second.toLowerCase();  if (firstLower < secondLower) {    return -1;  }  if (firstLower > secondLower) {    return 1;  }  return 0;}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?