⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 msgcompsmimeoverlay.js

📁 现在很火的邮件客户端软件thunderbird的源码
💻 JS
字号:
/* -*- Mode: Java; 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.org code. * * The Initial Developer of the Original Code is * Netscape Communications Corporation. * Portions created by the Initial Developer are Copyright (C) 1998-2001 * the Initial Developer. All Rights Reserved. * * Contributor(s): *   ddrinan@netscape.com *   Scott MacGreogr <mscott@netscape.com> * * 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 gISMimeCompFields = Components.interfaces.nsIMsgSMIMECompFields;const gSMimeCompFieldsContractID = "@mozilla.org/messenger-smime/composefields;1";const gSMimeContractID = "@mozilla.org/messenger-smime/smimejshelper;1";const gISMimeJSHelper = Components.interfaces.nsISMimeJSHelper;var gNextSecurityButtonCommand = "";var gBundle;var gBrandBundle;var gSMFields;var gEncryptedURIService = null;function onComposerClose(){  gSMFields = null;  setNoEncryptionUI();  setNoSignatureUI();  if (!gMsgCompose)    return;  if (!gMsgCompose.compFields)    return;  gMsgCompose.compFields.securityInfo = null;}function onComposerReOpen(){  // are we already set up?  if (gSMFields)    return;  if (!gMsgCompose)    return;  if (!gMsgCompose.compFields)    return;  gMsgCompose.compFields.securityInfo = null;  gSMFields = Components.classes[gSMimeCompFieldsContractID].createInstance(gISMimeCompFields);  if (gSMFields)  {    gMsgCompose.compFields.securityInfo = gSMFields;    // set up the intial security state....    var encryptionPolicy = gCurrentIdentity.getIntAttribute("encryptionpolicy");    // 0 == never, 1 == if possible, 2 == always Encrypt.    gSMFields.requireEncryptMessage = encryptionPolicy == 2;    gSMFields.signMessage = gCurrentIdentity.getBoolAttribute("sign_mail");    if (gEncryptedURIService && !gSMFields.requireEncryptMessage)    {      if (gEncryptedURIService.isEncrypted(gMsgCompose.originalMsgURI))      {        // Override encryption setting if original is known as encrypted.        gSMFields.requireEncryptMessage = true;      }    }    if (gSMFields.requireEncryptMessage)    {      setEncryptionUI();    }    else    {      setNoEncryptionUI();    }    if (gSMFields.signMessage)    {      setSignatureUI();    }    else    {      setNoSignatureUI();    }  }}// this function gets called multiple times,// but only on first open, not on composer recyclingfunction smimeComposeOnLoad(){  if (!gEncryptedURIService)  {    gEncryptedURIService =       Components.classes["@mozilla.org/messenger-smime/smime-encrypted-uris-service;1"]      .getService(Components.interfaces.nsIEncryptedSMIMEURIsService);  }  onComposerReOpen();}function setupBundles(){  if (gBundle && gBrandBundle)    return;    if (!gBundle) {    gBundle = document.getElementById("bundle_comp_smime");    gBrandBundle = document.getElementById("bundle_brand");  }}// stub routine to make our call to MsgAccountManager work correctlyfunction GetSelectedFolderURI(){  return;}function GetServer(uri){  var servers = gAccountManager.GetServersForIdentity(gCurrentIdentity);  return servers.QueryElementAt(0, Components.interfaces.nsIMsgIncomingServer);}function showNeedSetupInfo(){  var ifps = Components.interfaces.nsIPromptService;  var promptService = Components.classes["@mozilla.org/embedcomp/prompt-service;1"].getService();  promptService = promptService.QueryInterface(ifps);  setupBundles();  if (promptService && gBundle && gBrandBundle) {    var dummy = new Object;    var buttonPressed =    promptService.confirmEx(window,      gBrandBundle.getString("brandShortName"),      gBundle.getString("NeedSetup"),       (ifps.BUTTON_POS_0 * ifps.BUTTON_TITLE_YES       + ifps.BUTTON_POS_1 * ifps.BUTTON_TITLE_NO),      0,      0,      0,      null,      dummy);        if (0 == buttonPressed) {      MsgAccountManager('am-smime.xul');    }  }}function noEncryption(){  if (!gSMFields)    return;  gSMFields.requireEncryptMessage = false;  setNoEncryptionUI();}function encryptMessage(){  if (!gSMFields)    return;    var encryptionCertName = gCurrentIdentity.getUnicharAttribute("encryption_cert_name");  if (!encryptionCertName)   {    gSMFields.requireEncryptMessage = false;    setNoEncryptionUI();    showNeedSetupInfo();    return;  }  gSMFields.requireEncryptMessage = true;  setEncryptionUI();}function signMessage(){   if (!gSMFields)    return;  // toggle  gSMFields.signMessage = !gSMFields.signMessage;  if (gSMFields.signMessage) // make sure we have a cert name...  {    var signingCertName = gCurrentIdentity.getUnicharAttribute("signing_cert_name");    if (!signingCertName)    {      gSMFields.signMessage = false;      showNeedSetupInfo();      return;    }    setSignatureUI();  }  else  {    setNoSignatureUI();  }}function setSecuritySettings(menu_id){   if (!gSMFields)    return;  document.getElementById("menu_securityEncryptRequire" + menu_id).setAttribute("checked", gSMFields.requireEncryptMessage);  document.getElementById("menu_securityNoEncryption" + menu_id).setAttribute("checked", !gSMFields.requireEncryptMessage);  document.getElementById("menu_securitySign" + menu_id).setAttribute("checked", gSMFields.signMessage);}function setNextCommand(what){  gNextSecurityButtonCommand = what;}function doSecurityButton(){  var what = gNextSecurityButtonCommand;  gNextSecurityButtonCommand = "";  switch (what)  {    case "noEncryption":      noEncryption();      break;        case "encryptMessage":      encryptMessage();      break;        case "signMessage":      signMessage();      break;        case "show":    default:      showMessageComposeSecurityStatus();      break;  }}function setNoSignatureUI(){  top.document.getElementById("securityStatus").removeAttribute("signing");  top.document.getElementById("signing-status").collapsed = true;}function setSignatureUI(){  top.document.getElementById("securityStatus").setAttribute("signing", "ok");  top.document.getElementById("signing-status").collapsed = false;}function setNoEncryptionUI(){  top.document.getElementById("securityStatus").removeAttribute("crypto");  top.document.getElementById("encryption-status").collapsed = true;}function setEncryptionUI(){  top.document.getElementById("securityStatus").setAttribute("crypto", "ok");  top.document.getElementById("encryption-status").collapsed = false;}function showMessageComposeSecurityStatus(){  Recipients2CompFields(gMsgCompose.compFields);  var encryptionCertName = gCurrentIdentity.getUnicharAttribute("encryption_cert_name");  var signingCertName = gCurrentIdentity.getUnicharAttribute("signing_cert_name");    window.openDialog('chrome://messenger-smime/content/msgCompSecurityInfo.xul',    '',    'chrome,resizable=1,modal=1,dialog=1',     {      compFields : gMsgCompose.compFields,      subject : GetMsgSubjectElement().value,      smFields : gSMFields,      isSigningCertAvailable : (signingCertName.length > 0),      isEncryptionCertAvailable : (encryptionCertName.length > 0),      currentIdentity : gCurrentIdentity    }  );}var SecurityController ={  supportsCommand: function(command)  {    switch ( command )    {      case "cmd_viewSecurityStatus":        return true;            default:        return false;     }  },  isCommandEnabled: function(command)  {    switch ( command )    {      case "cmd_viewSecurityStatus":      {        return true;      }      default:        return false;    }    return false;  }};function onComposerSendMessage(){  try {    if (!gMsgCompose.compFields.securityInfo.requireEncryptMessage) {      return;    }    var helper = Components.classes[gSMimeContractID].createInstance(gISMimeJSHelper);    var emailAddresses = new Object();    var missingCount = new Object();    helper.getNoCertAddresses(      gMsgCompose.compFields,      missingCount,      emailAddresses);  }  catch (e)  {    return;  }  if (missingCount.value > 0)  {    var prefService =      Components.classes["@mozilla.org/preferences-service;1"]        .getService(Components.interfaces.nsIPrefService);    var prefs = prefService.getBranch(null);    var autocompleteLdap = false;    autocompleteLdap = prefs.getBoolPref("ldap_2.autoComplete.useDirectory");    if (autocompleteLdap)    {      var autocompleteDirectory = null;      autocompleteDirectory = prefs.getCharPref(        "ldap_2.autoComplete.directoryServer");      if(gCurrentIdentity.overrideGlobalPref) {        autocompleteDirectory = gCurrentIdentity.directoryServer;      }      if (autocompleteDirectory)      {        window.openDialog('chrome://messenger-smime/content/certFetchingStatus.xul',          '',          'chrome,resizable=1,modal=1,dialog=1',           autocompleteDirectory,          emailAddresses.value        );      }    }  }}function onComposerFromChanged(){  if (!gSMFields)    return;  // In order to provide maximum protection to the user:  // - If encryption is already enabled, we will not turn it off automatically.  // - If encryption is not enabled, but the new account defaults to encryption, we will turn it on.  // - If signing is disabled, we will not turn it on automatically.  // - If signing is enabled, but the new account defaults to not sign, we will turn signing off.  if (!gSMFields.requireEncryptMessage)  {    var encryptionPolicy = gCurrentIdentity.getIntAttribute("encryptionpolicy");    // 0 == never, 1 == if possible, 2 == always Encrypt.    if (encryptionPolicy == 2)    {      gSMFields.requireEncryptMessage = true;      setEncryptionUI();    }  }  if (gSMFields.signMessage)  {    var signMessage = gCurrentIdentity.getBoolAttribute("sign_mail");        if (!signMessage)    {      gSMFields.signMessage = false;      setNoSignatureUI();    }  }}top.controllers.appendController(SecurityController);addEventListener('compose-window-close', onComposerClose, true);addEventListener('compose-window-reopen', onComposerReOpen, true);addEventListener('compose-send-message', onComposerSendMessage, true);addEventListener('compose-from-changed', onComposerFromChanged, true);

⌨️ 快捷键说明

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