home *** CD-ROM | disk | FTP | other *** search
/ Chip 2002 January / 01_02.iso / software / netscape62win / mail.xpi / bin / chrome / messenger.jar / content / messenger / mailContextMenus.js < prev    next >
Text File  |  2001-08-15  |  18KB  |  483 lines

  1. /* -*- Mode: C; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
  2. /*
  3.  * The contents of this file are subject to the Netscape Public
  4.  * License Version 1.1 (the "License"); you may not use this file
  5.  * except in compliance with the License. You may obtain a copy of
  6.  * the License at http://www.mozilla.org/NPL/
  7.  *
  8.  * Software distributed under the License is distributed on an "AS
  9.  * IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
  10.  * implied. See the License for the specific language governing
  11.  * rights and limitations under the License.
  12.  *
  13.  * The Original Code is Mozilla Communicator client code,
  14.  * released March 31, 1998.
  15.  *
  16.  * The Initial Developer of the Original Code is Netscape Communications
  17.  * Corporation.  Portions created by Netscape are
  18.  * Copyright (C) 2000 Netscape Communications Corporation. All
  19.  * Rights Reserved.
  20.  *
  21.  * Contributors(s):
  22.  *   Jan Varga <varga@utcru.sk>
  23.  *   Hakan Waara <hwaara@chello.se>
  24.  */
  25.  
  26. //NOTE: gMessengerBundle must be defined and set or this Overlay won't work
  27.  
  28. function fillThreadPaneContextMenu()
  29. {
  30.   var numSelected = GetNumSelectedMessages();
  31.  
  32.   var isNewsgroup = false;
  33.   var selectedMessage = null;
  34.  
  35.   if(numSelected >= 0) {
  36.     selectedMessage = GetFirstSelectedMessage();
  37.     isNewsgroup = IsNewsMessage(selectedMessage);
  38.   }
  39.  
  40.  
  41.   SetupNewMessageWindowMenuItem("threadPaneContext-openNewWindow", numSelected, false);
  42.   SetupEditAsNewMenuItem("threadPaneContext-editAsNew", numSelected, false);
  43.  
  44.   ShowMenuItem("threadPaneContext-sep-open", (numSelected <= 1));
  45.  
  46.   SetupReplyToSenderMenuItem("threadPaneContext-replySender", numSelected, false);
  47.   SetupReplyToNewsgroupMenuItem("threadPaneContext-replyNewsgroup", numSelected, isNewsgroup, false);
  48.   SetupReplyAllMenuItem("threadPaneContext-replyAll", numSelected, false);
  49.   SetupForwardMenuItem("threadPaneContext-forward", numSelected, false);
  50.   SetupForwardAsAttachmentMenuItem("threadPaneContext-forwardAsAttachment", numSelected, false);
  51.  
  52.   ShowMenuItem("threadPaneContext-sep-reply", true);
  53.  
  54.   SetupCopyMessageUrlMenuItem("threadPaneContext-copyMessageUrl", numSelected, isNewsgroup, numSelected != 1); 
  55.   SetupCopyMenuItem("threadPaneContext-copyMenu", numSelected, false);
  56.   SetupMoveMenuItem("threadPaneContext-moveMenu", numSelected, isNewsgroup, false);
  57.   SetupSaveAsMenuItem("threadPaneContext-saveAs", numSelected, false);
  58.   SetupPrintMenuItem("threadPaneContext-print", numSelected, false);
  59.   SetupDeleteMenuItem("threadPaneContext-delete", numSelected, isNewsgroup, false);
  60.   SetupAddSenderToABMenuItem("threadPaneContext-addSenderToAddressBook", numSelected, false);
  61.   SetupAddAllToABMenuItem("threadPaneContext-addAllToAddressBook", numSelected, false);
  62.  
  63.  
  64.   ShowMenuItem("threadPaneContext-sep-edit", (numSelected <= 1));
  65.  
  66.   return(true);
  67. }
  68.  
  69. function SetupNewMessageWindowMenuItem(menuID, numSelected, forceHide)
  70. {
  71.   ShowMenuItem(menuID, (numSelected <= 1) && !forceHide);
  72.   EnableMenuItem(menuID, (numSelected == 1));
  73. }
  74.  
  75. function SetupEditAsNewMenuItem(menuID, numSelected, forceHide)
  76. {
  77.   ShowMenuItem(menuID, (numSelected <= 1)&& !forceHide);
  78.   EnableMenuItem(menuID, (numSelected == 1));
  79. }
  80.  
  81. function SetupReplyToSenderMenuItem(menuID, numSelected, forceHide)
  82. {
  83.   ShowMenuItem(menuID, (numSelected <= 1)&& !forceHide);
  84.   EnableMenuItem(menuID, (numSelected == 1));
  85. }
  86.  
  87. function SetupReplyToNewsgroupMenuItem(menuID, numSelected, isNewsgroup, forceHide)
  88. {
  89.   ShowMenuItem(menuID, (numSelected <= 1) && isNewsgroup && !forceHide);
  90.   EnableMenuItem(menuID,  (numSelected == 1));
  91. }
  92.  
  93. function SetupReplyAllMenuItem(menuID, numSelected, forceHide)
  94. {
  95.   ShowMenuItem(menuID, (numSelected <= 1) && !forceHide);
  96.   EnableMenuItem(menuID, (numSelected == 1));
  97. }
  98.  
  99. function SetupForwardMenuItem(menuID, numSelected, forceHide)
  100. {
  101.   ShowMenuItem(menuID,  (numSelected <= 1) && !forceHide);
  102.   EnableMenuItem(menuID, (numSelected > 0));
  103. }
  104.  
  105. function SetupForwardAsAttachmentMenuItem(menuID, numSelected, forceHide)
  106. {
  107.   ShowMenuItem(menuID,  (numSelected > 1) && !forceHide);
  108.   EnableMenuItem(menuID, (numSelected > 1));
  109. }
  110.  
  111. function SetupMoveMenuItem(menuID, numSelected, isNewsgroup, forceHide)
  112. {
  113.   ShowMenuItem(menuID, !isNewsgroup && !forceHide);
  114.   EnableMenuItem(menuID, (numSelected > 0));
  115. }
  116.  
  117. function SetupCopyMessageUrlMenuItem(menuID, numSelected, isNewsgroup, forceHide)
  118. {
  119.   ShowMenuItem(menuID, isNewsgroup && !forceHide);
  120.   EnableMenuItem(menuID, (numSelected > 0));
  121. }
  122.  
  123. function SetupCopyMenuItem(menuID, numSelected, forceHide)
  124. {
  125.   ShowMenuItem(menuID, !forceHide);
  126.   EnableMenuItem(menuID, (numSelected > 0));
  127. }
  128.  
  129. function SetupSaveAsMenuItem(menuID, numSelected, forceHide)
  130. {
  131.   ShowMenuItem(menuID, (numSelected <= 1) && !forceHide);
  132.   EnableMenuItem(menuID, (numSelected == 1));
  133. }
  134.  
  135. function SetupPrintMenuItem(menuID, numSelected, forceHide)
  136. {
  137.   ShowMenuItem(menuID, !forceHide);
  138.   EnableMenuItem(menuID, (numSelected > 0));
  139. }
  140.  
  141. function SetupDeleteMenuItem(menuID, numSelected, isNewsgroup, forceHide)
  142. {
  143.   var showMenuItem = !forceHide;
  144.  
  145.   ShowMenuItem(menuID, showMenuItem);
  146.   if(showMenuItem)
  147.   {
  148.     EnableMenuItem(menuID, (numSelected > 0));
  149.     if(!isNewsgroup)
  150.     {
  151.       SetMenuItemLabel(menuID, gMessengerBundle.getString("delete"));
  152.       SetMenuItemAccessKey(menuID, gMessengerBundle.getString("deleteAccessKey"));
  153.     }
  154.     else
  155.     {
  156.       SetMenuItemLabel(menuID, gMessengerBundle.getString("cancel"));
  157.       SetMenuItemAccessKey(menuID, gMessengerBundle.getString("cancelAccessKey"));
  158.     }
  159.   }
  160. }
  161.  
  162. function SetupAddSenderToABMenuItem(menuID, numSelected, forceHide)
  163. {
  164.   ShowMenuItem(menuID, (numSelected <= 1) && !forceHide);
  165.   EnableMenuItem(menuID, false);
  166. }
  167.  
  168. function SetupAddAllToABMenuItem(menuID, numSelected, forceHide)
  169. {
  170.   ShowMenuItem(menuID, (numSelected <= 1) && !forceHide);
  171.   EnableMenuItem(menuID, false);
  172. }
  173.  
  174. function fillFolderPaneContextMenu()
  175. {
  176.   var folderOutliner = GetFolderOutliner();
  177.   var startIndex = {};
  178.   var endIndex = {};
  179.   folderOutliner.outlinerBoxObject.selection.getRangeAt(0, startIndex, endIndex);
  180.   if (startIndex.value < 0)
  181.     return;
  182.   var numSelected = endIndex.value - startIndex.value + 1;
  183.   var folderResource = GetFolderResource(folderOutliner, startIndex.value);
  184.  
  185.   var isServer = GetFolderAttribute(folderOutliner, folderResource, "IsServer") == 'true';
  186.   var serverType = GetFolderAttribute(folderOutliner, folderResource, "ServerType");
  187.   var specialFolder = GetFolderAttribute(folderOutliner, folderResource, "SpecialFolder");
  188.   var canSubscribeToFolder = (serverType == "nntp") || (serverType == "imap");
  189.   var isNewsgroup = !isServer && serverType == 'nntp';
  190.   var canGetMessages =  (isServer && (serverType != "nntp") && (serverType !="none")) || isNewsgroup;
  191.  
  192.   EnableMenuItem("folderPaneContext-properties", !isServer);
  193.   ShowMenuItem("folderPaneContext-getMessages", (numSelected <= 1) && canGetMessages);
  194.   EnableMenuItem("folderPaneContext-getMessages", true);
  195.  
  196.   ShowMenuItem("folderPaneContext-openNewWindow", (numSelected <= 1) && !isServer);
  197.   EnableMenuItem("folderPaneContext-openNewWindow", (true));
  198.  
  199.   SetupRenameMenuItem(folderResource, numSelected, isServer, serverType, specialFolder);
  200.   SetupRemoveMenuItem(folderResource, numSelected, isServer, serverType, specialFolder);
  201.   SetupCompactMenuItem(folderResource, numSelected);
  202.  
  203.   ShowMenuItem("folderPaneContext-emptyTrash", (numSelected <= 1) && (specialFolder == 'Trash'));
  204.   EnableMenuItem("folderPaneContext-emptyTrash", true);
  205.  
  206.   var showSendUnsentMessages = (numSelected <= 1) && (specialFolder == 'Unsent Messages');
  207.   ShowMenuItem("folderPaneContext-sendUnsentMessages", showSendUnsentMessages);
  208.   if (showSendUnsentMessages) {
  209.     EnableMenuItem("folderPaneContext-sendUnsentMessages", IsSendUnsentMsgsEnabled(folderResource));
  210.   }
  211.  
  212.   ShowMenuItem("folderPaneContext-sep-edit", (numSelected <= 1));
  213.  
  214.   SetupNewMenuItem(folderResource, numSelected, isServer, serverType, specialFolder);
  215.  
  216.   ShowMenuItem("folderPaneContext-subscribe", (numSelected <= 1) && canSubscribeToFolder);
  217.   EnableMenuItem("folderPaneContext-subscribe", true);
  218.  
  219. // News folder context menu =============================================
  220.  
  221.   ShowMenuItem("folderPaneContext-newsUnsubscribe", (numSelected <= 1) && canSubscribeToFolder && isNewsgroup);
  222.   EnableMenuItem("folderPaneContext-newsUnsubscribe", true);
  223.   ShowMenuItem("folderPaneContext-markAllRead", (numSelected <= 1) && isNewsgroup);
  224.   EnableMenuItem("folderPaneContext-markAllRead", true);
  225.  
  226. // End of News folder context menu =======================================
  227.  
  228.   ShowMenuItem("folderPaneContext-searchMessages", (numSelected<=1));
  229.   EnableMenuItem("folderPaneContext-searchMessages", true);
  230.  
  231.   return(true);
  232. }
  233.  
  234. function SetupRenameMenuItem(folderResource, numSelected, isServer, serverType, specialFolder)
  235. {
  236.   var isSpecialFolder = specialFolder != 'none';
  237.   var isMail = serverType != 'nntp';
  238.   var folderOutliner = GetFolderOutliner();
  239.   var canRename = GetFolderAttribute(folderOutliner, folderResource, "CanRename") == "true";
  240.  
  241.   ShowMenuItem("folderPaneContext-rename", (numSelected <= 1) && !isServer && (specialFolder == "none") && canRename);
  242.   var folder = GetMsgFolderFromResource(folderResource);
  243.   EnableMenuItem("folderPaneContext-rename", !isServer && folder.isCommandEnabled("cmd_renameFolder"));
  244.  
  245.   if(canRename)
  246.   {
  247.     SetMenuItemLabel("folderPaneContext-rename", gMessengerBundle.getString("renameFolder"));
  248.   }
  249. }
  250.  
  251. function SetupRemoveMenuItem(folderResource, numSelected, isServer, serverType, specialFolder)
  252. {
  253.   var isMail = serverType != 'nntp';
  254.   var isSpecialFolder = specialFolder != "none";
  255.   //Can't currently delete Accounts or special folders.
  256.   var showRemove = (numSelected <=1) && (isMail && !isSpecialFolder) && !isServer;
  257.  
  258.  
  259.   ShowMenuItem("folderPaneContext-remove", showRemove);
  260.   if(showRemove)
  261.   {
  262.     var folder = GetMsgFolderFromResource(folderResource);
  263.     EnableMenuItem("folderPaneContext-remove", folder.isCommandEnabled("cmd_delete"));
  264.   }
  265.   if(isMail && !isSpecialFolder)
  266.   {
  267.     SetMenuItemLabel("folderPaneContext-remove", gMessengerBundle.getString("removeFolder"));
  268.   }
  269. }
  270.  
  271. function SetupCompactMenuItem(folderResource, numSelected)
  272. {
  273.   var folderOutliner = GetFolderOutliner();
  274.   var canCompact = GetFolderAttribute(folderOutliner, folderResource, "CanCompact") == "true";
  275.   ShowMenuItem("folderPaneContext-compact", (numSelected <=1) && canCompact);
  276.   var folder = GetMsgFolderFromResource(folderResource);
  277.   EnableMenuItem("folderPaneContext-compact", folder.isCommandEnabled("cmd_compactFolder"));
  278.  
  279.   if(canCompact)
  280.   {
  281.     SetMenuItemLabel("folderPaneContext-compact", gMessengerBundle.getString("compactFolder"));
  282.   }
  283. }
  284.  
  285. function SetupNewMenuItem(folderResource, numSelected, isServer, serverType, specialFolder)
  286. {
  287.   var folderOutliner = GetFolderOutliner();
  288.   var canCreateNew = GetFolderAttribute(folderOutliner, folderResource, "CanCreateSubfolders") == "true";
  289.   var isInbox = specialFolder == "Inbox";
  290.  
  291.   var showNew = ((numSelected <=1) && (serverType != 'nntp') && canCreateNew) || isInbox;
  292.   ShowMenuItem("folderPaneContext-new", showNew);
  293.   EnableMenuItem("folderPaneContext-new", true);
  294.   if(showNew)
  295.   {
  296.     if(isServer || isInbox)
  297.       SetMenuItemLabel("folderPaneContext-new", gMessengerBundle.getString("newFolder"));
  298.     else
  299.       SetMenuItemLabel("folderPaneContext-new", gMessengerBundle.getString("newSubfolder"));
  300.   }
  301. }
  302.  
  303. function ShowMenuItem(id, showItem)
  304. {
  305.   var item = document.getElementById(id);
  306.   if(item)
  307.   {
  308.     var showing = (item.getAttribute('hidden') !='true');
  309.     if(showItem != showing)
  310.       item.setAttribute('hidden', showItem ? '' : 'true');
  311.   }
  312. }
  313.  
  314. function EnableMenuItem(id, enableItem)
  315. {
  316.   var item = document.getElementById(id);
  317.   if(item)
  318.   {
  319.     var enabled = (item.getAttribute('disabled') !='true');
  320.     if(enableItem != enabled)
  321.     {
  322.       item.setAttribute('disabled', enableItem ? '' : 'true');
  323.     }
  324.   }
  325. }
  326.  
  327. function SetMenuItemLabel(id, label)
  328. {
  329.   var item = document.getElementById(id);
  330.   if(item)
  331.     item.setAttribute('label', label);
  332.  
  333. }
  334.  
  335. function SetMenuItemAccessKey(id, accessKey)
  336. {
  337.   var item = document.getElementById(id);
  338.   if(item)
  339.     item.setAttribute('accesskey', accessKey);
  340.  
  341. }
  342.  
  343. function fillMessagePaneContextMenu(contextMenu)
  344. {
  345.   var message = GetLoadedMessage();
  346.   var numSelected = (message) ? 1 : 0;
  347.  
  348.   var isNewsgroup = false;
  349.  
  350.   if (numSelected == 1) {
  351.     isNewsgroup = IsNewsMessage(message);
  352.     }
  353.  
  354.   var hideMailItems = AreBrowserItemsShowing();
  355.  
  356.   SetupEditAsNewMenuItem("messagePaneContext-editAsNew", numSelected, (numSelected == 0 || hideMailItems));
  357.   SetupReplyToSenderMenuItem("messagePaneContext-replySender", numSelected, (numSelected == 0 || hideMailItems));
  358.   SetupReplyToNewsgroupMenuItem("messagePaneContext-replyNewsgroup", numSelected, isNewsgroup, (numSelected == 0 || hideMailItems));
  359.   SetupReplyAllMenuItem("messagePaneContext-replyAll" , numSelected, (numSelected == 0 || hideMailItems));
  360.   SetupForwardMenuItem("messagePaneContext-forward", numSelected, (numSelected == 0 || hideMailItems));
  361.   SetupCopyMessageUrlMenuItem("messagePaneContext-copyMessageUrl", numSelected, isNewsgroup, (numSelected == 0 || hideMailItems)); 
  362.   SetupCopyMenuItem("messagePaneContext-copyMenu", numSelected, (numSelected == 0 || hideMailItems));
  363.   SetupMoveMenuItem("messagePaneContext-moveMenu", numSelected, isNewsgroup, (numSelected == 0 || hideMailItems));
  364.   SetupSaveAsMenuItem("messagePaneContext-saveAs", numSelected, (numSelected == 0 || hideMailItems));
  365.   SetupPrintMenuItem("messagePaneContext-print", numSelected, (numSelected == 0 || hideMailItems));
  366.   SetupDeleteMenuItem("messagePaneContext-delete", numSelected, isNewsgroup, (numSelected == 0 || hideMailItems));
  367.   SetupAddSenderToABMenuItem("messagePaneContext-addSenderToAddressBook", numSelected, (numSelected == 0 || hideMailItems));
  368.   SetupAddAllToABMenuItem("messagePaneContext-addAllToAddressBook", numSelected, (numSelected == 0 || hideMailItems));
  369.  
  370.   //Figure out separators
  371.   ShowMenuItem("messagePaneContext-sep-open", ShowMessagePaneOpenSeparator());
  372.   ShowMenuItem("messagePaneContext-sep-reply", ShowMessagePaneReplySeparator());
  373.   ShowMenuItem("messagePaneContext-sep-edit", ShowMessagePaneEditSeparator());
  374.   ShowMenuItem("messagePaneContext-sep-link", ShowMessagePaneLinkSeparator());
  375.   ShowMenuItem("messagePaneContext-sep-image", ShowMessagePaneImageSeparator());
  376.   ShowMenuItem("messagePaneContext-sep-copy", ShowMessagePaneCopySeparator());
  377. }
  378.  
  379. function AreBrowserItemsShowing()
  380. {
  381.   return(IsMenuItemShowingWithStyle("context-openlink") ||
  382.     IsMenuItemShowingWithStyle("context-editlink") ||
  383.     IsMenuItemShowingWithStyle("context-viewimage") ||
  384.     IsMenuItemShowingWithStyle("context-copylink") ||
  385.     IsMenuItemShowingWithStyle("context-copyimage") ||
  386.     IsMenuItemShowingWithStyle("context-savelink") ||
  387.     IsMenuItemShowingWithStyle("context-saveimage") ||
  388.     IsMenuItemShowingWithStyle("context-bookmarklink"));
  389. }
  390.  
  391. function ShowMessagePaneOpenSeparator()
  392. {
  393.   return(IsMenuItemShowingWithStyle("context-selectall") ||
  394.     IsMenuItemShowingWithStyle("context-copy"));
  395. }
  396.  
  397. function ShowMessagePaneReplySeparator()
  398. {
  399.   return (IsMenuItemShowing("messagePaneContext-replySender") ||
  400.     IsMenuItemShowing("messagePaneContext-replyNewsgroup") ||
  401.     IsMenuItemShowing("messagePaneContext-replyAll") ||
  402.     IsMenuItemShowing("messagePaneContext-forward") ||
  403.     IsMenuItemShowing("messagePaneContext-editAsNew"));
  404. }
  405.  
  406. function ShowMessagePaneEditSeparator()
  407. {
  408.   return (IsMenuItemShowing("messagePaneContext-moveMenu") ||
  409.     IsMenuItemShowing("messagePaneContext-copyMenu") ||
  410.     IsMenuItemShowing("messagePaneContext-copyMessageUrl") ||
  411.     IsMenuItemShowing("messagePaneContext-saveAs") ||
  412.     IsMenuItemShowing("messagePaneContext-print") ||
  413.     IsMenuItemShowing("messagePaneContext-delete"));
  414. }
  415.  
  416. function ShowMessagePaneLinkSeparator()
  417. {
  418.   return (IsMenuItemShowingWithStyle("context-openlink") ||
  419.     IsMenuItemShowingWithStyle("context-editlink"));
  420. }
  421.  
  422. function ShowMessagePaneImageSeparator()
  423. {
  424.   return (IsMenuItemShowingWithStyle("context-viewimage"));
  425. }
  426.  
  427. function ShowMessagePaneCopySeparator()
  428. {
  429.   return (IsMenuItemShowingWithStyle("context-copylink") ||
  430.     IsMenuItemShowingWithStyle("context-copyimage"));
  431. }
  432.  
  433. function IsMenuItemShowing(menuID)
  434. {
  435.  
  436.   var item = document.getElementById(menuID);
  437.   if(item)
  438.   {
  439.     return(item.getAttribute('hidden') !='true');
  440.   }
  441.   return false;
  442. }
  443.  
  444. function IsMenuItemShowingWithStyle(menuID)
  445. {
  446.   var item = document.getElementById(menuID);
  447.   if(item)
  448.   {
  449.     var style = item.getAttribute( "style" );
  450.     return ( style.indexOf( "display:none;" ) == -1 )
  451.   }
  452.   return false;
  453. }
  454.  
  455. function CopyMessageUrl()
  456. {
  457.   try {
  458.     var hdr = gDBView.hdrForFirstSelectedMessage;
  459.     var server = hdr.folder.server;
  460.  
  461.     var url;
  462.     if (server.isSecure) {
  463.       url = "snews://";
  464.     }
  465.     else {
  466.       url = "news://"
  467.     }
  468.     url += server.hostName;
  469.     url += ":";
  470.     url += server.port;
  471.     url += "/";
  472.     url += hdr.messageId;
  473.  
  474.     var contractid = "@mozilla.org/widget/clipboardhelper;1";
  475.     var iid = Components.interfaces.nsIClipboardHelper;
  476.     var clipboard = Components.classes[contractid].getService(iid);
  477.     clipboard.copyString(url);
  478.   }
  479.   catch (ex) {
  480.     dump("ex="+ex+"\n");
  481.   }
  482. }
  483.