addressbook.js

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

JS
904
字号
}function AbPrintCardInternal(doPrintPreview, msgType){  var selectedItems = GetSelectedAbCards();  var numSelected = selectedItems.length;  if (!numSelected)    return;  var addressbook = Components.classes["@mozilla.org/addressbook;1"].createInstance(Components.interfaces.nsIAddressBook);  var uri = GetSelectedDirectory();  if (!uri)    return;   var statusFeedback;   statusFeedback = Components.classes["@mozilla.org/messenger/statusfeedback;1"].createInstance();   statusFeedback = statusFeedback.QueryInterface(Components.interfaces.nsIMsgStatusFeedback);   var selectionArray = new Array(numSelected);   var totalCard = 0;   for (var i = 0; i < numSelected; i++)   {     var card = selectedItems[i];     var printCardUrl = CreatePrintCardUrl(card);     if (printCardUrl)     {        selectionArray[totalCard++] = printCardUrl;     }  }  if (!gPrintSettings)  {    gPrintSettings = GetPrintSettings();  }  printEngineWindow = window.openDialog("chrome://messenger/content/msgPrintEngine.xul",                                         "",                                         "chrome,dialog=no,all",                                          totalCard, selectionArray, statusFeedback,                                           gPrintSettings, doPrintPreview, msgType);  return;}function AbPrintCard(){  AbPrintCardInternal(false, Components.interfaces.nsIMsgPrintEngine.MNAB_PRINT_AB_CARD);}function AbPrintPreviewCard(){  AbPrintCardInternal(true, Components.interfaces.nsIMsgPrintEngine.MNAB_PRINTPREVIEW_AB_CARD);}function CreatePrintCardUrl(card){  var url = "data:application/xml;base64," + card.convertToBase64EncodedXML();  return url;}function AbPrintAddressBookInternal(doPrintPreview, msgType){  var addressbook = Components.classes["@mozilla.org/addressbook;1"].createInstance(Components.interfaces.nsIAddressBook);  var uri = GetSelectedDirectory();  if (!uri)    return;  var statusFeedback;	statusFeedback = Components.classes["@mozilla.org/messenger/statusfeedback;1"].createInstance();	statusFeedback = statusFeedback.QueryInterface(Components.interfaces.nsIMsgStatusFeedback);  /*    turn "moz-abmdbdirectory://abook.mab" into    "addbook://moz-abmdbdirectory/abook.mab?action=print"   */  var abURIArr = uri.split("://");  var printUrl = "addbook://" + abURIArr[0] + "/" + abURIArr[1] + "?action=print"  if (!gPrintSettings) {    gPrintSettings = GetPrintSettings();  }	printEngineWindow = window.openDialog("chrome://messenger/content/msgPrintEngine.xul",										"",										"chrome,dialog=no,all",										1, [printUrl], statusFeedback, gPrintSettings, doPrintPreview, msgType);	return;}function AbPrintAddressBook(){  AbPrintAddressBookInternal(false, Components.interfaces.nsIMsgPrintEngine.MNAB_PRINT_ADDRBOOK);}function AbPrintPreviewAddressBook(){  AbPrintAddressBookInternal(true, Components.interfaces.nsIMsgPrintEngine.MNAB_PRINTPREVIEW_ADDRBOOK);}function AbExport(){  try {    var selectedABURI = GetSelectedDirectory();    if (!selectedABURI) return;        var directory = GetDirectoryFromURI(selectedABURI);    addressbook.exportAddressBook(window, directory);  }  catch (ex) {    var promptService = Components.classes["@mozilla.org/embedcomp/prompt-service;1"].getService(Components.interfaces.nsIPromptService);    if (promptService) {      var message;      switch (ex.result) {        case Components.results.NS_ERROR_FILE_ACCESS_DENIED:          message = gAddressBookBundle.getString("failedToExportMessageFileAccessDenied");          break;        case Components.results.NS_ERROR_FILE_NO_DEVICE_SPACE:          message = gAddressBookBundle.getString("failedToExportMessageNoDeviceSpace");          break;        default:          message = ex.message;          break;      }      promptService.alert(window,        gAddressBookBundle.getString("failedToExportTitle"),         message);    }  }}function AbDeleteDirectory(){  var selectedABURI = GetSelectedDirectory();  if (!selectedABURI)    return;  var parentArray = Components.classes["@mozilla.org/supports-array;1"].createInstance(Components.interfaces.nsISupportsArray);  if (!parentArray)     return;   var promptService = Components.classes["@mozilla.org/embedcomp/prompt-service;1"].getService(Components.interfaces.nsIPromptService);   var parentRow = GetParentRow(dirTree, dirTree.currentIndex);  var parentId = (parentRow == -1) ? "moz-abdirectory://" : dirTree.builderView.getResourceAtIndex(parentRow).Value;  var parentDir = GetDirectoryFromURI(parentId);  parentArray.AppendElement(parentDir);      var directory = GetDirectoryFromURI(selectedABURI);  var confirmDeleteMessage;  var clearPrefsRequired = false;  if (directory.isMailList)    confirmDeleteMessage = gAddressBookBundle.getString("confirmDeleteMailingList");  else {    // Check if this address book is being used for collection    if (gPrefs.getCharPref("mail.collect_addressbook") == selectedABURI &&        (gPrefs.getBoolPref("mail.collect_email_address_outgoing") ||         gPrefs.getBoolPref("mail.collect_email_address_newsgroup"))) {      var brandShortName = document.getElementById("bundle_brand").getString("brandShortName");      confirmDeleteMessage = gAddressBookBundle.getFormattedString("confirmDeleteCollectionAddressbook", [brandShortName]);      clearPrefsRequired = true;    }    else {      confirmDeleteMessage = gAddressBookBundle.getString("confirmDeleteAddressbook");    }  }  if (!promptService.confirm(window,                             gAddressBookBundle.getString(                                                directory.isMailList ?                                                "confirmDeleteMailingListTitle" :                                                "confirmDeleteAddressbookTitle"),                             confirmDeleteMessage))    return;  // First clear all the prefs if required  if (clearPrefsRequired) {    gPrefs.setBoolPref("mail.collect_email_address_outgoing", false);    gPrefs.setBoolPref("mail.collect_email_address_newsgroup", false);    // Also reset the displayed value so that we don't get a blank item in the    // prefs dialog if it gets enabled.    gPrefs.setCharPref("mail.collect_addressbook", kPersonalAddressbookURI);  }  var resourceArray = Components.classes["@mozilla.org/supports-array;1"].createInstance(Components.interfaces.nsISupportsArray);  var selectedABResource = GetDirectoryFromURI(selectedABURI).QueryInterface(Components.interfaces.nsIRDFResource);  resourceArray.AppendElement(selectedABResource);  top.addressbook.deleteAddressBooks(dirTree.database, parentArray, resourceArray);}function SetStatusText(total){  if (!gStatusText)    gStatusText = document.getElementById('statusText');  try {    var statusText;    if (gSearchInput && gSearchInput.value) {      if (total == 0)        statusText = gAddressBookBundle.getString("noMatchFound");      else      {        if (total == 1)          statusText = gAddressBookBundle.getString("matchFound");        else            statusText = gAddressBookBundle.getFormattedString("matchesFound", [total]);      }    }    else      statusText = gAddressBookBundle.getFormattedString("totalCardStatus", [gAbView.directory.dirName, total]);       gStatusText.setAttribute("label", statusText);  }  catch(ex) {    dump("failed to set status text:  " + ex + "\n");  }}function AbResultsPaneKeyPress(event){  if (event.keyCode == 13)    AbEditSelectedCard();}function AbResultsPaneDoubleClick(card){  AbEditCard(card);}function onAdvancedAbSearch(){  var selectedABURI = GetSelectedDirectory();  if (!selectedABURI) return;  var windowManager = Components.classes['@mozilla.org/appshell/window-mediator;1'].                                 getService(Components.interfaces.nsIWindowMediator);  var existingSearchWindow = windowManager.getMostRecentWindow("mailnews:absearch");  if (existingSearchWindow)    existingSearchWindow.focus();  else    window.openDialog("chrome://messenger/content/ABSearchDialog.xul", "",                       "chrome,resizable,status,centerscreen,dialog=no",                       {directory: selectedABURI});}function onEnterInSearchBar(){  ClearCardViewPane();    if (!gQueryURIFormat)    gQueryURIFormat = gPrefs.getComplexValue("mail.addr_book.quicksearchquery.format",                                               Components.interfaces.nsIPrefLocalizedString).data;  var searchURI = GetSelectedDirectory();  if (!searchURI) return;  var sortColumn = gAbView.sortColumn;  var sortDirection = gAbView.sortDirection;  /*   XXX todo, handle the case where the LDAP url   already has a query, like    moz-abldapdirectory://nsdirectory.netscape.com:389/ou=People,dc=netscape,dc=com?(or(Department,=,Applications))  */  if (gSearchInput.value != "") {    // replace all instances of @V with the escaped version    // of what the user typed in the quick search text input    searchURI += gQueryURIFormat.replace(/@V/g, encodeURIComponent(gSearchInput.value));  }  SetAbView(searchURI, gSearchInput.value != "", sortColumn, sortDirection);    // XXX todo   // this works for synchronous searches of local addressbooks,   // but not for LDAP searches  SelectFirstCard();}function SwitchPaneFocus(event){  var focusedElement    = WhichPaneHasFocus();  var cardViewBox       = GetCardViewBox();  var cardViewBoxEmail1 = GetCardViewBoxEmail1();  var searchBox         = document.getElementById('search-container');  var dirTree           = GetDirTree();  var searchInput       = GetSearchInput();  if (event && event.shiftKey)  {    if (focusedElement == gAbResultsTree && searchBox)      searchInput.focus();    else if ((focusedElement == gAbResultsTree || focusedElement == searchBox) && !IsDirPaneCollapsed())      dirTree.focus();    else if (focusedElement != cardViewBox && !IsCardViewAndAbResultsPaneSplitterCollapsed())    {      if(cardViewBoxEmail1)        cardViewBoxEmail1.focus();      else        cardViewBox.focus();        }    else       gAbResultsTree.focus();  }  else  {    if (focusedElement == searchBox)      gAbResultsTree.focus();    else if (focusedElement == gAbResultsTree && !IsCardViewAndAbResultsPaneSplitterCollapsed())    {      if(cardViewBoxEmail1)        cardViewBoxEmail1.focus();      else        cardViewBox.focus();        }    else if (focusedElement != dirTree && !IsDirPaneCollapsed())      dirTree.focus();    else if (searchBox)      searchInput.focus();    else      gAbResultsTree.focus();  }}function WhichPaneHasFocus(){  var cardViewBox       = GetCardViewBox();  var searchBox         = document.getElementById('search-container');  var dirTree           = GetDirTree();      var currentNode = top.document.commandDispatcher.focusedElement;  while (currentNode)  {    var nodeId = currentNode.getAttribute('id');    if(currentNode == gAbResultsTree ||       currentNode == cardViewBox ||       currentNode == searchBox ||       currentNode == dirTree)      return currentNode;    currentNode = currentNode.parentNode;  }  return null;}function GetDirTree(){  if (!gDirTree)    gDirTree = document.getElementById('dirTree');  return gDirTree;}function GetSearchInput(){  if (!gSearchInput)    gSearchInput = document.getElementById('searchInput');  return gSearchInput;}function GetCardViewBox(){  if (!gCardViewBox)    gCardViewBox = document.getElementById('CardViewBox');  return gCardViewBox;}function GetCardViewBoxEmail1(){  if (!gCardViewBoxEmail1)  {    try {      gCardViewBoxEmail1 = document.getElementById('cvEmail1');    }    catch (ex) {      gCardViewBoxEmail1 = null;    }  }  return gCardViewBoxEmail1;}function IsDirPaneCollapsed(){  var dirPaneBox = GetDirTree().parentNode;  return dirPaneBox.getAttribute("collapsed") == "true" ||         dirPaneBox.getAttribute("hidden") == "true";}function IsCardViewAndAbResultsPaneSplitterCollapsed(){  var cardViewBox = document.getElementById('CardViewOuterBox');  try {    return (cardViewBox.getAttribute("collapsed") == "true");  }  catch (ex) {    return false;  }}function LaunchUrl(url){  var messenger = Components.classes["@mozilla.org/messenger;1"].createInstance(Components.interfaces.nsIMessenger);  messenger.SetWindow(window,null);  messenger.OpenURL(url);}function AbIMSelected(){  var cards = GetSelectedAbCards();  var count = cards.length;  var screennames;  var screennameCount = 0;  for (var i=0;i<count;i++) {    var screenname = cards[i].aimScreenName;    if (screenname) {      if (screennameCount == 0)        screennames = screenname;      else        screennames += "," + screenname;      screennameCount++    }  }  var url = "aim:";  if (screennameCount == 0)    url += "goim";  else if (screennameCount == 1)    url += "goim?screenname=" + screennames;  else {    url += "SendChatInvite?listofscreennames=" + screennames;    url += "&message=" + gAddressBookBundle.getString("joinMeInThisChat");  }  LaunchUrl(url);}

⌨️ 快捷键说明

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