home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: 35 Internet / 35-Internet.zip / mozil06.zip / bin / chrome / messenger.jar / content / messenger / mailContextMenus.js < prev    next >
Text File  |  2001-02-14  |  15KB  |  439 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.  */
  22.  
  23.  function fillThreadPaneContextMenu()
  24. {
  25.     var selectedMessages = GetSelectedMessages();
  26.     var numSelected = selectedMessages ? selectedMessages.length : 0;
  27.  
  28.     var isNewsgroup = false;
  29.     var selectedMessage = null;
  30.     if(numSelected >= 0)
  31.     {
  32.         selectedMessage = selectedMessages[0];
  33.         isNewsgroup = GetMessageType(selectedMessage) == "news";
  34.     }
  35.  
  36.  
  37.     SetupNewMessageWindowMenuItem("threadPaneContext-openNewWindow", numSelected, false);
  38.     SetupEditAsNewMenuItem("threadPaneContext-editAsNew", numSelected, false);
  39.  
  40.     ShowMenuItem("threadPaneContext-sep-open", (numSelected <= 1));
  41.  
  42.     SetupReplyToSenderMenuItem("threadPaneContext-replySender", numSelected, false);
  43.     SetupReplyToNewsgroupMenuItem("threadPaneContext-replyNewsgroup", numSelected, isNewsgroup, false);
  44.     SetupReplyAllMenuItem("threadPaneContext-replyAll", numSelected, false);
  45.     SetupForwardMenuItem("threadPaneContext-forward", numSelected, false);
  46.     SetupForwardAsAttachmentMenuItem("threadPaneContext-forwardAsAttachment", numSelected, false);
  47.  
  48.     ShowMenuItem("threadPaneContext-sep-reply", true);
  49.  
  50.     SetupMoveMenuItem("threadPaneContext-moveMenu", numSelected, isNewsgroup, false);
  51.     SetupCopyMenuItem("threadPaneContext-copyMenu", numSelected, false);
  52.     SetupSaveAsMenuItem("threadPaneContext-saveAs", numSelected, false);
  53.     SetupPrintMenuItem("threadPaneContext-print", numSelected, false);
  54.     SetupDeleteMenuItem("threadPaneContext-delete", numSelected, isNewsgroup, false);
  55.     SetupAddSenderToABMenuItem("threadPaneContext-addSenderToAddressBook", numSelected, false);
  56.     SetupAddAllToABMenuItem("threadPaneContext-addAllToAddressBook", numSelected, false);
  57.  
  58.  
  59.     ShowMenuItem("threadPaneContext-sep-edit", (numSelected <= 1));
  60.  
  61.     return(true);
  62. }
  63.  
  64. function GetMessageType(message)
  65. {
  66.     var compositeDataSource = GetCompositeDataSource("MessageProperty");
  67.     var messageResource = message.QueryInterface(Components.interfaces.nsIRDFResource);
  68.     if(messageResource && compositeDataSource)
  69.     {
  70.         var property =
  71.             RDF.GetResource('http://home.netscape.com/NC-rdf#MessageType');
  72.         if (!property) return null;
  73.         var result = compositeDataSource.GetTarget(messageResource, property , true);
  74.         if (!result) return null;
  75.         result = result.QueryInterface(Components.interfaces.nsIRDFLiteral);
  76.         if (!result) return null;
  77.         return result.Value;
  78.     }
  79.  
  80.     return null;
  81.  
  82. }
  83.  
  84. function SetupNewMessageWindowMenuItem(menuID, numSelected, forceHide)
  85. {
  86.     ShowMenuItem(menuID, (numSelected <= 1) && !forceHide);
  87.     EnableMenuItem(menuID, true);
  88. }
  89.  
  90. function SetupEditAsNewMenuItem(menuID, numSelected, forceHide)
  91. {
  92.     ShowMenuItem(menuID, (numSelected <= 1)&& !forceHide);
  93.     EnableMenuItem(menuID, true);
  94. }
  95.  
  96. function SetupReplyToSenderMenuItem(menuID, numSelected, forceHide)
  97. {
  98.     ShowMenuItem(menuID, (numSelected <= 1)&& !forceHide);
  99.     EnableMenuItem(menuID, (numSelected == 1));
  100. }
  101.  
  102. function SetupReplyToNewsgroupMenuItem(menuID, numSelected, isNewsgroup, forceHide)
  103. {
  104.     ShowMenuItem(menuID, (numSelected <= 1) && isNewsgroup && !forceHide);
  105.     EnableMenuItem(menuID,  (numSelected == 1));
  106. }
  107.  
  108. function SetupReplyAllMenuItem(menuID, numSelected, forceHide)
  109. {
  110.     ShowMenuItem(menuID, (numSelected <= 1) && !forceHide);
  111.     EnableMenuItem(menuID, (numSelected == 1));
  112. }
  113.  
  114. function SetupForwardMenuItem(menuID, numSelected, forceHide)
  115. {
  116.     ShowMenuItem(menuID,  (numSelected <= 1) && !forceHide);
  117.     EnableMenuItem(menuID, (numSelected > 0));
  118. }
  119.  
  120. function SetupForwardAsAttachmentMenuItem(menuID, numSelected, forceHide)
  121. {
  122.     ShowMenuItem(menuID,  (numSelected > 1) && !forceHide);
  123.     EnableMenuItem(menuID, (numSelected > 1));
  124. }
  125.  
  126. function SetupMoveMenuItem(menuID, numSelected, isNewsgroup, forceHide)
  127. {
  128.     ShowMenuItem(menuID, !isNewsgroup && !forceHide);
  129.     EnableMenuItem(menuID, (numSelected > 0));
  130. }
  131.  
  132. function SetupCopyMenuItem(menuID, numSelected, forceHide)
  133. {
  134.     ShowMenuItem(menuID, !forceHide);
  135.     EnableMenuItem(menuID, (numSelected > 0));
  136. }
  137.  
  138. function SetupSaveAsMenuItem(menuID, numSelected, forceHide)
  139. {
  140.     ShowMenuItem(menuID, (numSelected <= 1) && !forceHide);
  141.     EnableMenuItem(menuID, (numSelected == 1));
  142. }
  143.  
  144. function SetupPrintMenuItem(menuID, numSelected, forceHide)
  145. {
  146.     ShowMenuItem(menuID, !forceHide);
  147.     EnableMenuItem(menuID, (numSelected > 0));
  148. }
  149.  
  150. function SetupDeleteMenuItem(menuID, numSelected, isNewsgroup, forceHide)
  151. {
  152.     var showMenuItem = !forceHide;
  153.  
  154.     ShowMenuItem(menuID, showMenuItem);
  155.     if(showMenuItem)
  156.     {
  157.         EnableMenuItem(menuID, (numSelected > 0));
  158.         if(!isNewsgroup)
  159.         {
  160.             SetMenuItemValue(menuID, Bundle.GetStringFromName("delete"));
  161.             SetMenuItemAccessKey(menuID, Bundle.GetStringFromName("deleteAccessKey"));
  162.         }
  163.         else
  164.         {
  165.             SetMenuItemValue(menuID, Bundle.GetStringFromName("cancel"));
  166.             SetMenuItemAccessKey(menuID, Bundle.GetStringFromName("cancelAccessKey"));
  167.         }
  168.     }
  169. }
  170.  
  171. function SetupAddSenderToABMenuItem(menuID, numSelected, forceHide)
  172. {
  173.     ShowMenuItem(menuID, (numSelected <= 1) && !forceHide);
  174.     EnableMenuItem(menuID, false);
  175. }
  176.  
  177. function SetupAddAllToABMenuItem(menuID, numSelected, forceHide)
  178. {
  179.     ShowMenuItem(menuID, (numSelected <= 1) && !forceHide);
  180.     EnableMenuItem(menuID, false);
  181. }
  182.  
  183. function fillFolderPaneContextMenu()
  184. {
  185.     var tree = GetFolderTree();
  186.     var selectedItems = tree.selectedItems;
  187.     var numSelected = selectedItems.length;
  188.  
  189.     var popupNode = document.getElementById('folderPaneContext');
  190.  
  191.     var targetFolder = document.popupNode.parentNode.parentNode;
  192.     if (targetFolder.getAttribute('selected') != 'true')
  193.     {
  194.       tree.selectItem(targetFolder);
  195.     }
  196.  
  197.     var isServer = targetFolder.getAttribute('IsServer') == 'true';
  198.     var serverType = targetFolder.getAttribute('ServerType');
  199.     var specialFolder = targetFolder.getAttribute('SpecialFolder');
  200.     var canSubscribeToFolder = (serverType == "nntp") || (serverType == "imap");
  201.     var canGetMessages =  isServer && (serverType != "nntp") && (serverType !="none");
  202.  
  203.     ShowMenuItem("folderPaneContext-getMessages", (numSelected <= 1) && canGetMessages);
  204.     EnableMenuItem("folderPaneContext-getMessages", true);
  205.  
  206.     ShowMenuItem("folderPaneContext-openNewWindow", (numSelected <= 1) && !isServer);
  207.     EnableMenuItem("folderPaneContext-openNewWindow", (true));
  208.  
  209.     SetupRenameMenuItem(targetFolder, numSelected, isServer, serverType, specialFolder);
  210.     SetupRemoveMenuItem(targetFolder, numSelected, isServer, serverType, specialFolder);
  211.  
  212.     ShowMenuItem("folderPaneContext-emptyTrash", (numSelected <= 1) && (specialFolder == 'Trash'));
  213.     EnableMenuItem("folderPaneContext-emptyTrash", true);
  214.  
  215.     ShowMenuItem("folderPaneContext-sendUnsentMessages", (numSelected <= 1) && (specialFolder == 'Unsent Messages'));
  216.     EnableMenuItem("folderPaneContext-sendUnsentMessages", true);
  217.  
  218.     ShowMenuItem("folderPaneContext-sep-edit", (numSelected <= 1));
  219.  
  220.     SetupNewMenuItem(targetFolder, numSelected, isServer, serverType, specialFolder);
  221.  
  222.     ShowMenuItem("folderPaneContext-subscribe", (numSelected <= 1) && canSubscribeToFolder && serverType != 'nntp');
  223.     EnableMenuItem("folderPaneContext-subscribe", true);
  224.  
  225.     ShowMenuItem("folderPaneContext-newsSubscribe", (numSelected <= 1) && canSubscribeToFolder && isServer && serverType == 'nntp');
  226.     EnableMenuItem("folderPaneContext-subscribe", true);
  227.  
  228.     ShowMenuItem("folderPaneContext-searchMessages", (numSelected<=1));
  229.     EnableMenuItem("folderPaneContext-searchMessages", true);
  230.  
  231.     return(true);
  232. }
  233.  
  234. function SetupRenameMenuItem(targetFolder, numSelected, isServer, serverType, specialFolder)
  235. {
  236.     var isSpecialFolder = specialFolder != 'none';
  237.     var isMail = serverType != 'nntp';
  238.     var canRename = (targetFolder.getAttribute('CanRename') == "true");
  239.  
  240.     ShowMenuItem("folderPaneContext-rename", (numSelected <= 1) && !isServer && (specialFolder == "none") && canRename);
  241.     EnableMenuItem("folderPaneContext-rename", !isServer);
  242.  
  243.     if(canRename)
  244.     {
  245.         SetMenuItemValue("folderPaneContext-rename", Bundle.GetStringFromName("renameFolder"));
  246.     }
  247. }
  248.  
  249. function SetupRemoveMenuItem(targetFolder, numSelected, isServer, serverType, specialFolder)
  250. {
  251.     var isMail = serverType != 'nntp';
  252.     var isSpecialFolder = specialFolder != "none";
  253.     //Can't currently delete Accounts or special folders.
  254.     var showRemove = (numSelected <=1) && (isMail && !isSpecialFolder) && !isServer;
  255.  
  256.  
  257.     ShowMenuItem("folderPaneContext-remove", showRemove);
  258.     EnableMenuItem("folderPaneContext-remove", true);
  259.  
  260.     if(isMail && !isSpecialFolder)
  261.     {
  262.         SetMenuItemValue("folderPaneContext-remove", Bundle.GetStringFromName("removeFolder"));
  263.     }
  264. }
  265.  
  266. function SetupNewMenuItem(targetFolder, numSelected, isServer, serverType, specialFolder)
  267. {
  268.     var canCreateNew = targetFolder.getAttribute('CanCreateSubfolders') == 'true';
  269.     var isInbox = specialFolder == "Inbox";
  270.  
  271.     var showNew = ((numSelected <=1) && (serverType != 'nntp') && canCreateNew) || isInbox;
  272.     ShowMenuItem("folderPaneContext-new", showNew);
  273.     EnableMenuItem("folderPaneContext-new", true);
  274.     if(showNew)
  275.     {
  276.         if(isServer || isInbox)
  277.             SetMenuItemValue("folderPaneContext-new", Bundle.GetStringFromName("newFolder"));
  278.         else
  279.             SetMenuItemValue("folderPaneContext-new", Bundle.GetStringFromName("newSubfolder"));
  280.     }
  281.  
  282. }
  283.  
  284. function ShowMenuItem(id, showItem)
  285. {
  286.     var item = document.getElementById(id);
  287.     if(item)
  288.     {
  289.         var showing = (item.getAttribute('hidden') !='true');
  290.         if(showItem != showing)
  291.             item.setAttribute('hidden', showItem ? '' : 'true');
  292.     }
  293. }
  294.  
  295. function EnableMenuItem(id, enableItem)
  296. {
  297.     var item = document.getElementById(id);
  298.     if(item)
  299.     {
  300.         var enabled = (item.getAttribute('disabled') !='true');
  301.         if(enableItem != enabled)
  302.         {
  303.             item.setAttribute('disabled', enableItem ? '' : 'true');
  304.         }
  305.     }
  306. }
  307.  
  308. function SetMenuItemValue(id, value)
  309. {
  310.     var item = document.getElementById(id);
  311.     if(item)
  312.         item.setAttribute('value', value);
  313.  
  314. }
  315.  
  316. function SetMenuItemAccessKey(id, accessKey)
  317. {
  318.     var item = document.getElementById(id);
  319.     if(item)
  320.         item.setAttribute('accesskey', accessKey);
  321.  
  322. }
  323.  
  324. function fillMessagePaneContextMenu(contextMenuNode)
  325. {
  326.     contextMenu = new nsContextMenu(contextMenuNode);
  327.  
  328.     var message = GetLoadedMessage();
  329.     var numSelected = (message) ? 1 : 0;
  330.  
  331.     var isNewsgroup = false;
  332.  
  333.     if(numSelected == 1)
  334.         isNewsgroup = GetMessageType(message) == "news";
  335.  
  336.     var hideMailItems = AreBrowserItemsShowing();
  337.  
  338.     SetupEditAsNewMenuItem("messagePaneContext-editAsNew", numSelected, (numSelected == 0 || hideMailItems));
  339.     SetupReplyToSenderMenuItem("messagePaneContext-replySender", numSelected, (numSelected == 0 || hideMailItems));
  340.     SetupReplyToNewsgroupMenuItem("messagePaneContext-replyNewsgroup", numSelected, isNewsgroup, (numSelected == 0 || hideMailItems));
  341.     SetupReplyAllMenuItem("messagePaneContext-replyAll" , numSelected, (numSelected == 0 || hideMailItems));
  342.     SetupForwardMenuItem("messagePaneContext-forward", numSelected, (numSelected == 0 || hideMailItems));
  343.     SetupForwardAsAttachmentMenuItem("threadPaneContext-forwardAsAttachment", numSelected, hideMailItems);
  344.     SetupMoveMenuItem("messagePaneContext-moveMenu", numSelected, isNewsgroup, (numSelected == 0 || hideMailItems));
  345.     SetupCopyMenuItem("messagePaneContext-copyMenu", numSelected, (numSelected == 0 || hideMailItems));
  346.     SetupSaveAsMenuItem("messagePaneContext-saveAs", numSelected, (numSelected == 0 || hideMailItems));
  347.     SetupPrintMenuItem("messagePaneContext-print", numSelected, (numSelected == 0 || hideMailItems));
  348.     SetupDeleteMenuItem("messagePaneContext-delete", numSelected, isNewsgroup, (numSelected == 0 || hideMailItems));
  349.     SetupAddSenderToABMenuItem("messagePaneContext-addSenderToAddressBook", numSelected, (numSelected == 0 || hideMailItems));
  350.     SetupAddAllToABMenuItem("messagePaneContext-addAllToAddressBook", numSelected, (numSelected == 0 || hideMailItems));
  351.  
  352.     //Figure out separators
  353.     ShowMenuItem("messagePaneContext-sep-open", ShowMessagePaneOpenSeparator());
  354.     ShowMenuItem("messagePaneContext-sep-reply", ShowMessagePaneReplySeparator());
  355.     ShowMenuItem("messagePaneContext-sep-edit", ShowMessagePaneEditSeparator());
  356.     ShowMenuItem("messagePaneContext-sep-link", ShowMessagePaneLinkSeparator());
  357.     ShowMenuItem("messagePaneContext-sep-image", ShowMessagePaneImageSeparator());
  358.     ShowMenuItem("messagePaneContext-sep-copy", ShowMessagePaneCopySeparator());
  359. }
  360.  
  361. function AreBrowserItemsShowing()
  362. {
  363.     return(IsMenuItemShowingWithStyle("context-openlink") ||
  364.         IsMenuItemShowingWithStyle("context-editlink") ||
  365.         IsMenuItemShowingWithStyle("context-viewimage") ||
  366.         IsMenuItemShowingWithStyle("context-copylink") ||
  367.         IsMenuItemShowingWithStyle("context-copyimage") ||
  368.         IsMenuItemShowingWithStyle("context-savelink") ||
  369.         IsMenuItemShowingWithStyle("context-saveimage") ||
  370.         IsMenuItemShowingWithStyle("context-bookmarklink"));
  371. }
  372.  
  373. function ShowMessagePaneOpenSeparator()
  374. {
  375.     return(IsMenuItemShowingWithStyle("context-selectall") ||
  376.         IsMenuItemShowingWithStyle("context-copy"));
  377. }
  378.  
  379. function ShowMessagePaneReplySeparator()
  380. {
  381.     return (IsMenuItemShowing("messagePaneContext-replySender") ||
  382.         IsMenuItemShowing("messagePaneContext-replyNewsgroup") ||
  383.         IsMenuItemShowing("messagePaneContext-replyAll") ||
  384.         IsMenuItemShowing("messagePaneContext-forward") ||
  385.         IsMenuItemShowing("messagePaneContext-editAsNew"));
  386. }
  387.  
  388. function ShowMessagePaneEditSeparator()
  389. {
  390.     return (IsMenuItemShowing("messagePaneContext-moveMenu") ||
  391.         IsMenuItemShowing("messagePaneContext-copyMenu") ||
  392.         IsMenuItemShowing("messagePaneContext-saveAs") ||
  393.         IsMenuItemShowing("messagePaneContext-print") ||
  394.         IsMenuItemShowing("messagePaneContext-delete"));
  395. }
  396.  
  397. function ShowMessagePaneLinkSeparator()
  398. {
  399.     return (IsMenuItemShowingWithStyle("context-openlink") ||
  400.         IsMenuItemShowingWithStyle("context-editlink"));
  401. }
  402.  
  403. function ShowMessagePaneImageSeparator()
  404. {
  405.     return (IsMenuItemShowingWithStyle("context-viewimage"));
  406. }
  407.  
  408. function ShowMessagePaneCopySeparator()
  409. {
  410.     return (IsMenuItemShowingWithStyle("context-copylink") ||
  411.         IsMenuItemShowingWithStyle("context-copyimage"));
  412. }
  413.  
  414. function IsMenuItemShowing(menuID)
  415. {
  416.  
  417.     var item = document.getElementById(menuID);
  418.     if(item)
  419.     {
  420.         return(item.getAttribute('hidden') !='true');
  421.     }
  422.     return false;
  423. }
  424.  
  425. function IsMenuItemShowingWithStyle(menuID)
  426. {
  427.     var item = document.getElementById(menuID);
  428.     if(item)
  429.     {
  430.         var style = item.getAttribute( "style" );
  431.         return ( style.indexOf( "display:none;" ) == -1 )
  432.     }
  433.     return false;
  434. }
  435.  
  436.  
  437.  
  438.  
  439.