From 63d226e70e8cc13498dae0836de575bcbe901c7f Mon Sep 17 00:00:00 2001 From: "scott%scott-macgregor.org" Date: Fri, 26 Mar 2004 01:44:52 +0000 Subject: [PATCH] Bug #204707 --> hide the view image menu option from the message pane context menu because we don't have any internal image viewer to use. --- mail/base/content/mailContextMenus.js | 566 ++++++++++++++++++++++++ mail/base/content/mailWindowOverlay.xul | 5 - mail/base/content/nsContextMenu.js | 3 +- mail/base/jar.mn | 1 + 4 files changed, 569 insertions(+), 6 deletions(-) create mode 100644 mail/base/content/mailContextMenus.js diff --git a/mail/base/content/mailContextMenus.js b/mail/base/content/mailContextMenus.js new file mode 100644 index 000000000000..242eb5f39500 --- /dev/null +++ b/mail/base/content/mailContextMenus.js @@ -0,0 +1,566 @@ +# -*- Mode: C; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ +# +# The contents of this file are subject to the Netscape 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/NPL/ +# +# 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 Netscape are +# Copyright (C) 2000 Netscape Communications Corporation. All +# Rights Reserved. +# +# Contributors(s): +# Jan Varga +# Hakan Waara +# + +//NOTE: gMessengerBundle must be defined and set or this Overlay won't work + +// 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 treeBoxObj = tree.treeBoxObject; + var treeSelection = treeBoxObj.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); + EnableMenuItem("threadPaneContext-labels", (numSelected >= 1)); + EnableMenuItem("threadPaneContext-mark", (numSelected >= 1)); + SetupSaveAsMenuItem("threadPaneContext-saveAs", numSelected, false); + SetupPrintPreviewMenuItem("threadPaneContext-printpreview", numSelected, false); + 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)); + + 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 SetupLabelsMenuItem(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.treeBoxObject.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 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); + ShowMenuItem("folderPaneContext-getMessages", (numSelected <= 1) && canGetMessages); + EnableMenuItem("folderPaneContext-getMessages", true); + + ShowMenuItem("folderPaneContext-openNewWindow", (numSelected <= 1) && !isServer); + EnableMenuItem("folderPaneContext-openNewWindow", true); + + SetupRenameMenuItem(folderResource, numSelected, isServer, serverType, specialFolder); + SetupRemoveMenuItem(folderResource, numSelected, isServer, serverType, specialFolder); + SetupCompactMenuItem(folderResource, numSelected); + + ShowMenuItem("folderPaneContext-copy-location", !isServer); + 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-sep-edit", (numSelected <= 1)); + + SetupNewMenuItem(folderResource, numSelected, isServer, serverType, specialFolder); + + ShowMenuItem("folderPaneContext-subscribe", (numSelected <= 1) && canSubscribeToFolder); + EnableMenuItem("folderPaneContext-subscribe", true); + + ShowMenuItem("folderPaneContext-sep1", (numSelected <= 1) && !isServer); +// News folder context menu ============================================= + + ShowMenuItem("folderPaneContext-newsUnsubscribe", (numSelected <= 1) && canSubscribeToFolder && isNewsgroup); + EnableMenuItem("folderPaneContext-newsUnsubscribe", true); + ShowMenuItem("folderPaneContext-markNewsgroupAllRead", (numSelected <= 1) && isNewsgroup); + EnableMenuItem("folderPaneContext-markNewsgroupAllRead", true); + +// End of News folder context menu ======================================= + + ShowMenuItem("folderPaneContext-markMailFolderAllRead", (numSelected <= 1) && isMailFolder); + EnableMenuItem("folderPaneContext-markMailFolderAllRead", true); + + ShowMenuItem("folderPaneContext-searchMessages", (numSelected<=1)); + EnableMenuItem("folderPaneContext-searchMessages", IsCanSearchMessagesEnabled()); + + return(true); +} + +function SetupRenameMenuItem(folderResource, numSelected, isServer, serverType, specialFolder) +{ + var msgFolder = folderResource.QueryInterface(Components.interfaces.nsIMsgFolder); + var isMail = serverType != 'nntp'; + var folderTree = GetFolderTree(); + var isSpecialFolder = !(specialFolder == "none" || (specialFolder == "Junk" && CanRenameDeleteJunkMail(msgFolder.URI))); + var canRename = GetFolderAttribute(folderTree, folderResource, "CanRename") == "true"; + + ShowMenuItem("folderPaneContext-rename", (numSelected <= 1) && !isServer && !isSpecialFolder && canRename); + var folder = GetMsgFolderFromResource(folderResource); + EnableMenuItem("folderPaneContext-rename", !isServer && folder.isCommandEnabled("cmd_renameFolder")); + + if(canRename) + { + SetMenuItemLabel("folderPaneContext-rename", gMessengerBundle.getString("renameFolder")); + } +} + +function SetupRemoveMenuItem(folderResource, numSelected, isServer, serverType, specialFolder) +{ + var msgFolder = folderResource.QueryInterface(Components.interfaces.nsIMsgFolder); + var isMail = serverType != 'nntp'; + var isSpecialFolder = !(specialFolder == "none" || (specialFolder == "Junk" && CanRenameDeleteJunkMail(msgFolder.URI))); + //Can't currently delete Accounts or special folders. + var showRemove = (numSelected <=1) && (isMail && !isSpecialFolder) && !isServer; + + + ShowMenuItem("folderPaneContext-remove", showRemove); + if(showRemove) + { + var folder = GetMsgFolderFromResource(folderResource); + EnableMenuItem("folderPaneContext-remove", folder.isCommandEnabled("cmd_delete")); + } + if(isMail && !isSpecialFolder) + { + SetMenuItemLabel("folderPaneContext-remove", gMessengerBundle.getString("removeFolder")); + } +} + +function SetupCompactMenuItem(folderResource, numSelected) +{ + var folderTree = GetFolderTree(); + var canCompact = GetFolderAttribute(folderTree, folderResource, "CanCompact") == "true"; + ShowMenuItem("folderPaneContext-compact", (numSelected <=1) && canCompact); + var folder = GetMsgFolderFromResource(folderResource); + EnableMenuItem("folderPaneContext-compact", folder.isCommandEnabled("cmd_compactFolder")); + + if(canCompact) + { + SetMenuItemLabel("folderPaneContext-compact", gMessengerBundle.getString("compactFolder")); + } +} + +function SetupNewMenuItem(folderResource, numSelected, isServer, serverType, specialFolder) +{ + var folderTree = GetFolderTree(); + var canCreateNew = GetFolderAttribute(folderTree, folderResource, "CanCreateSubfolders") == "true"; + var isInbox = specialFolder == "Inbox"; + + var isIMAPFolder = GetFolderAttribute(folderTree, folderResource, + "ServerType") == "imap"; + + var ioService = Components.classes["@mozilla.org/network/io-service;1"] + .getService(Components.interfaces.nsIIOService); + + var showNew = ((numSelected <=1) && (serverType != 'nntp') && canCreateNew) || isInbox; + ShowMenuItem("folderPaneContext-new", showNew); + EnableMenuItem("folderPaneContext-new", !isIMAPFolder || !ioService.offline); + if(showNew) + { + if(isServer || isInbox) + SetMenuItemLabel("folderPaneContext-new", gMessengerBundle.getString("newFolder")); + else + SetMenuItemLabel("folderPaneContext-new", gMessengerBundle.getString("newSubfolder")); + } +} + +function ShowMenuItem(id, showItem) +{ + var item = document.getElementById(id); + if(item && item.hidden != "true") + item.hidden = !showItem; +} + +function EnableMenuItem(id, enableItem) +{ + var item = document.getElementById(id); + if(item) + { + var enabled = (item.getAttribute('disabled') !='true'); + if(enableItem != enabled) + { + item.setAttribute('disabled', enableItem ? '' : 'true'); + } + } +} + +function SetMenuItemLabel(id, label) +{ + var item = document.getElementById(id); + if(item) + item.setAttribute('label', label); + +} + +function SetMenuItemAccessKey(id, accessKey) +{ + var item = document.getElementById(id); + if(item) + item.setAttribute('accesskey', accessKey); + +} + +function fillMessagePaneContextMenu() +{ + var message = GetLoadedMessage(); + var numSelected = (message) ? 1 : 0; + + var isNewsgroup = false; + + if (numSelected == 1) + isNewsgroup = IsNewsMessage(message); + + // don't show mail items for links/images, just show related items. + var hideMailItems = gContextMenu.onImage || gContextMenu.onLink; + + SetupEditAsNewMenuItem("messagePaneContext-editAsNew", numSelected, (numSelected == 0 || hideMailItems)); + SetupReplyToSenderMenuItem("messagePaneContext-replySender", numSelected, (numSelected == 0 || hideMailItems)); + SetupReplyToNewsgroupMenuItem("messagePaneContext-replyNewsgroup", numSelected, isNewsgroup, (numSelected == 0 || hideMailItems)); + SetupReplyAllMenuItem("messagePaneContext-replyAll" , numSelected, (numSelected == 0 || hideMailItems)); + SetupForwardMenuItem("messagePaneContext-forward", numSelected, (numSelected == 0 || hideMailItems)); + SetupCopyMessageUrlMenuItem("messagePaneContext-copyMessageUrl", numSelected, isNewsgroup, (numSelected == 0 || hideMailItems)); + SetupCopyMenuItem("messagePaneContext-copyMenu", numSelected, (numSelected == 0 || hideMailItems)); + SetupMoveMenuItem("messagePaneContext-moveMenu", numSelected, isNewsgroup, (numSelected == 0 || hideMailItems)); + SetupLabelsMenuItem("messagePaneContext-labels", numSelected, (numSelected == 0 || hideMailItems)); + SetupMarkMenuItem("messagePaneContext-mark", numSelected, (numSelected == 0 || hideMailItems)); + SetupSaveAsMenuItem("messagePaneContext-saveAs", numSelected, (numSelected == 0 || hideMailItems)); + SetupPrintPreviewMenuItem("messagePaneContext-printpreview", numSelected, (numSelected == 0 || hideMailItems)); + SetupPrintMenuItem("messagePaneContext-print", numSelected, (numSelected == 0 || hideMailItems)); + if (numSelected == 0 || hideMailItems) + ShowMenuItem("messagePaneContext-delete", false) + else { + goUpdateCommand('cmd_delete'); + ShowMenuItem("messagePaneContext-delete", true) + } + SetupAddSenderToABMenuItem("messagePaneContext-addSenderToAddressBook", numSelected, (numSelected == 0 || hideMailItems)); + SetupAddAllToABMenuItem("messagePaneContext-addAllToAddressBook", numSelected, (numSelected == 0 || hideMailItems)); + + //Figure out separators + ShowMenuItem("messagePaneContext-sep-open", ShowSeparator("messagePaneContext-sep-open")); + ShowMenuItem("messagePaneContext-sep-reply", ShowSeparator("messagePaneContext-sep-reply")); + ShowMenuItem("messagePaneContext-sep-edit", ShowSeparator("messagePaneContext-sep-edit")); + ShowMenuItem("messagePaneContext-sep-link", ShowSeparator("messagePaneContext-sep-link")); + ShowMenuItem("messagePaneContext-sep-copy", ShowSeparator("messagePaneContext-sep-copy")); + ShowMenuItem("messagePaneContext-sep-labels-1", ShowSeparator("messagePaneContext-sep-labels-1")); + ShowMenuItem("messagePaneContext-sep-labels-2", ShowSeparator("messagePaneContext-sep-labels-2")); + + if (!hideMailItems) + ShowMenuItem("messagePaneContext-sep-edit", false); +} + +function ShowSeparator(aSeparatorID) +{ + var separator = document.getElementById(aSeparatorID); + var sibling = separator.previousSibling; + var siblingID; + var siblingNextHiddenAttrib = separator.nextSibling.getAttribute("hidden"); + + while (sibling && sibling.localName != "menuseparator") { + siblingID = sibling.getAttribute("id"); + // for some reason, context-blockimage and context-unblockimage is not + // hidden on the very first time the context menu is invoked. It's only + // hidden on subsequent triggers of the context menu. Since we're not + // using these two menuitems in mailnews, we can ignore it if encountered. + if ((sibling.getAttribute("hidden") != "true") && + (siblingNextHiddenAttrib != "true") && + (siblingID != "context-blockimage") && + (siblingID != "context-unblockimage")) + return true; + sibling = sibling.previousSibling; + } + return false; +} + +function IsMenuItemShowing(menuID) +{ + + var item = document.getElementById(menuID); + if (item) + return item.hidden != "true"; + return false; +} + +function CopyFolderUrl() +{ + try + { + var folderResource = GetSelectedFolderResource(); + if (folderResource) + { + var msgFolder = folderResource.QueryInterface(Components.interfaces.nsIMsgFolder); + var contractid = "@mozilla.org/widget/clipboardhelper;1"; + var iid = Components.interfaces.nsIClipboardHelper; + var clipboard = Components.classes[contractid].getService(iid); + clipboard.copyString(msgFolder.folderURL); + } + } + catch (ex) + { + dump("ex="+ex+"\n"); + } +} + +function CopyMessageUrl() +{ + try { + var hdr = gDBView.hdrForFirstSelectedMessage; + var server = hdr.folder.server; + + var url; + if (server.isSecure) { + url = "snews://"; + } + else { + url = "news://" + } + url += server.hostName; + url += ":"; + url += server.port; + url += "/"; + url += hdr.messageId; + + var contractid = "@mozilla.org/widget/clipboardhelper;1"; + var iid = Components.interfaces.nsIClipboardHelper; + var clipboard = Components.classes[contractid].getService(iid); + clipboard.copyString(url); + } + catch (ex) { + dump("ex="+ex+"\n"); + } +} diff --git a/mail/base/content/mailWindowOverlay.xul b/mail/base/content/mailWindowOverlay.xul index dbd0229f4dfd..fb0bd2dca88e 100644 --- a/mail/base/content/mailWindowOverlay.xul +++ b/mail/base/content/mailWindowOverlay.xul @@ -977,11 +977,6 @@ - -