?? commandglue.js
字號:
// the collapsed state is the state after we released the mouse // so we take it as it is gDBView.suppressMsgDisplay = now_hidden; } var event = document.createEvent('Events'); if (now_hidden) { event.initEvent('messagepane-hide', false, true); } else { event.initEvent('messagepane-unhide', false, true); } document.getElementById("messengerWindow").dispatchEvent(event);}function OnMouseUpThreadAndMessagePaneSplitter(){ // the collapsed state is the state after we released the mouse // so we take it as it is ChangeMessagePaneVisibility(IsMessagePaneCollapsed());}function FolderPaneSelectionChange(){ var folderTree = GetFolderTree(); var folderSelection = folderTree.view.selection; // This prevents a folder from being loaded in the case that the user // has right-clicked on a folder different from the one that was // originally highlighted. On a right-click, the highlight (selection) // of a row will be different from the value of currentIndex, thus if // the currentIndex is not selected, it means the user right-clicked // and we don't want to load the contents of the folder. if (!folderSelection.isSelected(folderSelection.currentIndex)) return; if(gTimelineEnabled) { gTimelineService.startTimer("FolderLoading"); gTimelineService.enter("FolderLoading has Started"); } gVirtualFolderTerms = null; gXFVirtualFolderTerms = null; if (folderSelection.count == 1) { var startIndex = {}; var endIndex = {}; folderSelection.getRangeAt(0, startIndex, endIndex); var folderResource = GetFolderResource(folderTree, startIndex.value); var uriToLoad = folderResource.Value; var msgFolder = folderResource.QueryInterface(Components.interfaces.nsIMsgFolder); if (msgFolder == gMsgFolderSelected) return; gPrevSelectedFolder = gMsgFolderSelected; gMsgFolderSelected = msgFolder; UpdateFolderLocationPicker(gMsgFolderSelected); var folderFlags = msgFolder.flags; // if this is same folder, and we're not showing a virtual folder // then do nothing. if (msgFolder == msgWindow.openFolder && !(folderFlags & MSG_FOLDER_FLAG_VIRTUAL) && ! (gPrevFolderFlags & MSG_FOLDER_FLAG_VIRTUAL)) { dump("msgFolder already open" + folderResource.URI + "\n"); return; } else { OnLeavingFolder(gPrevSelectedFolder); // mark all read in last folder var sortType = 0; var sortOrder = 0; var viewFlags = 0; var viewType = 0; gVirtualFolderTerms = null; gXFVirtualFolderTerms = null; gPrevFolderFlags = folderFlags; gCurrentVirtualFolderUri = null; // don't get the db if this folder is a server // we're going to be display account central if (!(msgFolder.isServer)) { try { var msgDatabase = msgFolder.getMsgDatabase(msgWindow); if (msgDatabase) { var dbFolderInfo = msgDatabase.dBFolderInfo; sortType = dbFolderInfo.sortType; sortOrder = dbFolderInfo.sortOrder; viewFlags = dbFolderInfo.viewFlags; if (folderFlags & MSG_FOLDER_FLAG_VIRTUAL) { viewType = nsMsgViewType.eShowQuickSearchResults; var searchTermString = dbFolderInfo.getCharPtrProperty("searchStr"); var searchOnline = dbFolderInfo.getBooleanProperty("searchOnline", false); // trick the view code into updating the real folder... gCurrentVirtualFolderUri = uriToLoad; viewDebug("uriToLoad = " + uriToLoad + "\n"); var srchFolderUri = dbFolderInfo.getCharPtrProperty("searchFolderUri"); var srchFolderUriArray = srchFolderUri.split('|'); // cross folder search var filterService = Components.classes["@mozilla.org/messenger/services/filters;1"].getService(Components.interfaces.nsIMsgFilterService); var filterList = filterService.getTempFilterList(msgFolder); var tempFilter = filterList.createFilter("temp"); filterList.parseCondition(tempFilter, searchTermString); if (srchFolderUriArray.length > 1) { viewType = nsMsgViewType.eShowVirtualFolderResults; gXFVirtualFolderTerms = CreateGroupedSearchTerms(tempFilter.searchTerms); setupXFVirtualFolderSearch(srchFolderUriArray, gXFVirtualFolderTerms, searchOnline); // need to set things up so that reroot folder issues the search } else { gSearchSession = null; uriToLoad = srchFolderUri; // we need to load the db for the actual folder so that many hdrs to download // will return false... var realFolderRes = GetResourceFromUri(uriToLoad); var realFolder = realFolderRes.QueryInterface(Components.interfaces.nsIMsgFolder); msgDatabase = realFolder.getMsgDatabase(msgWindow); gVirtualFolderTerms = CreateGroupedSearchTerms(tempFilter.searchTerms); } } else { gSearchSession = null; viewFlags = dbFolderInfo.viewFlags; viewType = dbFolderInfo.viewType; } msgDatabase = null; dbFolderInfo = null; } } catch (ex) { dump("failed to get view & sort values. ex = " + ex +"\n"); } } if (gDBView && gDBView.viewType == nsMsgViewType.eShowQuickSearchResults) { if (gPreQuickSearchView) //close cached view before quick search { gPreQuickSearchView.close(); gPreQuickSearchView = null; } ClearQSIfNecessary(); } ClearMessagePane(); if (gXFVirtualFolderTerms) viewType = nsMsgViewType.eShowVirtualFolderResults; else if (gSearchEmailAddress || gDefaultSearchViewTerms || gVirtualFolderTerms) viewType = nsMsgViewType.eShowQuickSearchResults; else if (viewType == nsMsgViewType.eShowQuickSearchResults) viewType = nsMsgViewType.eShowAllThreads; //override viewType - we don't want to start w/ quick search ChangeFolderByURI(uriToLoad, viewType, viewFlags, sortType, sortOrder); if (gVirtualFolderTerms) gDBView.viewFolder = msgFolder; } } else { msgWindow.openFolder = null; ClearThreadPane(); } if (gAccountCentralLoaded) UpdateMailToolbar("gAccountCentralLoaded"); else if (gFakeAccountPageLoaded) UpdateMailToolbar("gFakeAccountPageLoaded"); if (gDisplayStartupPage) { loadStartPage(); gDisplayStartupPage = false; UpdateMailToolbar("gDisplayStartupPage"); } }function ClearThreadPane(){ if (gDBView) { gDBView.close(); gDBView = null; }}function IsSpecialFolder(msgFolder, flags, checkAncestors){ if (!msgFolder) return false; else if ((msgFolder.flags & flags) == 0) { var parentMsgFolder = msgFolder.parentMsgFolder; return (parentMsgFolder && checkAncestors) ? IsSpecialFolder(parentMsgFolder, flags, true) : false; } else { // the user can set their INBOX to be their SENT folder. // in that case, we want this folder to act like an INBOX, // and not a SENT folder return !((flags & MSG_FOLDER_FLAG_SENTMAIL) && (msgFolder.flags & MSG_FOLDER_FLAG_INBOX)); }}function SelectNextMessage(nextMessage){ dump("XXX implement SelectNextMessage()\n");}function GetSelectTrashUri(folder){ if (!folder) return null; var uri = folder.getAttribute('id'); var resource = RDF.GetResource(uri); var msgFolder = resource.QueryInterface(Components.interfaces.nsIMsgFolder); if (msgFolder) { var rootFolder = msgFolder.rootFolder; var numFolder; var out = new Object(); var trashFolder = rootFolder.getFoldersWithFlag(MSG_FOLDER_FLAG_TRASH, 1, out); numFolder = out.value; if (trashFolder) { return trashFolder.URI; } } return null;}function Undo(){ messenger.Undo(msgWindow);}function Redo(){ messenger.Redo(msgWindow);}function getSearchTermString(searchTerms){ var searchIndex; var condition = ""; var count = searchTerms.Count(); for (searchIndex = 0; searchIndex < count; ) { var term = searchTerms.QueryElementAt(searchIndex++, Components.interfaces.nsIMsgSearchTerm); if (condition.length > 1) condition += ' '; if (term.matchAll) { condition = "ALL"; break; } condition += (term.booleanAnd) ? "AND (" : "OR ("; condition += term.termAsString + ')'; } return condition;}function CreateVirtualFolder(newName, parentFolder, searchFolderURIs, searchTerms, searchOnline){ // ### need to make sure view/folder doesn't exist. if (searchFolderURIs && (searchFolderURIs != "") && newName && (newName != "")) { try { var newFolder = parentFolder.addSubfolder(newName); newFolder.prettyName = newName; newFolder.setFlag(MSG_FOLDER_FLAG_VIRTUAL); var vfdb = newFolder.getMsgDatabase(msgWindow); var searchTermString = getSearchTermString(searchTerms); var dbFolderInfo = vfdb.dBFolderInfo; // set the view string as a property of the db folder info // set the original folder name as well. dbFolderInfo.setCharPtrProperty("searchStr", searchTermString); dbFolderInfo.setCharPtrProperty("searchFolderUri", searchFolderURIs); dbFolderInfo.setBooleanProperty("searchOnline", searchOnline); vfdb.summaryValid = true; vfdb.Close(true); parentFolder.NotifyItemAdded(newFolder); var accountManager = Components.classes["@mozilla.org/messenger/account-manager;1"].getService(Components.interfaces.nsIMsgAccountManager); accountManager.saveVirtualFolders(); } catch(e) { throw(e); // so that the dialog does not automatically close dump ("Exception : creating virtual folder \n"); } } else { dump("no name or nothing selected\n"); } }var searchSessionContractID = "@mozilla.org/messenger/searchSession;1";var gSearchView;var gSearchSession;var nsIMsgFolder = Components.interfaces.nsIMsgFolder;var nsIMsgWindow = Components.interfaces.nsIMsgWindow;var nsIMsgRDFDataSource = Components.interfaces.nsIMsgRDFDataSource;var nsMsgSearchScope = Components.interfaces.nsMsgSearchScope;var gFolderDatasource;var gFolderPicker;var gStatusBar = null;var gTimelineEnabled = false;var gMessengerBundle = null;// Datasource search listener -- made global as it has to be registered// and unregistered in different functions.var gDataSourceSearchListener;var gViewSearchListener;var gMailSession;function GetScopeForFolder(folder) { return folder.server.searchScope;}function setupXFVirtualFolderSearch(folderUrisToSearch, searchTerms, searchOnline){ var count = new Object; gSearchSession = Components.classes[searchSessionContractID].createInstance(Components.interfaces.nsIMsgSearchSession); gMailSession = Components.classes[mailSessionContractID].getService(Components.interfaces.nsIMsgMailSession); for (var i in folderUrisToSearch) { var realFolderRes = GetResourceFromUri(folderUrisToSearch[i]); var realFolder = realFolderRes.QueryInterface(Components.interfaces.nsIMsgFolder); if (!realFolder.isServer) gSearchSession.addScopeTerm(!searchOnline ? nsMsgSearchScope.offlineMail : GetScopeForFolder(realFolder), realFolder); } var termsArray = searchTerms.QueryInterface(Components.interfaces.nsISupportsArray); for (var i = 0; i < termsArray.Count(); i++) gSearchSession.appendTerm(termsArray.GetElementAt(i).QueryInterface(Components.interfaces.nsIMsgSearchTerm));}function CreateGroupedSearchTerms(searchTermsArray){ var searchSession = gSearchSession || Components.classes[searchSessionContractID].createInstance(Components.interfaces.nsIMsgSearchSession); // create a temporary isupports array to store our search terms // since we will be modifying the terms so they work with quick search var searchTermsArrayForQS = Components.classes["@mozilla.org/supports-array;1"].createInstance(Components.interfaces.nsISupportsArray); var numEntries = searchTermsArray.Count(); for (var i = 0; i < numEntries; i++) { var searchTerm = searchTermsArray.GetElementAt(i).QueryInterface(Components.interfaces.nsIMsgSearchTerm); // clone the term, since we might be modifying it var searchTermForQS = searchSession.createTerm(); searchTermForQS.value = searchTerm.value; searchTermForQS.attrib = searchTerm.attrib; searchTermForQS.arbitraryHeader = searchTerm.arbitraryHeader searchTermForQS.op = searchTerm.op; // mark the first node as a group if (i == 0) searchTermForQS.beginsGrouping = true; else if (i == numEntries - 1) searchTermForQS.endsGrouping = true; // turn the first term to true to work with quick search... searchTermForQS.booleanAnd = i ? searchTerm.booleanAnd : true; searchTermsArrayForQS.AppendElement(searchTermForQS); } return searchTermsArrayForQS;}function OnLeavingFolder(aFolder){ try { // Mark all messages of aFolder as read: // We can't use the command controller, because it is already tuned in to the // new folder, so we just mimic its behaviour wrt goDoCommand('cmd_markAllRead'). if (gDBView && gPrefBranch.getBoolPref("mailnews.mark_message_read." + aFolder.server.type)) { gDBView.doCommand(nsMsgViewCommandType.markAllRead); } } catch(e){/* ignore */}}var gViewDebug = false;function viewDebug(str){ if (gViewDebug) dump(str);}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -