?? msgmail3panewindow.js
字號(hào):
// the Folder or Thread Pane. if (event.button == 2) { gRightMouseButtonDown = true; ChangeSelectionWithoutContentLoad(event, event.target.parentNode); } else gRightMouseButtonDown = false;}function FolderPaneOnClick(event){ // we only care about button 0 (left click) events if (event.button != 0) return; var folderTree = GetFolderTree(); var row = {}; var col = {}; var elt = {}; folderTree.treeBoxObject.getCellAt(event.clientX, event.clientY, row, col, elt); if (row.value == -1) { if (event.originalTarget.localName == "treecol") { // clicking on the name column in the folder pane should not sort event.stopPropagation(); } } else if ((event.originalTarget.localName == "slider") || (event.originalTarget.localName == "scrollbarbutton")) { event.stopPropagation(); } else if ((event.detail == 2) && (elt.value != "twisty") && (folderTree.view.getLevel(row.value) != 0)) { FolderPaneDoubleClick(row.value, event); }}function FolderPaneDoubleClick(folderIndex, event){ if (!pref.getBoolPref("mailnews.reuse_thread_window2")) { var folderResource = GetFolderResource(GetFolderTree(), folderIndex); // Open a new msg window only if we are double clicking on // folders or newsgroups. MsgOpenNewWindowForFolder(folderResource.Value, -1 /* key */); // double clicking should not toggle the open / close state of the // folder. this will happen if we don't prevent the event from // bubbling to the default handler in tree.xml event.stopPropagation(); }}function ChangeSelection(tree, newIndex){ if(newIndex >= 0) { tree.view.selection.select(newIndex); tree.treeBoxObject.ensureRowIsVisible(newIndex); }}function GetSelectedFolders(){ var folderArray = []; var k = 0; var folderTree = GetFolderTree(); var rangeCount = folderTree.view.selection.getRangeCount(); for(var i = 0; i < rangeCount; i++) { var startIndex = {}; var endIndex = {}; folderTree.view.selection.getRangeAt(i, startIndex, endIndex); for (var j = startIndex.value; j <= endIndex.value; j++) { var folderResource = GetFolderResource(folderTree, j); folderArray[k++] = folderResource.Value; } } return folderArray;}function GetSelectedMsgFolders(){ var folderArray = []; var k = 0; var folderTree = GetFolderTree(); var rangeCount = folderTree.view.selection.getRangeCount(); for(var i = 0; i < rangeCount; i++) { var startIndex = {}; var endIndex = {}; folderTree.view.selection.getRangeAt(i, startIndex, endIndex); for (var j = startIndex.value; j <= endIndex.value; j++) { var folderResource = GetFolderResource(folderTree, j); if (folderResource.Value != "http://home.netscape.com/NC-rdf#PageTitleFakeAccount") { var msgFolder = folderResource.QueryInterface(Components.interfaces.nsIMsgFolder); if(msgFolder) folderArray[k++] = msgFolder; } } } return folderArray;}function GetFirstSelectedMessage(){ try { return gDBView.URIForFirstSelectedMessage; } catch (ex) { return null; }}function GetSelectedIndices(dbView){ try { var indicesArray = {}; var length = {}; dbView.getIndicesForSelection(indicesArray,length); return indicesArray.value; } catch (ex) { dump("ex = " + ex + "\n"); return null; }}function GetSelectedMessages(){ try { var messageArray = {}; var length = {}; var view = GetDBView(); view.getURIsForSelection(messageArray,length); if (length.value) return messageArray.value; else return null; } catch (ex) { dump("ex = " + ex + "\n"); return null; }}function GetLoadedMsgFolder(){ if (!gDBView) return null; return gDBView.msgFolder;}function GetLoadedMessage(){ try { return gDBView.URIForFirstSelectedMessage; } catch (ex) { return null; }}//Clear everything related to the current message. called after load start page.function ClearMessageSelection(){ ClearThreadPaneSelection();}function GetCompositeDataSource(command){ if (command == "GetNewMessages" || command == "NewFolder" || command == "MarkAllMessagesRead") return GetFolderDatasource(); return null;}// Figures out how many messages are selected (hilighted - does not necessarily// have the dotted outline) above a given index row value in the thread pane.function NumberOfSelectedMessagesAboveCurrentIndex(index){ var numberOfMessages = 0; var indicies = GetSelectedIndices(gDBView); if (indicies && indicies.length) { for (var i = 0; i < indicies.length; i++) { if (indicies[i] < index) ++numberOfMessages; else break; } } return numberOfMessages;}function SetNextMessageAfterDelete(){ var treeSelection = GetThreadTree().view.selection; if (treeSelection.isSelected(treeSelection.currentIndex)) { gNextMessageViewIndexAfterDelete = gDBView.msgToSelectAfterDelete; gSelectedIndexWhenDeleting = treeSelection.currentIndex; } else if(gDBView.removeRowOnMoveOrDelete) { // Only set gThreadPaneDeleteOrMoveOccurred to true if the message was // truly moved to the trash or deleted, as opposed to an IMAP delete // (where it is only "marked as deleted". This will prevent bug 142065. // // If it's an IMAP delete, then just set gNextMessageViewIndexAfterDelete // to treeSelection.currentIndex (where the outline is at) because nothing // was moved or deleted from the folder. gThreadPaneDeleteOrMoveOccurred = true; gNextMessageViewIndexAfterDelete = treeSelection.currentIndex - NumberOfSelectedMessagesAboveCurrentIndex(treeSelection.currentIndex); } else gNextMessageViewIndexAfterDelete = treeSelection.currentIndex;}function EnsureFolderIndex(builder, msgFolder){ // try to get the index of the folder in the tree var index = builder.getIndexOfResource(msgFolder); if (index == -1) { // if we couldn't find the folder, open the parent builder.toggleOpenState(EnsureFolderIndex(builder, msgFolder.parent)); index = builder.getIndexOfResource(msgFolder); } return index;}function SelectFolder(folderUri){ dump("selecting folder " + folderUri + "\n"); var folderTree = GetFolderTree(); var folderResource = RDF.GetResource(folderUri); var msgFolder = folderResource.QueryInterface(Components.interfaces.nsIMsgFolder); // before we can select a folder, we need to make sure it is "visible" // in the tree. to do that, we need to ensure that all its // ancestors are expanded var folderIndex = EnsureFolderIndex(folderTree.builderView, msgFolder); ChangeSelection(folderTree, folderIndex);}function SelectMessage(messageUri){ var msgHdr = messenger.messageServiceFromURI(messageUri).messageURIToMsgHdr(messageUri); if (msgHdr) gDBView.selectMsgByKey(msgHdr.messageKey);}function ReloadWithAllParts(){ gDBView.reloadMessageWithAllParts();}function ReloadMessage(){ gDBView.reloadMessage();}function GetDBView(){ return gDBView;}function GetFolderResource(tree, index){ return tree.builderView.getResourceAtIndex(index);}function GetFolderIndex(tree, resource){ return tree.builderView.getIndexOfResource(resource);}function GetFolderAttribute(tree, source, attribute){ var property = RDF.GetResource("http://home.netscape.com/NC-rdf#" + attribute); var target = tree.database.GetTarget(source, property, true); if (target) target = target.QueryInterface(Components.interfaces.nsIRDFLiteral).Value; return target;}// Some of the per account junk mail settings have been// converted to global prefs. Let's try to migrate some// of those settings from the default account.function MigrateJunkMailSettings(){ var junkMailSettingsVersion = pref.getIntPref("mail.spam.version"); if (!junkMailSettingsVersion) { // get the default account, check to see if we have values for our // globally migrated prefs. var defaultAccount = accountManager.defaultAccount; if (defaultAccount && defaultAccount.incomingServer) { // we only care about var prefix = "mail.server." + defaultAccount.incomingServer.key + "."; if (pref.prefHasUserValue(prefix + "manualMark")) pref.setBoolPref("mail.spam.manualMark", pref.getBoolPref(prefix + "manualMark")); if (pref.prefHasUserValue(prefix + "manualMarkMode")) pref.setIntPref("mail.spam.manualMarkMode", pref.getIntPref(prefix + "manualMarkMode")); if (pref.prefHasUserValue(prefix + "spamLoggingEnabled")) pref.setBoolPref("mail.spam.logging.enabled", pref.getBoolPref(prefix + "spamLoggingEnabled")); if (pref.prefHasUserValue(prefix + "markAsReadOnSpam")) pref.setBoolPref("mail.spam.markAsReadOnSpam", pref.getBoolPref(prefix + "markAsReadOnSpam")); } // bump the version so we don't bother doing this again. pref.setIntPref("mail.spam.version", 1); }}// The first time a user runs a build that supports folder views, pre-populate the favorite folders list// with the existing INBOX folders.function MigrateFolderViews(){ var folderViewsVersion = pref.getIntPref("mail.folder.views.version"); if (!folderViewsVersion) { var servers = accountManager.allServers; var server; var inbox; for (var index = 0; index < servers.Count(); index++) { server = servers.QueryElementAt(index, Components.interfaces.nsIMsgIncomingServer); if (server) { inbox = GetInboxFolder(server); if (inbox) inbox.setFlag(MSG_FOLDER_FLAG_FAVORITE); } } pref.setIntPref("mail.folder.views.version", 1); }}// Thunderbird has been storing old attachment download meta data in downloads.rdf // even though there was no way to show or clean up this data. Now that we are using // the new download manager in toolkit, we don't want to present this old data.// To migrate to the new download manager, remove downloads.rdf.function MigrateAttachmentDownloadStore(){ var attachmentStoreVersion = pref.getIntPref("mail.attachment.store.version"); if (!attachmentStoreVersion) { var dirService = Components.classes["@mozilla.org/file/directory_service;1"] .getService(Components.interfaces.nsIProperties); var downloadsFile = dirService.get("DLoads", Components.interfaces.nsIFile); if (downloadsFile && downloadsFile.exists()) downloadsFile.remove(false); // bump the version so we don't bother doing this again. pref.setIntPref("mail.attachment.store.version", 1); }}
?? 快捷鍵說(shuō)明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -