mailcontextmenus.js

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

JS
671
字号
  ShowMenuItem("folderPaneContext-rssSubscribe", (numSelected <= 1) && (serverType == "rss"));  EnableMenuItem("folderPaneContext-rssSubscribe", true);    // 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 && !isVirtualFolder);  EnableMenuItem("folderPaneContext-markMailFolderAllRead", !isVirtualFolder);  ShowMenuItem("folderPaneContext-searchMessages", (numSelected<=1) && !isVirtualFolder);  EnableMenuItem("folderPaneContext-searchMessages", IsCanSearchMessagesEnabled() && !isVirtualFolder);  // Hide / Show our menu separators based on the menu items we are showing.  ShowMenuItem("folderPaneContext-sep1", (numSelected <= 1) && !isServer);  ShowMenuItem('folderPaneContext-sep2', shouldShowSeparator('folderPaneContext-sep2'));   ShowMenuItem("folderPaneContext-sep3", shouldShowSeparator('folderPaneContext-sep3')); // we always show the separator before properties menu item  return(true);}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 || MailOfflineMgr.isOnline());  if (showNew)  {    if (isServer || isInbox)      SetMenuItemLabel("folderPaneContext-new", gMessengerBundle.getString("newFolder"));    else      SetMenuItemLabel("folderPaneContext-new", gMessengerBundle.getString("newSubfolder"));  }}function SetupRenameMenuItem(folderResource, numSelected, isServer, serverType, specialFolder){  var msgFolder = folderResource.QueryInterface(Components.interfaces.nsIMsgFolder);  var folderTree = GetFolderTree();  var isSpecialFolder = !(specialFolder == "none" || (specialFolder == "Junk" && CanRenameDeleteJunkMail(msgFolder.URI))                                                  || (specialFolder == "Virtual") );  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"));}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))                                                  || (specialFolder == "Virtual") );  //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"));  }}function SetupCompactMenuItem(folderResource, numSelected){  var folderTree = GetFolderTree();  var canCompact = GetFolderAttribute(folderTree, folderResource, "CanCompact") == "true";  var folder = GetMsgFolderFromResource(folderResource);  ShowMenuItem("folderPaneContext-compact", (numSelected <=1) && canCompact && !(folder.flags & MSG_FOLDER_FLAG_VIRTUAL));  EnableMenuItem("folderPaneContext-compact", folder.isCommandEnabled("cmd_compactFolder") && !(folder.flags & MSG_FOLDER_FLAG_VIRTUAL));}function SetupFavoritesMenuItem(folderResource, numSelected, isServer, menuItemId){  var folderTree = GetFolderTree();  var folder = GetMsgFolderFromResource(folderResource);  var showItem = !isServer && (numSelected <=1);  ShowMenuItem(menuItemId, showItem);   // adjust the checked state on the menu  if (showItem)    document.getElementById(menuItemId).setAttribute('checked',folder.getFlag(MSG_FOLDER_FLAG_FAVORITE));}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));  SetupMoveToFolderAgainMenuItem("messagePaneContext-moveToFolderAgain", numSelected, (numSelected == 0 || hideMailItems));  SetupLabelsMenuItem("messagePaneContext-labels", numSelected, (numSelected == 0 || hideMailItems));  SetupMarkMenuItem("messagePaneContext-mark", numSelected, (numSelected == 0 || hideMailItems));  SetupTagMenuItem("messagePaneContext-tags", numSelected, (numSelected == 0 || hideMailItems));  SetupSaveAsMenuItem("messagePaneContext-saveAs", numSelected, (numSelected == 0 || hideMailItems));#ifdef XP_MACOSX  SetupPrintPreviewMenuItem("messagePaneContext-printpreview", numSelected, true);#else  SetupPrintPreviewMenuItem("messagePaneContext-printpreview", numSelected, (numSelected == 0 || hideMailItems));#endif  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));  ShowMenuItem("context-addemail", gContextMenu.onMailtoLink );  ShowMenuItem("context-composeemailto", gContextMenu.onMailtoLink );    ShowMenuItem("reportPhishingURL", gContextMenu.onLink && !gContextMenu.onMailtoLink);    // if we are on an image, go ahead and show this separator  //if (gContextMenu.onLink && !gContextMenu.onMailtoLink)//    ShowMenuItem("messagePaneContext-sep-edit", false);  //Figure out separators  ShowMenuItem("messagePaneContext-sep-link", shouldShowSeparator("messagePaneContext-sep-link"));  ShowMenuItem("messagePaneContext-sep-open", shouldShowSeparator("messagePaneContext-sep-open"));  ShowMenuItem("messagePaneContext-sep-reply", shouldShowSeparator("messagePaneContext-sep-reply"));  ShowMenuItem("messagePaneContext-sep-tags-1", shouldShowSeparator("messagePaneContext-sep-tags-1"));  ShowMenuItem("messagePaneContext-sep-saveAs", shouldShowSeparator("messagePaneContext-sep-saveAs"));  ShowMenuItem("messagePaneContext-sep-edit", shouldShowSeparator("messagePaneContext-sep-edit"));  ShowMenuItem("messagePaneContext-sep-copy", shouldShowSeparator("messagePaneContext-sep-copy"));  ShowMenuItem("messagePaneContext-sep-reportPhishing", shouldShowSeparator("messagePaneContext-sep-reportPhishing"));}// Determines whether or not the separator with the specified ID should be // shown or not by determining if there are any non-hidden items between it// and the previous separator. You should start with the first separator in the menu.function shouldShowSeparator(aSeparatorID){  var separator = document.getElementById(aSeparatorID);  if (separator)   {    var sibling = separator.previousSibling;    while (sibling)    {      if (sibling.getAttribute("hidden") != "true")        return sibling.localName != "menuseparator" && hasAVisibleNextSibling(separator);      sibling = sibling.previousSibling;    }  }  return false;  }// helper function used by shouldShowSeparatorfunction hasAVisibleNextSibling(aNode){  var sibling = aNode.nextSibling;  while (sibling)  {    if (sibling.getAttribute("hidden") != "true"         && sibling.localName != "menuseparator")      return true;    sibling = sibling.nextSibling;  }  return false;}function IsMenuItemShowing(menuID){  var item = document.getElementById(menuID);  if (item)    return item.hidden != "true";  return false;}// message pane context menu helper methodsfunction addEmail(){  var url = gContextMenu.linkURL();  var addresses = getEmail(url);  window.openDialog("chrome://messenger/content/addressbook/abNewCardDialog.xul",                    "",                     "chrome,resizable=no,titlebar,modal,centerscreen",                    {primaryEmail: addresses});}function composeEmailTo (){  var url = gContextMenu.linkURL();  var addresses = getEmail(url);  var fields = Components.classes["@mozilla.org/messengercompose/composefields;1"].createInstance(Components.interfaces.nsIMsgCompFields);  var params = Components.classes["@mozilla.org/messengercompose/composeparams;1"].createInstance(Components.interfaces.nsIMsgComposeParams);  fields.to = addresses;  params.type = Components.interfaces.nsIMsgCompType.New;  params.format = Components.interfaces.nsIMsgCompFormat.Default;  params.identity = accountManager.getFirstIdentityForServer(GetLoadedMsgFolder().server);  params.composeFields = fields;  msgComposeService.OpenComposeWindowWithParams(null, params);}// Extracts email address from url stringfunction getEmail (url) {  var qmark = url.indexOf( "?" );  var addresses;  if ( qmark > mailtolength )       addresses = url.substring( mailtolength, qmark );  else      addresses = url.substr( mailtolength );  // Let's try to unescape it using a character set  // in case the address is not ASCII.  try {    var characterSet = Components.lookupMethod(this.target.ownerDocument, "characterSet")                                 .call(this.target.ownerDocument);    const textToSubURI = Components.classes["@mozilla.org/intl/texttosuburi;1"]                                 .getService(Components.interfaces.nsITextToSubURI);    addresses = textToSubURI.unEscapeNonAsciiURI(characterSet, addresses);  }  catch(ex) {    // Do nothing.  }  return addresses;}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");  }}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?