abcommon.js

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

JS
1,318
字号
      else        composeFields.to = GetSelectedAddresses();      params.composeFields = composeFields;      msgComposeService.OpenComposeWindowWithParams(null, params);    }  }}function GetOneOrMoreCardsSelected(){  if (!gAbView)    return false;  return (gAbView.selection.getRangeCount() > 0);}// XXX todo// could this be moved into utilityOverlay.js?function goToggleSplitter( id, elementID ){  var splitter = document.getElementById( id );  var element = document.getElementById( elementID );  if ( splitter )  {    var attribValue = splitter.getAttribute("state") ;    if ( attribValue == "collapsed" )    {      splitter.setAttribute("state", "open" );      if ( element )        element.setAttribute("checked","true")    }    else    {      splitter.setAttribute("state", "collapsed");      if ( element )        element.setAttribute("checked","false")    }    document.persist(id, 'state');    document.persist(elementID, 'checked');  }}// Generate a list of cards from the selected mailing list // and get a comma separated list of card addresses. If the// item selected in the directory pane is not a mailing list,// an empty string is returned. function GetSelectedAddressesFromDirTree() {  var addresses = "";  if (dirTree.currentIndex >= 0) {    var selectedResource = dirTree.builderView.getResourceAtIndex(dirTree.currentIndex);    var mailingListUri = selectedResource.Value;    var directory = GetDirectoryFromURI(mailingListUri);    if (directory.isMailList) {      var listCardsCount = directory.addressLists.Count();      var cards = new Array(listCardsCount);      for ( var i = 0;  i < listCardsCount; i++ ) {        var card = directory.addressLists.GetElementAt(i);        card = card.QueryInterface(Components.interfaces.nsIAbCard);        cards[i] = card;      }      addresses = GetAddressesForCards(cards);    }  }  return addresses;}function GetSelectedAddresses(){  var selectedCards = GetSelectedAbCards();  return GetAddressesForCards(selectedCards);}// Generate a comma separated list of addresses from a given// set of cards.function GetAddressesForCards(cards){  var addresses = "";  if (!cards)    return addresses;  var count = cards.length;  if (count > 0)    addresses += GenerateAddressFromCard(cards[0]);  for (var i = 1; i < count; i++) {     var generatedAddress = GenerateAddressFromCard(cards[i]);    if (generatedAddress)      addresses += "," + generatedAddress;  }  return addresses;}function GetNumSelectedCards(){ try {   var treeSelection = gAbView.selection;   return treeSelection.count; } catch (ex) { } // if something went wrong, return 0 for the count. return 0;}// XXX todo// an optimization might be to make this return // the selected ranges, which would be faster// when the user does large selections, but for now, let's keep it simple.function GetSelectedRows(){  var selectedRows = "";  if (!gAbView)    return selectedRows;  var i,j;  var rangeCount = gAbView.selection.getRangeCount();  var current = 0;  for (i=0; i < rangeCount; i++) {    var start = new Object;    var end = new Object;    gAbView.selection.getRangeAt(i,start,end);    for (j=start.value;j<=end.value;j++) {      if (selectedRows)        selectedRows += ",";      selectedRows += j;    }  }  return selectedRows;}function GetSelectedAbCards(){  var abView = gAbView;  // if sidebar is open, and addressbook panel is open and focused,  // then use the ab view from sidebar (gCurFrame is from sidebarOverlay.js)  const abPanelUrl = "chrome://messenger/content/addressbook/addressbook-panel.xul";  if (document.getElementById("sidebar-box")) {    if (gCurFrame &&         gCurFrame.getAttribute("src") == abPanelUrl &&        document.commandDispatcher.focusedWindow == gCurFrame.contentDocument.defaultView)     {      abView = gCurFrame.contentDocument.defaultView.gAbView;    }  }  if (!abView)    return null;  var cards = new Array(abView.selection.count);  var i,j;  var count = abView.selection.getRangeCount();  var current = 0;  for (i=0; i < count; i++) {    var start = new Object;    var end = new Object;    abView.selection.getRangeAt(i,start,end);    for (j=start.value;j<=end.value;j++) {      cards[current] = abView.getCardFromRow(j);      current++;    }  }  return cards;}function SelectFirstAddressBook(){  dirTree.view.selection.select(0);    ChangeDirectoryByURI(GetSelectedDirectory());    gAbResultsTree.focus();  }function SelectFirstCard(){  if (gAbView && gAbView.selection) {    gAbView.selection.select(0);  }}function DirPaneClick(event){  // we only care about left button events  if (event.button != 0)    return;  // if the user clicks on the header / trecol, do nothing  if (event.originalTarget.localName == "treecol") {    event.stopPropagation();    return;  }}function DirPaneDoubleClick(event){  // we only care about left button events  if (event.button != 0)    return;  var row = dirTree.treeBoxObject.getRowAt(event.clientX, event.clientY);  if (row == -1 || row > dirTree.view.rowCount-1) {    // double clicking on a non valid row should not open the dir properties dialog    return;  }  if (dirTree && dirTree.view.selection && dirTree.view.selection.count == 1)    AbEditSelectedDirectory();}function DirPaneSelectionChange(){  // clear out the search box when changing folders...  onClearSearch();  if (dirTree && dirTree.view.selection && dirTree.view.selection.count == 1) {    gPreviousDirTreeIndex = dirTree.currentIndex;    ChangeDirectoryByURI(GetSelectedDirectory());  }}function GetAbResultsBoxObject(){  if (!gAbResultsTree)    gAbResultsTree = document.getElementById('abResultsTree');  return gAbResultsTree.treeBoxObject;}function CloseAbView(){  var boxObject = GetAbResultsBoxObject();  boxObject.view = null;  if (gAbView) {    gAbView.close();    gAbView = null;  }}function SetAbView(uri, searchView, sortColumn, sortDirection){  var actualSortColumn;    // make sure sortColumn and sortDirection have non null values before calling gAbView.init  if (!sortColumn)		sortColumn = kDefaultSortColumn;	if (!sortDirection)		sortDirection = kDefaultAscending;  if (gAbView && gCurDirectory == GetSelectedDirectory())  {    // re-init the view    actualSortColumn = gAbView.init(uri, searchView, GetAbViewListener(), sortColumn, sortDirection);  }  else  {	  CloseAbView();		gCurDirectory = GetSelectedDirectory();	  gAbView = Components.classes["@mozilla.org/addressbook/abview;1"].createInstance(Components.interfaces.nsIAbView);		actualSortColumn = gAbView.init(uri, searchView, GetAbViewListener(), sortColumn, sortDirection);  }  var boxObject = GetAbResultsBoxObject();  boxObject.view = gAbView.QueryInterface(Components.interfaces.nsITreeView);  UpdateSortIndicators(sortColumn, sortDirection);    return actualSortColumn;}function GetAbView(){  return gAbView;}// this will return the complete search uri if a quick search is currently being // done. to get the uri of the directory only, use GetSelectedDirectory().function GetAbViewURI(){  if (gAbView)    return gAbView.URI;  else     return null;}function ChangeDirectoryByURI(uri){  if (!uri)    uri = kPersonalAddressbookURI;  if (gAbView && GetAbViewURI() == uri)    return;    var sortColumn = gAbResultsTree.getAttribute("sortCol");  var sortDirection = document.getElementById(sortColumn).getAttribute("sortDirection");    var actualSortColumn = SetAbView(uri, false, sortColumn, sortDirection);  UpdateSortIndicators(actualSortColumn, sortDirection);    // only select the first card if there is a first card  if (gAbView && gAbView.getCardFromRow(0)) {    SelectFirstCard();  }  else {    // the selection changes if we were switching directories.    ResultsPaneSelectionChanged()  }  return;}function AbSortAscending(){  var sortColumn = gAbResultsTree.getAttribute("sortCol");  SortAndUpdateIndicators(sortColumn, kDefaultAscending);}function AbSortDescending(){  var sortColumn = gAbResultsTree.getAttribute("sortCol");  SortAndUpdateIndicators(sortColumn, kDefaultDescending);}function SortResultPane(sortColumn){  var sortDirection = kDefaultAscending;  if (gAbView) {     sortDirection = gAbView.sortDirection;  }  SortAndUpdateIndicators(sortColumn, sortDirection);}function SortAndUpdateIndicators(sortColumn, sortDirection){  // XXX todo remove once #116341 is fixed  if (!sortColumn)    return;      UpdateSortIndicators(sortColumn, sortDirection);  if (gAbView)    gAbView.sortBy(sortColumn, sortDirection);}function UpdateSortIndicators(colID, sortDirection){  var sortedColumn;  // set the sort indicator on the column we are sorted by  if (colID) {    sortedColumn = document.getElementById(colID);    if (sortedColumn) {      sortedColumn.setAttribute("sortDirection",sortDirection);      gAbResultsTree.setAttribute("sortCol", colID);    }  }  // remove the sort indicator from all the columns  // except the one we are sorted by  var currCol = gAbResultsTree.firstChild.firstChild;  while (currCol) {    if (currCol != sortedColumn && currCol.localName == "treecol")      currCol.removeAttribute("sortDirection");    currCol = currCol.nextSibling;  }}function InvalidateResultsPane(){  if (gAbResultsTree)    gAbResultsTree.treeBoxObject.invalidate();}function AbNewList(abListItem){  goNewListDialog(GetSelectedDirectory());}function goNewListDialog(selectedAB){  window.openDialog("chrome://messenger/content/addressbook/abMailListDialog.xul",                    "",                    "chrome,resizable=no,titlebar,modal,centerscreen",                    {selectedAB:selectedAB});}function goEditListDialog(abURI, abCard, listURI, okCallback){  window.openDialog("chrome://messenger/content/addressbook/abEditListDialog.xul",                    "",                    "chrome,resizable=no,titlebar,modal,centerscreen",                    {abURI:abURI, abCard:abCard, listURI:listURI, okCallback:okCallback});}function goNewCardDialog(selectedAB){  window.openDialog("chrome://messenger/content/addressbook/abNewCardDialog.xul",                    "",                    "chrome,resizable=no,titlebar,modal,centerscreen",                    {selectedAB:selectedAB});}function goEditCardDialog(abURI, card, okCallback){  window.openDialog("chrome://messenger/content/addressbook/abEditCardDialog.xul",					  "",					  "chrome,resizable=no,modal,titlebar,centerscreen",					  {abURI:abURI, card:card, okCallback:okCallback});}function setSortByMenuItemCheckState(id, value){    var menuitem = document.getElementById(id);    if (menuitem) {      menuitem.setAttribute("checked", value);    }}function InitViewSortByMenu(){    var sortColumn = kDefaultSortColumn;    var sortDirection = kDefaultAscending;    if (gAbView) {      sortColumn = gAbView.sortColumn;      sortDirection = gAbView.sortDirection;

⌨️ 快捷键说明

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