зеркало из https://github.com/mozilla/pjs.git
427 строки
14 KiB
JavaScript
427 строки
14 KiB
JavaScript
# -*- Mode: Java; tab-width: 2; 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 the Thunderbird Preferences System.
|
|
#
|
|
# The Initial Developer of the Original Code is
|
|
# Scott MacGregor.
|
|
# Portions created by the Initial Developer are Copyright (C) 2005
|
|
# the Initial Developer. All Rights Reserved.
|
|
#
|
|
# Contributor(s):
|
|
# Scott MacGregor <mscott@mozilla.org>
|
|
#
|
|
# 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 kLDAPPrefContractID="@mozilla.org/ldapprefs-service;1";
|
|
|
|
var gRefresh = false; // leftover hack from the old preferences dialog
|
|
|
|
var gComposePane = {
|
|
mInitialized: false,
|
|
mDirectories: null,
|
|
mLDAPPrefsService: null,
|
|
mSpellChecker: null,
|
|
mDictCount : 0,
|
|
|
|
init: function ()
|
|
{
|
|
if (kLDAPPrefContractID in Components.classes)
|
|
this.mLDAPPrefsService = Components.classes[kLDAPPrefContractID].getService(Components.interfaces.nsILDAPPrefsService);
|
|
|
|
this.createDirectoriesList();
|
|
|
|
// build the local address book menu list. We do this by hand instead of using the xul template
|
|
// builder because of Bug #285076,
|
|
this.createLocalDirectoriesList();
|
|
|
|
this.enableAutocomplete();
|
|
|
|
this.initLanguageMenu();
|
|
|
|
this.populateFonts();
|
|
|
|
document.getElementById('downloadDictionaries').setAttribute('href', this.getDictionaryURL());
|
|
|
|
var preference = document.getElementById("mail.preferences.compose.selectedTabIndex");
|
|
if (preference.value)
|
|
document.getElementById("composePrefs").selectedIndex = preference.value;
|
|
this.mInitialized = true;
|
|
},
|
|
|
|
getDictionaryURL: function()
|
|
{
|
|
var formatter = Components.classes["@mozilla.org/toolkit/URLFormatterService;1"]
|
|
.getService(Components.interfaces.nsIURLFormatter);
|
|
|
|
return formatter.formatURLPref("spellchecker.dictionaries.download.url");
|
|
},
|
|
|
|
tabSelectionChanged: function ()
|
|
{
|
|
if (this.mInitialized)
|
|
{
|
|
var preference = document.getElementById("mail.preferences.compose.selectedTabIndex");
|
|
preference.valueFromPreferences = document.getElementById("composePrefs").selectedIndex;
|
|
}
|
|
},
|
|
|
|
sendOptionsDialog: function()
|
|
{
|
|
document.documentElement.openSubDialog("chrome://messenger/content/preferences/sendoptions.xul","", null);
|
|
},
|
|
|
|
htmlComposeDialog: function()
|
|
{
|
|
document.documentElement.openSubDialog("chrome://messenger/content/preferences/htmlcompose.xul","", null);
|
|
},
|
|
|
|
enableAutocomplete: function()
|
|
{
|
|
var directoriesList = document.getElementById("directoriesList");
|
|
var directoriesListPopup = document.getElementById("directoriesListPopup");
|
|
var editButton = document.getElementById("editButton");
|
|
|
|
if (document.getElementById("autocompleteLDAP").checked)
|
|
{
|
|
editButton.removeAttribute("disabled");
|
|
directoriesList.removeAttribute("disabled");
|
|
directoriesListPopup.removeAttribute("disabled");
|
|
}
|
|
else
|
|
{
|
|
directoriesList.setAttribute("disabled", true);
|
|
directoriesListPopup.setAttribute("disabled", true);
|
|
editButton.setAttribute("disabled", true);
|
|
}
|
|
|
|
// if we do not have any directories disable the dropdown list box
|
|
if (!this.mDirectories || (this.mDirectories < 1))
|
|
directoriesList.setAttribute("disabled", true);
|
|
},
|
|
|
|
createLocalDirectoriesList: function ()
|
|
{
|
|
var abPopup = document.getElementById("abPopup-menupopup");
|
|
|
|
if (abPopup)
|
|
this.loadLocalDirectories(abPopup);
|
|
},
|
|
|
|
loadLocalDirectories: function (aPopup)
|
|
{
|
|
var rdfService = Components.classes["@mozilla.org/rdf/rdf-service;1"]
|
|
.getService(Components.interfaces.nsIRDFService);
|
|
|
|
var parentDir = rdfService.GetResource("moz-abdirectory://").QueryInterface(Components.interfaces.nsIAbDirectory);
|
|
var enumerator = parentDir.childNodes;
|
|
var preference = document.getElementById("mail.collect_addressbook");
|
|
|
|
if (enumerator)
|
|
{
|
|
while (enumerator.hasMoreElements())
|
|
{
|
|
var addrbook = enumerator.getNext();
|
|
if (addrbook instanceof Components.interfaces.nsIAbDirectory && !addrbook.isRemote && !addrbook.isMailList)
|
|
{
|
|
var abURI = addrbook.URI;
|
|
item = document.createElement("menuitem");
|
|
item.setAttribute("label", addrbook.dirName);
|
|
item.setAttribute("value", abURI);
|
|
aPopup.appendChild(item);
|
|
if (preference.value == abURI)
|
|
{
|
|
aPopup.parentNode.value = abURI;
|
|
aPopup.selectedItem = item;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
|
|
createDirectoriesList: function()
|
|
{
|
|
var directoriesListPopup = document.getElementById("directoriesListPopup");
|
|
|
|
if (directoriesListPopup)
|
|
this.loadDirectories(directoriesListPopup);
|
|
},
|
|
|
|
loadDirectories: function(aPopup)
|
|
{
|
|
var prefCount = {value:0};
|
|
var description = "";
|
|
var item;
|
|
var j=0;
|
|
var arrayOfDirectories;
|
|
var position;
|
|
var dirType;
|
|
var prefService;
|
|
|
|
prefService = Components.classes["@mozilla.org/preferences-service;1"]
|
|
.getService(Components.interfaces.nsIPrefBranch);
|
|
|
|
if (!this.mDirectories)
|
|
{
|
|
try
|
|
{
|
|
if (this.mLDAPPrefsService)
|
|
arrayOfDirectories = this.mLDAPPrefsService.getServerList(prefService, prefCount);
|
|
}
|
|
catch (ex) {}
|
|
|
|
if (arrayOfDirectories)
|
|
{
|
|
this.mDirectories = new Array();
|
|
for (var i = 0; i < prefCount.value; i++)
|
|
{
|
|
if ((arrayOfDirectories[i] != "ldap_2.servers.pab") &&
|
|
(arrayOfDirectories[i] != "ldap_2.servers.history"))
|
|
{
|
|
try
|
|
{
|
|
position = prefService.getIntPref(arrayOfDirectories[i]+".position");
|
|
}
|
|
catch(ex)
|
|
{
|
|
position = 1;
|
|
}
|
|
|
|
try
|
|
{
|
|
dirType = prefService.getIntPref(arrayOfDirectories[i]+".dirType");
|
|
}
|
|
catch(ex)
|
|
{
|
|
dirType = 1;
|
|
}
|
|
|
|
if ((position != 0) && (dirType == 1))
|
|
{
|
|
try
|
|
{
|
|
description = prefService.getComplexValue(arrayOfDirectories[i]+".description",
|
|
Components.interfaces.nsISupportsString).data;
|
|
}
|
|
catch(ex)
|
|
{
|
|
description="";
|
|
}
|
|
|
|
if (description != "")
|
|
{
|
|
if (aPopup)
|
|
{
|
|
item = document.createElement("menuitem");
|
|
item.setAttribute("label", description);
|
|
item.setAttribute("value", arrayOfDirectories[i]);
|
|
aPopup.appendChild(item);
|
|
}
|
|
|
|
this.mDirectories[j++] = {value:arrayOfDirectories[i], label:description};
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
if (aPopup)
|
|
{
|
|
// we are in mail/news Account settings
|
|
item = document.createElement("menuitem");
|
|
var addressBookBundle = document.getElementById("bundle_addressBook");
|
|
var directoryName = addressBookBundle.getString("directoriesListItemNone");
|
|
item.setAttribute("label", directoryName);
|
|
item.setAttribute("value", "");
|
|
aPopup.appendChild(item);
|
|
|
|
// Now check what we are displaying is valid.
|
|
var directoriesList = document.getElementById("directoriesList");
|
|
var value = directoriesList.value;
|
|
directoriesList.selectedItem = null;
|
|
directoriesList.value = value;
|
|
if (!directoriesList.selectedItem)
|
|
{
|
|
directoriesList.value = "";
|
|
// If we have no other directories, also disable the popup.
|
|
if (gAvailDirectories.length == 0)
|
|
directoriesList.disabled = true;
|
|
}
|
|
else if (!prefService.prefIsLocked("ldap_2.autoComplete.directoryServer"))
|
|
directoriesList.disabled = false;
|
|
}
|
|
}
|
|
}
|
|
},
|
|
|
|
editDirectories: function()
|
|
{
|
|
var args = {fromGlobalPref: true};
|
|
window.openDialog("chrome://messenger/content/addressbook/pref-editdirectories.xul",
|
|
"editDirectories", "chrome,modal=yes,resizable=no", args);
|
|
if (gRefresh)
|
|
{
|
|
var popup = document.getElementById("directoriesListPopup");
|
|
if (popup)
|
|
while (popup.hasChildNodes())
|
|
popup.removeChild(popup.lastChild);
|
|
|
|
}
|
|
|
|
this.mDirectories = null;
|
|
this.loadDirectories(popup);
|
|
gRefresh = false;
|
|
},
|
|
|
|
initLanguageMenu: function ()
|
|
{
|
|
var languageMenuList = document.getElementById("languageMenuList");
|
|
this.mSpellChecker = Components.classes['@mozilla.org/spellchecker/myspell;1'].getService(Components.interfaces.mozISpellCheckingEngine);
|
|
var o1 = {};
|
|
var o2 = {};
|
|
|
|
// Get the list of dictionaries from
|
|
// the spellchecker.
|
|
|
|
this.mSpellChecker.getDictionaryList(o1, o2);
|
|
|
|
var dictList = o1.value;
|
|
var count = o2.value;
|
|
|
|
// if we don't have any dictionaries installed, disable the menu list
|
|
languageMenuList.disabled = !count;
|
|
|
|
// If dictionary count hasn't changed then no need to update the menu.
|
|
if (this.mDictCount == count)
|
|
return;
|
|
|
|
// Store current dictionary count.
|
|
this.mDictCount = count;
|
|
|
|
// Load the string bundles that will help us map
|
|
// RFC 1766 strings to UI strings.
|
|
|
|
// Load the language string bundle.
|
|
var languageBundle = document.getElementById("languageBundle");
|
|
var regionBundle = null;
|
|
// If we have a language string bundle, load the region string bundle.
|
|
if (languageBundle)
|
|
regionBundle = document.getElementById("regionBundle");
|
|
|
|
var menuStr2;
|
|
var isoStrArray;
|
|
var langId;
|
|
var langLabel;
|
|
var i;
|
|
|
|
for (i = 0; i < count; i++)
|
|
{
|
|
try {
|
|
langId = dictList[i];
|
|
isoStrArray = dictList[i].split("-");
|
|
|
|
if (languageBundle && isoStrArray[0])
|
|
langLabel = languageBundle.getString(isoStrArray[0].toLowerCase());
|
|
|
|
if (regionBundle && langLabel && isoStrArray.length > 1 && isoStrArray[1])
|
|
{
|
|
menuStr2 = regionBundle.getString(isoStrArray[1].toLowerCase());
|
|
if (menuStr2)
|
|
langLabel += "/" + menuStr2;
|
|
}
|
|
|
|
if (langLabel && isoStrArray.length > 2 && isoStrArray[2])
|
|
langLabel += " (" + isoStrArray[2] + ")";
|
|
|
|
if (!langLabel)
|
|
langLabel = langId;
|
|
} catch (ex) {
|
|
// getString throws an exception when a key is not found in the
|
|
// bundle. In that case, just use the original dictList string.
|
|
langLabel = langId;
|
|
}
|
|
dictList[i] = [langLabel, langId];
|
|
}
|
|
|
|
// sort by locale-aware collation
|
|
dictList.sort(
|
|
function compareFn(a, b)
|
|
{
|
|
return a[0].localeCompare(b[0]);
|
|
}
|
|
);
|
|
|
|
// Remove any languages from the list.
|
|
var languageMenuPopup = languageMenuList.firstChild;
|
|
while (languageMenuPopup.hasChildNodes())
|
|
languageMenuPopup.removeChild(languageMenuPopup.firstChild);
|
|
|
|
// append the dictionaries to the menu list...
|
|
for (i = 0; i < count; i++)
|
|
languageMenuList.appendItem(dictList[i][0], dictList[i][1]);
|
|
|
|
languageMenuList.setInitialSelection();
|
|
},
|
|
|
|
populateFonts: function()
|
|
{
|
|
var fontsList = document.getElementById("FontSelect");
|
|
try
|
|
{
|
|
var enumerator = Components.classes["@mozilla.org/gfx/fontenumerator;1"]
|
|
.getService(Components.interfaces.nsIFontEnumerator);
|
|
var localFontCount = { value: 0 }
|
|
var localFonts = enumerator.EnumerateAllFonts(localFontCount);
|
|
for (var i = 0; i < localFonts.length; ++i)
|
|
{
|
|
if (localFonts[i] != "")
|
|
fontsList.appendItem(localFonts[i], localFonts[i]);
|
|
}
|
|
}
|
|
catch(e) { }
|
|
},
|
|
|
|
restoreHTMLDefaults: function()
|
|
{
|
|
// reset throws an exception if the pref value is already the default so
|
|
// work around that with some try/catch exception handling
|
|
try {
|
|
document.getElementById('msgcompose.font_face').reset();
|
|
} catch (ex) {}
|
|
|
|
try {
|
|
document.getElementById('msgcompose.font_size').reset();
|
|
} catch (ex) {}
|
|
|
|
try {
|
|
document.getElementById('msgcompose.text_color').reset();
|
|
} catch (ex) {}
|
|
|
|
try {
|
|
document.getElementById('msgcompose.background_color').reset();
|
|
} catch (ex) {}
|
|
}
|
|
};
|