?? mailcontextmenus.js
字號:
# -*- Mode: C; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*- */## ***** BEGIN LICENSE BLOCK *****# Version: MPL 1.1/GPL 2.0/LGPL 2.1## The contents of this file are subject to the Mozilla Public License Version# 1.1 (the "License"); you may not use this file except in compliance with# the License. You may obtain a copy of the License at# http://www.mozilla.org/MPL/## Software distributed under the License is distributed on an "AS IS" basis,# WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License# for the specific language governing rights and limitations under the# License.## The Original Code is Mozilla Communicator client code, released# March 31, 1998.## The Initial Developer of the Original Code is# Netscape Communications Corporation.# Portions created by the Initial Developer are Copyright (C) 2000# the Initial Developer. All Rights Reserved.## Contributor(s):# Jan Varga <varga@nixcorp.com># Hakan Waara <hwaara@chello.se>## Alternatively, the contents of this file may be used under the terms of# either the GNU General Public License Version 2 or later (the "GPL"), or# the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),# in which case the provisions of the GPL or the LGPL are applicable instead# of those above. If you wish to allow use of your version of this file only# under the terms of either the GPL or the LGPL, and not to allow others to# use your version of this file under the terms of the MPL, indicate your# decision by deleting the provisions above and replace them with the notice# and other provisions required by the GPL or the LGPL. If you do not delete# the provisions above, a recipient may use your version of this file under# the terms of any one of the MPL, the GPL or the LGPL.## ***** END LICENSE BLOCK *****//NOTE: gMessengerBundle must be defined and set or this Overlay won't workconst mailtolength = 7;// Function to change the highlighted row back to the row that is currently// outline/dotted without loading the contents of either rows. This is// triggered when the context menu for a given row is hidden/closed// (onpopuphiding).function RestoreSelectionWithoutContentLoad(tree){ // If a delete or move command had been issued, then we should // reset gRightMouseButtonDown and gThreadPaneDeleteOrMoveOccurred // and return (see bug 142065). if(gThreadPaneDeleteOrMoveOccurred) { gRightMouseButtonDown = false; gThreadPaneDeleteOrMoveOccurred = false; return; } var treeSelection = tree.view.selection; // make sure that currentIndex is valid so that we don't try to restore // a selection of an invalid row. if((!treeSelection.isSelected(treeSelection.currentIndex)) && (treeSelection.currentIndex >= 0)) { treeSelection.selectEventsSuppressed = true; treeSelection.select(treeSelection.currentIndex); treeSelection.selectEventsSuppressed = false; // Keep track of which row in the thread pane is currently selected. // This is currently only needed when deleting messages. See // declaration of var in msgMail3PaneWindow.js. if(tree.id == "threadTree") gThreadPaneCurrentSelectedIndex = treeSelection.currentIndex; } else if(treeSelection.currentIndex < 0) // Clear the selection in the case of when a folder has just been // loaded where the message pane does not have a message loaded yet. // When right-clicking a message in this case and dismissing the // popup menu (by either executing a menu command or clicking // somewhere else), the selection needs to be cleared. // However, if the 'Delete Message' or 'Move To' menu item has been // selected, DO NOT clear the selection, else it will prevent the // tree view from refreshing. treeSelection.clearSelection(); // Need to reset gRightMouseButtonDown to false here because // TreeOnMouseDown() is only called on a mousedown, not on a key down. // So resetting it here allows the loading of messages in the messagepane // when navigating via the keyboard or the toolbar buttons *after* // the context menu has been dismissed. gRightMouseButtonDown = false;}function threadPaneOnPopupHiding(){ RestoreSelectionWithoutContentLoad(GetThreadTree());}function fillThreadPaneContextMenu(){ var numSelected = GetNumSelectedMessages(); var isNewsgroup = false; var selectedMessage = null; // Clear the global var used to keep track if a 'Delete Message' or 'Move // To' command has been triggered via the thread pane context menu. gThreadPaneDeleteOrMoveOccurred = false; if(numSelected >= 0) { selectedMessage = GetFirstSelectedMessage(); isNewsgroup = IsNewsMessage(selectedMessage); } SetupNewMessageWindowMenuItem("threadPaneContext-openNewWindow", numSelected, false); SetupEditAsNewMenuItem("threadPaneContext-editAsNew", numSelected, false); ShowMenuItem("threadPaneContext-sep-open", (numSelected <= 1)); SetupReplyToSenderMenuItem("threadPaneContext-replySender", numSelected, false); SetupReplyToNewsgroupMenuItem("threadPaneContext-replyNewsgroup", numSelected, isNewsgroup, false); SetupReplyAllMenuItem("threadPaneContext-replyAll", numSelected, false); SetupForwardMenuItem("threadPaneContext-forward", numSelected, false); SetupForwardAsAttachmentMenuItem("threadPaneContext-forwardAsAttachment", numSelected, false); ShowMenuItem("threadPaneContext-sep-reply", true); SetupCopyMessageUrlMenuItem("threadPaneContext-copyMessageUrl", numSelected, isNewsgroup, numSelected != 1); SetupCopyMenuItem("threadPaneContext-copyMenu", numSelected, false); SetupMoveMenuItem("threadPaneContext-moveMenu", numSelected, isNewsgroup, false); SetupMoveToFolderAgainMenuItem("threadPaneContext-moveToFolderAgain", numSelected, false); EnableMenuItem("threadPaneContext-labels", (numSelected >= 1)); EnableMenuItem("threadPaneContext-mark", (numSelected >= 1)); SetupSaveAsMenuItem("threadPaneContext-saveAs", numSelected, false);#ifdef XP_MACOSX SetupPrintPreviewMenuItem("threadPaneContext-printpreview", numSelected, true);#else SetupPrintPreviewMenuItem("threadPaneContext-printpreview", numSelected, false);#endif SetupPrintMenuItem("threadPaneContext-print", numSelected, false); SetupDeleteMenuItem("threadPaneContext-delete", numSelected, false); SetupAddSenderToABMenuItem("threadPaneContext-addSenderToAddressBook", numSelected, false); SetupAddAllToABMenuItem("threadPaneContext-addAllToAddressBook", numSelected, false); ShowMenuItem("threadPaneContext-sep-edit", (numSelected <= 1)); EnableMenuItem('downloadSelected', GetNumSelectedMessages() > 0); return(true);}function SetupNewMessageWindowMenuItem(menuID, numSelected, forceHide){ ShowMenuItem(menuID, (numSelected <= 1) && !forceHide); EnableMenuItem(menuID, (numSelected == 1));}function SetupEditAsNewMenuItem(menuID, numSelected, forceHide){ ShowMenuItem(menuID, (numSelected <= 1)&& !forceHide); EnableMenuItem(menuID, (numSelected == 1));}function SetupReplyToSenderMenuItem(menuID, numSelected, forceHide){ ShowMenuItem(menuID, (numSelected <= 1)&& !forceHide); EnableMenuItem(menuID, (numSelected == 1));}function SetupReplyToNewsgroupMenuItem(menuID, numSelected, isNewsgroup, forceHide){ ShowMenuItem(menuID, (numSelected <= 1) && isNewsgroup && !forceHide); EnableMenuItem(menuID, (numSelected == 1));}function SetupReplyAllMenuItem(menuID, numSelected, forceHide){ ShowMenuItem(menuID, (numSelected <= 1) && !forceHide); EnableMenuItem(menuID, (numSelected == 1));}function SetupForwardMenuItem(menuID, numSelected, forceHide){ ShowMenuItem(menuID, (numSelected <= 1) && !forceHide); EnableMenuItem(menuID, (numSelected > 0));}function SetupForwardAsAttachmentMenuItem(menuID, numSelected, forceHide){ ShowMenuItem(menuID, (numSelected > 1) && !forceHide); EnableMenuItem(menuID, (numSelected > 1));}function SetupMoveMenuItem(menuID, numSelected, isNewsgroup, forceHide){ ShowMenuItem(menuID, !isNewsgroup && !forceHide); var msgFolder = GetLoadedMsgFolder(); // disable move if we can't delete message(s) from this folder var enableMenuItem = (numSelected > 0) && msgFolder && msgFolder.canDeleteMessages; EnableMenuItem(menuID, enableMenuItem);}function SetupCopyMessageUrlMenuItem(menuID, numSelected, isNewsgroup, forceHide){ ShowMenuItem(menuID, isNewsgroup && !forceHide); EnableMenuItem(menuID, (numSelected > 0));}function SetupCopyMenuItem(menuID, numSelected, forceHide){ ShowMenuItem(menuID, !forceHide); EnableMenuItem(menuID, (numSelected > 0));}function SetupMoveToFolderAgainMenuItem(menuID, numSelected, forceHide){ ShowMenuItem(menuID, !forceHide); if (!forceHide) initMoveToFolderAgainMenu(document.getElementById(menuID));}function SetupLabelsMenuItem(menuID, numSelected, forceHide){ ShowMenuItem(menuID, (numSelected <= 1) && !forceHide); EnableMenuItem(menuID, (numSelected == 1));}function SetupTagMenuItem(menuID, numSelected, forceHide){ ShowMenuItem(menuID, (numSelected <= 1) && !forceHide); EnableMenuItem(menuID, (numSelected == 1));}function SetupMarkMenuItem(menuID, numSelected, forceHide){ ShowMenuItem(menuID, (numSelected <= 1) && !forceHide); EnableMenuItem(menuID, (numSelected == 1));}function SetupSaveAsMenuItem(menuID, numSelected, forceHide){ ShowMenuItem(menuID, (numSelected <= 1) && !forceHide); EnableMenuItem(menuID, (numSelected == 1));}function SetupPrintPreviewMenuItem(menuID, numSelected, forceHide){ ShowMenuItem(menuID, (numSelected <= 1) && !forceHide); EnableMenuItem(menuID, (numSelected == 1));}function SetupPrintMenuItem(menuID, numSelected, forceHide){ ShowMenuItem(menuID, !forceHide); EnableMenuItem(menuID, (numSelected > 0));}function SetupAddSenderToABMenuItem(menuID, numSelected, forceHide){ ShowMenuItem(menuID, (numSelected <= 1) && !forceHide); EnableMenuItem(menuID, false);}function SetupAddAllToABMenuItem(menuID, numSelected, forceHide){ ShowMenuItem(menuID, (numSelected <= 1) && !forceHide); EnableMenuItem(menuID, false);}function SetupDeleteMenuItem(menuID, numSelected, forceHide){ // This function is needed for the case where a folder is just loaded (while // there isn't a message loaded in the message pane), a right-click is done // in the thread pane. This function will disable enable the 'Delete // Message' menu item. ShowMenuItem(menuID, !forceHide); EnableMenuItem(menuID, (numSelected > 0)); goUpdateCommand('cmd_delete');}function folderPaneOnPopupHiding(){ RestoreSelectionWithoutContentLoad(GetFolderTree());}function fillFolderPaneContextMenu(){ if (IsFakeAccount()) return false; var folderTree = GetFolderTree(); var startIndex = {}; var endIndex = {}; folderTree.view.selection.getRangeAt(0, startIndex, endIndex); if (startIndex.value < 0) return false; var numSelected = endIndex.value - startIndex.value + 1; var folderResource = GetFolderResource(folderTree, startIndex.value); var folder = GetMsgFolderFromUri(folderResource.Value, false); var isVirtualFolder = folder ? folder.flags & MSG_FOLDER_FLAG_VIRTUAL : false; var isServer = GetFolderAttribute(folderTree, folderResource, "IsServer") == 'true'; var serverType = GetFolderAttribute(folderTree, folderResource, "ServerType"); var specialFolder = GetFolderAttribute(folderTree, folderResource, "SpecialFolder"); var canSubscribeToFolder = (serverType == "nntp") || (serverType == "imap"); var isNewsgroup = !isServer && serverType == 'nntp'; var isMailFolder = !isServer && serverType != 'nntp'; var canGetMessages = (isServer && (serverType != "nntp") && (serverType !="none")) || isNewsgroup; EnableMenuItem("folderPaneContext-properties", true); SetupNewMenuItem(folderResource, numSelected, isServer, serverType, specialFolder); SetupRenameMenuItem(folderResource, numSelected, isServer, serverType, specialFolder); SetupRemoveMenuItem(folderResource, numSelected, isServer, serverType, specialFolder); SetupCompactMenuItem(folderResource, numSelected); SetupFavoritesMenuItem(folderResource, numSelected, isServer, 'folderPaneContext-favoriteFolder'); ShowMenuItem("folderPaneContext-copy-location", !isServer && !isVirtualFolder); ShowMenuItem("folderPaneContext-emptyTrash", (numSelected <= 1) && (specialFolder == 'Trash')); EnableMenuItem("folderPaneContext-emptyTrash", true); var showSendUnsentMessages = (numSelected <= 1) && (specialFolder == 'Unsent Messages'); ShowMenuItem("folderPaneContext-sendUnsentMessages", showSendUnsentMessages); if (showSendUnsentMessages) EnableMenuItem("folderPaneContext-sendUnsentMessages", IsSendUnsentMsgsEnabled(folderResource)); ShowMenuItem("folderPaneContext-subscribe", (numSelected <= 1) && canSubscribeToFolder && !isVirtualFolder); EnableMenuItem("folderPaneContext-subscribe", !isVirtualFolder); // XXX: Hack for RSS servers...
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -