mirror of
https://repo.dactyloidae.xyz/Dactyloidae/UXP.git
synced 2026-09-25 09:57:32 +09:00
405 lines
17 KiB
JavaScript
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);
|
|
}
|
|
}
|
|
}
|