mailwindowoverlay.js

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

JS
1,957
字号
# -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*-# ***** 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) 1998-1999# the Initial Developer. All Rights Reserved.## Contributor(s):#   timeless#   slucy@objectivesw.co.uk#   Håkan Waara <hwaara@chello.se>#   Jan Varga <varga@nixcorp.com>#   Seth Spitzer <sspitzer@netscape.com>#   David Bienvenu <bienvenu@nventure.com>#   Karsten Düsterloh <mnyromyr@tprac.de>## 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 *****const MSG_FLAG_READ              = 0x000001;const MSG_FLAG_IMAP_DELETED      = 0x200000;const MSG_FLAG_MDN_REPORT_NEEDED = 0x400000;const MSG_FLAG_MDN_REPORT_SENT   = 0x800000;const MDN_DISPOSE_TYPE_DISPLAYED = 0;const ADDR_DB_LARGE_COMMIT       = 1;const MSG_DB_LARGE_COMMIT        = 1;const kClassicMailLayout = 0;const kWideMailLayout = 1;const kVerticalMailLayout = 2;// Per message header flags to keep track of whether the user is allowing remote// content for a particular message. // if you change or add more values to these constants, be sure to modify// the corresponding definitions in nsMsgContentPolicy.cppconst kNoRemoteContentPolicy = 0;const kBlockRemoteContent = 1;const kAllowRemoteContent = 2;const kIsAPhishMessage = 0;const kNotAPhishMessage = 1;const kMsgNotificationPhishingBar = 1;const kMsgNotificationJunkBar = 2;const kMsgNotificationRemoteImages = 3;var gMessengerBundle;var gWindowManagerInterface;var gPrefBranch = Components.classes["@mozilla.org/preferences-service;1"].getService(Components.interfaces.nsIPrefService).getBranch(null);var gPrintSettings = null;var gWindowReuse  = 0;var gMarkViewedMessageAsReadTimer = null; // if the user has configured the app to mark a message as read if it is viewed for more than n secondsvar gTimelineService = null;var gTimelineEnabled = ("@mozilla.org;timeline-service;1" in Components.classes);if (gTimelineEnabled) {  try {    gTimelineEnabled = gPrefBranch.getBoolPref("mailnews.timeline_is_enabled");    if (gTimelineEnabled) {      gTimelineService =         Components.classes["@mozilla.org;timeline-service;1"].getService(Components.interfaces.nsITimelineService);    }  }  catch (ex)  {    gTimelineEnabled = false;  }}// the user preference,// if HTML is not allowed. I assume, that the user could have set this to a// value > 1 in his prefs.js or user.js, but that the value will not// change during runtime other than through the MsgBody*() functions below.var gDisallow_classes_no_html = 1; // Disable the new account menu item if the account preference is locked.// Two other affected areas are the account central and the account manager// dialog.function menu_new_init(){  if (!gMessengerBundle)    gMessengerBundle = document.getElementById("bundle_messenger");  var newAccountItem = document.getElementById('newAccountMenuItem');  if (gPrefBranch.prefIsLocked("mail.disable_new_account_addition"))    newAccountItem.setAttribute("disabled","true");  // Change "New Folder..." menu according to the context  var folderArray = GetSelectedMsgFolders();  if (folderArray.length == 0)    return;  var msgFolder = folderArray[0];  var isServer = msgFolder.isServer;  var serverType = msgFolder.server.type;  var canCreateNew = msgFolder.canCreateSubfolders;  var isInbox = IsSpecialFolder(msgFolder, MSG_FOLDER_FLAG_INBOX, false);  var isIMAPFolder = serverType == "imap";  var ioService = Components.classes["@mozilla.org/network/io-service;1"]                         .getService(Components.interfaces.nsIIOService);  var showNew = ((serverType != 'nntp') && canCreateNew) || isInbox;  ShowMenuItem("menu_newFolder", showNew);  ShowMenuItem("menu_newVirtualFolder", showNew);  EnableMenuItem("menu_newFolder", !isIMAPFolder || MailOfflineMgr.isOnline());  EnableMenuItem("menu_newVirtualFolder", true);  if (showNew)    SetMenuItemLabel("menu_newFolder", gMessengerBundle.getString((isServer || isInbox) ? "newFolderMenuItem" : "newSubfolderMenuItem"));}function goUpdateMailMenuItems(commandset){//  dump("Updating commands for " + commandset.id + "\n");  for (var i = 0; i < commandset.childNodes.length; i++)  {    var commandID = commandset.childNodes[i].getAttribute("id");    if (commandID)    {      goUpdateCommand(commandID);    }  }}function file_init(){  document.commandDispatcher.updateCommands('create-menu-file');}function InitEditMessagesMenu(){  goSetMenuValue('cmd_delete', 'valueDefault');  goSetAccessKey('cmd_delete', 'valueDefaultAccessKey');  document.commandDispatcher.updateCommands('create-menu-edit');  // initialize the favorite Folder checkbox in the edit menu  var favoriteFolderMenu = document.getElementById('menu_favoriteFolder');  if (favoriteFolderMenu && !favoriteFolderMenu.disabled)  {    var folderTree = GetFolderTree();    var startIndex = {};    var endIndex = {};    folderTree.view.selection.getRangeAt(0, startIndex, endIndex);    if (startIndex.value >= 0)    {      var numSelected = endIndex.value - startIndex.value + 1;      var folderResource = GetFolderResource(folderTree, startIndex.value);      var isServer = GetFolderAttribute(folderTree, folderResource, "IsServer") == 'true';      SetupFavoritesMenuItem(folderResource, numSelected, isServer, 'menu_favoriteFolder');    }  }}function InitGoMessagesMenu(){  document.commandDispatcher.updateCommands('create-menu-go');}function view_init(){  if (!gMessengerBundle)      gMessengerBundle = document.getElementById("bundle_messenger");  var message_menuitem=document.getElementById('menu_showMessage');  if (message_menuitem)  {      var message_menuitem_hidden = message_menuitem.getAttribute("hidden");      if(message_menuitem_hidden != "true"){          message_menuitem.setAttribute('checked', !IsMessagePaneCollapsed());          message_menuitem.setAttribute('disabled', gAccountCentralLoaded);      }  }  // Disable some menus if account manager is showing  var sort_menuitem = document.getElementById('viewSortMenu');  if (sort_menuitem) {    sort_menuitem.setAttribute("disabled", gAccountCentralLoaded);  }  var view_menuitem = document.getElementById('viewMessageViewMenu');  if (view_menuitem) {    view_menuitem.setAttribute("disabled", gAccountCentralLoaded);  }  var threads_menuitem = document.getElementById('viewMessagesMenu');  if (threads_menuitem) {    threads_menuitem.setAttribute("disabled", gAccountCentralLoaded);  }  // hide the views menu item if the user doesn't have the views toolbar button visible  viewsToolbarButton = document.getElementById("mailviews-container");  if (!viewsToolbarButton)    document.getElementById('viewMessageViewMenu').collapsed = true;  // Initialize the View Attachment Inline menu  var viewAttachmentInline = pref.getBoolPref("mail.inline_attachments");  document.getElementById("viewAttachmentsInlineMenuitem").setAttribute("checked", viewAttachmentInline ? "true" : "false");  document.commandDispatcher.updateCommands('create-menu-view');}function InitViewLayoutStyleMenu(event){  var paneConfig = pref.getIntPref("mail.pane_config.dynamic");  var layoutStyleMenuitem = event.target.childNodes[paneConfig];  if (layoutStyleMenuitem)    layoutStyleMenuitem.setAttribute("checked", "true"); }function InitViewFolderViewsMenu(event){  var layoutStyleMenuitem = event.target.childNodes[gCurrentFolderView];  if (layoutStyleMenuitem)    layoutStyleMenuitem.setAttribute("checked", "true"); }function setSortByMenuItemCheckState(id, value){  var menuitem = document.getElementById(id);  if (menuitem)     menuitem.setAttribute("checked", value);}function InitViewSortByMenu(){  var sortType = gDBView.sortType;  setSortByMenuItemCheckState("sortByDateMenuitem", (sortType == nsMsgViewSortType.byDate));  setSortByMenuItemCheckState("sortByFlagMenuitem", (sortType == nsMsgViewSortType.byFlagged));  setSortByMenuItemCheckState("sortByOrderReceivedMenuitem", (sortType == nsMsgViewSortType.byId));  setSortByMenuItemCheckState("sortByPriorityMenuitem", (sortType == nsMsgViewSortType.byPriority));  setSortByMenuItemCheckState("sortBySizeMenuitem", (sortType == nsMsgViewSortType.bySize));  setSortByMenuItemCheckState("sortByStatusMenuitem", (sortType == nsMsgViewSortType.byStatus));  setSortByMenuItemCheckState("sortBySubjectMenuitem", (sortType == nsMsgViewSortType.bySubject));  setSortByMenuItemCheckState("sortByUnreadMenuitem", (sortType == nsMsgViewSortType.byUnread));  setSortByMenuItemCheckState("sortByTagsMenuitem", (sortType == nsMsgViewSortType.byTags));  setSortByMenuItemCheckState("sortByJunkStatusMenuitem", (sortType == nsMsgViewSortType.byJunkStatus));  setSortByMenuItemCheckState("sortBySenderMenuitem", (sortType == nsMsgViewSortType.byAuthor));  setSortByMenuItemCheckState("sortByRecipientMenuitem", (sortType == nsMsgViewSortType.byRecipient));   setSortByMenuItemCheckState("sortByAttachmentsMenuitem", (sortType == nsMsgViewSortType.byAttachments)); 	  var sortOrder = gDBView.sortOrder;  var sortTypeSupportsGrouping = (sortType == nsMsgViewSortType.byAuthor       || sortType == nsMsgViewSortType.byDate || sortType == nsMsgViewSortType.byPriority      || sortType == nsMsgViewSortType.bySubject || sortType == nsMsgViewSortType.byTags      || sortType == nsMsgViewSortType.byRecipient || sortType == nsMsgViewSortType.byAccount      || sortType == nsMsgViewSortType.byStatus || sortType == nsMsgViewSortType.byFlagged      || sortType == nsMsgViewSortType.byAttachments);  setSortByMenuItemCheckState("sortAscending", (sortOrder == nsMsgViewSortOrder.ascending));  setSortByMenuItemCheckState("sortDescending", (sortOrder == nsMsgViewSortOrder.descending));  var grouped = ((gDBView.viewFlags & nsMsgViewFlagsType.kGroupBySort) != 0);  var threaded = ((gDBView.viewFlags & nsMsgViewFlagsType.kThreadedDisplay) != 0 && !grouped);  var sortThreadedMenuItem = document.getElementById("sortThreaded");  var sortUnthreadedMenuItem = document.getElementById("sortUnthreaded");  sortThreadedMenuItem.setAttribute("checked", threaded);  sortUnthreadedMenuItem.setAttribute("checked", !threaded && !grouped);  sortThreadedMenuItem.setAttribute("disabled", !gDBView.supportsThreading);  sortUnthreadedMenuItem.setAttribute("disabled", !gDBView.supportsThreading);  var groupBySortOrderMenuItem = document.getElementById("groupBySort");  groupBySortOrderMenuItem.setAttribute("disabled", !gDBView.supportsThreading || !sortTypeSupportsGrouping);  groupBySortOrderMenuItem.setAttribute("checked", grouped);}function InitViewMessagesMenu(){  var viewFlags = (gDBView) ? gDBView.viewFlags : 0;  var viewType = (gDBView) ? gDBView.viewType : 0;  var allMenuItem = document.getElementById("viewAllMessagesMenuItem");  if(allMenuItem)      allMenuItem.setAttribute("checked",  (viewFlags & nsMsgViewFlagsType.kUnreadOnly) == 0 && (viewType == nsMsgViewType.eShowAllThreads));  var unreadMenuItem = document.getElementById("viewUnreadMessagesMenuItem");  if(unreadMenuItem)      unreadMenuItem.setAttribute("checked", (viewFlags & nsMsgViewFlagsType.kUnreadOnly) != 0);  var theadsWithUnreadMenuItem = document.getElementById("viewThreadsWithUnreadMenuItem");  if(theadsWithUnreadMenuItem)      theadsWithUnreadMenuItem.setAttribute("checked", viewType == nsMsgViewType.eShowThreadsWithUnread);  var watchedTheadsWithUnreadMenuItem = document.getElementById("viewWatchedThreadsWithUnreadMenuItem");  if(watchedTheadsWithUnreadMenuItem)      watchedTheadsWithUnreadMenuItem.setAttribute("checked", viewType == nsMsgViewType.eShowWatchedThreadsWithUnread);    var ignoredTheadsMenuItem = document.getElementById("viewIgnoredThreadsMenuItem");  if(ignoredTheadsMenuItem)      ignoredTheadsMenuItem.setAttribute("checked", (viewFlags & nsMsgViewFlagsType.kShowIgnored) != 0);}function InitMessageMenu(){  var aMessage = GetFirstSelectedMessage();  var isNews = false;  if(aMessage)    isNews = IsNewsMessage(aMessage);  //We show reply to Newsgroups only for news messages.  var replyNewsgroupMenuItem = document.getElementById("replyNewsgroupMainMenu");  if(replyNewsgroupMenuItem)    replyNewsgroupMenuItem.setAttribute("hidden", isNews ? "" : "true");  //For mail messages we say reply. For news we say ReplyToSender.  var replyMenuItem = document.getElementById("replyMainMenu");  if(replyMenuItem)    replyMenuItem.setAttribute("hidden", !isNews ? "" : "true");  var replySenderMenuItem = document.getElementById("replySenderMainMenu");  if(replySenderMenuItem)    replySenderMenuItem.setAttribute("hidden", isNews ? "" : "true");  // we only kill and watch threads for news  var threadMenuSeparator = document.getElementById("threadItemsSeparator");  if (threadMenuSeparator)    threadMenuSeparator.setAttribute("hidden", isNews ? "" : "true");  var killThreadMenuItem = document.getElementById("killThread");  if (killThreadMenuItem)    killThreadMenuItem.setAttribute("hidden", isNews ? "" : "true");  var watchThreadMenuItem = document.getElementById("watchThread");  if (watchThreadMenuItem)    watchThreadMenuItem.setAttribute("hidden", isNews ? "" : "true");  // disable the move and copy menus if there are no messages selected.  // disable the move menu if we can't delete msgs from the folder  var moveMenu = document.getElementById("moveMenu");  var msgFolder = GetLoadedMsgFolder();  if(moveMenu)  {    var enableMenuItem = aMessage && msgFolder && msgFolder.canDeleteMessages;    moveMenu.setAttribute("disabled", !enableMenuItem);  }  var copyMenu = document.getElementById("copyMenu");  if(copyMenu)    copyMenu.setAttribute("disabled", !aMessage);    initMoveToFolderAgainMenu(document.getElementById("moveToFolderAgain"));  // Disable Forward as/Label menu items if no message is selected  var forwardAsMenu = document.getElementById("forwardAsMenu");  if(forwardAsMenu)    forwardAsMenu.setAttribute("disabled", !aMessage);  var labelMenu = document.getElementById("labelMenu");  if(labelMenu)    labelMenu.setAttribute("disabled", !aMessage);  // Disable mark menu when we're not in a folder  var markMenu = document.getElementById("markMenu");  if(markMenu)    markMenu.setAttribute("disabled", !msgFolder);  document.commandDispatcher.updateCommands('create-menu-message');}// initMoveToFolderAgainMenu// enables / disables aMenuItem based on the value of mail.last_msg_movecopy_target_uri// Adjusts the label and accesskey for aMenuItem to include the folder namefunction initMoveToFolderAgainMenu(aMenuItem){  var lastFolderURI = pref.getCharPref("mail.last_msg_movecopy_target_uri");  var isMove = pref.getBoolPref("mail.last_msg_movecopy_was_move");    if (lastFolderURI)  {    var destResource = RDF.GetResource(lastFolderURI);

⌨️ 快捷键说明

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