Dactyloidae/mailnews/base/prefs/content/am-identity-edit.js

405 lines
17 KiB
JavaScript

/* -*- Mode: Java; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
/* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
Components.utils.import("resource:///modules/mailServices.js");
Components.utils.import("resource://gre/modules/Services.jsm");
var gIdentity = null; // the identity we are editing (may be null for a new identity)
var gAccount = null; // the account the identity is (or will be) associated with
function onLoadIdentityProperties()
{
// extract the account
gIdentity = window.arguments[0].identity;
gAccount = window.arguments[0].account;
let prefBundle = document.getElementById("bundle_prefs");
// Make the dialog the same height and 90% of the width of the main Account
// manager page when the Account manager is not maximized.
let accountDialog = Services.wm.getMostRecentWindow("mailnews:accountmanager")
.document;
if (accountDialog.documentElement.getAttribute("sizemode") != "maximized") {
document.getElementById("identityDialog").style.width =
accountDialog.getElementById("accountManager").clientWidth * 0.9 + "px";
document.getElementById("identityDialog").style.height =
accountDialog.getElementById("accountManager").clientHeight + "px";
}
if (gIdentity) {
let listName = gIdentity.identityName;
document.title = prefBundle
.getFormattedString("identityDialogTitleEdit", [listName]);
} else {
document.title = prefBundle.getString("identityDialogTitleAdd");
}
loadSMTPServerList();
initIdentityValues(gIdentity);
initCopiesAndFolder(gIdentity);
initCompositionAndAddressing(gIdentity);
}
// based on the values of gIdentity, initialize the identity fields we expose to the user
function initIdentityValues(identity)
{
function initSmtpServer(aServerKey) {
// Select a server in the SMTP server menulist by its key.
// The value of the identity.smtpServerKey is null when the
// "use default server" option is used so, if we get that passed in, select
// the useDefaultItem representing this option by using the value of "".
document.getElementById("identity.smtpServerKey").value = aServerKey || "";
}
if (identity)
{
document.getElementById('identity.fullName').value = identity.fullName;
document.getElementById('identity.email').value = identity.email;
document.getElementById('identity.replyTo').value = identity.replyTo;
document.getElementById('identity.organization').value = identity.organization;
document.getElementById('identity.attachSignature').checked = identity.attachSignature;
document.getElementById('identity.htmlSigText').value = identity.htmlSigText;
document.getElementById('identity.htmlSigFormat').checked = identity.htmlSigFormat;
if (identity.signature)
document.getElementById('identity.signature').value = identity.signature.path;
document.getElementById('identity.attachVCard').checked = identity.attachVCard;
document.getElementById('identity.escapedVCard').value = identity.escapedVCard;
initSmtpServer(identity.smtpServerKey);
// This field does not exist for the default identity shown in the am-main.xul pane.
let idLabel = document.getElementById("identity.label");
if (idLabel)
idLabel.value = identity.label;
}
else
{
// We're adding an identity, use the best default we have.
initSmtpServer(gAccount.defaultIdentity.smtpServerKey);
}
setupSignatureItems();
}
function initCopiesAndFolder(identity)
{
// if we are editing an existing identity, use it...otherwise copy our values from the default identity
var copiesAndFoldersIdentity = identity ? identity : gAccount.defaultIdentity;
document.getElementById('identity.fccFolder').value = copiesAndFoldersIdentity.fccFolder;
document.getElementById('identity.draftFolder').value = copiesAndFoldersIdentity.draftFolder;
document.getElementById('identity.archiveFolder').value = copiesAndFoldersIdentity.archiveFolder;
document.getElementById('identity.stationeryFolder').value = copiesAndFoldersIdentity.stationeryFolder;
document.getElementById('identity.fccFolderPickerMode').value = copiesAndFoldersIdentity.fccFolderPickerMode ? copiesAndFoldersIdentity.fccFolderPickerMode : 0;
document.getElementById('identity.draftsFolderPickerMode').value = copiesAndFoldersIdentity.draftsFolderPickerMode ? copiesAndFoldersIdentity.draftsFolderPickerMode : 0;
document.getElementById('identity.archivesFolderPickerMode').value = copiesAndFoldersIdentity.archivesFolderPickerMode ? copiesAndFoldersIdentity.archivesFolderPickerMode : 0;
document.getElementById('identity.tmplFolderPickerMode').value = copiesAndFoldersIdentity.tmplFolderPickerMode ? copiesAndFoldersIdentity.tmplFolderPickerMode : 0;
document.getElementById('identity.doCc').checked = copiesAndFoldersIdentity.doCc;
document.getElementById('identity.doCcList').value = copiesAndFoldersIdentity.doCcList;
document.getElementById('identity.doBcc').checked = copiesAndFoldersIdentity.doBcc;
document.getElementById('identity.doBccList').value = copiesAndFoldersIdentity.doBccList;
document.getElementById('identity.doFcc').checked = copiesAndFoldersIdentity.doFcc;
document.getElementById('identity.fccReplyFollowsParent').checked = copiesAndFoldersIdentity.fccReplyFollowsParent;
document.getElementById('identity.showSaveMsgDlg').checked = copiesAndFoldersIdentity.showSaveMsgDlg;
document.getElementById('identity.archiveEnabled').checked = copiesAndFoldersIdentity.archiveEnabled;
onInitCopiesAndFolders(); // am-copies.js method
}
function initCompositionAndAddressing(identity)
{
// if we are editing an existing identity, use it...otherwise copy our values from the default identity
var addressingIdentity = identity ? identity : gAccount.defaultIdentity;
document.getElementById('identity.directoryServer').value = addressingIdentity.directoryServer;
document.getElementById('identity.overrideGlobal_Pref').value = addressingIdentity.overrideGlobalPref;
let autoCompleteElement = document.getElementById('identity.autocompleteToMyDomain');
if (autoCompleteElement) // Thunderbird does not have this element.
autoCompleteElement.checked = addressingIdentity.autocompleteToMyDomain;
document.getElementById('identity.composeHtml').checked = addressingIdentity.composeHtml;
document.getElementById('identity.autoQuote').checked = addressingIdentity.autoQuote;
document.getElementById('identity.replyOnTop').value = addressingIdentity.replyOnTop;
document.getElementById('identity.sig_bottom').value = addressingIdentity.sigBottom;
document.getElementById('identity.sig_on_reply').checked = addressingIdentity.sigOnReply;
document.getElementById('identity.sig_on_fwd').checked = addressingIdentity.sigOnForward;
onInitCompositionAndAddressing(); // am-addressing.js method
}
function onOk()
{
if (!validEmailAddress())
return false;
// if we are adding a new identity, create an identity, set the fields and add it to the
// account.
if (!gIdentity)
{
// ask the account manager to create a new identity for us
gIdentity = MailServices.accounts.createIdentity();
// copy in the default identity settings so we inherit lots of stuff like the defaul drafts folder, etc.
gIdentity.copy(gAccount.defaultIdentity);
// assume the identity is valid by default?
gIdentity.valid = true;
// add the identity to the account
gAccount.addIdentity(gIdentity);
// now fall through to saveFields which will save our new values
}
// if we are modifying an existing identity, save the fields
saveIdentitySettings(gIdentity);
saveCopiesAndFolderSettings(gIdentity);
saveAddressingAndCompositionSettings(gIdentity);
window.arguments[0].result = true;
return true;
}
// returns false and prompts the user if
// the identity does not have an email address
function validEmailAddress()
{
var emailAddress = document.getElementById('identity.email').value;
// quickly test for an @ sign to test for an email address. We don't have
// to be anymore precise than that.
if (!emailAddress.includes("@"))
{
// alert user about an invalid email address
var prefBundle = document.getElementById("bundle_prefs");
Services.prompt.alert(window, prefBundle.getString("identity-edit-req-title"),
prefBundle.getString("identity-edit-req"));
return false;
}
return true;
}
function saveIdentitySettings(identity)
{
if (identity)
{
let idLabel = document.getElementById('identity.label');
if (idLabel)
identity.label = idLabel.value;
identity.fullName = document.getElementById('identity.fullName').value;
identity.email = document.getElementById('identity.email').value;
identity.replyTo = document.getElementById('identity.replyTo').value;
identity.organization = document.getElementById('identity.organization').value;
identity.attachSignature = document.getElementById('identity.attachSignature').checked;
identity.htmlSigText = document.getElementById('identity.htmlSigText').value;
identity.htmlSigFormat = document.getElementById('identity.htmlSigFormat').checked;
identity.attachVCard = document.getElementById('identity.attachVCard').checked;
identity.escapedVCard = document.getElementById('identity.escapedVCard').value;
identity.smtpServerKey = document.getElementById('identity.smtpServerKey').value;
var attachSignaturePath = document.getElementById('identity.signature').value;
identity.signature = null; // this is important so we don't accidentally inherit the default
if (attachSignaturePath)
{
// convert signature path back into a nsIFile
var sfile = Components.classes["@mozilla.org/file/local;1"]
.createInstance(Components.interfaces.nsIFile);
sfile.initWithPath(attachSignaturePath);
if (sfile.exists())
identity.signature = sfile;
}
}
}
function saveCopiesAndFolderSettings(identity)
{
onSaveCopiesAndFolders(); // am-copies.js routine
identity.fccFolder = document.getElementById('identity.fccFolder').value;
identity.draftFolder = document.getElementById('identity.draftFolder').value;
identity.archiveFolder = document.getElementById('identity.archiveFolder').value;
identity.stationeryFolder = document.getElementById('identity.stationeryFolder').value;
identity.fccFolderPickerMode = document.getElementById('identity.fccFolderPickerMode').value;
identity.draftsFolderPickerMode = document.getElementById('identity.draftsFolderPickerMode').value;
identity.archivesFolderPickerMode = document.getElementById('identity.archivesFolderPickerMode').value;
identity.tmplFolderPickerMode = document.getElementById('identity.tmplFolderPickerMode').value;
identity.doCc = document.getElementById('identity.doCc').checked;
identity.doCcList = document.getElementById('identity.doCcList').value;
identity.doBcc = document.getElementById('identity.doBcc').checked;
identity.doBccList = document.getElementById('identity.doBccList').value;
identity.doFcc = document.getElementById('identity.doFcc').checked;
identity.fccReplyFollowsParent = document.getElementById('identity.fccReplyFollowsParent').checked;
identity.showSaveMsgDlg = document.getElementById('identity.showSaveMsgDlg').checked;
identity.archiveEnabled = document.getElementById('identity.archiveEnabled').checked;
}
function saveAddressingAndCompositionSettings(identity)
{
identity.directoryServer = document.getElementById('identity.directoryServer').value;
identity.overrideGlobalPref = document.getElementById('identity.overrideGlobal_Pref').value == "true";
let autoCompleteElement = document.getElementById('identity.autocompleteToMyDomain');
if (autoCompleteElement) // Thunderbird does not have this element.
identity.autocompleteToMyDomain = autoCompleteElement.checked;
identity.composeHtml = document.getElementById('identity.composeHtml').checked;
identity.autoQuote = document.getElementById('identity.autoQuote').checked;
identity.replyOnTop = document.getElementById('identity.replyOnTop').value;
identity.sigBottom = document.getElementById('identity.sig_bottom').value == 'true';
identity.sigOnReply = document.getElementById('identity.sig_on_reply').checked;
identity.sigOnForward = document.getElementById('identity.sig_on_fwd').checked;
}
function selectFile()
{
const nsIFilePicker = Components.interfaces.nsIFilePicker;
var fp = Components.classes["@mozilla.org/filepicker;1"]
.createInstance(nsIFilePicker);
var prefBundle = document.getElementById("bundle_prefs");
var title = prefBundle.getString("choosefile");
fp.init(window, title, nsIFilePicker.modeOpen);
fp.appendFilters(nsIFilePicker.filterAll);
// Get current signature folder, if there is one.
// We can set that to be the initial folder so that users
// can maintain their signatures better.
var sigFolder = GetSigFolder();
if (sigFolder)
fp.displayDirectory = sigFolder;
var ret = fp.show();
if (ret == nsIFilePicker.returnOK) {
var folderField = document.getElementById("identity.signature");
folderField.value = fp.file.path;
}
}
function GetSigFolder()
{
var sigFolder = null;
try
{
var account = parent.getCurrentAccount();
var identity = account.defaultIdentity;
var signatureFile = identity.signature;
if (signatureFile)
{
signatureFile = signatureFile.QueryInterface(Components.interfaces.nsIFile);
sigFolder = signatureFile.parent;
if (!sigFolder.exists())
sigFolder = null;
}
}
catch (ex) {
dump("failed to get signature folder..\n");
}
return sigFolder;
}
// Signature textbox is active unless option to select from file is checked.
// If a signature is need to be attached, the associated items which
// displays the absolute path to the signature (in a textbox) and the way
// to select a new signature file (a button) are enabled. Otherwise, they
// are disabled. Check to see if the attachSignature is locked to block
// broadcasting events.
function setupSignatureItems()
{
var signature = document.getElementById("identity.signature");
var browse = document.getElementById("identity.sigbrowsebutton");
var htmlSigText = document.getElementById("identity.htmlSigText");
var htmlSigFormat = document.getElementById("identity.htmlSigFormat");
var attachSignature = document.getElementById("identity.attachSignature");
var checked = attachSignature.checked;
if (checked)
{
htmlSigText.setAttribute("disabled", "true");
htmlSigFormat.setAttribute("disabled", "true");
}
else
{
htmlSigText.removeAttribute("disabled");
htmlSigFormat.removeAttribute("disabled");
}
if (checked && !getAccountValueIsLocked(signature))
signature.removeAttribute("disabled");
else
signature.setAttribute("disabled", "true");
if (checked && !getAccountValueIsLocked(browse))
browse.removeAttribute("disabled");
else
browse.setAttribute("disabled", "true");
}
function editVCardCallback(escapedVCardStr)
{
var escapedVCard = document.getElementById("identity.escapedVCard");
escapedVCard.value = escapedVCardStr;
}
function editVCard()
{
var escapedVCard = document.getElementById("identity.escapedVCard");
// read vCard hidden value from UI
window.openDialog("chrome://messenger/content/addressbook/abNewCardDialog.xul",
"",
"chrome,modal,resizable=no,centerscreen",
{escapedVCardStr:escapedVCard.value, okCallback:editVCardCallback,
titleProperty:"editVCardTitle", hideABPicker:true});
}
function getAccountForFolderPickerState()
{
return gAccount;
}
/**
* Build the SMTP server list for display.
*/
function loadSMTPServerList()
{
var smtpServerList = document.getElementById("identity.smtpServerKey");
let servers = MailServices.smtp.servers;
let defaultServer = MailServices.smtp.defaultServer;
var smtpPopup = smtpServerList.menupopup;
while (smtpPopup.lastChild.nodeName != "menuseparator")
smtpPopup.lastChild.remove();
while (servers.hasMoreElements())
{
var server = servers.getNext();
if (server instanceof Components.interfaces.nsISmtpServer)
{
var serverName = "";
if (server.description)
serverName = server.description + ' - ';
else if (server.username)
serverName = server.username + ' - ';
serverName += server.hostname;
if (defaultServer.key == server.key)
serverName += " " + document.getElementById("bundle_messenger")
.getString("defaultServerTag");
smtpServerList.appendItem(serverName, server.key);
}
}
}