scott%scott-macgregor.org 87b3fc8300 Land first cut at a junk mail dialog re-design. See the spec for more details:
http://www.mozilla.org/projects/thunderbird/specs/junkmail/junkmail.html


add a new default pref for forcing HTML junk mail to be displayed using sanitized HTML.
Defaults to true and is controlled via the Settings tab in the junk mail controls dialog.


git-svn-id: svn://10.0.0.236/trunk@144339 18797224-902f-48f8-a5cc-f745e15eee43
2003-07-01 07:42:21 +00:00

277 lines
11 KiB
JavaScript

# 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) 2002
# the Initial Developer. All Rights Reserved.
#
# Contributor(s):
# Seth Spitzer <sspitzer@netscape.com>
# Dan Mosedale <dmose@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.
#
var gSpamSettings = {};
var gCurrentServer;
var gMessengerBundle;
// pref service is global
var gPrefService = null;
const kJunkOnLocalFolderURI = "mailbox://nobody@Local%20Folders/Junk";
function onJunkMailLoad()
{
gMessengerBundle = document.getElementById("bundle_messenger");
if (window.arguments && window.arguments[0]) {
setupForAccountFromFolder(window.arguments[0].folder ? window.arguments[0].folder.URI : null);
}
// initialize prefs
gPrefService = Components.classes["@mozilla.org/preferences-service;1"].getService(Components.interfaces.nsIPrefBranch);
// initialize the sanitize junk mail html check box
document.getElementById('renderWithSafeHtml').checked = gPrefService.getBoolPref('mailnews.display.sanitizeJunkMail');
}
function onServerClick(event)
{
if (gCurrentServer.serverURI == event.target.id)
return;
// before we set the UI for the new server,
// save off the old one
storeSettings(gSpamSettings[gCurrentServer.key].settings, gCurrentServer.spamSettings.loggingEnabled);
// set up the UI for the server
setupForAccountFromFolder(event.target.id);
}
function setupForAccountFromFolder(aURI)
{
try {
if (!aURI)
throw "this can happen if no folder is selected in the folder pane"
var msgFolder = GetMsgFolderFromUri(aURI, false);
gCurrentServer = msgFolder.server;
if (gCurrentServer.type == "nntp")
throw "this can happen if the selected folder (or account) doesn't have junk controls (news)"
}
catch (ex) {
// get server for default account
// XXX TODO
// edge cases to worry about later:
// what if there is no default account?
// what if default account is of a type where canGetIncomingMessages == true?
// what if no accounts are of a type where canGetIncomingMessages == true?
var accountManager = Components.classes["@mozilla.org/messenger/account-manager;1"]
.getService(Components.interfaces.nsIMsgAccountManager);
var account = accountManager.defaultAccount;
gCurrentServer = account.incomingServer;
}
var obj;
var key = gCurrentServer.key;
if (key in gSpamSettings) {
obj = gSpamSettings[key];
}
else {
// get and clone spam settings for this server
// we clone because if the users cancels we are going to throw away the changes
var settings = Components.classes["@mozilla.org/messenger/spamsettings;1"].createInstance(Components.interfaces.nsISpamSettings);
settings.clone(gCurrentServer.spamSettings);
obj = {server: gCurrentServer, settings: settings};
gSpamSettings[key] = obj;
}
// select server in the menulist
var serverList = document.getElementById("server");
var menuitems = serverList.getElementsByAttribute("id", obj.server.serverURI);
serverList.selectedItem = menuitems[0];
// set up the UI for this server
// set up the level checkbox
document.getElementById("level").checked = (obj.settings.level > 0);
// set up the junk mail folder picker
document.getElementById("moveOnSpam").checked = obj.settings.moveOnSpam;
document.getElementById("moveTargetMode").selectedItem = document.getElementById("moveTargetMode" + obj.settings.moveTargetMode);
// the default account should be the current account
// unless you can't create a folder on that server
// or search on that account (for purge)
// in which case, use Local Folders
var defaultAccountURI = obj.server.canCreateFoldersOnServer && obj.server.canSearchMessages ? obj.server.serverURI : "mailbox://nobody@Local%20Folders";
// if there is a target account, use it, else use the default account
SetFolderPicker(obj.settings.actionTargetAccount ? obj.settings.actionTargetAccount : defaultAccountURI, "actionTargetAccount");
// if there is a target account, use it, else use Junk on Local Folders
if (obj.settings.actionTargetFolder)
SetFolderPicker(obj.settings.actionTargetFolder, "actionTargetFolder");
else {
// note, this folder might not exist, but better this than ""
// and, we'll create it if we try to use it.
SetFolderPicker(kJunkOnLocalFolderURI, "actionTargetFolder");
}
// set up the purge UI
document.getElementById("purge").checked = obj.settings.purge;
document.getElementById("purgeInterval").value = obj.settings.purgeInterval;
// set up the whitelist UI
document.getElementById("useWhiteList").checked = obj.settings.useWhiteList;
var abList = document.getElementById("whiteListAbURI");
menuitems = abList.getElementsByAttribute("id", obj.settings.whiteListAbURI);
abList.selectedItem = menuitems[0];
// set up the manual mark UI
document.getElementById("manualMark").checked = obj.settings.manualMark;
document.getElementById("manualMarkMode").selectedItem = document.getElementById("manualMarkMode" + obj.settings.manualMarkMode);
conditionallyEnableUI(null);
}
function junkLog()
{
// pass in the "real" spam settings, as it's the one with the logStream
var args = {spamSettings: gCurrentServer.spamSettings};
window.openDialog("chrome://messenger/content/junkLog.xul", "junkLog", "chrome,modal,titlebar,resizable,centerscreen", args);
}
function onAccept()
{
// store the current changes
storeSettings(gSpamSettings[gCurrentServer.key].settings, gCurrentServer.spamSettings.loggingEnabled);
for (var key in gSpamSettings) {
try {
// if they hit ok, set the "real" server's spam settings.
// this will set prefs.
gSpamSettings[key].server.spamSettings = gSpamSettings[key].settings;
}
catch (ex) {
dump("spam setting not saved: " + ex);
}
}
// now store off our non account specific settings
gPrefService.setBoolPref('mailnews.display.sanitizeJunkMail', document.getElementById('renderWithSafeHtml').checked);
return true;
}
function storeSettings(aSettings, aLoggingEnabled)
{
aSettings.level = document.getElementById("level").checked ? 100 : 0;
aSettings.moveOnSpam = document.getElementById("moveOnSpam").checked;
aSettings.moveTargetMode = document.getElementById("moveTargetMode").value;
aSettings.actionTargetAccount = document.getElementById("actionTargetAccount").getAttribute("uri");
var targetFolderURI = document.getElementById("actionTargetFolder").getAttribute("uri");
if (targetFolderURI)
aSettings.actionTargetFolder = targetFolderURI;
else {
// note, this folder might not exist, but better this than ""
// and, we'll create it if we try to use it.
aSettings.actionTargetFolder = kJunkOnLocalFolderURI;
}
aSettings.purge = document.getElementById("purge").checked;
aSettings.purgeInterval = document.getElementById("purgeInterval").value;
aSettings.useWhiteList = document.getElementById("useWhiteList").checked;
aSettings.whiteListAbURI = document.getElementById("whiteListAbURI").selectedItem.getAttribute("id");
aSettings.loggingEnabled = aLoggingEnabled;
aSettings.manualMark = document.getElementById("manualMark").checked;
aSettings.manualMarkMode = document.getElementById("manualMarkMode").value;
}
function conditionallyEnableUI(id)
{
if (!document.getElementById("level").checked) {
document.getElementById("useWhiteList").disabled = true;
document.getElementById("whiteListAbURI").disabled = true;
document.getElementById("moveOnSpam").disabled = true;
document.getElementById("moveTargetMode").disabled = true;
document.getElementById("actionTargetAccount").disabled = true;
document.getElementById("actionTargetFolder").disabled = true;
document.getElementById("purge").disabled = true;
document.getElementById("purgeInterval").disabled = true;
document.getElementById("purgeLabel").disabled = true;
document.getElementById("manualMark").disabled = true;
document.getElementById("manualMarkMode").disabled = true;
return;
}
document.getElementById("useWhiteList").disabled = false;
document.getElementById("moveOnSpam").disabled = false;
document.getElementById("manualMark").disabled = false;
var enabled;
if (!id || id == "manualMark") {
enabled = document.getElementById("manualMark").checked;
// need to enable manualMarkMode before we enable manualMarkMode0
document.getElementById("manualMarkMode").disabled = !enabled;
}
if (!id || id == "moveOnSpam") {
enabled = document.getElementById("moveOnSpam").checked;
var choice = document.getElementById("moveTargetMode").value;
document.getElementById("moveTargetMode").disabled = !enabled;
document.getElementById("actionTargetAccount").disabled = !enabled || (choice == 1);
document.getElementById("actionTargetFolder").disabled = !enabled || (choice == 0);
var checked = document.getElementById("purge").checked;
document.getElementById("purge").disabled = !enabled;
document.getElementById("purgeInterval").disabled = !enabled || !checked;
document.getElementById("purgeLabel").disabled = !enabled;
if (!document.getElementById("manualMarkMode").disabled)
document.getElementById("manualMarkMode0").disabled = !enabled;
}
if (id == "purge") {
enabled = document.getElementById("purge").checked;
document.getElementById("purgeInterval").disabled = !enabled;
}
if (!id || id == "useWhiteList") {
enabled = document.getElementById("useWhiteList").checked;
document.getElementById("whiteListAbURI").disabled = !enabled;
}
}
function doHelpButton()
{
openHelp("mail-junk-controls");
}