mailcontextmenus.js

来自「现在很火的邮件客户端软件thunderbird的源码」· JavaScript 代码 · 共 671 行 · 第 1/2 页

JS
671
字号
# -*- 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 + =
减小字号Ctrl + -
显示快捷键?