?? commandglue.js
字號:
{ var tree = GetThreadTree(); var lastFolderSent = tree.getAttribute("lastfoldersent") == "true"; if (isSentFolder != lastFolderSent) { var senderColumn = document.getElementById("senderCol"); var recipientColumn = document.getElementById("recipientCol"); var saveHidden = senderColumn.getAttribute("hidden"); senderColumn.setAttribute("hidden", senderColumn.getAttribute("swappedhidden")); senderColumn.setAttribute("swappedhidden", saveHidden); saveHidden = recipientColumn.getAttribute("hidden"); recipientColumn.setAttribute("hidden", recipientColumn.getAttribute("swappedhidden")); recipientColumn.setAttribute("swappedhidden", saveHidden); } if(isSentFolder) tree.setAttribute("lastfoldersent", "true"); else tree.setAttribute("lastfoldersent", "false");}function ShowLocationColumn(show){ var col = document.getElementById("locationCol"); if (col) { if (show) { col.removeAttribute("hidden"); col.removeAttribute("ignoreincolumnpicker"); } else { col.setAttribute("hidden","true"); col.setAttribute("ignoreincolumnpicker","true"); } }}function SetNewsFolderColumns(){ var sizeColumn = document.getElementById("sizeCol"); if (gDBView.usingLines) { sizeColumn.setAttribute("label",gMessengerBundle.getString("linesColumnHeader")); } else { sizeColumn.setAttribute("label", gMessengerBundle.getString("sizeColumnHeader")); }}function UpdateStatusMessageCounts(folder){ var unreadElement = GetUnreadCountElement(); var totalElement = GetTotalCountElement(); if(folder && unreadElement && totalElement) { var numUnread = gMessengerBundle.getFormattedString("unreadMsgStatus", [ folder.getNumUnread(false)]); var numTotal = gMessengerBundle.getFormattedString("totalMsgStatus", [folder.getTotalMessages(false)]); unreadElement.setAttribute("label", numUnread); totalElement.setAttribute("label", numTotal); unreadElement.hidden = false; totalElement.hidden = false; }}var gQuotaUICache;function UpdateStatusQuota(folder){ if (!(folder && // no folder selected folder instanceof Components.interfaces.nsIMsgImapMailFolder)) // POP etc. { if (typeof(gQuotaUICache) == "object") // ever shown quota gQuotaUICache.panel.hidden = true; return; } folder = folder.QueryInterface(Components.interfaces.nsIMsgImapMailFolder); // get element references and prefs if (typeof(gQuotaUICache) != "object") { gQuotaUICache = new Object(); gQuotaUICache.meter = document.getElementById("quotaMeter"); gQuotaUICache.panel = document.getElementById("quotaPanel"); gQuotaUICache.label = document.getElementById("quotaLabel"); const kBranch = "mail.quota.mainwindow_threshold."; gQuotaUICache.showTreshold = gPrefBranch.getIntPref(kBranch + "show"); gQuotaUICache.warningTreshold = gPrefBranch.getIntPref(kBranch + "warning"); gQuotaUICache.criticalTreshold = gPrefBranch.getIntPref(kBranch + "critical"); } var valid = {value: null}; var used = {value: null}; var max = {value: null}; try { // get data from backend folder.getQuota(valid, used, max); } catch (e) { dump(e + "\n"); } if (valid.value) { var percent = Math.round(used.value / max.value * 100); // show in UI if (percent < gQuotaUICache.showTreshold) gQuotaUICache.panel.hidden = true; else { gQuotaUICache.panel.hidden = false; gQuotaUICache.meter.setAttribute("value", percent); // do not use value property, because that is imprecise (3%) // for optimization that we don't need here var label = percent + "%"; gQuotaUICache.label.value = label; if (percent < gQuotaUICache.warningTreshold) gQuotaUICache.panel.removeAttribute("alert"); else if (percent < gQuotaUICache.criticalTreshold) gQuotaUICache.panel.setAttribute("alert", "warning"); else gQuotaUICache.panel.setAttribute("alert", "critical"); } } else gQuotaUICache.panel.hidden = true;}function ConvertColumnIDToSortType(columnID){ var sortKey; switch (columnID) { case "dateCol": sortKey = nsMsgViewSortType.byDate; break; case "senderCol": sortKey = nsMsgViewSortType.byAuthor; break; case "recipientCol": sortKey = nsMsgViewSortType.byRecipient; break; case "subjectCol": sortKey = nsMsgViewSortType.bySubject; break; case "locationCol": sortKey = nsMsgViewSortType.byLocation; break; case "accountCol": sortKey = nsMsgViewSortType.byAccount; break; case "unreadButtonColHeader": sortKey = nsMsgViewSortType.byUnread; break; case "statusCol": sortKey = nsMsgViewSortType.byStatus; break; case "sizeCol": sortKey = nsMsgViewSortType.bySize; break; case "priorityCol": sortKey = nsMsgViewSortType.byPriority; break; case "flaggedCol": sortKey = nsMsgViewSortType.byFlagged; break; case "threadCol": sortKey = nsMsgViewSortType.byThread; break; case "tagsCol": sortKey = nsMsgViewSortType.byTags; break; case "junkStatusCol": sortKey = nsMsgViewSortType.byJunkStatus; break; case "idCol": sortKey = nsMsgViewSortType.byId; break; case "attachmentCol": sortKey = nsMsgViewSortType.byAttachments; break; default: //no predefined column handler - lets check if there is a custom column handler try { //try to grab the columnHandler (an error is thrown if it does not exist) columnHandler = gDBView.getColumnHandler(columnID); //it exists - save this column ID in the customSortCol property of dbFolderInfo //for later use (see nsIMsgDBView.cpp) gDBView.db.dBFolderInfo.setProperty('customSortCol', columnID); sortKey = nsMsgViewSortType.byCustom; } catch(err) { dump("unsupported sort column: " + columnID + " - no custom handler installed. (Error was: " + err + ")\n"); sortKey = 0; } break; } return sortKey;}function ConvertSortTypeToColumnID(sortKey){ var columnID; // hack to turn this into an integer, if it was a string // it would be a string if it came from localStore.rdf sortKey = sortKey - 0; switch (sortKey) { case nsMsgViewSortType.byDate: columnID = "dateCol"; break; case nsMsgViewSortType.byAuthor: columnID = "senderCol"; break; case nsMsgViewSortType.byRecipient: columnID = "recipientCol"; break; case nsMsgViewSortType.bySubject: columnID = "subjectCol"; break; case nsMsgViewSortType.byLocation: columnID = "locationCol"; break; case nsMsgViewSortType.byAccount: columnID = "accountCol"; break; case nsMsgViewSortType.byUnread: columnID = "unreadButtonColHeader"; break; case nsMsgViewSortType.byStatus: columnID = "statusCol"; break; case nsMsgViewSortType.byTags: columnID = "tagsCol"; break; case nsMsgViewSortType.bySize: columnID = "sizeCol"; break; case nsMsgViewSortType.byPriority: columnID = "priorityCol"; break; case nsMsgViewSortType.byFlagged: columnID = "flaggedCol"; break; case nsMsgViewSortType.byThread: columnID = "threadCol"; break; case nsMsgViewSortType.byId: columnID = "idCol"; break; case nsMsgViewSortType.byJunkStatus: columnID = "junkStatusCol"; break; case nsMsgViewSortType.byAttachments: columnID = "attachmentCol"; break; case nsMsgViewSortType.byCustom: //TODO: either change try() catch to if (property exists) or restore the getColumnHandler() check try //getColumnHandler throws an errror when the ID is not handled { columnID = gDBView.db.dBFolderInfo.getProperty('customSortCol'); } catch (err) { //error - means no handler dump("ConvertSortTypeToColumnID: custom sort key but no handler for column '" + columnID + "'\n"); columnID = "dateCol"; } break; default: dump("unsupported sort key: " + sortKey + "\n"); columnID = "dateCol"; break; } return columnID;}var nsMsgViewSortType = Components.interfaces.nsMsgViewSortType;var nsMsgViewSortOrder = Components.interfaces.nsMsgViewSortOrder;var nsMsgViewFlagsType = Components.interfaces.nsMsgViewFlagsType;var nsMsgViewCommandType = Components.interfaces.nsMsgViewCommandType;var nsMsgViewType = Components.interfaces.nsMsgViewType;var nsMsgNavigationType = Components.interfaces.nsMsgNavigationType;var gDBView = null;var gCurViewFlags;var gCurSortType;// CreateDBView is called when we have a thread pane. CreateBareDBView is called when there is no// tree associated with the view. CreateDBView will call into CreateBareDBView...function CreateBareDBView(originalView, msgFolder, viewType, viewFlags, sortType, sortOrder){ var dbviewContractId = "@mozilla.org/messenger/msgdbview;1?type="; // hack to turn this into an integer, if it was a string // it would be a string if it came from localStore.rdf viewType = viewType - 0; switch (viewType) { case nsMsgViewType.eShowQuickSearchResults: dbviewContractId += "quicksearch"; break; case nsMsgViewType.eShowThreadsWithUnread: dbviewContractId += "threadswithunread"; break; case nsMsgViewType.eShowWatchedThreadsWithUnread: dbviewContractId += "watchedthreadswithunread"; break; case nsMsgViewType.eShowVirtualFolderResults: dbviewContractId += "xfvf"; break; case nsMsgViewType.eShowSearch: dbviewContractId += "search"; break; case nsMsgViewType.eShowAllThreads: default: if (sortType == nsMsgViewSortType.byThread || sortType == nsMsgViewSortType.byId || sortType == nsMsgViewSortType.byNone) viewFlags &= ~nsMsgViewFlagsType.kGroupBySort; if (viewFlags & nsMsgViewFlagsType.kGroupBySort) dbviewContractId += "group"; else dbviewContractId += "threaded"; break; } // dump ("contract id = " + dbviewContractId + "original view = " + originalView + "\n"); if (!originalView) gDBView = Components.classes[dbviewContractId].createInstance(Components.interfaces.nsIMsgDBView); gCurViewFlags = viewFlags; var count = new Object; if (!gThreadPaneCommandUpdater) gThreadPaneCommandUpdater = new nsMsgDBViewCommandUpdater(); gCurSortType = sortType; if (!originalView) { gDBView.init(messenger, msgWindow, gThreadPaneCommandUpdater); gDBView.open(msgFolder, gCurSortType, sortOrder, viewFlags, count); if (viewType == nsMsgViewType.eShowVirtualFolderResults) { // the view is a listener on the search results gViewSearchListener = gDBView.QueryInterface(Components.interfaces.nsIMsgSearchNotify); gSearchSession.registerListener(gViewSearchListener); } } else { gDBView = originalView.cloneDBView(messenger, msgWindow, gThreadPaneCommandUpdater); }}function CreateDBView(msgFolder, viewType, viewFlags, sortType, sortOrder){ // call the inner create method CreateBareDBView(null, msgFolder, viewType, viewFlags, sortType, sortOrder); // now do tree specific work // based on the collapsed state of the thread pane/message pane splitter, // suppress message display if appropriate. gDBView.suppressMsgDisplay = IsMessagePaneCollapsed(); UpdateSortIndicators(gCurSortType, sortOrder); var ObserverService = Components.classes["@mozilla.org/observer-service;1"].getService(Components.interfaces.nsIObserverService); ObserverService.notifyObservers(msgFolder, "MsgCreateDBView", viewType + ":" + viewFlags);}//------------------------------------------------------------// Sets the column header sort icon based on the requested// column and direction.//// Notes:// (1) This function relies on the first part of the// <treecell id> matching the <treecol id>. The treecell// id must have a "Header" suffix.// (2) By changing the "sortDirection" attribute, a different// CSS style will be used, thus changing the icon based on// the "sortDirection" parameter.//------------------------------------------------------------function UpdateSortIndicator(column,sortDirection){ // this is obsolete}function GetSelectedFolderResource(){ var folderTree = GetFolderTree(); var startIndex = {}; var endIndex = {}; folderTree.view.selection.getRangeAt(0, startIndex, endIndex); return GetFolderResource(folderTree, startIndex.value);}function ChangeMessagePaneVisibility(now_hidden){ // we also have to hide the File/Attachments menuitem node = document.getElementById("fileAttachmentMenu"); if (node) node.hidden = now_hidden; if (gDBView) {
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -