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 + -
显示快捷键?